Выполнение DialogFlow для Facebook Messenger Webview

Кнопка для открытия веб-просмотра в 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"
                        }
                    ]
                }
            }
        }}
    }]}



Ответы (2)


Дамы и господа, я рад сообщить, проблема решена, ну, по крайней мере, показывает веб-просмотр, теперь я собираюсь попробовать показать свое на виду, я пытаюсь показать случайный веб-сайт (https://www.messenger.com/) и снова изменив custom payload, который будет отправлен в DialogFlow из моего экземпляра Django:

 {
    "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": "tall"
                        }
                    ]
                }
            }
        }}
    }]}

По сути, разница заключается в изменении webview_height_ratio с full на tall или compact, последние два работают, но когда я установил full, просто откройте браузер, затем: - Попробуйте с моим пользовательским представлением для веб-просмотра - Сделайте всю эту работу на рабочий стол буду на связи !!! Я не могу сказать, насколько я счастлив, звучит банально, но мне все равно, я застрял на этом около 36 часов.

person Nerio Rincon    schedule 17.08.2019

Месяц назад я заставил расширение работать с Dialogflow, но отказался от этой идеи из-за последнего обновления мессенджера, которое больше не поддерживает beginShareFlow: https://developers.facebook.com/docs/messenger-platform/webview/share/v4.0

Начиная с 15 августа 2019 г., обновленные версии приложения Messenger больше не будут поддерживать Begin share flow в SDK расширения Messenger. В качестве обходного пути разработчики могут предоставить способ скопировать ссылку в веб-представлении, которую люди могут использовать для обмена в беседах Messenger. См. Объявление от 10 июня 2019 г.

У меня было несколько отличий от вашего json:

button.put("webview_height_ratio", "full"); // <compact|tall|full>",
button.put("messenger_extensions", true);
button.put("webview_share_button", "hide");

С уважением,

person Clément Beaujoin    schedule 19.08.2019