You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:45:39