首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义Payload Facebook Messenger Ruby

定义Payload Facebook Messenger Ruby
EN

Stack Overflow用户
提问于 2016-04-28 11:55:38
回答 1查看 902关注 0票数 1

我试图在Ruby中为我的Facebook Messenger机器人定义一个“Payload”。我的用例是,当用户看到结构化内容(带有按钮的故事)并单击按钮,而不是将其发送到URL时,我希望点击web钩子并返回更结构化的内容。

所以,我尝试了几次迭代,但不知道我在哪里被绊倒了。我首先添加了一个消息传递事件:

代码语言:javascript
复制
messaging_event["entry"].first["messaging"].each do |msg|
     puts msg
     sender = msg["sender"]["id"]
     if msg["message"] && msg["message"]["text"]
       payload = msg["message"][“payload”]

我在添加文本时做了一些非常类似的事情,即:

代码语言:javascript
复制
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}"

因此,在这一点上,我不确定是否需要进一步研究有效载荷,例如:

代码语言:javascript
复制
def payload(sender, payload)
     data = {
       recipient: { id: sender },
       message: payload
     }
     send_message(data)
   end

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

代码语言:javascript
复制
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

所以,这里有两件事--我需要有效负载消息传递事件和定义有效载荷吗?我需要在对象中调用什么?这里的任何想法或反馈都会很有帮助。提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-04-28 12:06:24

您需要处理代码中的回发。当用户点击一个按钮时,facebook会用回帖(除非是网址)来调用你的网页钩子。

来自文档

当点击按钮时,回发是对你的网页钩子的后端调用。这些调用包含为按钮设置的有效负载。结构化消息上的按钮支持打开URL和回发。

回发的结构与文本消息不同。

短信:

代码语言:javascript
复制
{"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."}}]}]}

回发:

代码语言:javascript
复制
{"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"]提供另一个案例。

所以,改变这一点:

代码语言:javascript
复制
if msg["message"] && msg["message"]["text"]
  payload = msg["message"]["payload"]

对此:

代码语言:javascript
复制
if msg["postback"] && msg["postback"]["payload"]
  payload = msg["postback"]["payload"]

您可以在正式文档中进一步阅读如何处理回发这里 (第8点处理回邮)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36913919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档