カスタムルールを追加してAPIのレスポンスを変える
APIの応答を、デフォルトのものからカスタマイズする方法について記載します。
例えば、「テレビが欲しい」という入力に対して「METHOD:shopping、PARAM_QUERY:テレビ」のように独自の応答ドメインや応答パラメータを含んだレスポンスを返却させることができるようになります。
仕様
「sample<n>=<応答ドメイン>,<発話パターン>」のようなリクエストパラメータをparams/context以下に追加することで、指定された<発話パターン>に対して<応答ドメイン>をレスポンスで返却できます(<n>は0
1 ... 999のみ)。
また、「dict<m>=<辞書名>,<単語リスト>」のようなリクエストパラメータもあわせて使用することで、<発話パターン>で独自の辞書を参照することができます(<m>は0
1 ... 99のみ)。
詳細は下記をご覧ください。
ユースケース
a. 特定の入力テキストに対して応答ドメインを変更したい
例 | 追加するリクエストパラメータ |
---|---|
「こんにちは」の応答ドメインをhelloに | sample0=hello,こんにちは |
下記は「q=こんにちは&sample0=hello,こんにちは」に対するレスポンス例です。
{
"result": {
"INTEXT": "こんにちは",
"METHOD": "hello",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521532126",
"VAR_TEST_BTSC": "46"
}
}
b.1. aに加えて、入力の一部をキャプチャして応答パラメータに含めたい
例 | 追加するリクエストパラメータ |
---|---|
「テレビが欲しい」の応答ドメインをshoppingにし、テレビの部分をPARAM_QUERYとしてレスポンスパラメータに含める | sample0=shopping,(?<query>テレビ)が欲しい |
下記は「q=テレビが欲しい&sample0=shopping,(?<query>テレビ)が欲しい」に対するレスポンス例です。
{
"result": {
"INTEXT": "テレビが欲しい",
"METHOD": "shopping",
"PARAM_QUERY": "テレビ",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521532675",
"VAR_TEST_BTSC": "55"
}
}
b.2. aに加えて、入力の一部をキャプチャして応答パラメータに含めたい
例 | 追加するリクエストパラメータ |
---|---|
「テレビが欲しい」の応答ドメインをshoppingにし、テレビの部分をPARAM_QUERYとしてレスポンスパラメータに含める | sample0=shopping,(?<query>.+)が欲しい |
正規表現に似た記法にも一部対応しています。
c. 複数の入力に対してまとめて応答ドメインを変更したい
例 | 追加するリクエストパラメータ |
---|---|
「こんにちは」でも「おはよう」でも応答ドメインをhelloに | sample0=hello,{おはよう|こんにちは} |
下記は「q=こんにちは&sample0=hello,{おはよう|こんにちは}」に対するレスポンス例です。
{
"result": {
"INTEXT": "こんにちは",
"METHOD": "hello",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521532126",
"VAR_TEST_BTSC": "46"
}
}
d.1. 複数のカスタマイズを組み合わせたい
例 | 追加するリクエストパラメータ |
---|---|
「こんにちは」でも「おはよう」でも応答ドメインをhelloに |
|
下記は「q=こんにちは&sample0=hello,おはよう&sample1=hello,こんにちは」に対するレスポンス例です。
{
"result": {
"INTEXT": "こんにちは",
"METHOD": "hello",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521532126",
"VAR_TEST_BTSC": "46"
}
}
d.2. 複数のカスタマイズを組み合わせたい
例 | 追加するリクエストパラメータ |
---|---|
「こんにちは」ではhello、「はい」ではyesを応答ドメインに |
|
下記は「q=こんにちは&sample0=hello,こんにちは&sample1=yes,はい」に対するレスポンス例です。
{
"result": {
"INTEXT": "こんにちは",
"METHOD": "hello",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521532126",
"VAR_TEST_BTSC": "46"
}
}
e. カスタム辞書を利用したい
例 | 追加するリクエストパラメータ |
---|---|
「傘が欲しい」や「長靴が欲しい」などの、「<雨のアイテム>が欲しい」でneed_rain_itemを応答ドメインにし、<雨のアイテム>をparam_rain_itemとして応答パラメータに含める。 |
|
下記は「q=長靴が欲しい&sample0=need_rain_item,(?<rain_item>{$RAIN_ITEM})が欲しい&dict0=$RAIN_ITEM,長靴,傘,合羽,折り畳み傘」に対するレスポンス例です。
{
"result": {
"INTEXT": "長靴がほしい",
"METHOD": "need_rain_item",
"PARAM_RAIN_ITEM": "長靴",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521533741",
"VAR_TEST_BTSC": "41"
}
}
f. システム辞書を利用したい
例 | 追加するリクエストパラメータ |
---|---|
「<地名>のイベント情報」で、event_infoを応答ドメインにし<地名>をparam_placeとして応答パラメータに含める。 |
|
下記は「q=大阪のイベント情報&sample0=event_info,(?<place>{$SYS.LOCATION})のイベント情報」に対するレスポンス例です。
{
"result": {
"INTEXT": "大阪のイベント情報",
"METHOD": "event_info",
"PARAM_PLACE": "大阪",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1524126275",
"VAR_TEST_BTSC": "35"
}
}
g. システム辞書に単語を追加したい
例 | 追加するリクエストパラメータ |
---|---|
オリジナルのレシピ名である「ふわとろオムそば」をレシピ名として認識させたい。 |
|
下記は「q=ふわとろオムそばのレシピ」(単語追加前)と「q=ふわとろオムそばのレシピ&dict0=$SYS.RECIPE-DISH,ふわとろオムそば」(単語追加後)のレスポンス例です。
{
"result": {
"INTEXT": "ふわとろオムそばのレシピ",
"METHOD": "SEARCH",
"PARAM_METHOD_SUBCAT": "RECIPE",
"PARAM_QUERY": "そば",
"STATUS": "200",
"VAR_INTEXT": "ふわとろオムそばのレシピ",
"VAR_INTEXT_NORMALIZED": "ふわとろオムそばのレシピ",
"VAR_INTEXT_TIMESTAMP": "1524126837",
"VAR_TEST_BTSC": "57"
}
}
{
"result": {
"INTEXT": "ふわとろオムそばのレシピ",
"METHOD": "SEARCH",
"PARAM_METHOD_SUBCAT": "RECIPE",
"PARAM_QUERY": "ふわとろオムそば",
"STATUS": "200",
"VAR_INTEXT": "ふわとろオムそばのレシピ",
"VAR_INTEXT_NORMALIZED": "ふわとろオムそばのレシピ",
"VAR_INTEXT_TIMESTAMP": "1524126765",
"VAR_TEST_BTSC": "45"
}
}
z. より本格的な例
例 | 追加するリクエストパラメータ |
---|---|
最小限の機能を備えた対話アシスタント |
|
下記に、いくつかの入力テキストに対するレスポンス例を示します。
「何ができる」
{
"result": {
"INTEXT": "何ができる",
"METHOD": "help",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521534816",
"VAR_TEST_BTSC": "36"
}
}
「トゲアリトゲナシトゲトゲを検索」
{
"result": {
"INTEXT": "トゲアリトゲナシトゲトゲを検索",
"METHOD": "search",
"PARAM_QUERY": "トゲアリトゲナシトゲトゲ",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521535181",
"VAR_TEST_BTSC": "41"
}
}
「東京のレストラン」
{
"result": {
"INTEXT": "東京のレストラン",
"METHOD": "local",
"PARAM_PLACE": "東京",
"PARAM_QUERY": "レストラン",
"STATUS": "200",
"VAR_INTEXT_TIMESTAMP": "1521535308",
"VAR_TEST_BTSC": "48"
}
}