コミュニティ

LINE WORKSのテクニカルエキスパート及び開発者と
コードのサンプル、リソース、Tip等を共有し問題解決への相談が可能です。

??dev_메인_타이틀_모바일_ja_JP??

トークBot

postbackのデータ欠損について

notaro

2020.07.02既読 300

お世話になっております。

リストテンプレートのactionにpostbackを設定し、画面上から対応のボタンをクリックすると、callbackで送信されるpostbackのデータが欠損します。

ダブルコーテーション「"」以降のデータが切り捨てられているように見えます。

こちらの動作についてご確認頂き、対応方法等をお教えいただければと思います。

リストテンプレートに登録したデータは以下となります。

⇒ postbackの値にjson文字列を設定

'''

{
 "accountId": "account@domain",
 "content": {
   "elements": [
     {
       "title": "タイトル",
       "action": {
         "type": "message",
         "label": "ボタン",
         "postback": "{\"id\":\"1234\",\"num\":\"1593674300974\"}"
       }
     }
   ],
   "actions": [
     [
       {
         "type": "message",
         "label": "リセット",
         "postback": "{\"id\":\"5678\",\"num\":\"1593674300974\"}"
       }
     ]
   ],
   "type": "list_template"
 }
}

'''

callbackから送信されたデータは以下となります。

⇒ postbackの値の値が欠損しています

'''
{
 "type": "message",
 "source": {
   "accountId": "account@domain"
 },
 "createdTime": 1593673041344,
 "content": {
   "type": "text",
   "text": "ボタン",
   "postback": "{"
 }
}

'''

各jsonとも値等は一部変更してあります

コメント3

  • LINE WORKS 公式アカウント

    こちらでも症状を確認いたしました。
    ご迷惑をおかけしてしまい、申し訳ございません。
    修正が完了し次第、またご連絡させていただきます。

    なお、ダブルクォート(")ですが URL エンコードで表示すれば正常に取得することができます。
    例) "postback": "{%22id%22:%221234%22,%22num%22:%221593674300974%22}"

    お手数をおかけいたしますが、こちらの方法でご利用いただければと思います。

    2020.07.09

    0
  • notaro 投稿者

    ご回答、ありがとうございます。
    Bot API の仕様としてpostback中のダブルコーテーション「"」はURLエンコードが必須である、という認識でよろしいでしょうか?

    加えて2点お教えください。
    ①エンコードが必要な文字
    ダブルコーテーションの他にURLエンコードが必要となる文字はありますでしょうか?(以下のいずれでしょうか)
    ・ダブルコーテーションのみ
    ・ほかの文字(記号)もエンコードが必要 ⇒ 該当する文字をお教えください
    ・postbackの中を全てをURLエンコードする

    ②修正後の動作
    将来的にURLエンコードなしでも動作する修正が行われる認識ですが、修正後も現在の動作は踏襲されるのでしょうか?
    (postback内の文字をURLエンコードした状態でもデータの取得は可能でしょうか)
    = 修正後の動作イメージ =
    ・修正による動作: "postback": "{\"data\": \"value\"}" ⇒ callbackは"{\"data\": \"value\"}"を受け取る
    ・現行動作の踏襲: "postback": "{%22data%22: %22value%22}" ⇒ callbackは"{\"data\": \"value\"}"を受け取る

    2020.07.09

    0
  • LINE WORKS 公式アカウント

    以下にお答えさせていただきます。
    1-
    エスケープするため、エンコードが必要な文字は (") (/) (\) になります。

    2-
    修正後も URL エンコードでの文字表記をご利用いただけます。
    (\") (%22) の両方ともご利用いただけるように修正を予定しております。

    2020.07.14

    0
前の投稿 API ID, Service API Consumer Keyの文字数はいくつか?
次の投稿トークBOTにて連絡先をユーザに送ることは可能でしょうか