node.js - 在对话更新事件 Node.js 上发送打字指示器
问题描述
我正在尝试在 conversationUpdate 上发送一个打字指示器,但对我来说session.sendTyping()似乎只在一个对话框中工作。至少我在 Webchat 和 BotEmulator 频道中尝试过,但没有成功。关于如何做到这一点的任何想法?
这是我的尝试:
bot.on('conversationUpdate', async (message) => {
if (message.membersAdded) {
for (let identity of message.membersAdded) {
if (identity.id === message.address.bot.id) {
const replies = getGreetingReplies(message);
cosmosDB.writeOnConvUpdate({ userMessage: message, botMessage: replies[0] }, message.address.conversation.id);
bot.loadSession(message.address, async (err, session) => {
for (let reply of replies) {
//var msg = new builder.Message().address(message.address).text('');
//msg.type = 'Typing';
//bot.send(msg);
await utilities.SendTyping(session, 3000);
bot.send(reply);
}
});
}
}
}});
解决方案
对于直连/网络聊天,请确保在前端设置您的机器人连接,如下所示:
botConnection = new BotChat.DirectLine({
secret: "<secret>",
webSocket:true,
sendTyping: true
});
然后要实际发送一个 sendTyping 事件,您只需在session.sendTyping()
收到新消息时调用,或者如果您想更具体,您可以在您知道需要一段时间之前调用该方法,例如 API 调用。
sendTyping 事件仅适用于打开的 webSocket,并非所有通道都支持。但是,当使用上述配置时,它将在网络聊天中工作。
推荐阅读
- javascript - 将对象追加/添加/取消移动到来自 api 的响应的开头
- elasticsearch - query_string 中的通配符搜索
- sql-server - 根据文件日期获取 SQL Server 中的先前记录
- c++ - 如何从操作“newaccount”中获取 EOS 公钥
- laravel - 如何使用带有 Lighthouse 参数的自定义 Laravel 规则
- c# - 以编程方式从项目资源安装内置字体,C# winforms
- firebase - Firebase 动态链接查询参数始终为空
- javascript - 使用 JavaScript 从表格单元格中提取数据
- mongodb - 无法连接到入口 k8s 后面的 mongo-express
- macos - mach_wait_until() 可以被信号打断吗?