Настройка веб-виджета zendesk на событие нажатия - PullRequest
0 голосов
/ 23 октября 2018

Я использую веб-виджет Zendesk в решении ASP.NET MVC для отображения контактной формы и справочного центра.Поскольку в справочном центре отображаются статьи с ограниченным доступом, нам необходимо отправить токен аутентификации JWT ДО , загрузив сценарии виджетов.Приведенный ниже код выглядит как _layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">   
    <script>
     window.zESettings = {
                    authenticate: {
                        jwt: 'sometoken'
                    }

                };
    </script>
    <script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=xxxxxxxxxx"></script>   
</head>
<body>

</body>

Приведенный выше код отображает виджет справки zendesk на каждой странице и работает, как и ожидалось.

Однако это не оптимизированное решение.На каждой странице загрузки вышеуказанный код должен будет создать токен, авторизоваться и скачать скрипт.На самом деле 90% времени наши пользователи даже не используют виджет справки.
Поэтому, чтобы избежать этого, у меня есть button где-то на странице, и когда пользователь нажимает кнопку, я хотел бы создать токен, авторизоваться,скачать скрипт виджета и активировать виджет.Согласно документации здесь я могу программно показывать, скрывать и активировать виджет.

Я использую ASP.NET MVC с jQuery.Ниже приведен мой код, но он не работает

var zd = (function ($) {
    var module = {};   

    module.configure = function () {       
        $("#myHelpWidgetButton").click(function () {
            try {
                $.ajax({
                    type: "POST",
                    url: "/zendesk/token" // get token from server
                })
                .done(function (token, textStatus, jqXHR) {
                    window.zESettings = {
                        authenticate: {
                            jwt: token
                        }                        
                    };

                    // download script only after zEsettings are set
                    $.getScript("https://static.zdassets.com/ekr/snippet.js?key=xxxxxxxx",
                            function (data, textStatus, jqxhr) {
                                zE(function () {
                                    zE.hide(); // never gets fired ??
                                });

                                // get currently logged in user info and set to contact form
                                // and then activate
                                $.get("/zendesk/userinfo")
                                     .done(function (userinfo) {
                                         zE(function () {
                                             zE.identify(userinfo); // never gets fired??
                                             zE.activate(); // never gets fired??
                                         });
                                     })
                            })
                })
            }
            catch (ex) {
                logger.log({ message: "exception occurred", exception: ex });
            }
        })
    }

    return module;

})(jQuery);

, а затем в _layout.cshtml вызовите zd.configure (), чтобы прикрепить событие клика

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">   
        <script>     
        </script>
        <script>
          zd.configure();
        </script>   
    </head>
    <body>    
    </body>
</html>

Ajax-вызовы работают, но zE.hide(), zE.identify() и zE.activate() никогда не будут уволены.

Я хотел бы знать, возможно ли это вообще?Поскольку $.getscript() обратный вызов запускается, когда скрипт загружен, но не обязательно выполняется, поэтому zE может быть недоступен

...