我已經成功安裝了facebook-messenger webhook。直到昨天,我還能夠發送和接收消息。但是今天,當我從用戶發送一條消息時,我在服務器webhook POST API處得到多個調用。他們似乎從未停止過。在facebook-messenger webhook上重複調用
回答
想通了。我發送了來自Facebook的每個通信的回覆。所以我最終也迴應了ACK消息。反過來又有一個ACK來了。這就是爲什麼導致無限循環。
在this頁面,我們可以找到不同的對象結構,對收到的消息:
文本
{
"object":"page",
"entry":[
{
"id":PAGE_ID,
"time":1457764198246,
"messaging":[
{
"sender":{
"id":USER_ID
},
"recipient":{
"id":PAGE_ID
},
"timestamp":1457764197627,
"message":{
"mid":"mid.1457764197618:41d102a3e1ae206a38",
"seq":73,
"text":"hello, world!"
}
}
]
}
]
}
消息交付回調
{
"object":"page",
"entry":[
{
"id":PAGE_ID,
"time":1458668856451,
"messaging":[
{
"sender":{
"id":USER_ID
},
"recipient":{
"id":PAGE_ID
},
"delivery":{
"mids":[
"mid.1458668856218:ed81099e15d3f4f233"
],
"watermark":1458668856253,
"seq":37
}
}
]
}
]
}
因此,對於區分,我們可以參考entry[0].messaging[0].message
這僅存在於用戶發送的消息中。回調或回發不包含這部分。 在迴應之前檢查這一點。如果存在,則迴應,否則不。
所有這些調用都具有相同的內容還是不同?您可以記錄Facebook發送給您的確切消息字符串,並查看它們包含的內容。
例如,有一個消息傳遞迴調,通知您用戶收到該消息。該JSON看起來是這樣的:
{'delivery': {'mids': ['mid.146174459xxx:30a42600a95exxxxx'], 'seq': 429, 'watermark': 146174459xxx}, 'recipient': {'id': xxxxxxxx}, 'sender': {'id': xxxxxx}}
編輯:它也可能是您的不確認來電HTTP狀態200.如果Facebook從您的網絡掛接接收到錯誤的情況下,消息會多次發送。
我試着用res.status(200)來確認循環消息,但它一直進來。有沒有一種方法來測試消息是否被確認爲收到? – hoodsy
當你需要在考慮兩件事情的Facebook的信使工作,你發送的消息後:由於您使用網絡掛接這將工作
在每次發生事件時觸發(接收消息,傳遞您發送的消息,用戶閱讀消息)。因此,如果您在您的webhook中激活了例如message_deliveries,並且您發送了一條消息作爲操作,則最終會以循環方式結束。
正確的方法來處理這是在基本代碼。 PHP示例:
// Skipping delivery messages
if (!empty($message['delivery'])) {
#Do something here if you want
continue;
}
// Skipping read messages
if (!empty($message['read'])) {
#Do something here if you want
continue;
}
希望它有幫助!
我的問題是類似的,但我得到多個消息傳遞職位。經過幾個小時的沮喪之後,我意識到每次將消息傳遞到每個設備時都會調用Message Delivered callback。所以,如果你登錄到網絡和移動應用程序,回調將被調用兩次。
這就是爲什麼我得到3個相同的交付確認哈哈。非常感謝 ! – sonlexqt
- 1. 在Docusign上重新發送Webhook通知
- 2. Heroku,Middleman和內容:在webhook上重建
- 3. 反覆Webhook ID
- 4. layoutSubviews在ios6上重複調用CATransaction後
- 5. 在Ajax調用上重複數據
- 6. Docusign webhook回調TimeZoneOffset
- 7. 調用在NG-重複
- 8. 使用Charles調試運行在Digital Ocean Droplet上的webhook
- 9. 調用View.invalidate上重複的計時器
- 10. dbo.TempGetStateItemExclusive3重複調用
- 11. 重複調用包
- 12. async.waterfall重複調用
- 13. 在Telegram BOT中恢復默認Webhook
- 14. 重複調用使用React.js
- 15. 調用使用NG-重複
- 16. 在多個Web服務調用上重複使用SessionID
- 17. WPF:在ViewModel上重複使用略有不同的調用?
- 18. Jenkins民意調查vs webhook
- 19. 如何調試webhook POST?
- 20. FullContact Webhook回調失敗
- 21. 從cherrypy webhook類調用變量
- 22. Shopify驗證Scala中的webhook調用
- 23. JIRA觸發Webhook不調用構建
- 24. 在重複項目上重複更新
- 25. MACOSX - 在ISyncSessionDriver上調用-finishSyncing時,該應用會對代理重複調用
- 26. 如何重複調用NSThread?
- 27. Node.js流repeat.read重複調用
- 28. 與Laravel的Webhook - 接收重複消息的點擊
- 29. LineBackgroundSpan drawBackground()重複調用
- 30. 重複調用glVertexPointer和glDraw
所以你是如何避免這種情況的......我是如何區分這兩者的......你可以分享你的請求的示例代碼。謝謝 – ARK