Веб-просмотр средства выбора даты для бота Facebook Messenger - не может вернуть значение поля в поле ввода бота
Я работаю над чат-ботом с Dialogflow & Messenger. Веб-крючок был написан на Python 3.x. У меня проблема с тем, как снова перенести данные из веб-просмотра в окно чата мессенджера, чтобы продолжить разговор с пользователем.
Чат-мессенджер интегрирован с Dialogflow (v2). Я добавил кнопку для выбора даты пользователем. Когда пользователь нажимает кнопку, он перенаправляется на внешний веб-сайт, где я размещаю HTML-страницу для средства выбора даты.
Кнопка полезной нагрузки webhook содержит -> "messenger_extensions": "true
"attachment" : {
"type" : "template",
"payload" : {
"template_type" : "button",
"text":"Click button and choose",
"buttons": [{
"type": "web_url",
"url": "https://datepicker.glitch.me",
"title": "Choose Date",
"webview_height_ratio": "tall",
"messenger_extensions": "true"
}]
}
}
Мой домен HTML успешно занесен в белый список (добавлен домен HTTPS на странице FB -> Настройки -> Платформа Messenger -> домен из белого списка).
Откроется HTML-страница веб-просмотра (для мобильных устройств -> всплывающее окно в качестве расширения чата, для ПК -> открытие веб-просмотра в новом окне браузера). Я могу выбрать даты.
При отправке Javascript получает входные значения в виде предупреждения. Также Facebook Messenger SDK интегрирован с HTML. Это также помогает закрыть веб-просмотр по нажатию кнопки "Отправить".
// Facebook Messener SDK Javascript
(function(d, s, id){
alert('Messenger Extension loaded'); // This alert is coming
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.com/en_US/messenger.Extensions.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'Messenger'));
// Messenger SDK загрузка завершена
window.extAsyncInit = function() {
// the Messenger Extensions JS SDK is done loading
alert('window extAsyncInit') // This alert is coming
MessengerExtensions.getUserID(function success(uids) {
var psid = uids.psid;//This is your page scoped sender_id
alert("Getting PSID") // This alert is NOT COMING
alert("This is the user's psid " + psid); // Alert NOT COMING
}, function error(err) {
alert("Messenger Extension Error: " + err);
});
};
// Это Javascript, основанный на функции SubSubmit
function sendMessage() {
alert($( "#from_field_id" ).val()) // This is coming
alert($( "#to_field_id" ).val()) // This is coming
/// DON't KNOW HOW TO RETURN DATA TO MESSENGER WINDOW
MessengerExtensions.requestCloseBrowser(function success() {
// This works too
}, function error(err) {
});
return $( "#from_field_id" ).val() //Not coming to messenger window
};
У меня есть несколько связанных тем, но, к сожалению, все они связаны с node.js. Но я не смог найти ничего связанного с питоном webhook.
Я прошел тонну документации:
- Руководство
- Тема Stackru: передача данных Datepicker
- Руководство по веб-просмотру
- Тема 2 Stackru: И еще много доступных документов.
Ожидаемое: с закрытием окна веб-просмотра, выбранные пользователем даты должны быть перенесены в окно чата мессенджера, чтобы продолжить разговор. В противном случае данные не могут быть сохранены в базе данных.
Факт: пользователь может выбрать дату. При отправке JS выбирает значения из полей ввода и закрывает окно веб-просмотра. Данные не передаются в окно чата мессенджера.
Что я здесь не так делаю? Пожалуйста помоги.
0 ответов
В настоящее время в dialoglow нет обратного вызова для данных, передаваемых из веб-просмотров мессенджера. Обходной способ решения проблемы - получить доступ к psid пользователя с помощью Messenger SDK, использовать его для идентификации пользователя и затем сохранить данные json, которые вы получаете в sumbit, в своей базе данных.