gpt4 book ai didi

javascript - 聊天准备就绪后回调

转载 作者:行者123 更新时间:2023-11-30 13:47:16 25 4
gpt4 key购买 nike

我正在使用 Microsoft Bot Framework 构建 ChatBot 服务,通过 Azure 作为服务,以及用于键值对的 QnA Maker。

在我们的实现中,我们使用 Azure 将所有内容完全托管在云中,因此,我们无权访问该框架的任何代码隐藏。这一切都是通过网页在 JS 中完成的。没有我们可以从后端推送的“卡片”或特殊“接口(interface)”。因此,我不得不实现一些“hack”,因为我已经实现了自己的 JS 功能,当页面加载时,它代表用户发送一条消息以触发 QnA Maker 响应.

我遇到的问题是,即使 DOM 可能准备就绪,ChatBot 实现和后端服务可能还没有准备好!它可能仍处于“正在连接...”或加载状态,因此,当我的 JS 尝试发送消息时,它根本不会触发, 因为发送消息的按钮在服务启动之前被禁用准备好 。这部分全部由bot框架控制。因此,在某些实例化中(通常是当天的第一个实例化或一段时间后没有使用它的第一个实例化),消息“嗨!我有一个问题......”保留在“用户聊天栏”中并且永远不会火灾。

这是我的问题:有没有办法让机器人框架在准备好接收输入后执行回调?如果是这样,我会将回调放在 JS 实现中的什么位置? 或者,我如何才能在触发发送事件之前“等到按钮启用”?

如果不清楚或者您需要更多信息,请告诉我。

更新

经验证,当聊天机器人连接到服务时,该按钮甚至未被禁用,因此即使该选项也不可用。回调似乎是实现此目标的唯一可能方法?

更新 --> 解决方案!如果有人想知道如何执行此操作,这里有一个工作示例向您展示了具体操作方法。这是从 BotFramework 的不同 GitHub 说明页面合并而来的,Steven Kanberg 在下面的评论中提供了该页面。谢谢!

//This is how you build your store, and load the web chat... StyleOptions is a constant that is up to you to create.

const token = 'ENTER YOUR SECRET HERE';

const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
const event = new Event('webchatreadyactivity');
event.data = action.payload.activity;
window.dispatchEvent(event);

// When we receive DIRECT_LINE/CONNECT_FULFILLED action, we will send an event activity using WEB_CHAT/SEND_EVENT
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'webchat/join',
value: { language: window.navigator.language }
}
});
}
return next(action);
});

window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ token }),
store,
styleOptions
}, document.getElementById("ENTER CHAT ELEMENT ID HERE"));

//THEN, simply hook onto the event like this, to send your initial message...
//This event will fire only ONCE, and only once the chat is READY.
window.addEventListener('webchatreadyactivity', ({ data }) => {
//this is yours to build as well...
sendWelcomeMessage();
});

最佳答案

BotFramework-WebChat repo 有各种展示不同功能的示例。例如,this sample展示了如何仅在机器人连接后才触发事件。通过这种方式,通过 styleOptions,您可以最初关闭 sendBox,直到机器人连接。

希望得到帮助!

关于javascript - 聊天准备就绪后回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59054753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com