Google Home の独自コマンドを PHP から応答

Google Home(Assistant) の独自コマンドを PHP(Webサーバ) から応答させたときのメモ

【注意】
ここで使用する独自コマンドは、Google Home から独自コマンドが搭載された自作アプリへ接続して、会話を行うような利用方法です。ok,google に続いて一発ものの命令を行う場合 IFTTT を利用するほうが容易です

基本的な流れはこちらを参考にさせていただきました
上記は例が python + Flask なので既存のサーバへ受け渡すのとはちょっと違ったのでPHPの場合を捕捉

大まかな流れ等
  1. DialogFlow のアカウントを有効にするGoogleサインアップがフツーかもGoogle傘下なので
  2. Agentを作成(この中に intent を複数作成していく)
  3. Intentを作成(音声命令 = intent な感じです)
    解説に有る Fulfillment のチェックボックスが見つからないのは、Fulfillment が定義されていないからです。Fulfillmentを定義すると出現します
  4. Entities は音声命令を節毎に分離して汎用性を高められます
    テレビ電源 入れて」の各節を TV とか パワーとか オンして みたいなゆらぎを入れてクロスでマッチしてくれたりします(後で intent に組み込めるのでテストでは飛ばしてもOK)
  5. Fulfillment で呼び出す URLを指定
    ここのURLは Agentと対になり Intent の Action が送られてきますので、URLが違えば Agent も違うという事になる
Intent が音声等で選択されると Fulfillment で指定されたURLへ json形式のデータが送られてきて、レスポンスも json形式で返すことになります

PHP の場合、こちらの 形式で応答(Action の sayHello が該当の箇所)

また、送られてくる json は、DialogFlowの右側にある「try it now」からコマンドを入力して、一番下の show json で確認できるので、ファイルに保存して
上の
$update_response = file_get_contents("php://input");
$update_response = file_get_contents("filename.json");
としてデバッグするとわかりやすいです

最終的な動作確認は、Webを持っていれば Integrations の WebDemo をオンにして、

表示される iframe をHTMLで貼り付けてれば確認可能です

動作の流れ
「○○につないで」で、テストアプリに接続してチャットを行う感じです
チャットを終了させるコマンドを用意していないと戸惑います
  • スマートフォンであれば上部の×でチャットを閉じる
  • Google Home であれば、上部中央をタッチする
  • 先程の intent で終了コマンドを作成しておく ←コレがあると親切
の3通りがあります(たぶん)
「ありがとう」や「さようなら」という言葉で、最下部の End conversation にチェックを付けると、終了intentを作成しておきます

コメント