【问题标题】:Send data from bot to client in DirectLine WebChat - NodeJS Botframework在 DirectLine WebChat 中将数据从机器人发送到客户端 - NodeJS Botframework
【发布时间】:2018-08-20 09:49:32
【问题描述】:

我使用以下代码将机器人添加到我们内部网上的 HTML 页面:

 <link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" />
    <style>    
          #bot{
               height: 600px;
              }
</style>
    <div>
        <div id="bot" />
    </div>
    <script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script>
    <script>
        var user = {
            id: 'user-id',
            name: 'user name'
        };
        var botConnection = new BotChat.DirectLine({
            token: '[token]',
            user: user
        });
        BotChat.App({
            user: user,
            botConnection: botConnection,
            bot: { id: 'test', name: 'test' }

        }, document.getElementById("bot"));
        botConnection
            .postActivity({
                from: user,
                name: 'WelcomeDialog',
                type: 'event',
                value: ''
            })
            .subscribe(function (id) {
                console.log('"trigger requestWelcomeDialog" sent');
            });
    </script>

现在,我需要将数据发送回此客户端,以在该 HTML 页面上执行,因为该页面存在于我们的 Intranet(内部服务器)的上下文中,因此我希望从 LUIS 返回意图并定向到特定的对话框,然后将此对话框中所需的实体值发送到客户端以在那里执行,然后将结果发送回服务器,以便我可以向用户显示格式化的消息。

所以基本上,我需要在客户端(添加到我的 Intranet)和机器人本身(托管在 azure 中的 nodejs 应用程序)之间进行双向通信

更新:

我在我的机器人中实现了反向通道,所以现在代码如下所示:

  jQuery(function () {
            //get user name from the system
            var userid = _spPageContextInfo.userId;
            var requestUri = _spPageContextInfo.webAbsoluteUrl + "/_api/web/getuserbyid(" + userid + ")";
            var requestHeaders = { "accept": "application/json;odata=verbose" };
            $.ajax({
                url: requestUri,
                contentType: "application/json;odata=verbose",
                headers: requestHeaders,
                success: onSuccess,
                error: onError
        });

        function onSuccess(data, request) {
            var loginName = data.d.Title;
            var user = {
                id: userid,
                name: loginName
            };
            var botConnection = new BotChat.DirectLine({
                token: '[token]',
                user: user
            });



            let FindPerson = function (personName) {
                let msg = `You asked for ${personName}`
                botConnection
                    .postActivity({ type: "event", value: msg, from: { id: "me" }, name: "FindPersonResultFound" })
                    .subscribe(id => console.log("success"));
            }

            BotChat.App({
                user: user,
                botConnection: botConnection,
                bot: { id: 'TestBot', name: 'test bot' }

            }, document.getElementById("bot"));
            botConnection
                .postActivity({
                    from: user,
                    name: 'WelcomeDialog',
                    type: 'event',
                    value: ''
                })
                .subscribe(function (id) {
                    console.log('"trigger requestWelcomeDialog" sent');
                });
            botConnection.activity$
                .filter(activity => activity.type === "event" && activity.name === "FindPerson")
                .subscribe(activity => FindPerson(activity.value))
        }

        function onError(error) {
            alert("error");
        }
    })

我的服务器端代码如下所示:

bot.on('event', function (message) {
    if (message.name == 'WelcomeDialog') {
        bot.beginDialog(message.address, message.name);
    }
    if (message.name === "FindPersonResultFound") {
        bot.beginDialog(message.address, message.name, message.value)
    }
});

但是,如果我发送与任何对话框相关的消息,它会重复出现,就好像发件人是我一样:

【问题讨论】:

标签: node.js botframework


【解决方案1】:

根据您的输出,我假设您的机器人应用程序将包含一个默认的根对话框 /,它将返回您输入的任何内容。

如果是这样,您可以尝试在您的机器人事件注册函数中将beginDialog 更改为replaceDialog,以清除之前的对话框堆栈。

此外,您可以提供更多关于您的机器人应用程序的代码,以便我们进行更深入的研究。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2022-01-12
    • 2015-08-02
    • 2015-03-05
    • 1970-01-01
    相关资源
    最近更新 更多