Telegram.org错误:' msgs_ack查询无效',u' error_code':-500

时间:2016-10-04 17:57:25

标签: api telegram

我正在将msgs_acks实施回电报服务器以获取"内容"收到回复时发送的消息。在第一次尝试确认第一条内容消息(initConnection使用getNearestDc,由invokeWithLayer包裹)之后,我立即得到了上述错误。事件顺序如下所列。我不按顺序做什么?

传出的message_id是:6337647283454888960L,这是我想要的。 -->被发送到服务器,从服务器返回<--

假设的initConnection调用代码

--> ('method_call: ', 'invokeWithLayer', {'query': ['initConnection', 'query': 'getNearestDc']})
(' message_id:       ', 6337647283454888960L)

initConnection的结果

<--('TL deserialize: x = ', {'MessageContainer': [
{'msg': {u'new_session_created': {u'first_msg_id': 6337647283454888960L, u'unique_id': -8353387387127432890L, u'server_salt': -717652021221374449L}}, 'seqno': 1, 'msg_id': 6337647285940375553L}, 
{'msg': {u'msgs_ack': {u'msg_ids': [6337647283454888960L]}}, 'seqno': 2, 'msg_id': 6337647285940441089L}]})

getNearestDc

的结果
<--('TL deserialize: x = ', {u'req_msg_id': 6337647283454888960L, u'result': {u'nearest_dc': 3, u'country': 'US', u'this_dc': 1}})

尝试回到服务器以获取getNearestDc

-->('method_call: ', 'msgs_ack', {'msg_ids': [6337647283454888960L]})
(' message_id:       ', 6337647284623120384L)

错误!

('TL deserialize: x = ', {u'req_msg_id': 6337647284623120384L, u'result': {u'error_message': 'Invalid msgs_ack query', u'error_code': -500}})

2 个答案:

答案 0 :(得分:1)

解释这个问题的最简单方法如下:

  1. 设置dispatch_timer以处理待处理的msg_ids,它应该每隔2-3分钟说一次
  2. 您收到的每封入站邮件都有一个msg_id
  3. 在主接收循环中,将这些msg_ids整理为msg_id_list
  4. 每次向服务器发送新请求时,如果msg_id_list中有待处理的msg_ids,请将它们添加到您要在消息容器中发送的消息中。清除msg_id_list
  5. 如果dispatch_timer触发,您有msg_id_list count > 0,那么简单发送msgs_ack(msg_id_list)。清除msg_id_list
  6. 我已经使用此方法成功处理msg_acks而没有任何问题。

答案 1 :(得分:0)

事实证明'Invalid msgs_ack query'错误消息与序列号无关。我错误地序列化了msg ids向量,因此查询确实无效。

一旦我得到纠正,我又收到了另一个错误:'error_code': 64,表示容器无效。至少它知道它是一个容器!如果我遇到麻烦,我会尝试一些事情来纠正容器并发布另一个问题。