【问题标题】:Passing variables from webchat client to bot framework将变量从网络聊天客户端传递到机器人框架
【发布时间】:2020-11-13 13:01:52
【问题描述】:

我需要将一个 ID 从网络聊天客户端传递给机器人。我做了我的研究,发现stackoverflow post @justin-harris 提到了以下代码

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)
    }
})

这在某种意义上是有效的,我可以在我的机器人中接收 ID,但是每当我作为用户从我的网络聊天客户端发送消息时,它会发送两次(第一条消息失败,第二条消息成功)。我不确定它为什么这样做。如果有人对这个问题有所了解,我将不胜感激。

【问题讨论】:

    标签: botframework direct-line-botframework web-chat


    【解决方案1】:

    没关系,我是通过我们可以在商店初始化期间传递的中间件解决的。这是任何未来灵魂的解决方案:

    const store = useMemo(
    () =>
      createStore({}, ({ dispatch }) => (next) => (action) => {
        if (action.type === "DIRECT_LINE/POST_ACTIVITY") {
          action = simpleUpdateIn(
            action,
            ["payload", "activity", "channelData", "yourVariableHere"],
            () => "Your data here"
          );
        }
        return next(action);
      }),
    []
    );
    

    我正在使用一个名为simple-update-in 的包来修改对象。你应该可以通过action.payload.activity.channelData在bot端访问它

    【讨论】:

    • 更好的选择是使用“WEB_CHAT/SEND_ACTIVITY”(或其他选项之一:SEND_POSTBACK、SEND_MESSAGE_BACK 或 SEND_EVENT)。正如 sample 中所指出的那样,它展示了对活动的“捎带”:这只是一个概念证明,因此不应在生产中使用并且缺乏安全考虑。
    • @StevenKanberg 感谢您的回复。那么在安全考虑方面使用 WEBCHAT/SEND_ACTIVITY 是否更安全?我没有传递任何敏感信息。只是一个在 URL 中可见的普通 ID。
    • 在安全性方面没有区别。在一个实例 (POST_ACTIVITY) 中,您正在编辑一个已经存在的活动(例如,在网络聊天的发送框中输入的“你好”)。在另一个实例(SEND_ACTIVITY)中,您正在创建一个新活动(例如,用户单击托管网页上的“获取位置”按钮,该按钮会在网络聊天中生成“发送活动”功能)。无论如何,所有活动都由 Direct Line 加密,网络聊天在后台使用。
    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多