最近、割と引っかかってしまったので備忘録的に書いておきます。
前置き
LINEWORKS トーク Bot の ListTemplate や ButtonTemplate などでは、ボタンを押した際に postback パラメータを設定することができます。
postback があることにより、どのボタンを押したのかがわかるので Bot コンシェルジュみたいに必要なことを案内したり、アンケート集計みたいなこともできます。
エスケープの基本
みなさんご存じだと思うのですが、ダブルクォート(") なんかはプログラムに影響するので、これは文字情報なのだとわかるようにエスケープ処理をします。
基本的に LINEWORKS API では JSON 方式を採用していますので、JSON でのエスケープ同様、バックスラッシュ( \ ) を使用します。
"json":"fine は\"晴れ\""
通常のメッセージなんかは、この書き方でダブルクォート(") を送信できます。
{
"accountId": "xxx@xxx",
"content": {
"type": "text",
"text": "ダブルクォートだよ(\")"
}
}
でも、Postback を設定するときは…
なぜかわからないのですが、Postback ではバックスラッシュ( \ ) によるエスケープは使えないみたいです。
代わりに、URL エンコードによるエスケープをします。
具体的に言うと、こうですね。
"postback":"fine は%22晴れ%22"
なので、Request 時の Body 情報を以下のように書くと、
{
"accountId": "xxx@xxx",
"content": {
"type": "button_template",
"contentText":"今日の天気は?",
"actions":[{
"label":"晴れ",
"type":"message",
"text":"晴れ",
"postback":"fine は%22晴れ%22"
},{
"label":"雨",
"type":"message",
"text":"雨",
"postback":"rainy は%22雨%22"
}]
}
}
となって、無事にダブルクォート(") が表示されます。
やったね!( ゚Д゚)
#おわりに
ここまでお付き合いいただきありがとうございました。
ちなみに、エスケープするためにエンコードが必要な文字は (") (/) () の3つだそうです。
Community の投稿を見ていたら、今後のアップデートでバックスラッシュと URL エンコードと、両方のエスケープが使えるようになるそうです。
早く対応するといいですね~。
ではまた!(^^)/
#参考にさせていただきましたm(_ _)m
LINEWORKS Developers
LINEWORKS Developers Community