【问题标题】:Pass Custom Parameters from webchat control to bot framework将自定义参数从网络聊天控件传递到机器人框架
【发布时间】:2019-06-12 22:04:01
【问题描述】:

所以,我目前正在使用这个:

<!DOCTYPE html>
<html>
  <body>
    <div id="webchat"></div>
    <script src="https://cdn.botframework.com/botframework-webchat/preview/botchat.js"></script>
    <script>
      window.WebChat.renderWebChat({
        directLine: window.WebChat.createDirectLine({ secret: 'YOUR_BOT_SECRET_FROM_AZURE_PORTAL' })
      }, document.getElementById('webchat'));
    </script>
  </body>
</html>

它工作正常,但是我有多个用于不同客户端应用程序的 QnA 知识库。所以我想在 OnTurnAsync 方法中传递“applicationname”的自定义参数来决定我的 BOT 框架(V4)中的 QNA KB。

我试过了

var d1 = window.WebChat.createDirectLine({ token })
window.WebChat.renderWebChat({
        directLine: d1,
         styleSet,
postActivity: activity => {
     var newActivity = Object.assign({}, activity, {channelData: { "userparam": "test" } });
     return dl.postActivity(newActivity);
    }

}, document.getElementById('webchat'));
})();

但机器人中的 Context.Activity.ChannelData 返回 Null

也试过了

var d1 = window.WebChat.createDirectLine({ token })
window.WebChat.renderWebChat({
        directLine: d1,
        user: { id: 'userid', userparam:'test'},
            styleSet

}, document.getElementById('webchat'));
})();

仍然 Context.Activity.From.Properties["userparam"] 返回 Null

【问题讨论】:

    标签: azure bots azure-bot-service direct-line-botframework


    【解决方案1】:

    来自沉默的一面

    var d1 = window.WebChat.createDirectLine({ token })
    window.WebChat.renderWebChat({
            directLine: Object.assign({}, d1, {
         postActivity: activity => {
         var newActivity = Object.assign({}, activity, { channelData: { "param1": "test" } });
         return d1.postActivity(newActivity);
        }
      }),
                styleSet,
                botAvatarInitials: 'CAB',
                userAvatarInitials: 'You'
    
    }, document.getElementById('webchat'));
    })();
    

    来自 BOt 框架

    var channelObj = turnContext.Activity.ChannelData.ToString();
    var channeldata = Newtonsoft.Json.Linq.JObject.Parse(channelObj);
    var customdata = channeldata["param1"].ToString();
    

    【讨论】:

    • 这确实很有帮助,但它会覆盖其他 channelData。我知道您只是在编辑问题中最初所做的内容,但这可能会给其他人带来问题。
    【解决方案2】:

    提供的其他答案很有帮助,但它会覆盖 channelData。对于其他找到此答案并只想发送自定义参数的人,这将有所帮助:

    const originalDirectline = props.webchat.createDirectLine({
        token,
    })
    
    const directLine = Object.assign({}, originalDirectline, {
        postActivity: (activity: any) => {
            const newActivity = Object.assign({}, activity)
            newActivity.customParam = "custom value"
            return originalDirectline.postActivity(newActivity)
        }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多