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

Python开发Viber bot出现User matching query does not exist错误如何解决

故障可能原因

1. proceed_request触发范围不全

  • 当前proceed_request仅处理ViberMessageRequest类型的请求:如果用户首次和Bot交互是通过订阅、点击菜单按钮、触发回调等非消息类请求(比如ViberSubscribedRequest、ViberConversationStartedRequest),就不会进入用户创建逻辑,数据库自然没有对应记录。
  • 建议补充其他用户首次触达的请求类型判断,覆盖全场景。

2. 条件判断逻辑冗余引发并发问题

  • 代码已经使用了update_or_create方法,这个方法本身就会自动判断记录是否存在,不存在则创建、存在则更新,外层额外加的if not User.objects.filter(...).exists()完全多余。
  • 高并发场景下,可能出现两个请求同时通过exists判断的情况,触发唯一键冲突,导致用户创建失败,最终没有入库。直接删掉外层的exists判断即可。

3. 数据库字段约束导致创建失败

  • 检查User模型的字段配置:比如name、country、language是否设置了null=False/blank=False,如果用户的Viber账号没有填写对应信息,viber_request返回的对应字段为空,就会触发数据库约束报错,用户创建失败。
  • 建议给非必填字段加允许为空的配置,或者给空值设置默认兜底值。

4. send_confirmation方法的变量来源错误

  • 你贴的send_confirmation方法接收的参数是confirmation,但代码里直接使用了data变量,如果data不是全局变量、也没有在方法内正确初始化,data.get('viber_id')会返回None,自然查不到对应用户。
  • 需要确认data变量的来源是否正确,或者改为从confirmation参数中提取用户ID。

5. 事务回滚导致创建失效

  • 如果proceed_request执行用户创建操作后,后续逻辑抛出异常且处于同一个数据库事务中,会导致已经执行的用户创建操作被回滚,最终数据库没有对应记录。
  • 可以排查proceed_request后续执行逻辑是否有报错,或者将用户创建操作单独提前执行,避免被其他无关逻辑影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:27:05