DialogflowにおけるDeveloper entitiesの優先順位の利便性について


Dialogflowでは、Developer entitiesというentitiesの複合体を作る事ができます。
このDeveloper entitiesは優先順位を持てますので、非常に便利です。
その利便性について例を持ってご紹介します。

つまりこういう事

ここは異世界のNippon。

TOKYO都 TOKYO市 TOKYO町にTOKYO駅 があったとします。

そして、

SHIBUYA都 SHIBUYA市 SHIBUYA町 には駅がありませんでした。

そんな異世界のNipponには、VUIでユーザーに遊べる場所を提案できるアプリが流行っていました。

アプリ「どこで遊びますか?」
ユーザ「TOKYO」
アプリ「...TOKYO都ですか?TOKYO市ですか?TOKYO町ですか?TOKYO駅ですか?」
ユーザ「消えろぶっとばされんうちにな」

こうならないように、アプリ側で予め優先順位を決めておきましょう。
その際Developer entitiesが便利なのです。

Developer entitiesの作り方

まずはEntitiesを登録する


駅のEntitiesです。SHIBUYAには駅がないのでTOKYO駅だけになります。

町のEntitiesです。SHIBUYAが出てきました。


同様に市と都のEntitiesです。

ここのポイントとしては、 駅も町も市も都もすべてTOKYO、SHIBUYAと呼ばれることがある です。地名はだいたいそんなもんです。

EntitiesをDeveloper entitiesに登録する


Entitiesを作る手順と同様に CREATE ENTITY を押下します。

Entity name を入力し Define synonyms のチェックを外しましょう。
そして Enter value の欄にEntities名を入力していきます。入力方法は@Entities名:Entities名 となります。

こんな感じです。
こうする事によって優先順位を持ったDeveloper entitiesを作る事が出来ました。
Enter value の上から順番に優先順位が上がります。
駅 > 町 > 市 > 都 といった感じです。

Developer entitiesをIntentsに登録する

こんな感じで、先程作ったDeveloper entities(place)をIntentsに登録しましょう。
これで完成です。

使ってみる

さっそく使ってみましょう。

TOKYOと言った場合には駅として認識されています。

SHIBUYAと言った場合には町になりました。
想定通りの動きです。
あとは受け取った先のプログラムでゴニョゴニョしましょう。

app.intent('place', (conv) => {
    if(conv.parameters['place'].eki){
        // 駅の場合
    }else if(conv.parameters['place'].cho){
        // 町の場合
    }
})

ゴニョゴニョする簡単な例も載せておきます。

おわり

Developer entitiesを使わずとも実装する方法はたくさんありますが、使用するとIntentsが最小限で済みます。

自分としてはIntentsの管理が大変なので、自分はこの方法を愛用しております。
Dialogflow使いのみなさんのお役に立てば幸いです。