Кнопка для открытия веб-просмотра в Facebook Messenger продолжает открывать браузер на мобильных устройствах и на компьютерах.
Я создал бота Facebook Messenger, создал тестовую страницу и тестовое приложение, в настоящее время получающие веб-перехватчики из каждого сообщения в DialogFlow, которые правильно реагируют на первое сообщение, в котором я возвращаю карточку DialogFlow с кнопкой, эта кнопка должна открыть веб-просмотр, но продолжает открывать вкладку браузера на мобильных и настольных компьютерах, теперь я знаю, что для открытия веб-просмотра на рабочем столе необходимо внести некоторые изменения в код, но мобильные устройства уже должны работать, и это не тот случай. Я следую этому потоку: https://cloud.google.com/dialogflow/docs/images/fulfillment-flow.svg)
Это ответ веб-перехватчика, отправленный моим экземпляром Django в DialogFlow:
"fulfillmentMessages": [
{
"card": {
"title": "aaa bbb ccc",
"platform": "facebook",
"subtitle": "card text",
"imageUri": "https://ucarecdn.com/6a3aae10-368b-418f-8afd-ed91ef15e4a4/aaaa_bbb_ccc.png",
"buttons": [
{
"type": "web_url",
"text": "Get Recipe",
"postback": "https://assistant.google.com/",
"webview_height_ratio":"compact",
"messenger_extensions": "true"
}
]
}
}],}
Это представление для ответа на кнопку postback
:
@csrf_exempt
def get_recipe(request):
"""
"""
response = render(request, "recipe_item.html")
response['X-Frame-Options'] = 'ALLOW-FROM https://messenger.com/ https://www.facebook.com/ https://l.facebook.com/'
response['Content-Type'] = 'text/html'
return response
И это Messenger Extensions SDK
было установлено в HTML для представления, соответствующего веб-просмотру:
<html>
<head>
<title>Choose your preferences</title>
</head>
<body>
<script>
(function (d, s, id) {
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'));
window.extAsyncInit = function() {
// the Messenger Extensions JS SDK is done loading
MessengerExtensions.getSupportedFeatures(function success(result) {
let features = result.supported_features;
if (features.indexOf("context") != -1) {
MessengerExtensions.getContext('375919546670588',
function success(thread_context) {
// success
document.getElementById("psid").value = thread_context.psid;
// More code to follow
},
function error(err) {
console.log(err);
console.log(err.message);
}
);
}
}, function error(err) {
console.log(err.message);
});
};
</script>
...
</body>
</html>
Конечным результатом должно быть веб-представление, открывающееся при нажатии кнопки Get Recipe
.
РЕДАКТИРОВАТЬ: я просто пытаюсь отправить эту пользовательскую полезную нагрузку в DialogFlow и без веб-просмотра, вместо этого кнопка продолжает открывать браузер.
{
"fulfillmentMessages": [
{
"payload": {
"facebook": {
"attachment": {
"type":"template",
"payload":{
"template_type":"button",
"text":"Try the URL button!",
"buttons":[
{
"type":"web_url",
"url":"https://www.messenger.com/",
"title":"URL Button",
"webview_height_ratio": "full"
}
]
}
}
}}
}]}