有没有办法从 azure 中获取哪个网站用于聊天机器人的直接线路连接

问题描述

在我的聊天机器人中,我有一个直接的线路连接。最近,我被要求为另一个项目创建一个新的直线站点。有没有办法在我的 c# 代码获取直线站点名称?我想让代码根据直线站点名称运行不同的代码路径。

在我的 azure 聊天机器人资源组中,我有直接线路连接,并且有两个站点。聊天机器人使用直线连接连接到 2 个不同的网站

站点 1. 内部用户 站点 2. 外部用户

我想查看从哪个站点调用机器人

解决方法

这可能不是最优雅的解决方案,但您可以为网络聊天加入事件设置一个事件处理程序,以将值从您的源页面传递给机器人。在网络上部署机器人的代码中,我有以下部分:

              if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
                  dispatch.dispatch({
                    type: 'WEB_CHAT/SEND_EVENT',payload: {
                      name: 'webchat/join',value: {
                        browserLanguage: navigator.languages[0],page: window.location.href,language: getCookie("LANGUAGE"),country: getCookie("COUNTRYNAME"),uid: getCookie("uid")
                      }
                    }
                  });
                }

您可以将任何值放入您需要的有效负载中,在您的情况下可能是站点名称。然后创建或添加到您的 onEvent 处理程序中,例如

if (context.activity.name && context.activity.name === 'webchat/join') {
    const userData = await this.userDialogStateAccessor.get(context,{});
    userData.siteContext = context.activity.value;
    
    // Additional code if needed

    await this.userState.saveChanges(context);

如果您稍后只需要引用这些值,您的事件处理程序可以将它们保存到用户状态并继续。您还可以为 App Insights 或您正在使用的任何日志记录应用程序创建 customEvent,如果您想对此进行报告,这可能是必需的。我还根据我们是否从发起站点对客户进行了身份验证,将我的用于有针对性的欢迎消息。该消息是从 onEvent 内部发送的,但我也有来自 onMembersAdded 处理程序的“标准”欢迎消息(其条件是仅为非直达线通道调用)。

一旦您在用户状态中拥有该值,您就可以使用它来驱动不同的机器人行为,例如根据站点调用不同的对话框,或在对话框中具有可变的行为。