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

如何通过DirectLine从Bot向客户端应用发送带Payload的自定义消息?

解决DirectLine中Bot发送自定义消息无法接收payload和文本的问题

嘿,我帮你分析下问题出在哪:你用了session.endDialog(msg)来发送自定义消息,但这个方法的本质是结束当前对话,它会自动生成一条endOfConversation类型的活动,而你传入的msg并不会被发送——这就是为什么客户端只收到结束对话的响应,看不到你要传递的文本和payload。

这里给你两个可行的解决方案:

方案一:先发送自定义消息,再单独结束对话

这是最直接的方式,先通过session.send()发送你构建的自定义消息,之后再调用session.endDialog()结束对话。这样客户端会先后收到两条活动:一条是你要的自定义消息,另一条是结束对话的通知。

代码示例:

// 构建并发送自定义消息
var msg = new botbuilder.Message(session).sourceEvent({ 
    directline: { 
        text: `Creating a note named ${note.title} with description as ${note.text}`, 
        payload: { action: "CREATENOTE" } 
    } 
});
session.send(msg);

// 单独结束对话
session.endDialog();

方案二:检查客户端的活动监听逻辑

确保你的客户端代码是针对message类型的活动来提取内容的,因为endOfConversation是独立的活动类型。比如在DirectLine客户端中,你需要过滤出activity.type === 'message'的活动,然后从activity.sourceEvent.directline里获取文本和payload。

可选:用endDialogWithResult传递结束时的信息

如果你希望在结束对话的同时附带数据,可以用session.endDialogWithResult(),但这种方式的数据会放在endOfConversation活动的value字段里,需要客户端对应处理:

session.endDialogWithResult({
    response: {
        text: `Creating a note named ${note.title} with description as ${note.text}`,
        payload: { action: "CREATENOTE" }
    }
});

不过这种方式不如方案一直观,因为自定义操作类的消息更适合用message类型传递。

内容的提问来源于stack exchange,提问作者Sarthak Srivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:06:10