背景
Qwiklabsの「Dialogflow で AI チャットボットを実装する」を実施し、課題をクリアしてChatbotデモができるようになったのですが、1時間だけ環境を借りて実施するのでは勿体無いので、自分のアカウントで実施してみました。さらに、他のサービスとのインテグレーションとしてSlackにチャットボットを載せるところまでやってみようと考えました。
ところが、参考にした「Slack | Dialogflow のドキュメント」の通りにはいかなかったところがありました。ここではその違いをまとめます。
ポイント
- [Bot Users] > [Add a Bot User]はない。代わりに、アプリにbot token をつける。
- 作成したアプリとは別に Dialogflow Bot というボットができていて、こちらと会話するとうまくいく。
作成手順
Slackアプリを作成する (リンク)
ここは基本的に同じ
もともと"HelpDesk" という名前で作ったが、ステップを再現するために新たに "HelpAgent" という新しい名前をつけています。
ボットユーザーを追加する (リンク)
"左側のメニューで [Bot Users] をクリックします。" とあるが、この [Bot Users] というのがない。
そのかわりに "Where's Bot User" というのがあるので、これをクリックすると、次のようなダイアログが出る。
App Homeに行ってみる。
2番目のブロックに、「bot token にスコープをアサインせよ」とある。
ここで [Review Scopes to Add] をクリックすると、[OAuth & Permissions] のセクションにいく。
ここから先は、元の文書「OAuth URL を追加する」 と同じになる。
- Dialogflow の Slack 設定ページから、[OAuth URL] の値をコピーする。
- [Add a new Redirect URL] ボタンをクリックし、コピーした OAuth URL を貼り付ける。
- [Add] をクリックする。
まだスコープをつけるということをやっていないので、このページの下の方の [Scope] のところで、
"Add permission by Scope or API method..." から、とりあえずはapp_mentions:readを選んだ。残りはあとで追加されることになる。
- app_mentions:read アプリがいる会話の中で @helpdesk を直接メンションするメッセージを読むことができる
- channels:history Helpdesk が追加されているパブリックチャネルでメッセージや他のコンテントをみることができる
- groups:history Helpdesk が追加されているプライベートチャネルでメッセージや他のコンテントをみることができる
- im:history Helpdesk が追加されているダイレクトメッセージでメッセージや他のコンテントをみることができる
- im:read Helpdesk が追加されているダイレクトメッセージの基本情報をみることができる
ここではじめて、Redirect URLの "Save URLs" が有効になっている。"Save URLs" をクリックする。
Dialogflowの設定がまだだった。もとの文書にあるステップに戻る。
Slack を Dialogflow にリンクする (リンク)
- Dialogflow の左側のメニューで [Integrations] に移動する。
- [Slack] タイルをクリックする。
- 次のフィールドに関連する値を入力する。
- クライアント ID (Slack Client ID)
- クライアント シークレット (Slack Client Secret)
- 検証トークン (Slack Verification Token)
- [Start] ボタンをクリックする。
OAuth URL を追加する (リンク)
ここはすでに行なっていた。
イベント リクエスト URL を追加する (リンク)
- Dialogflow の Slack 設定ページから、[Event Request URL] の値をコピーする。
- Slack のデベロッパー コンソールで、左側のメニューで [Event Subscriptions] をクリックする。
- スイッチをクリックし、イベントのサブスクリプション URL をリクエスト URL フィールドに貼り付ける。
リクエスト URL の欄の上に緑色の「確認済み」 (チェックマーク) が表示される。
イベント サブスクリプションを有効にする (リンク)
- 左側のメニューで [Event Subscriptions] をクリック。
- スイッチをクリックしてオプションを有効にする。
- [Subscribe to Bot Events] で、[Add Bot User Event] ボタンをクリック。次のイベントを追加する。
Event Name | Description | Required Scope |
---|---|---|
im_created | A DM was created (DM が作成された) | im:read |
message.channels | A message was posted to a channel (メッセージがチャンネルに投稿された) | channels:history |
message.groups | A message was posted to a private channel (メッセージがプライベート チャンネルに投稿された) | groups:history |
message.im | A message was posted in a direct message channel (メッセージがダイレクト メッセージ チャンネルに投稿されました) | im:history |
右側のカラムの "Required Scope" は自動的に追加されたもの。
イベントを追加したら、最後に画面の下部にある [Save Changes] ボタンをクリックする。
Slack ボットをチームに追加する(リンク)
- Slack のデベロッパー コンソールで、左側のメニューにある [Manage Distribution] をクリック。
- [Share Your App with Your Team] セクションで、[Add to Slack] ボタンをクリック。
- 次に表示されるページで [Authorize] ボタンをクリックして、エージェントを追加。
次のページは「Bot connection success」とのみ書かれたプレーンなページである。
テスト (リンク)
これで成功したはずだが、[Test In Slack] ボタンが出てこない。
SlackにはサイドバーのAppを選ぶと次のように出て、アプリ自体は登録されていることがわかる。
ここでHelpdeskを選択するとHelpdeskのページにいくのだが、「作業がまだ進行中です」と出る。
この @helpdesk にDMで話しかけても、なんの反応もない。
ここで Dialogflow Bot の登場
そこで寝てしまったのだが、起きてもう一度見ると、メッセージの送り先に"Dialogflow Bot" というのが現れている。
この人に "Hello" とメッセージを送ってみたら、その後会話が続いた。
結論
というわけで、思った通りではありませんでした、作成したアプリとは別に Dialogflow Bot というボットができていて、こちらと会話するとうまくいくという形で、なんとか動きました。
しかし、次に別のBotを加える場合、Dialogflow Botにかわるものができるでしょうか。名前はどうなるでしょうか。もし同じ名前でできたりしたら、このHelpdeskのアプリが呼びさせなくなるかもしれません。またおなじことをすれば復活できるのですが、ちょっとためらいますね。