Intent更新時の再審査回避方法について


Actions on GoogleでDialogflowを利用しているとき、
intent内の更新を公開版に適応するには必ず再度審査を通さなければなりません。
けど、緊急な変更等が必要な場合に一々審査結果を待つというのも、見方によってはナンセンスです。

For edits to go live, you’ll need to submit your draft for alpha, beta, or production release in the Actions Console.
引用 Dialogflow versioning - Actions on Google

この点、DialogflowのバージョニングはFirebase Functionsまでに及ばないので、
こちらの方にTraining phraseの処理を移してしまえば、一々審査を通す必要はなくなるでしょう。

Actions on Google: Dialogflow's inline code editor does not have versioning for Cloud Functions.
引用 Create a webhook with the inline editor - Dialogflow

連想遊戯では、IntentのTraining phraseに@sys.anyを指定して、
その後の処理をFirebase functions側で処理しています。

そのため、急な変更とかは、一々Intentを編集して審査に再申請するのではなく、
例えば以下のように受け取ったフレーズに任意の言葉が含まれていないかチェックする機能をサーバ側で処理しています。

app.intent('theIntent', (conv) => {
    // ユーザの発した言葉を受け取る
    let userComment = conv.arguments.raw.input.text.textValue;

    //クエリを関数に引き渡し、「反応させたいフレーズ集」に引っかかったら1を返す
    if(receivedPhrase(userComment) === 1){
        // 任意のフレーズに該当
        app.close("ばいばい")
    }
    app.ask("どうしたの?")
}

function receivedPhrase( query ){
    //反応させたいフレーズ集
    var thePhrases = [
        "AAA", "BBB", "CCC", "DDD" 
    ],
    query = query,
    i = thePhrases.length;

    while (i--) {
        if (query.indexOf(thePhrases[i]) !== -1) {
            console.log("Found user said : " + query ); 
            return 1
            break;
        }
    }
    return 0
}

もちろん、この解決策を使うことに批判があります。
そもそも、sys.any自体を濫用することがDialogflowが想定していた使い方であるかと言われたら、そうではないからです。
つまり、クエリのやり取りだけならばActions SDKだけでもでき、
この解決策では、GUIで形態素解析をしてくれるというDialogflow良い点まで破棄するということになります。
(私の場合はActions SDKのActions Packageを準備するのが面倒なだけですが...)

あと、Actions on Googleを利用するにあたって、ポリシーや利用規約があるので、
悪用厳禁と自己責任で諸々お願いします。現場からは以上です。即出なら失礼(`・ω・´)ゞ

ところで、いつも自分のブログで書いているのですが、
今回はGutenbergを使ったときのソースコードの見せ方がわからないため、Qiitaに投稿しました。