首页 > 解决方案 > 我们可以将哪个参数用于 window.WebChat.render WebChat 以便提供自定义 URL 参数?使用 Azure 机器人框架 Nodejs

问题描述

将自定义参数从网络聊天控件传递到机器人框架,哪个与机器人 URL 相关,我们要获取/渲染?即更详细的示例场景:

window.WebChat.renderWebChat({
        directLine: window.WebChat.createDirectLine({
            token: token,
            ....
            ...
            customUrl : "mybot.net?q1=abc&&q2=xyz
        }),
        styleSet: styleSet,
        store: store
    }, document.getElementById('webchat'));
    document.querySelector('#webchat > *').focus();

是否可以将不同的 url 参数与令牌一起传递,即机器人根据参数呈现特定功能,即用于 q2=xyz 运动相关问题卡。

标签: javascriptbotframeworkweb-chat

解决方案


不,在创建 Direct Line 对象时无法发送特定参数。Direct Line 参数是该服务专有的 - 无法检索您发送的任何自定义值。

但是,在网络聊天客户端/用户和机器人之间发送数据的公认方法是使用网络聊天storedispatch()功能。store广播各种动作,例如DIRECT_LINE/CONNECT_FULFILLEDDIRECT_LINE/INCOMING_ACTIVITY(以及其他),允许您在触发时执行功能。

在您的情况下(不知道完整的详细信息),您可能希望在 Web 聊天加载后将值作为事件发送。代码看起来像这样:

<script>
  (async function () {
    const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
      if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
        console.log('Event dispatched');
        dispatch( {
          type: 'WEB_CHAT/SEND_EVENT',
          payload: {
            name: 'CUSTOM_PARAMETERS',
            value: { q1: 'abc', q2: 'xyz' }
          }
        } )
      }

      return next(action);
    });

    [...]

    window.WebChat.renderWebChat(
       directLine: window.WebChat.createDirectLine({ token }),
      store: store
      />,
    document.getElementById( 'webchat' );
    )
  })
</script>

在您的机器人中,您将利用onEvent()活动处理程序来捕获已调度的事件:

this.onEvent = async (context, next) => {
  console.log('Event activity detected');

  const { activity } = context;

  if (activity && activity.name === 'CUSTOM_PARAMETERS') {
    await context.sendActivity('Custom parameters received!');
  }

  await next();
};

您可以参考各种示例,详细了解如何实现不同的功能,包括如何在网络聊天中发送、接收和处理特定数据点。

希望有帮助!


推荐阅读