WonderPlanet Tech Blog

アドバンストテクノロジー部やCTO室のメンバーを中心に最新の技術情報を発信しています。

Dialogflowでちょっとしたチャットボットを作ろう

アドバンストテクノロジー部の近藤です。
Amazon EchoやGoogle Homeなどのスマートスピーカーが最近テレビCMするなどしていて普及し始めています。
今回はGoogle Homeにも利用できるDialogflowを使ってちょっとしたチャットボットのようなものの作り方を紹介します。

必要なもの

・Googleアカウント(DialogflowとActions on Googleのログインに利用)
・連携したいメッセージアプリのアカウント
・Google Homeで動かしたい場合はその実機

Dialogflowとは

https://dialogflow.com
Dialogflowは音声およびテキストベースの自然言語での会話型インターフェイスを構築するためのサービスです。
たとえば「誕生日おめでとう」という呼びかけに対して、「ありがとう」という返答をさせるようなものを作ることができます。
Dialogflowのコンソールではどのような言葉に対してどのように返答するかの設定していきます。
Dialogflowで作成したチャットボットは、Googleアシスタント、Facebook Messenger、Slackなどのサービスに対応していて、それらのサービス上でも動作させることができます。
スマートスピーカーのGoogle Homeで音声による会話をすることも可能です。

Actions on Googleとは

https://console.actions.google.com
Actions on Google では、Dialogflowで作成したアプリをシミュレーターで動作確認をしたり、アプリを公開するための設定・審査への提出をすることができます。
審査を通過すると、Google Homeを使っているユーザーがアプリを利用することができるようになります。
Google Home以外にもSlackやFacebookメッセンジャーなどのメッセージアプリに組み込んで公開する方法があります。

ハンズオン

「元気ですか?」と聞いたら、いくつかのパターンで返答してくれるボットを作ってみましょう。

Agentを作る

Dialogflowを開いたら、左側のメニューから「Create new agent」を選択し、Agentを作成します。 f:id:HidehikoKondo:20180226211344p:plain

今回のAgentの設定は下記のように設定しましょう。
Agent name:HowAreYou?(日本語不可です)
DEFAULT LANGUAGE:Japanese
DEFAULT TIME ZONE:(GMT+9:00)Asia/Tokyo
GOOGLE PROJECT:Create a new Google project
設定項目を記入したら「CREATE」ボタンを押しましょう。
f:id:HidehikoKondo:20180220171719p:plain

Intentsの設定

メニューから「Intents」を開き、「CREATE INTENT」ボタンでインテントを作成します。
一番上の「Intent name」の欄にインテントの名前を設定します。

「User Says」の項目に、反応させたい言葉を記入します。
「元気ですか?」と設定します。
複数設定することもできるのでせっかくなので「調子はどう?」も設定しておきましょう。
f:id:HidehikoKondo:20180220171013p:plain

Text responseの欄にGoogleアシスタントが返答する言葉を記入します。
複数記入すればそのなかからランダムでどれかひとつを返してくれます。
「今日は元気いっぱいです!!」「ちょっと具合が悪いです」「まぁまぁ元気です」
今回はこの3つを設定しましょう
f:id:HidehikoKondo:20180301192155p:plain

設定したら忘れずに右上の「SAVE」ボタンを押します。

Integrationsの設定

「Integrations」のメニューを開きます。
Dialogflowで連携できるサービスの一覧が表示されていますが、ここではGoogle Assistantの欄の「INTEGRATION SETTINGS」のリンクをクリックします。 f:id:HidehikoKondo:20180301182826p:plain
ここで先程設定したIntentをGoogle Assistantで利用するための設定をします。
f:id:HidehikoKondo:20180220190111p:plain

Explicit invocationの項目でさきほど設定した「元気ですか?」を選択します。
Google Assistantで呼び出す時に言う「OK Google」に続く言葉として設定されます。

上記の設定ができたら「TEST」をクリックしてActions on Googleの画面に遷移します。

Actions on Googleの設定

ここではアプリの動作確認をするためのシミュレータを利用することができます。
文字入力により確認ですが、DialogflowのIntentsで設定したキーワードに反応するか確認することができます。

f:id:HidehikoKondo:20180226182903p:plain 日本語で利用する場合はLanguageの項目は「Japanese(Japan)」を選びましょう。
Inputの項目には予め「テスト用アプリにつないで」と入力されています。この言葉がテスト用のウェイクワードとなります。「OK Google」ではありませんので注意しましょう。(Overviewの画面で任意の言葉に変更できます)
Inputの項目にカーソルを合わせてEnterキーを押せばアプリが立ち上がります。

f:id:HidehikoKondo:20180226183635p:plain アプリが立ち上がったら、Inputの項目にDialogflowで設定した「元気ですか?」「調子はどう?」と入力してみましょう。
設定したレスポンスを返してくれます。
画面右側ではJSON形式でレスポンスがやり取りされていることが分かります。

Google Homeの実機でテスト

シミュレーターでの動作が確認画できたら、やっぱり実機で試してみたいですよね。
DialogflowにログインしているGoogleアカウントと、Google Homeに紐付けているGoogleアカウントが同じである必要があります。
この状態になっていれば、すでにテストでGoogle Homeを利用することができます。

テストで実行するにはさきほどActions on Googleでも利用したテスト用ウェイクワード「テスト用アプリにつないで」とGoogle Homeに話しかけます。
アプリが起動したら「元気ですか?」「調子はどう?」と話しかけます。
そうすると「今日は元気いっぱいです!!」「まぁまぁ元気です」などと返してくれるはずです。

メッセージアプリで動かしてみる

Dialogflowで作ったアプリはGoogle Home以外にもFacebookメッセンジャーやSlackなどのメッセージアプリに対応していたり、WEBページ内に埋め込むことも可能です。
今回はSlackでの利用例を紹介します。

Dialogflowの「Integrations」の画面でSlackを選択します。
右上のスイッチをONにします。
次に「TEST IN SLACK」ボタンを押して、Slackのワークスペースにログインします。

ログインできたら、Slackのアプリを作ります。
Launchの項目の「Create a new Slack app.」のリンクをクリックすると、Slackのアプリの作成画面に遷移します。
f:id:HidehikoKondo:20180226201648p:plain アプリ名を「HowAreYou?」と設定し、「Create App」をクリックします。
するとClient ID、Client Secret、Verification Tokenが発行されます。
これをDialogflow側の設定画面のSlack Client ID、Slack Client Secret、Slack Verification Tokenに入力します。 f:id:HidehikoKondo:20180226201835p:plain

これらの項目が入力できたら「Start」ボタンを押して設定完了です。 f:id:HidehikoKondo:20180226201555p:plain

では、Slackを立ち上げて、「Apps」の項目を見ると、「dialogflow_bot」というのが追加されています。
これを開き、Dialogflowで設定した「元気ですか?」「調子はどう?」と聞いてみましょう。
すると設定したとおりに返事を返してくれます。

f:id:HidehikoKondo:20180226202156p:plain

まとめ

このようにしてDialogflowでチャットボットを作ることができます。
今回は単純に決められたテキストをランダムで返すものを作りましたが、Dialogflowで入力されたメッセージに対してJavaScriptで動的に返答するテキストを変えることもできます。
たとえばよくある質問に対して回答をするようなものも作れるかもしれないですね。

Google Homeで音声で操作できたり、WEBページに埋め込んだり、メッセージアプリと連携したりと、使える場面もいろいろあります。
アイデア次第で面白いことが色々できそうですね。