【问题标题】:"Payload" option on Facebook Bots buttonsFacebook Bots 按钮上的“有效负载”选项
【发布时间】:2016-08-19 11:08:31
【问题描述】:

Facebook Send API 提到您可以为通用响应模板上的按钮设置的“有效负载”类型。但是,他们没有说明它是如何工作的,除了:

对于回发按钮,此数据将通过 webhook 发回给您

但是它是如何被送回的呢?单击有效负载按钮时,我没有收到任何消息。有人成功用过吗?

【问题讨论】:

标签: facebook bots facebook-messenger


【解决方案1】:

这是您读回有效负载的方式:

$payload = $input['entry'][0]['messaging'][0]['postback']['payload'];

【讨论】:

    【解决方案2】:

    当您单击按钮时,一条 POST 消息将发送到您的 /webhook

    您必须像这样处理有效负载:

    app.post('/webhook/', function (req, res) {
      messaging_events = req.body.entry[0].messaging;
      for (i = 0; i < messaging_events.length; i++) {
        event = req.body.entry[0].messaging[i];
        sender = event.sender.id;
        if (event.message && event.message.text) {
          text = event.message.text;
          // Handle a text message from this sender
        } else if (event.postback && event.postback.payload) {
          payload = event.postback.payload;
          // Handle a payload from this sender
        }
      }
      res.sendStatus(200);
    });
    

    此代码 sn-p 来自 Facebook 的入门指南,但 else if 除外,您可以在其中对有效负载做出反应。

    【讨论】:

    • 嗨,我们如何用php实现,找不到完美的方法来获取payload的值
    【解决方案3】:

    我测试了它,它对我有用。按钮的有效负载类似于 html 按钮上的值。这意味着它对用户不可见,但它是发送回给您的值。

    如果你创建一个这样的按钮:

    'attachment': {
        'type': 'template',
        'payload': {
            'template_type': 'button',
            'text': 'This is the description',
            'buttons': [
                 {
                     'type': 'postback',
                     'title': 'This is the visible text',
                     'payload': 'This is the value you get back'
                 }
            ]
     }
    

    包含有效负载的回调如下所示:

    {'timestamp': 1461697120850, 'postback': {'payload': 'this is the value you get back'}, 'recipient': {'id': xxxxxxxx}, 'sender': {'id': xxxxxxxx}}
    

    【讨论】:

    • 如何在 php 中获取它的值?
    • @runningmark if(isset($input['entry'][0]['messaging'][0]['message']['quick_reply'])){ $payload_txt = $input['entry'][0]['messaging'][0]['message']['quick_reply']['payload'];
    • 你测试过这些行吗?我试过了,还是不行
    • 在调试期间,我将收到的所有请求记录到一个文本文件中:file_put_contents("testfile.txt", json_encode( $input ) . PHP_EOL, FILE_APPEND | LOCK_EX);
    • 适合查看请求结构
    猜你喜欢
    • 2018-01-09
    • 2016-10-17
    • 2020-06-20
    • 1970-01-01
    • 2016-12-09
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多