如何通过DirectLine对象与机器人通信?代码无返回问题排查
问题分析与修复方案
你的代码仅实现了发送消息的逻辑,没有监听目标机器人返回的回复,所以运行后只会打印消息发送成功的ID(若发送无异常),但看不到机器人的响应。另外还有几个关键细节需要补充:
核心遗漏点
- 未订阅DirectLine的
activity$流,无法接收机器人返回的活动(包括回复消息) - Node环境下缺少进程保持逻辑,脚本发送消息后会直接退出,来不及等待WebSocket返回的回复
修复后的代码
global.XMLHttpRequest = require('xhr2'); global.WebSocket = require('ws'); const { DirectLine } = require('botframework-directlinejs'); // 初始化DirectLine连接 const directLine = new DirectLine({ secret: '*********************************************' }); // 订阅机器人返回的所有活动(关键:接收回复) directLine.activity$.subscribe( activity => { // 过滤出机器人发送的消息,排除自己发送的内容 if (activity.from.id !== 'myUserId' && activity.type === 'message') { console.log('机器人回复:', activity.text); } }, error => console.log('接收活动出错:', error) ); // 发送消息 directLine.postActivity({ from: { id: 'myUserId', name: 'myUserName' }, type: 'message', text: 'What is Blackline?' }).subscribe( id => console.log("消息发送成功,ID:", id), error => console.log("消息发送失败:", error) ); // Node环境下保持进程运行,避免脚本直接退出 setInterval(() => {}, 1000);
关键说明
directLine.activity$是RxJS Observable对象,会推送所有从机器人端过来的活动(包括回复消息、状态更新等),必须订阅它才能获取机器人的回复内容。- 过滤条件
activity.from.id !== 'myUserId'用于排除自己发送的消息,只处理机器人的回复。 - Node环境中添加
setInterval是因为脚本执行完发送逻辑后会立即退出,无法等待WebSocket返回的异步回复,需要通过定时器保持进程存活。
内容的提问来源于stack exchange,提问作者karina sanches
相关产品推荐
相关产品推荐

