2016-04-28 66 views
1

我想在我的Facebook Messenger機器人Ruby中定義一個'Payload'。我的用例是,當用戶看到結構化的內容(一個帶按鈕的故事)並單擊按鈕,而不是將它們發送到URL時,我想打我的webhook並返回更多結構化的內容。定義Payload Facebook Messenger Ruby

所以,我已經嘗試了幾次迭代,不知道我在哪裏被絆倒。

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 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 

所以,這裏真的有兩件事 - 我是否需要負載消息傳遞事件並定義有效負載以及在對象內需要調用什麼?這裏的任何想法或反饋將會非常有幫助。提前致謝!

+0

不知道我是不是太晚了,但是我創建了一個gem來處理這些用例:https://github.com/tinkerbox/message_quickly – Jaryl

回答

1

您需要在代碼中處理回傳。當用戶點擊一個按鈕時,facebook會以回發的方式呼叫您的webhook(除非是網址)。

docs

回發後端調用你的網絡掛接當按鈕被竊聽。這些調用包含爲按鈕設置的有效負載。結構化消息上的按鈕支持打開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"]製作另一個案例。在正式文件處理回傳here

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

您可以進一步閱讀(8點處理回發):

因此,改變這種:

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

了這一點。