Msgid does not exist

jpush
标签: #<Tag:0x00007fb831d30518>

(String) #1

需求

查询推送结果

参数

{"appKey":"0c749353e67dbb69e357368e",
"materSecret":"",
"msgId":2783058370,
"registrationIds":["1104a8979284d2ea74e"]}

现象

调用jPushClient.getMessageStatus接口查询时,前面三次报错,第四次又查询成功了,但是在第一次查询之前手机就已经收到消息了

异常代码

cn.jiguang.common.resp.APIRequestException: {"error":{"code":3002,"message":"Msgid does not exist."}}
	at cn.jiguang.common.connection.NativeHttpClient._doRequest(NativeHttpClient.java:235)
	at cn.jiguang.common.connection.NativeHttpClient.doRequest(NativeHttpClient.java:99)
	at cn.jiguang.common.connection.NativeHttpClient.sendPost(NativeHttpClient.java:86)
	at cn.jpush.api.report.ReportClient.getMessagesStatus(ReportClient.java:112)
	at cn.jpush.api.JPushClient.getMessageStatus(JPushClient.java:265)
	at com.enmonster.platformbasic.msg.task.APPPushStatusTask.doQuery(APPPushStatusTask.java:122)
	at com.enmonster.platformbasic.msg.task.APPPushStatusTask.lambda$init$1(APPPushStatusTask.java:106)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)


#2

换我们北京的域名试一下


(String) #3

ReportClient#getMessagesStatus

public Map<String, MessageStatus> getMessagesStatus(CheckMessagePayload payload)
            throws APIConnectionException, APIRequestException {
        String url = _hostName + "/v3/status/message";
        ResponseWrapper result = _httpClient.sendPost(url, payload.toString());
        Type type = new TypeToken<Map<String, MessageStatus>>(){}.getType();
        return new Gson().fromJson(result.responseContent, type);
    }

其他地方都是hostName+path,怎么这里就写死了呢?
而且北京机房的接口地址还不一样

https://bjapi.push.jiguang.cn/v3/report/status/message


(String) #4

hello ,这个问题解决不了吗?


#5

请稍等,已转给研发。

你也可以先自己看看能不能修改下源码,给我们提个 PR


(String) #6

刚试着自己实现调用北京的API,但还是存在相同问题:

极光后台推送历史

Message ID 2252450076
推送平台 android,ios
推送结果 已发送
audience {“registration_id”:[“1507bfd3f79538d563f”,“1517bfd3f79559e9c5f”]}

日志

18/05/08 15:57:43 DEBUG connection.NativeHttpClient: Send request - POST https://bjapi.push.jiguang.cn//v3/report/status/message
18/05/08 15:57:43 DEBUG connection.NativeHttpClient: Request Content - {“msg_id”:2252450076,“registration_ids”:[“1517bfd3f79559e9c5f”]}
18/05/08 15:57:46 DEBUG resp.ResponseWrapper: JPush API Rate Limiting params - quota:2400, remaining:2399, reset:60
18/05/08 15:57:46 WARN connection.NativeHttpClient: Got error response - responseCode:400, responseContent:{“error”:{“code”:3002,“message”:“Msgid does not exist.”}}
18/05/08 15:57:46 ERROR connection.NativeHttpClient: Your request params is invalid. Please check them according to error message.

疑问

消息存在,也发送成功了,但是通过API查询的时候为什么会报错呢?


#7

你现在请求该 URL 时使用的 AppKey 值是多少?

你推送的目标的regIstrationID对应的 AppKey是1d8c575f008e4b554421c17f

你当前的URL写错了,多了一个 /

我刚刚测试好像确实有这个问题,用北京的域名也报错,稍等,我再测试几次上报给后台查一下。


(String) #8
  • AppKey就是这个1d8c575f008e4b554421c17f;
  • 然后url多一个/不影响请求结果;
  • 现在相同参数再调用同一个接口已经显示推送成功了,同时调用默认API也是成功的,即status=0。

除了这个msgid does not exist的错误以外,有时候也会收到返回结果status=3

3: registration_id 属于该应用,但不是该条 message 的推送目标;


#9

我们使用你的AppKey信息去获取又是正常的,具体的还在排查中,你给一下你现在请求的完整的参数。

你现在重试看看结果,应该是需要延迟一段时间后再请求


(String) #10

###appKey:
1d8c575f008e4b554421c17f

###msgId:
2791462004
###registrationId:
1507bfd3f79538d563f
###url:

POST https://bjapi.push.jiguang.cn/v3/report/status/message

###Reques Content

{"msg_id":2791462004,"registration_ids":["1507bfd3f79538d563f"]}

###日志信息

18/05/08 19:05:25 DEBUG connection.NativeHttpClient: Created instance with connectionTimeout 5,000, readTimeout 30,000, maxRetryTimes 3, SSL Version TLS
18/05/08 19:05:25 DEBUG connection.NativeHttpClient: Created instance with connectionTimeout 5,000, readTimeout 30,000, maxRetryTimes 3, SSL Version TLS
18/05/08 19:05:25 DEBUG connection.NativeHttpClient: Send request - POST https://bjapi.push.jiguang.cn/v3/report/status/message
18/05/08 19:05:25 DEBUG connection.NativeHttpClient: Request Content - {"msg_id":2791462004,"registration_ids":["1507bfd3f79538d563f"]}
18/05/08 19:05:26 DEBUG resp.ResponseWrapper: JPush API Rate Limiting params - quota:2400, remaining:2397, reset:45
18/05/08 19:05:26 WARN connection.NativeHttpClient: Got error response - responseCode:400, responseContent:{"error":{"code":3002,"message":"Msgid does not exist."}}
18/05/08 19:05:26 ERROR connection.NativeHttpClient: Your request params is invalid. Please check them according to error message.
18/05/08 19:05:26 ERROR examples.ReportsExample: Error response from JPush server. Should review and fix it. 
{}
	at cn.jiguang.common.connection.NativeHttpClient._doRequest(NativeHttpClient.java:235)
	at cn.jiguang.common.connection.NativeHttpClient.doRequest(NativeHttpClient.java:99)
	at cn.jiguang.common.connection.NativeHttpClient.sendPost(NativeHttpClient.java:86)
	at cn.jpush.api.report.CustomReportClient.getMessagesStatus(CustomReportClient.java:41)
	at cn.jpush.api.examples.ReportsExample.testGetMessageStatus(ReportsExample.java:97)
	at cn.jpush.api.examples.ReportsExample.main(ReportsExample.java:30)
18/05/08 19:05:26 INFO examples.ReportsExample: HTTP Status: 400
18/05/08 19:05:26 INFO examples.ReportsExample: Error Code: 3002
18/05/08 19:05:26 INFO examples.ReportsExample: Error Message: Msgid does not exist.

#11

你现在获取 2252450076 这个消息应该是可以成功的。

我将你提供的信息上报一下,向后台确认下需要延迟多久才能获取成功


(String) #12

ok,2252450076这条消息状态为0正常了,2791462004这条消息还是失败的,麻烦你们了


#13

后台这边说是有时延的,在推送已经处理但还没有给 report 这边返回结果时,就会取不到数据,报 msgid不存在。

而且无法给出一个固定的延迟时间,像下午的高峰期,延迟的就更长一些。

你看以 30 分钟为单位进行延迟获取如何?推送消息后等待 30 分钟再获取,如果取不到再等待 30 分钟。


(String) #14

好的,有时候不是这个错误,而是返回status=3

status 含义:

0: 送达;
1: 未送达;
2: registration_id 不属于该应用;
3: registration_id 属于该应用,但不是该条 message 的推送目标;
4: 系统异常。

不知道是不是也是延迟造成的呢


#15

返回 status=3 这个情况应该不一样,你能复现到这个报错吗?将请求参数和日志给一下

关于 msgid 不存在的报错由于延时造成的更详细的说明

凌晨跟上午延迟较少,下午17-21点(高峰期),延迟大(多的能延迟1-2个小时,少的又甚至不会有多大延迟),我们正在优化这个问题。


(String) #16

这个错误不好复现,以下是我查昨天日志找到的:

时间:2018-05-08 14:58:06
msgId:2249455334
registrationId:1517bfd3f7ea99ceeee

时间:2018-05-08 18:10:50
msgId:2266774251
registrationId:1507bfd3f79538d563f

以上两笔appKey=1d8c575f008e4b554421c17f,materSecret=75e0f6fb4d21fe1812bba3b1

还有其他几次,现在查的话status都是等于0了,但是昨天日志记录的是3


(林我同) #17

我也出现这种错误,
appkey 4c912c73698a1055f5807c96
msgId 2213830010


(林我同) #18

兄弟,能否加下qq,我也遇到这种问题,麻烦了, 838960404


#19

近期出现这样的报错请延迟后重试,下午的时延一般在 1-2 小时


(林我同) #20

你好,我有保存昨天的msgId,调用一样返回这个错误,我看了app应用那边 服务器地址填的是北京,然后我把源码地址改为北京的,一样有这种问题,请帮忙排查下,