Я не разработчик php, но реализовал ту же логику в javascript, node.js. Я хотел бы подробно рассказать о шагах, а также о коде javascript и надеюсь, что вы сможете понять, что вы можете сделать с ним, чтобы сделать свою жизнь лучше: P Как вы сказали, вы получаете user_ref из вызова API. Это правильно. Прочитайте документацию еще раз, они упомянули, что user_ref будет получен, когда пользователь проверит плагин флажка. Этот user_ref устанавливается вами, и каждый раз, когда страница загружается, этот user_ref должен быть уникальным, тогда будет отображаться только плагин флажка, если он не уникален, плагин не будет отображать. А вот и полная логика. Вы создаете user_ref, когда пользователь устанавливает флажок, вы получаете этот unqiue user_ref, используя этот user_ref, вы отправляете сообщение пользователю (вы можете отправлять сообщение пользователю, используя user_ref, столько раз, сколько хотите, но я предлагаю вам использовать senderId) . Когда вы отправляете сообщение пользователю с помощью user_ref, API-интерфейс webhook даст вам ответ, содержащий senderId пользователя, который на самом деле является psid, который мы обычно используем в нашем приложении. Это то, что вам нужно сохранить в вашей БД. Теперь я помещу свой код здесь, как я это сделал. Получение user_ref и отправка сообщения пользователю: Моя полезная нагрузка:
function sendTextMessageRef(user_ref, messageText,md) {
var messageData = {
recipient: {
user_ref: user_ref
},
message: {
text: messageText,
metadata: md
}
};
callSendAPI(messageData);
}
function callSendAPI(messageData) {
request({
uri: 'https://graph.facebook.com/v2.6/me/messages',
qs: { access_token: PAGE_ACCESS_TOKEN },
method: 'POST',
json: messageData
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
var recipientId = body.recipient_id;
var messageId = body.message_id;
if (messageId) {
console.log("Successfully sent message with id %s to recipient %s",
messageId, recipientId);
} else {
console.log("Successfully called Send API for recipient %s",
recipientId);
}
} else {
console.error("Failed calling Send API", response.statusCode, response.statusMessage, body.error);
}
});
}
Теперь, после отправки сообщения, я получаю ответ в этом формате json, который будет включать идентификатор отправителя пользователя:
{"sender":{"id":"xxxxxxx"},"recipient":{"id":"xxxxxWhat you are looking for is this*******"},"timestamp":1504698781373,"message":{"is_echo":true,"app_id":xxxxxxxxxxxxxxx,"metadata":"INVITATION__REPLY__qwe__2017-09-05T02xo20__xxxxxxxx__063__yes","mid":"mid.$cAAGcxxxxxxxxVxuAtJ","seq":120162,"text":":)"}}
В приведенных выше данных JSON получатель.id — это то, что вы ищете. Здесь Чтобы вы поняли, что я сделал в своем чат-боте, сначала пользователь выбирает плагин флажка, я получаю вызов на своем сервере, если проверьте, содержит ли он user_ref, если да, то я отправляю текстовое сообщение пользователю с пользовательскими метаданными, используя user_ref. Когда пользователь получает сообщение, веб-хук отправляет мне данные json в указанном выше формате. Чтобы определить, для какого user_ref я получил этот ответ, я устанавливаю пользовательские метаданные, которые представляют собой комбинацию некоторой строки + user_ref. Используя это, я идентифицирую sender.id пользователя, для которого я ранее отправил сообщение, используя user_ref. sender.id — это мой идентификатор страницы, а получатель.id — идентификатор пользователя, который вы пытаетесь получить и с помощью которого мы обычно отправляем сообщение пользователю, также известный как psid.
Надеюсь, это поможет, если у вас все еще возникают проблемы с использованием вышеупомянутого решения, обновите информацию об этом :)
person
Gaurav
schedule
06.09.2017