首页 > 解决方案 > 将价值令牌和用户电子邮件从直线网站传递给机器人以对其进行身份验证

问题描述

我从网站频道(直线)将以下值传递给我的机器人。我如何在机器人中接收这些值?你能解释一下吗?

 <script>
  window.WebChat.renderWebChat({
      directLine: window.WebChat.createDirectLine({ token: '@Model.Token' }),
        userID: '@Model.UserId'
  }, document.getElementById('webchat'));
</script>

谢谢, 塞尔瓦

标签: botframeworkdirect-line-botframework

解决方案


如果您想获取这些值中的任何一个(或任何其他值),那么您应该通过channelData. 您可以通过网络聊天以几种不同的方式执行此操作store

1) DIRECT_LINE/POST_ACTIVITY - 在本例中,如果发布的活动还包括文本“发送用户详细信息”(即按下的卡片按钮也向用户显示文本),那么userIduserDetails将被附加并作为channelData数据发送点。在这种情况下,机器人只接收消息(或 postBack 等)活动。(此处的示例参考。)

<script src="https://unpkg.com/simple-update-in/dist/simple-update-in.production.min.js"></script>

const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
  if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
    if(action.payload.activity && action.payload.activity.text) {
      let text = action.payload.activity.text.toLowerCase();
      if(text === 'send user details') {
        const userId = 'xyz789';
        const userDetails = { 'name': 'Bob', 'age': 35, 'features': { 'eyes': 'brown', 'hair': 'blonde' }};
        action = window.simpleUpdateIn(
          action,
          ['payload', 'activity', 'channelData'],
          () => ({
            'userId': userId,
            'userDetails': userDetails
          })
        )
      } 
    }
  }

  return next( action );
} );

** 2) WEB_CHAT/SEND_EVENT** - 在此示例中,同样,如果发布的活动还包括文本“发送用户详细信息”,则生成并同时发送单独的事件活动,然后包括userIduserDetails作为channelData数据点. 在这种情况下,bot 接收到两个活动:一个消息(或 postBack 等)活动和一个事件活动。(此处的示例参考。)

const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
  if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
    if(action.payload.activity && action.payload.activity.text) {
      let text = action.payload.activity.text.toLowerCase();
      if(text === 'send user details') {
        const userId = 'xyz789';
        const userDetails = { 'name': 'Bob', 'age': 35, 'features': { 'eyes': 'brown', 'hair': 'blonde' }};
        dispatch( {
          type: 'WEB_CHAT/SEND_EVENT',
          payload: {
            name: 'LOGIN_SUCCESS',
            value: {
              userId,
              userDetails
            }
          }
        } )
      }
    }
  }

  return next( action );
} );

在这两种情况下,为简单起见,活动仅在传入活动包含文本“发送用户数据”时发布。另外,请注意,我演示了两种使用 store 的方法:间接调用和直接调用dispatch().

希望有帮助!


推荐阅读