REST APIを使用してGoogleチャットにメッセージを送信します(Googleの例は2020年には機能しません)
どこから始めればいいのか...(グーグル、どうしてこんな風に私を傷つけなければならないの?)
背景情報
Google Apps Scriptを使用して新しいチャットボットを作成しました。これは、Google Chatのユーザーからメッセージを受信し、単一のメッセージと同期して応答します(各メッセージはチャットボットからの応答を1つだけ持つことができます)。
ボットが独自にメッセージを送信したり、一度に複数の個別の応答を送信したりできるように、非同期メッセージを送信する方法が必要です。
問題
GoogleのチャットREST APIをする方法がある非同期にメッセージを作成し、この方法は、( spaces.messages.create
)は動作しません!2020年以降、この方法の実用的な例はありません。
これは、RESTAPIを使用してメッセージを作成するためのGoogleのサンプルコードです。
問題は、彼らの例では、SCOPE
が存在しなくなったURLに設定されていることです。
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
そのURLに移動すると、次の404エラーが表示されます。
Not Found
Error 404
さらに、利用可能なOAuth2スコープのリストを確認すると、ハングアウトやチャットに関連するスコープがなくchat.bot
、サンプルコードで使用されたスコープについての言及がないことがわかります。
私は何を試しましたか?
このチャットAPIに関連するStackOverflowのすべての質問に加えて、RESTAPIのすべてのチュートリアルを読みました。
chat.bot
スコープが存在しないため、Googleの公式AppsScriptチュートリアルは機能しません。- AppsScriptを使用した非同期メッセージ
- これらのStackOverflowソリューションはすべて、存在しない同じ
chat.bot
スコープを利用します。- イベントなしでプライベートメッセージを送信する
- RestAPIを使用して新しいハングアウトチャットで非同期に応答する
- Apps ScriptBotでの404切り捨てられたサーバー応答
- このStackOverflowユーザーは、
chat
スコープ(つまりgoogleapis.com/auth/chat
)を使用できたと言っていますが、そのスコープも存在しません。- エラー400:invalid_scope
結論として
メッセージを送信する方法からGoogle Appsのスクリプトを使ってGoogleチャットGoogleのチャットREST APIの?
Googleのドキュメントは古くなっているようで、2020年8月の時点でこのAPIの例はどれも機能していません。RESTAPIが機能しないことに気付いていないか、誰にも言わずにRESTAPIを非推奨にしました。
回答
回答:
chat.bot
スコープが実際に存在することを確認できます。REST APIを使用してチャットボットを設定するには 、サービスアカウントを使用する必要 があります。
詳しくは:
Apps Scriptを使用したボットの開発でリンクしたドキュメントによると、トリガー時に非同期メッセージを送信するには、次のようにします。
...現在これを実現する唯一の方法は、外部HTTP APIを使用することです(ドキュメントを参照)。これには、OAuth2 for Apps Scriptライブラリを介したクラウドサービスアカウント(ドキュメントを参照)を使用する必要があります。
つまり、chat.bot
スコープをこれらのメッセージに使用できるように、最初にGCPコンソールでサービスアカウントを設定する必要があります。初心者にとってはプロセス全体が非常に困難になる可能性があるため、ここで最初から最後までの手順を説明します。
プロセス:
サービスアカウントの作成:
- 移動Googleクラウドコンソールと新GCPプロジェクトを作成します。
Select a project
ページの上部を押して、をクリックしますNEW PROJECT
。- を入力する必要があり
Project name
ます。他のフィールドは自動的に入力されます。
- を入力する必要があり
- を押し
CREATE
ます。画面の右上に新しいポップアップが表示され、新しいプロジェクトが作成されていることを確認します。ロードしたら、をクリックできますVIEW
。 ☰
左上のアイコンをクリックし、APIs & Services > Credentials
メニュー項目に従います。- このページの上部にあるをクリックします
+ CREATE CREDENTIALS > Service Account
。- サービスアカウントに名前と説明、およびプレス付け
CREATE
、続いCONTINUE
て、最終的にDONE
。
- サービスアカウントに名前と説明、およびプレス付け
これで、サービスアカウントが作成されました。
サービスアカウント資格情報の作成:
これらは、「AppsScriptを使用したボットの開発」ページの例で提供されているコードに必要です。
- サービスアカウントを作成すると、GCPプロジェクトで使用できる認証情報のリストにリダイレクトされます。
Service Accounts
セクションの下で、新しく作成したサービスアカウントをクリックします。これは呼ばれます[email protected]
- クリック
ADD KEY > Create new key
- キープ
JSON
選択し、キーを押しCREATE
。- これにより、このサービスアカウントとしてAPIにアクセスするために使用する必要がある資格情報ファイルのダウンロードが開始されます。このファイルを紛失したり共有したりしないでください。紛失した場合は、このアカウントの新しい資格情報を削除して作成する必要があります。
ハングアウトチャットAPIを有効にする:
- に戻り
☰ > APIs & Services
、を選択しますLibrary
。 Hangouts Chat API
唯一の結果を検索してクリックします。- をクリックし
ENABLE
ます。これにより、プロジェクトのAPIが有効になります。
注:このタブはまだ閉じないでください。後でGCPコンソールを使用する必要があります。
Apps Scriptプロジェクトの設定:
- 新しいAppsScriptプロジェクトを作成します。
- これで、例を[非同期メッセージ]ページから新しいプロジェクトにコピーして貼り付けることができます。
- GCPコンソールからダウンロードした認証情報ファイルを開きます。
private_key
値(で始まる値をコピーして、Apps Scriptプロジェクトのの-----BEGIN PRIVATE KEY-----
値に貼り付けSERVICE_ACCOUNT_PRIVATE_KEY
ます。- また
client_email
、認証情報ファイルから値をコピーして、SERVICE_ACCOUNT_EMAIL
AppsScriptプロジェクトに貼り付けます。
例のようにGoogleApps Script OAuth2ライブラリを使用するには、ライブラリのスクリプトIDを使用してライブラリをプロジェクトに追加する必要があります。
- Apps ScriptプロジェクトのUIで、
Resources > Libraries...
メニュー項目に従い、OAuth2スクリプトIDをコピーしてAdd a library
ボックスに貼り付けます- スクリプトIDは
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
- これとライブラリの残りの部分は、OAuth2 forAppsスクリプトのGitHubリポジトリにあります。
- スクリプトIDは
- ライブラリの最新の安定バージョンを選択してください(執筆時点では、これはバージョン38です)
- を押し
Save
ます。
次に、AppsScriptプロジェクトを前に作成したGCPプロジェクトにリンクする必要があります。
- [GCPコンソール]タブに戻り、
☰ > IAM & Admin > Settings
メニュー項目に従います。 Project number
このページで定義されているものをコピーします。- Apps Scriptプロジェクトで、
Resources > Cloud Platform project...
メニュー項目に従い、プロジェクト番号をEnter Project Number here
ダイアログに貼り付けます。 - をクリックし
Set Project
ます。
プロジェクトマニフェストの設定: Apps Scriptでチャットボットを使用するにchat
は、プロジェクトのマニフェストにキーを含める必要があります。
- Apps Script UIで、をクリックします
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で構成を設定し、実際の呼び出しを行うトリガーを設定する必要があります。
ボットのデプロイ:
- AppsスクリプトUIで、に行く
Publish > Deploy from manifest...
とヒットCreate
新しく開かれたダイアログボックスで。- 注:ドメイン全体でこれを使用する場合は、ヘッドデプロイメントを使用できないため、新しいデプロイメントを作成する必要があります。
- デプロイメントに名前と説明を付けて、を押し
Save
ます。 - 保存が完了したら、
Get ID
作成したデプロイメントの横にあるを押して、をコピーしDeployment ID
ます。
GCP構成の設定:
- クラウドコンソールに戻り、に移動する必要があります
☰ > APIs & Services > Dashboard
。 - このページの下部にある有効なAPIのリストで、を選択し
Hangouts Chat API
ます。 - 左側のメニューで、を選択します
Configuration
。 - ボット構成をセットアップします。あなたは提供する必要があります
Bot name
、Avatar URL
とDescription
。部屋で機能するように機能設定をセットアップします。 - で
Connection Settings
、を選択Apps Script project
し、前のセクションのデプロイメントIDを貼り付けます。 - Apps Scriptボットに関連する権限を付与し、を押し
Save
ます。
とらえどころのないトリガー:
あなたが今する必要がある唯一のことはあなたの引き金を設定することです。これは、通常のApps Scriptトリガーのように、AppsScriptの
Edit > Current project's triggers
メニュー項目から実行されます。例を完了するには、右下の[+トリガーの追加]ボタンをクリックして、次のようにトリガー設定をセットアップします。実行する関数を選択します。
onTrigger
実行するデプロイメントを選択します。
イベントソースの選択:時間駆動
時間ベースのトリガーのタイプを選択します。
Minutes timer
分間隔を選択します。
Every minute
そして、保存を押します。
これで完了です。この作成されたボットは、現在の時刻を毎分すべての部屋に投稿します。
この説明がお役に立てば幸いです。
参照:
- サービスアカウント| クラウドIAMドキュメント
- サービスアカウントを理解する| クラウドIAMドキュメント
- AppsScriptを使用したボットの開発| GoogleチャットAPI | Google Developers
- ボットが開始するメッセージ-新しいボットの作成| GoogleチャットAPI | Google Developers
- GitHub-gsuitedevs / apps-script-oauth2:Google AppsScript用のOAuth2ライブラリ。
- Google Cloud Console