[小ネタ][Amazon Lex]各プラットフォームごとのレスポンスを設定する

2019.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、中村です。 Amazon Lex(以下、Lex)では、音声・テキストを受け付けてテキストを返します。しかし各プラットフォームに合わせてレスポンスを変更したいニーズがあると思います。こういった場合に利用できるものがあるのでまとめておきます。

Lexのレスポンス

Lexからのレスポンスは下記の形式になります。messageとmessageFormatというプロパティに注目しましょう。

{
   "dialogState": "string",
   "intentName": "string",
   "message": "string",
   "messageFormat": "string",
   "responseCard": { 
      "contentType": "string",
      "genericAttachments": [ 
         { 
            "attachmentLinkUrl": "string",
            "buttons": [ 
               { 
                  "text": "string",
                  "value": "string"
               }
            ],
            "imageUrl": "string",
            "subTitle": "string",
            "title": "string"
         }
      ],
      "version": "string"
   },
   "sessionAttributes": { 
      "string" : "string" 
   },
   "slots": { 
      "string" : "string" 
   },
   "slotToElicit": "string"
}

messageには、名称の通りLexからのテキストです。このmessageには1~1024文字の制限があります。 messageFormatは4つの値が選べます。

項目名 説明
PlainText UTF-8テキスト
CustomPayload Lambda関数で定義したカスタムフォーマットテキスト
SSML SSMLテキスト
Composite メッセージグループから1つ以上のメッセージを含む、エスケープされたJSONデータ

Lambdaで利用するためCustomPayloadを利用するのがいいかと思います。Compositeは、複数のメッセージを定義したものとイメージしてみてください。これを利用することでLexに定義されているグループの中からランダムにテキストを返します。 messageFormatの設定を利用し、各プラットフォームごとに適切なテンプレートメッセージを返すことでI/Fが増えてもバックエンドに追加していくことで対応が可能になります。

まとめ

LINEチャットボットの作成時には、messageFormatはPlainTextのままmessageに文字列化したものを入れていましたが、messageFormatを指定をCustomPayloadにすることでクライアント側での分岐がしやすくなりました。しかし文字列については1~1024文字の制限があるため注意です。

チャットボット開発は弊社にご相談ください。

またAmazon Connectのキャンペーンを行なっております。こちらもご相談お待ちしております。