Python版Viber Bot无响应,消息未送达问题求助
解决Viber Bot接收消息无响应、消息未送达问题
1. 确认Webhook端点的可达性与响应规范
- 检查服务器日志,确认是否收到Viber的POST请求:如果没有,排查防火墙/安全组是否开放HTTPS端口(默认443),或是否有WAF/CDN拦截了Viber的IP请求。
- 必须在3秒内返回200 OK响应:如果消息处理逻辑耗时,要异步处理(比如将消息放入队列),先返回响应,否则Viber会判定请求失败,不再重试。
- 响应头需正确:返回的响应头必须包含
Content-Type: application/json,即使响应体为空。
2. 修正消息发送逻辑
官方示例直接回传接收的message对象可能存在字段不兼容问题,建议重新构造消息对象:
from viberbot.api.messages.text_message import TextMessage # 解析请求 viber_request = viber.parse_request(request.get_data()) if isinstance(viber_request, ViberMessageRequest): # 重新构造文本消息,避免直接复用接收的消息对象 reply_msg = TextMessage(text=viber_request.message.text) # 打印发送响应,排查错误 send_response = viber.send_messages(viber_request.sender.id, [reply_msg]) print("发送结果:", send_response)
- 检查
send_messages的返回值:如果返回非0状态码,根据Viber API错误码说明排查问题(比如sender ID无效、Bot无权限发送消息等)。
3. 验证Bot与用户的会话状态
- 确认用户已订阅Bot:只有用户主动通过扫码、链接等方式订阅后,Bot才能正常发送消息。如果是首次通过
conversation_started事件触发的对话,需要先调用send_messages初始化会话。 - 重新确认Webhook配置:虽然
set_webhook返回成功,可再次调用该接口,确保event_types包含message且配置生效。
4. 检查SSL证书与TLS配置
- 使用受信任CA颁发的证书:Viber服务器不接受自签名SSL证书,需使用Let's Encrypt等正规CA证书。
- 确保TLS版本符合要求:服务器需支持TLS 1.2及以上版本,过时的TLS 1.0/1.1会被Viber拒绝连接。
内容的提问来源于stack exchange,提问作者Nikos Epitropakis
相关产品推荐
相关产品推荐

