0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【LINEWORKS API】postback 設定時にダブルクォート(")をエスケープする方法

Last updated at Posted at 2020-11-04

最近、割と引っかかってしまったので備忘録的に書いておきます。

前置き

LINEWORKS トーク Bot の ListTemplate や ButtonTemplate などでは、ボタンを押した際に postback パラメータを設定することができます。
postback があることにより、どのボタンを押したのかがわかるので Bot コンシェルジュみたいに必要なことを案内したり、アンケート集計みたいなこともできます。

1597993315.png

1597993442.png

エスケープの基本

みなさんご存じだと思うのですが、ダブルクォート(") なんかはプログラムに影響するので、これは文字情報なのだとわかるようにエスケープ処理をします。
基本的に LINEWORKS API では JSON 方式を採用していますので、JSON でのエスケープ同様、バックスラッシュ( \ ) を使用します。

"json":"fine は\"晴れ\""

通常のメッセージなんかは、この書き方でダブルクォート(") を送信できます。

{
  "accountId": "xxx@xxx",
  "content": {
    "type": "text",
    "text": "ダブルクォートだよ(\")"
  }
}

1597994979.png

でも、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"
    }]
  }
}

1597993315.png

1597994141.png

となって、無事にダブルクォート(") が表示されます。
やったね!( ゚Д゚)

#おわりに
ここまでお付き合いいただきありがとうございました。

ちなみに、エスケープするためにエンコードが必要な文字は (") (/) () の3つだそうです。
Community の投稿を見ていたら、今後のアップデートでバックスラッシュと URL エンコードと、両方のエスケープが使えるようになるそうです。
早く対応するといいですね~。

ではまた!(^^)/

#参考にさせていただきましたm(_ _)m
LINEWORKS Developers
LINEWORKS Developers Community

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?