node.js - BotFramework-DirectLine JS - 初始消息丢失
问题描述
我有一个使用 MS BotFramework 构建的 Bot,托管在 Azure 上。Bot 旨在通过欢迎消息启动 convo。当我通过模拟器或在 Azure 测试网络聊天中测试机器人时,机器人将按预期通过欢迎消息启动对话。
但是,在我使用 BotFramework-DirectLineJS 的聊天客户端中,直到我发送一条消息,机器人才会响应欢迎消息(以及对用户刚刚发送的消息的响应)。
我的期望是,当我创建 DirectLine 的一个新实例并订阅它的活动时,这个欢迎消息会通过。然而,这似乎并没有发生。
我是否缺少使此功能正常工作的东西?
解决方案
鉴于这在“Webchat 测试”中对您有用,我假设您的 if 条件不是问题,但请检查它是否是if (member.id === context.activity.recipient.id) {
(而不是!==
)。模板上的默认设置是!==
,但在模拟器之外对我不起作用。它===
适用于模拟器和其他部署的渠道。
但是,根据您的用例,您可能希望为 Directline 会话提供完全不同的欢迎消息。这就是我所做的。在我的onMembersAdded
处理程序中,我实际上是通过const { channelId, membersAdded } = context.activity;
. channelId != 'directline'
然后我在继续之前检查一下。
相反,我使用onEvent
处理程序查找并响应来自 Directline 的“网络聊天/加入”事件。这样一来,欢迎的回应就毫不含糊了。对于一个非常简单的示例,它看起来像这样:
this.onEvent(async (context, next) => {
if (context.activity.name && context.activity.name === 'webchat/join') {
await context.sendActivity('Welcome to the Directline channel bot!');
}
await this.userState.saveChanges(context);
await this.conversationState.saveChanges(context);
})
如果您使用这种方法,您仍然希望在onMembersAdded
非直接频道欢迎消息中包含一些内容。
推荐阅读
- python - 通过 Python 请求发布 JSON 时不返回任何内容或返回错误 500?
- php - 在 Woocommerce 档案页面中添加产品副标题
- exception - 当我通过 IIS Express 运行我的 Asp.net MVC 应用程序时,它工作正常,但是当我将它切换到本地 IIS 时,它给了我这个错误
- php - 在 double 上调用成员函数 first()
- android - 从生产区降级到 Beta - Android
- javascript - 使用“Web Audio API”和“AudioContext”获取带有 JavaScript 的 MP3 文件的持续时间
- oracle - 使用 ora2pg 将 Oracle Db 转换为 PostgreSQL
- ios - 交换方法时找不到选择器
- arm - Arm 组装和字节序中的 MD5 哈希
- c# - 使用角色登录的 ASP.NET C# 未重定向