Actions on Google お触りメモ
軽く調べたものは情報が古くなってるっぽく戸惑った
最近の記事だったのもあり参考になった
プロジェクト作成は多くの記事と変わりないため割愛
名前を決める
このとき pronunciation にスペースを入れないと
Could not reserve your pronunciation '{アプリのよみ}' because: Your Action's display name must contain more than one word, or more than one word and a prefix (such as "the" or "an").
とか言われてデプロイできない
アプリ名は複数単語が必要らしい
Main invocation
を編集する
見ての通り「~ につないで」と言ったときの応答になる
ここでも喋ったり webhook できるが、とりあえず置いといて transition に適当な名前で Add すると、Scenes が作成されるのでそっちに移動
普通のアプリの画面遷移と同じように、命令毎にこの Scenes を行き来したりしなかったりするイメージ
User intent handling
を追加して、Intent
に適当な名前で Add する
今度は intent が作成される
これが命令本体
Add training phrases
に受け取る命令を入れていく
タイマーセットなら
「タイマーを5分でセット」「タイマー5分」「5分計って」とか
この「5分」を変数として受け取るには Add intent parameters
を設定する
適当な名前とデータ型を指定して phrases
の方で該当する部分をテキスト選択するとダイアログが出るので選択する
「タイマー5分」と入力していても 5 がパラメータとして指定されていると「タイマー10分」でも勝手にマッチするようになる (分かりづらくない?)
Scenes
に戻って When intent matched
の Call your webhook
を入力する
url ではなく呼び出すアクションの名前、なんでもいい
メニューの Webhook
に移動
ここで url を入力、もしくはインラインエディタを開く
インラインエディタの場合、cloud functions にデプロイされるのでプロジェクトの課金設定が必要
あとデプロイ先は us-central
になる、変更不可?見てない
コードはこんな感じ
actions-on-google
-> @assistant/conversation
になっとる
import {conversation} from "@assistant/conversation";
import { https } from "firebase-functions";
const app = conversation({debug: true});
app.handle("{`Call your webhook` で入力した名前}", (conv) => {
conv.add("Hello World");
});
export actions = https.onRequest(app);
Intent
で定義したパラメータは conv.request.intent.params.[name]
から参照できる
original
に入力されたテキスト、resolved
にテキストを解決したものが入ってる
日付なら「今日の~」と入力された場合 resolved
に { "day": 7, "month": 6, "year": 2022}
みたいに入ってくる、便利
渡されてるデータはコンソールの Test
タブで、呼び出しの webhookRequest
でも見れる
あとはこれを元にがしゃがしゃして返すだけ
テキストだけじゃなくリストを表示したりもできるけど、今回はここまで
- ~につないでと言わないといけないのがやっぱり残念
- オプトインになったりしないかな
- 呼び出し時に「テスト版です」とか言われるのはコンソールテスト時だけだった
終わるんかーい!
App actions に移行って感じか