Я успешно установил веб-сайт facebook-messenger. До вчерашнего дня я мог отправлять и получать сообщения. Но сегодня, когда я отправляю одно сообщение от пользователя, я получаю несколько вызовов на сервере POST API сервера webhook. Они никогда не останавливаются.
Получение повторных вызовов на веб-хостинге facebook-messenger
Ответ 1
Выяснил это. Я отправлял ответ на каждое сообщение, полученное из facebook. Поэтому я также ответил на сообщения ACK. В свою очередь появился еще один ACK. Вот почему это привело к бесконечному циклу.
В этой странице мы можем найти различные структуры объектов для полученных сообщений:
текст
{
"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!"
}
}
]
}
]
}
Message-Delivered callback
{
"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
, это существует только в отправленном пользователем сообщении. Обратный вызов или обратная связь не содержат эту часть.
Проверьте это, прежде чем отвечать. Если он существует, ответьте, иначе нет.
Ответ 2
У всех этих вызовов есть один и тот же контент или они разные? Вы можете записать точную строку сообщения, которую посылает facebook, и посмотреть, что они включают.
Например, есть обратный вызов доставки сообщения, который информирует вас о том, что пользователь получил сообщение. JSON выглядит так:
{'delivery': {'mids': ['mid.146174459xxx:30a42600a95exxxxx'], 'seq': 429, 'watermark': 146174459xxx}, 'recipient': {'id': xxxxxxxx}, 'sender': {'id': xxxxxx}}
Изменить: Также может быть ваш не, подтверждающий входящие вызовы с http-статусом 200. Если facebook получает сообщение об ошибке из вашего веб-хостинга, сообщение будет отправлено несколько раз.
Ответ 3
Моя проблема была похожей, но я получал сообщения с несколькими сообщениями. После нескольких часов разочарования я понял, что Message Delivered callback вызывается каждый раз, когда сообщение доставляется на КАЖДОЕ УСТРОЙСТВО. Итак, если вы вошли в веб-и мобильное приложение, обратный вызов будет вызываться дважды.
Ответ 4
При работе с мессенджером facebook вам нужно учитывать две вещи после отправки сообщения:
Поскольку вы работаете с webhooks, это будет срабатывать каждый раз, когда происходит одно из событий (получать сообщение, доставлять отправленное сообщение, пользователь читает сообщение). Поэтому, если вы активируете, например, 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;
}
Надеюсь, что это поможет!