Отправьте сообщение в Google Chat с помощью REST API (пример Google не работает в 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, никому не сообщая об этом.
Ответы
Ответ:
Могу подтвердить, что 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