【问题标题】:Define Payload Facebook Messenger Ruby定义有效负载 Facebook Messenger Ruby
【发布时间】:2016-04-28 20:52:08
【问题描述】:

我正在尝试在 Ruby 中为我的 Facebook Messenger 机器人定义一个“有效负载”。我的用例是,当用户看到结构化内容(带有按钮的故事)并单击按钮时,我不想将它们发送到 URL,而是想点击我的 webhook 并返回更多结构化内容。

所以,我已经尝试了几次迭代,但不确定我在哪里被绊倒了。我首先添加了一个消息事件:

messaging_event["entry"].first["messaging"].each do |msg|
     puts msg
     sender = msg["sender"]["id"]
     if msg["message"] && msg["message"]["text"]
       payload = msg["message"][“payload”]

我为添加文本做了一些非常相似的事情,那就是:

post '/webhook/' do
    messaging_event = JSON.parse(request.body.read)
    puts messaging_event
    messaging_event["entry"].first["messaging"].each do |msg|
      puts msg
      sender = msg["sender"]["id"]
      if msg["message"] && msg["message"]["text"]
        text = msg["message"]["text"]
        puts "Sender ID: #{sender}, Text: #{text}"

所以,在这一点上,我不确定是否需要进一步定义有效载荷,例如:

def payload(sender, payload)
     data = {
       recipient: { id: sender },
       message: payload
     }
     send_message(data)
   end

或者,如果我只需要创建一个变量并在我的 Module 对象中调用该变量,例如:

module Messages
    SIMPLE_ONE_BUTTON_PAYLOAD = {
"attachment":{
      "type":"template",
      "payload":{
        "template_type":"button",
        "text":"Here's a simple button message",
        "buttons":[
          "type":"postback",
            "title":"Button One",
            "payload":"[variable I need to call]",
        ]
      }
    }
  }
end

所以,这里真的有两件事——我是否需要有效负载消息传递事件并定义有效负载以及我需要在对象中调用什么?这里的任何想法或反馈都会非常有帮助。提前致谢!

【问题讨论】:

标签: ruby facebook facebook-messenger


【解决方案1】:

您需要在代码中处理回发。当用户点击按钮时,facebook 会通过回帖调用您的 webhook(除非它是一个 url)。

来自docs

回传是点击按钮时对您的 webhook 的后端调用。这些调用包含为按钮设置的有效负载。结构化消息上的按钮支持打开 URL 和回发。

回发的结构不同于短信。

短信:

{"object":"page","entry":[{"id":654321,"time":1460624758100,"messaging":[{"sender":{"id":123456},"recipient":{"id":654321},"timestamp":1460624758089,"message":{"mid":"mid.987654","seq":12632,"text":"This is the message."}}]}]}

回发:

{"object":"page","entry":[{"id":654321,"time":1460625294253,"messaging":[{"sender":{"id":123456},"recipient":{"id":654321},"timestamp":1460625294253,"postback":{"payload":"Payload defined in the button"}}]}]}

您正在使用if msg["message"] && msg["message"]["text"],但回帖没有["message"] 元素。您需要为msg["postback"] 制作另一个案例。

所以,改变这个:

if msg["message"] && msg["message"]["text"]
  payload = msg["message"]["payload"]

到这里:

if msg["postback"] && msg["postback"]["payload"]
  payload = msg["postback"]["payload"]

您可以在官方文档(第 8 点处理回发)中进一步了解处理回发here

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 2019-04-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2017-09-17
    • 2018-01-12
    • 2016-12-09
    相关资源
    最近更新 更多