ScienJus/smartqq

发送消息失败

zzx0421 opened this issue · 25 comments

调用SmartQQClient.sendMessageToFriend出现:发送失败,Api返回码[{"retcode":1202,"errmsg":""}]
偶尔又可以发送成功,这是什么情况?

Yinzo/SmartQQBot#56

可以看看是否与这个issue中的提到的方式有关

88250 commented

@ScienJus 这个问题我这边也遇到了,我观察一下看看。

from zignmail@gmail.com

以前几乎不会出现,最近两个月出现的特别频繁。而且不像是文本信息的问题,因为有的时候返回1202消息也能发送成功。

我怀疑是一种类似503错误,就是smartqq服务端处理不过来了。不过最恶心的是1202有的时候会发送成功,也就是没办法针对1202进行重试。

最终的解决方案:在群里起两个进程,一个用于发送消息,另一个用于监控消息是否收到。

就算能监控到消息发送失败也没用什么用、因为就是发不出去

这个问题我是直接碰上1202就重新发送...直到发送成功或者达到一定的尝试次数才停止..

最终还是能发的出去的。感觉是服务器不稳定而不是什么敏感词。碰到1202就重新发送--那你碰到一条信息重复发的情况肯定不大少。

这样会导致重复发送很多相同消息、用户体验不好

88250 commented

@cosineyan 两个 QQ 就能解决问题么?

@88250 一个QQ用于发送消息,发送时如果遇到1202错误,保存记录到一个内存结构或者数据库里,标识时间,以及状态为等待consume。while循环sleep一秒,刷新这条记录的状态,如果是确认成功,则break,否则重发。再设定一个重试次数或时间。
另外一个QQ只用来监控1号QQ发出的群信息,如果有收到,并且同样的内容在最近一分钟内出现且状态为等待,则标识该记录为确认成功。
亲测可用。有时会造成用户问个问题时,机器人貌似考虑一小段时间再回答的诡异现象。。。

88250 commented

@cosineyan 好的,多谢思路

请求失败,Api返回码[103] 这个是什么情况呢

checkSendMsgResult方法里的LOGGER.error(String.format("发送失败,Api返回码[%d]", json.getInteger("retcode")));没有写条件呢?这样不是总是执行了么?

我这里老是提示“发送失败,Api返回码[null]”

@hejianjun 很无法理解的是,我完全没有印象我是这么写的…ORZ我去改一下…

88250 commented

@ScienJus 这个 PR #22 里面我帮你修复了。

顺便感谢 @hejianjun 的反馈 🍇

@88250 心酸…拖延症和健忘症并发…感谢…

88250 commented

@ScienJus 注意身体,不要太忙哦....

你们俩真是好基友啊

额,今天使用的时候我也发现这个问题了。
然而我的状态码返回的是0

{u'msg':` u'send ok', u'errCode': 0}

但是我还是接收不到消息。无奈我刷屏才会成功返回我一两条消息。
最可气的是1202时我接收到消息了!不知道 怎么解决。

我发现有时日志上显示机器人发群消息成功,但群里未收到消息。这是怎么回事??

@88250
1202的问题,我测试了一种情况,发现是因为登录了太多次导致的。
然后我在w.qq.com上面登录一下,再退出账号,然后再用程序发送,就可以发送成功。

88250 commented

@kookob 1202 很多可能性,能用就好 :)