我试图在Ruby中为我的Facebook Messenger机器人定义一个“Payload”。我的用例是,当用户看到结构化内容(带有按钮的故事)并单击按钮,而不是将其发送到URL时,我希望点击web钩子并返回更结构化的内容。
所以,我尝试了几次迭代,但不知道我在哪里被绊倒了。我首先添加了一个消息传递事件:
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所以,这里有两件事--我需要有效负载消息传递事件和定义有效载荷吗?我需要在对象中调用什么?这里的任何想法或反馈都会很有帮助。提前感谢!
发布于 2016-04-28 12:06:24
您需要处理代码中的回发。当用户点击一个按钮时,facebook会用回帖(除非是网址)来调用你的网页钩子。
来自文档:
当点击按钮时,回发是对你的网页钩子的后端调用。这些调用包含为按钮设置的有效负载。结构化消息上的按钮支持打开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点处理回邮)。
https://stackoverflow.com/questions/36913919
复制相似问题