如何用Viber Bot向群组发送消息?问题排查求助
问题解答
a. 当前问题定位
你遇到的直接问题是webhookNotSet错误,这是因为Viber Bot必须先配置有效的Webhook才能正常调用API;另外你获取聊天ID的方式错误,分享链接末尾的内容不是Viber认可的合法聊天ID。
b. 无法正常运行的原因
- 强制前置条件缺失:Viber平台要求所有Bot必须配置一个公网可访问的HTTPS Webhook,哪怕你的机器人不需要响应任何用户消息,这个步骤也不能省略。没有Webhook的话,Viber不会承认你的Bot实例,调用
sendMessage必然返回10号错误。 - 聊天ID获取错误:Viber的聊天ID不是从分享链接提取的,必须让Bot加入目标群组后,从Viber推送的群组事件中获取。
c. 获取Viber聊天ID的正确方法
- 先完成Webhook配置,确保你的Bot服务有公网可访问的HTTPS地址。
- 让目标群组的管理员把Bot添加到群组/社区/频道中。
- 当Bot被加入群组时,Viber会向你的Webhook发送
conversation_started事件,事件数据里的chat.id就是你需要的聊天ID。你可以在Webhook的处理逻辑里打印这个事件,提取并保存ID。
关键事件结构示例:{ "event": "conversation_started", "chat": { "id": "目标聊天ID", "name": "群组名称" } }
d. 能否接入任意聊天群组?
不行。Bot必须由聊天的管理员手动添加才能进入对应群组/社区/频道,没有管理员授权的话,你无法让Bot接入并发送公告。
修复代码的具体步骤
- 配置Webhook与启动服务:添加代码启动HTTP服务器并设置Webhook(必须用HTTPS地址):
const http = require('http'); const port = process.env.PORT || 3000; // 启动服务器接收Viber事件 http.createServer(viberBot.middleware()).listen(port, () => { console.log(`服务器运行在端口${port}`); // 设置Webhook地址 viberBot.setWebhook('https://你的公网HTTPS地址/') .then(() => console.log('Webhook设置成功')) .catch(err => console.error('Webhook设置失败:', err)); }); - 提取聊天ID:添加事件监听获取聊天ID:
viberBot.onConversationStarted((user, context, onFinish) => { console.log('获取到聊天ID:', context.chat.id); onFinish(); }); - 发送公告:把提取到的聊天ID存入环境变量
VIBER_GROUP_ID,之后调用sendMessage就能正常发送公告了。
内容的提问来源于stack exchange,提问作者Elias Babenko
相关产品推荐
相关产品推荐

