首页 > 解决方案 > 在对话更新事件 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);
                }
            });

        }
    }    
}});

标签: node.jsbotframework

解决方案


对于直连/网络聊天,请确保在前端设置您的机器人连接,如下所示:

  botConnection = new BotChat.DirectLine({
    secret: "<secret>",
    webSocket:true,
    sendTyping: true
  });

然后要实际发送一个 sendTyping 事件,您只需在session.sendTyping()收到新消息时调用,或者如果您想更具体,您可以在您知道需要一段时间之前调用该方法,例如 API 调用。

sendTyping 事件仅适用于打开的 webSocket,并非所有通道都支持。但是,当使用上述配置时,它将在网络聊天中工作。


推荐阅读