如何通过Botmaster在未发消息前触发watson-conversation欢迎消息?
实现Watson Conversation欢迎消息主动推送的方案
当然可以实现啦!我之前做类似项目时也碰到过这个需求,下面就给你一步步拆解怎么用Botmaster配合socket.io触发Watson的欢迎消息:
第一步:监听socket.io连接事件,主动发送启动消息
默认情况下,Botmaster只会在收到用户主动发送的消息后才会调用Watson的API。我们可以在用户刚通过socket.io连接上服务端时,主动构造一条虚拟消息传给Botmaster,以此触发Watson的欢迎节点。示例代码如下:
// 假设你已经完成了socket.io连接器的初始化 const socketioConnector = new Botmaster.SocketioConnector({ port: 3000, }); botmaster.addConnector(socketioConnector); // 监听用户连接事件 socketioConnector.on('connection', (socket) => { console.log('用户已建立连接'); // 构造虚拟启动消息,senderId用socket的唯一ID标识用户 const initMessage = { senderId: socket.id, text: '__START__', // 可以用自定义触发词,或者空文本(看Watson配置) type: 'text', }; // 将消息传入Botmaster的处理流程 botmaster.incoming(initMessage); });第二步:配置Watson Conversation工作区的欢迎节点
确保你的Watson工作区里已经正确设置了欢迎触发逻辑:- 如果用了
__START__这类触发词,需要在Watson里创建对应的意图(比如#welcome_init),或者在对话框节点的条件里直接匹配input.text == "__START__"; - 如果用空文本触发,要设置节点的条件为
conversation_start(Watson内置的会话开始条件),确保会话初始化时就返回欢迎消息。
- 如果用了
第三步:确保Botmaster中间件正常处理虚拟消息
如果你使用了botmaster-watson中间件,要确认它不会过滤掉空文本或自定义触发词的消息。默认情况下中间件会正常传递这类消息,但如果有自定义过滤逻辑,需要调整允许这类初始化消息通过:const watsonMiddleware = require('botmaster-watson').middleware; botmaster.use(watsonMiddleware({ username: '你的Watson用户名', password: '你的Watson密码', workspaceId: '你的工作区ID', }));第四步:测试验证
当用户打开聊天界面连接socket.io时,服务端会自动发送初始化消息给Watson,Watson返回欢迎内容后,Botmaster会通过socket.io把消息推送给用户,这样用户一进入就能看到欢迎语,无需先发送任何消息。
内容的提问来源于stack exchange,提问作者Guilherme Euzebio
相关产品推荐
相关产品推荐

