【问题标题】:Is it possible to open widgets.getsitecontrol.com/ javascript from azure bot v4?是否可以从 azure bot v4 打开 widgets.getsitecontrol.com/javascript?
【发布时间】:2019-04-18 02:59:23
【问题描述】:

我想打开我在我的网站上实现的 widgets.getsitecontrol.com/javascript 页面。每当我在我的机器人中键入“帮助”时,小部件应该打开。是否可以打开它?谢谢。我正在使用节点 js 版本。如果可能,请提供解决此问题的方法。

【问题讨论】:

    标签: node.js azure widget botframework


    【解决方案1】:

    我不确定您的小部件的具体功能,但当用户向机器人发送“帮助”消息时,您可以向 WebChat 发送反向通道事件以触发打开小部件。看看下面的代码sn-ps。

    机器人代码 - NodeJs

    当机器人收到用户的“帮助”消息时,机器人可以通过发送类型设置为“事件”的活动来发送事件。我们还可以给传出活动一个名称属性,以便我们可以向 WebChat 发送多种类型的事件。在这种情况下,我们将外出活动命名为“helpEvent”。

    async onTurn(turnContext) {
        if(turnContext.activity.type === ActivityTypes.Message) {
            if (turnContext.activity.text.toLowerCase() === 'help') {
                // Send Back Channel Help Event
                await turnContext.sendActivity({ type: 'event', name: 'helpEvent'});
            }
        ...
        }
    }
    
    

    WebChat 自定义中间件

    在 WebChat 中,我们将创建一个自定义中间件来检查传入的活动。当我们遇到具有我们识别的名称和类型的活动时,在网页上触发您的事件。在下面的示例中,我只是提醒用户他们寻求帮助,但这里是您启动小部件的地方。

    const store = window.WebChat.createStore(
        {},
        ({ dispatch }) => next => action => {
            if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
              const { name, type } = action.payload.activity;
    
              if (type === 'event' && name === 'helpEvent') {
                // Activate Widget 
                alert("You asked for help.");
              }
            }
            return next(action);
        }
    );
    
    window.WebChat.renderWebChat({
        directLine: window.WebChat.createDirectLine({ token }),
        store,
    }, document.getElementById('webchat'));
    

    有关反向通道事件和在 WebChat 中创建自定义中间件的更多详细信息,请在 WebChat 存储库中查看 this sample

    希望这会有所帮助!

    【讨论】:

    • 谢谢@tdurnford。我有这个脚本的问题。我有我的机器人商店历史记录,所以现在每次我刷新或转到另一个页面时。它进入 if (type === 'event' && name === 'helpEvent') { } 并执行操作。除非有人再次输入帮助,否则我如何防止它进入那里。谢谢。
    • 您能否详细说明存储对话历史记录的含义?只有当帮助事件发送到网络聊天时才应该执行。
    • chatbot.connectionStatus$.subscribe(function (status) { sessionStorage.setItem('conversationId', chatbot.conversationId); });
    • 此脚本存储 ConversationId,因此当您刷新页面时,历史对话将恢复,但如果我输入“帮助”然后刷新页面。它总是会进入 if (type === 'event' && name === 'helpEvent') { } 并执行操作,但我不希望那样。我该如何预防?我只是希望它在用户输入帮助时发生。
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多