Отправьте сообщение в Google Chat с помощью REST API (пример Google не работает в 2020 году)

Aug 19 2020

С чего мне вообще начать ... (Гугл, почему ты должен так обидеть меня?)

Справочная информация

Я создал нового чат-бота с использованием скрипта Google Apps , который принимает сообщения от пользователей в Google Chat и синхронно отвечает одним сообщением (каждое сообщение может иметь только один ответ от чат-бота).

Теперь мне нужен способ отправки асинхронных сообщений, чтобы бот мог отправлять сообщения самостоятельно или отправлять несколько отдельных ответов за раз.

Проблема

В REST API Google Chat есть метод для асинхронного создания сообщения , но этот метод ( spaces.messages.create) не работает! Работающих примеров этого метода с 2020 года нет.

Вот пример кода Google для создания сообщения с помощью REST API.

Проблема в том, что в их примере SCOPEустановлен URL-адрес, который больше не выходит :

var SCOPE = 'https://www.googleapis.com/auth/chat.bot';

Если вы перейдете по этому URL-адресу, вы увидите эту ошибку 404:

Not Found
Error 404

Кроме того, если вы проверите список доступных областей действия OAuth2 , вы заметите, что нет областей, связанных с Hangouts или чатом, и нет упоминания chat.botобласти, которая использовалась в примере кода.

Что я пробовал?

Я прочитал все вопросы по StackOverflow, связанные с этим API чата, а также все руководства по REST API.

  • Официальное руководство по скрипту приложений от Google не работает, потому что chat.botобласть действия больше не существует:
    • Асинхронные сообщения с использованием скрипта приложений
  • Все эти решения StackOverflow используют одну и ту же несуществующую chat.botобласть:
    • Отправить личное сообщение без события
    • Асинхронно отвечать в новом чате Hangout с помощью rest API
    • Усеченный ответ сервера 404 на бот-скрипт приложений Google Apps
  • Этот пользователь StackOverflow говорит, что они могли использовать chatобласть действия (т.е. googleapis.com/auth/chat), но эта область также не существует:
    • Ошибка 400: invalid_scope

В заключении

Как отправлять сообщения из Google Apps Script в Google Chat с помощью Google Chat REST API ?

Похоже, что документация Google устарела, и ни один из примеров этого API не работает по состоянию на август 2020 года. Они либо не знают, что их REST API не работает, либо они не рекомендуют REST API, никому не сообщая об этом.

Ответы

5 RafaGuillermo Aug 20 2020 at 09:25

Ответ:

Могу подтвердить, что chat.botсфера действительно существует. Чтобы настроить чат-бота с помощью REST API, вы должны использовать учетную запись службы .

Больше информации:

В соответствии с документацией, связанной с разработкой ботов с помощью скрипта приложений , для отправки асинхронных сообщений при запуске:

... единственный способ добиться этого в настоящее время - через внешний HTTP API (см. документацию ). Для этого требуется использование учетной записи облачной службы (см. Документацию) через библиотеку OAuth2 for Apps Script .

Это означает, что вы должны сначала настроить учетную запись службы в консоли GCP, чтобы chat.botобласть могла использоваться для этих сообщений. Весь процесс может быть довольно трудным для непосвященных, поэтому здесь я опишу шаги от начала до конца.

Процесс:

Создание учетной записи службы:

  • Перейдите в Google Cloud Console и создайте новый проект GCP. Ударьте Select a projectвверху страницы и щелкните NEW PROJECT.
    • Вам нужно будет указать Project name, остальные поля должны быть заполнены автоматически.
  • Нажмите CREATE- в правом верхнем углу экрана появится новое всплывающее окно, подтверждающее создание нового проекта. После загрузки вы можете нажать VIEW.
  • Щелкните значок в верхнем левом углу и следуйте APIs & Services > Credentialsпункту меню.
  • Вверху страницы нажмите + CREATE CREDENTIALS > Service Account.
    • Дайте учетной записи службы имя и описание и нажмите CREATE, а затем CONTINUEи, наконец DONE.

Ваша учетная запись службы создана.

Создание учетных данных учетной записи службы:

Они потребуются для кода, приведенного в примере со страницы Разработка ботов с помощью скрипта приложений .

  • После создания учетной записи службы вы будете перенаправлены обратно к списку учетных данных, которые вы можете использовать для проекта GCP. В Service Accountsразделе щелкните вновь созданную учетную запись службы. Это будет называться[email protected]
  • Нажмите ADD KEY > Create new key
  • Не снимайте JSONвыделения и нажмите CREATE.
    • Это инициирует загрузку файла учетных данных, который вам нужно будет использовать для доступа к API в качестве этой учетной записи службы. НЕ ПОТЕРЯЙТЕ И НЕ ПЕРЕДАЙТЕ ЭТОТ ФАЙЛ В случае утери вам нужно будет удалить и создать новые учетные данные для этой учетной записи.

Включение Hangouts Chat API:

  • Вернувшись к ☰ > APIs & Services, и выберите Library.
  • Найдите Hangouts Chat APIи щелкните единственный результат.
  • Щелкните ENABLE. Это включит API для вашего проекта.

Примечание: пока не закрывайте эту вкладку! Позже нам все равно понадобится консоль GCP.

Настройка проекта скрипта приложений:

  • Создайте новый проект скрипта приложений.
  • Теперь вы можете скопировать + вставить пример со страницы сообщений Async в новый проект.
  • Откройте файл учетных данных, который вы скачали из консоли GCP.
    • Скопируйте private_keyзначение (то, которое начинается с, -----BEGIN PRIVATE KEY-----и вставьте его в значение SERVICE_ACCOUNT_PRIVATE_KEYв проекте Apps Script.
    • Также скопируйте client_emailзначение из файла учетных данных и вставьте его в SERVICE_ACCOUNT_EMAILпроект скрипта приложений.

Чтобы использовать библиотеку OAuth2 скрипта Google Apps, как в примере, вам нужно добавить библиотеку в проект, используя идентификатор скрипта библиотеки.

  • В пользовательском интерфейсе проекта Apps Script следуйте Resources > Libraries...пункту меню и скопируйте и вставьте идентификатор скрипта OAuth2 в Add a libraryполе.
    • Идентификатор скрипта: 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
    • Эту и остальную часть библиотеки можно найти в репозитории GitHub OAuth2 for Apps Script.
  • Обязательно выберите последнюю стабильную версию библиотеки (на момент написания это версия 38)
  • Нажмите Save.

Затем вам нужно будет связать проект Apps Script с проектом GCP, который вы создали ранее.

  • Вернитесь на вкладку GCP Console и следуйте ☰ > IAM & Admin > Settingsпункту меню.
  • Скопируйте Project numberопределенное на этой странице.
  • В своем проекте скрипта приложений, следуйте Resources > Cloud Platform project...пункту меню и вставьте номер проекта в Enter Project Number hereдиалоговое окно.
  • Щелкните Set Project.

Настройка манифеста проекта: чтобы использовать чат-бота в Apps Script, вы должны включить chatключ в манифест проекта.

  • В пользовательском интерфейсе скрипта приложений щелкните View > Show manifest file.
  • После последней пары "ключ-значение" добавьте следующее:
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }

Ваш полный файл манифеста теперь будет выглядеть примерно так:

{
  "timeZone": "Europe/Paris",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Drive",
      "serviceId": "drive",
      "version": "v2"
    }],
    "libraries": [{
      "userSymbol": "OAuth2",
      "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF",
      "version": "38"
    }]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }
}
  • Сохраните свой проект.

Заключительные шаги:

Вы почти закончили! Теперь вам нужно будет удалить бота из манифеста, настроить конфигурацию в GCP и настроить триггер, который будет выполнять фактический вызов.

Развертывание бота:

  • В пользовательском интерфейсе скрипта приложений перейдите Publish > Deploy from manifest...и нажмите Createво вновь открывшемся диалоговом окне.
    • Примечание. Вы не можете использовать развертывание Head, если хотите использовать его для всего домена, поэтому необходимо создать новое развертывание.
  • Дайте развертыванию имя и описание и нажмите Save.
  • После завершения сохранения нажмите Get IDрядом с только что созданным развертыванием и скопируйте файл Deployment ID.

Настройка конфигурации GCP:

  • Вернувшись в облачную консоль, вам нужно будет перейти к ☰ > APIs & Services > Dashboard.
  • В списке включенных API внизу этой страницы выберите Hangouts Chat API.
  • В левом меню выберите Configuration.
  • Настройте конфигурацию вашего бота. Вам нужно будет обеспечить Bot name, Avatar URLи Description. Настройте параметры функциональности, чтобы она работала в помещениях.
  • В разделе Connection Settingsвыберите Apps Script projectи вставьте свой идентификатор развертывания из предыдущего раздела.
  • Предоставьте своему боту Apps Script соответствующие разрешения и нажмите Save.

Неуловимый триггер:

  • Единственное, что вам теперь нужно сделать, это настроить триггер. Это делается как обычный триггер Apps Script - из пункта Edit > Current project's triggersменю в Apps Script. Чтобы завершить пример, нажмите кнопку + Добавить триггер в правом нижнем углу и настройте параметры триггера следующим образом:

  • Выберите, какую функцию запустить: onTrigger

  • Выберите, какое развертывание следует запустить: Голова

  • Выберите источник события: управляемый временем

  • Выберите тип запуска по времени: Minutes timer

  • Выберите минутный интервал: Every minute

И нажмите "Сохранить".

И вы сделали! Созданный бот теперь будет публиковать сообщения во всех комнатах в текущее время каждую минуту.

Я надеюсь, что это объяснение будет вам полезно!

Рекомендации:

  • Сервисные счета | Документация Cloud IAM
  • Общие сведения об учетных записях служб | Документация Cloud IAM
  • Разработка ботов с помощью скрипта приложений | Google Chat API | Разработчики Google
  • Сообщения, инициированные ботами - Создание новых ботов | Google Chat API | Разработчики Google
  • GitHub - gsuitedevs / apps-script-oauth2: библиотека OAuth2 для скрипта Google Apps.

  • Консоль Google Cloud