商品について、単にテキストで¥200円とかでは、味気ないし、ユーザーに優しくありません。
そこで、Flex Messageを活用して、リッチなUIにしていきたいと思います。
前回、作ったチャットボットをベースに修正します。
会話フローを変更するのは、Watson Assistant側ですが、LINEの返信メッセージを
リッチにするには、NodeRedを修正します。
目次
Flex Message開発時の参照リンク
Message APIリファレンス
FlexMessage Simulator
ある程度サンプルがあるので、近いサンプルをもとに、ここで編集することで、
プレビューが見れます。あとはコピペするだけです。
商品画像、価格と商品説明を表示
getAssistantMsgという箇所で、Watson Assistantからメッセージを受け取って、LINEに返信するデータを作成していますので、ここを編集します。
前回の状態
"message":[ここの中身がLINEで表示したい内容]
var post_request = {
"headers": {
"content-type": "application/json; charset=UTF-8",
"Authorization": " Bearer " + "{%LINE アクセストークン%}"
},
"payload": {
"replyToken": flow.get("replyToken"),
"messages": [
{
"type": "text",
"text": msg.payload.output.text[0]
}
]
}
};
return post_request;
変更後
変更後は下記のようにします。
Watsonのエンティティが「ゆず酎ハイ」の時にFlexMessageが表示されるようにしています。
var outMessage = msg.payload.output.text[0];
var code = '%LINE アクセストークン%';
var post_request = '';
//FlexMessageを表示したい時
if (msg.payload.entities[0].value=='ゆず酎ハイ') {
var sentmsg = %Flex MessageのJSON%;
//ある条件の時
post_request = {
"headers": {
"content-type": "application/json; charset=UTF-8",
"Authorization": " Bearer " + "{" + code + "}"
},
"payload": {
"replyToken": flow.get("replyToken"),
"messages": [{
"type": "flex",
"altText": "#",
"contents": sentmsg
}]
}
};
}else{
//通常返信
post_request = {
"headers": {
"content-type": "application/json; charset=UTF-8",
"Authorization": " Bearer " + "{" + code + "}"
},
"payload": {
"replyToken": flow.get("replyToken"),
"messages": [
{
"type": "text",
"text": outMessage
}
]
}
};
}
return post_request;
%Flex MessageのJSON%のところを下記とかに変更します。
画像のURLはhttpsにしないとエラーが出ます。
{
"type": "bubble",
"hero": {
"type": "image",
"url": "https://****画像URL",
"size": "full",
"aspectRatio": "3:2",
"aspectMode": "cover"
},
"body": {
"type": "box",
"layout": "vertical",
"spacing": "md",
"contents": [
{
"type": "text",
"text": "¥280",
"size": "xl",
"weight": "bold"
},
{
"type": "text",
"text": "ゆず果汁の豊潤な香りと酸味がひきたち、まろやかでコクのある味わいが楽しめます",
"wrap": true,
"color": "#aaaaaa",
"size": "xs"
}
]
}
}
これで、こんな感じで返事が返ってきます。
ここにいっぱい条件をかくとコードが煩雑になるので、
工夫する必要がありそうです。
WatsonAssistantから、FlexMessage使うかとか、どのメッセージ使うかなど返して、
それに応じて、メッセージを切り替えるのが良さそうです。
出店リストの表示
商品や料理方法など複数回答を行いたい場合、リスト表示にするのも良いですが、
個人的にはカルーセルという横にスライドしてみるのが好きです。
FlexMessageSimulatorだとShoppingの例になっているものです。
コードは下記参照いただいても良いですし、Simulatorのサンプルを使っても良いかと思います。
{
"type": "carousel",
"contents": [
{
"type": "bubble",
"hero": {
"type": "image",
"size": "full",
"aspectRatio": "5:4",
"aspectMode": "cover",
"url": "https://***"
},
"body": {
"type": "box",
"layout": "vertical",
"spacing": "sm",
"contents": [
{
"type": "text",
"text": "ゆず胡椒鍋",
"wrap": true,
"weight": "bold",
"size": "xl"
},
{
"type": "text",
"text": "温かい、金沢ゆず胡椒鍋を100円/杯で提供しています。ぜひ、ご賞味いただき、温まってください。",
"wrap": true,
"color": "#aaaaaa",
"size": "xs"
}
]
}
},{
"type": "bubble",
"hero": {
"type": "image",
"size": "full",
"aspectRatio": "5:4",
"aspectMode": "cover",
"url": "https://***"
},
"body": {
"type": "box",
"layout": "vertical",
"spacing": "sm",
"contents": [
{
"type": "text",
"text": "ジビエ",
"wrap": true,
"weight": "bold",
"size": "xl"
},
{
"type": "text",
"text": "お肉の味がしっかり、丸焼きのジビエです。",
"wrap": true,
"color": "#aaaaaa",
"size": "xs"
}
]
}
},
{
"type": "bubble",
"body": {
"type": "box",
"layout": "vertical",
"spacing": "sm",
"contents": [
{
"type": "button",
"flex": 1,
"gravity": "center",
"action": {
"type": "uri",
"label": "See more",
"uri": "https://kanazawayuzu.com/events.html"
}
}
]
}
}
]
}
最後に
FlexMessageを使うと、おしゃれなチャットボットに生まれ変わります。
いろいろ用意してくれている、LINEに感謝!
他にもあるので、試してみようかと思います。
ただ、返信メッセージは良くなったけど、問い合わせでいちいち文字は入力したくありません。
リッチメニューにしたいところですが、有料ユーザーのみなので、質問に対して回答できない場合に、FlexMessageで工夫したいと思います。