Schedule API v3

概述

API 层面支持定时功能。这是一个相对独立的任务执行模块,维护一个 Schedule 对象。 注:调 API 创建的定时任务只能调 API 获取/修改/删除,在官网定时消息页面不展示。

调用地址

https://api.jpush.cn/v3/schedules

如果创建的极光应用分配的北京机房,并且 API 调用方的服务器也位于北京,则比较适合调用极光北京机房的 API,可以提升一定的响应速度。

通过极光 Web 控制台 “应用设置” -> "应用信息" 中可以看到应用所在机房。如果应用所在地为北京机房,同时会给出各 API 的调用地址。

北京机房 Schedule API 调用地址: https://bjapi.push.jiguang.cn/v3/push/schedules

详细对应关系见 “应用信息” 中 “服务器所在地” 后的信息。

调用验证

HTTP Header(头)里加一个字段(Key/Value 对):Authorization: Basic base64_auth_string其中 base64_auth_string 的生成算法为:base64(appKey:masterSecret)即,对 appKey 加上冒号,加上 masterSecret 拼装起来的字符串,再做 base64 转换。

Schedule 对象定义

  1. {
  2. "cid": "7103a4c428a0b98974ec1849-711161d4-5f17-4d2f-b855-5e5a8909b26e",
  3. "name": "Schedule_Name",
  4. "enabled": true,
  5. "trigger": {
  6. "single":{
  7. "time": "2014-09-17 12:00:00" //YYYY-MM-DD HH:MM:SS
  8. }
  9. },
  10. "push": {
  11. "platform": "all",
  12. "audience": "all",
  13. "notification": {
  14. "alert" : "Hello, JPush!"
  15. },
  16. "message": {
  17. "msg_content":"Message!"
  18. },
  19. "options": {
  20. "time_to_live":60
  21. }
  22. }
  23. }
  24. {
  25. "name": "Schedule_Name",
  26. "enabled": true,
  27. "trigger": {
  28. "periodical": {
  29. "start":"2014-09-17 12:00:00",
  30. "end": "2014-09-18 12:00:00",
  31. "time": "12:00:00",
  32. "time_unit": "WEEK", //month, week, day, 大小写不敏感
  33. "frequency": 1,
  34. "point": ["WED","FRI"] //time_unit为 day 的时候,point 不能存在。WED,FRI 大小写不敏感。month:"01","02"
  35. }
  36. },
  37. "push": {
  38. "platform": "all",
  39. "audience": "all",
  40. "notification": {"alert" : "Hello, JPush!" },
  41. "message": {"msg_content":"Message!" },
  42. "options": {"time_to_live":60}
  43. }
  44. }

字段说明:

每一个 schedule 任务,都由 name、enabled、trigger、push 这四个小节组成。

  • cid
    • 和 push api 中 cid 用法一致,详见 cid 说明 。注:schedule api payload 中的 push 字段中含有 cid 字段将会被忽略。
  • push
  • name
    • 表示 schedule 任务的名字,由 schedule-api 在用户成功创建 schedule 任务后返回,不得超过 255 字节,由汉字、字母、数字、下划线组成。
  • enabled
    • 表示任务当前状态,布尔值,必须为 true 或 false,创建任务时必须为 true。
  • trigger
    • 表示 schedule 任务的触发条件,当前只支持定时任务(single)与定期任务(periodical)。
      • single
        • 表示定时任务
          • time 为必选项且格式为 "YYYY-mm-dd HH:MM:SS“,如 "2014-02-15 13:16:59",不能为 "2014-2-15 13:16:59" 或 "2014-12-15 13:16",即日期时间格式必须完整。定时任务的最晚时间不能超过一年。
      • periodical
        • 表示定期任务
          • start 表示定期任务有效起始时间,格式与必须严格为: "YYYY-mm-dd HH:MM:SS",且时间必须为 24 小时制。
          • end 表示定期任务的过期时间,格式同上。定期任务最大跨度不能超过一年。
          • time 表示触发定期任务的定期执行时间,格式严格为: "HH:MM:SS",且为 24 小时制。
          • time_unit 表示定期任务的执行的最小时间单位有:"day"、"week" 及 "month" 三种。大小写不敏感,如 "day", "Day", "DAy" 均为合法的 time_unit。
          • frequency 此项与 time_unit 的乘积共同表示的定期任务的执行周期,如 time_unit 为 day,frequency 为 2,则表示每两天触发一次推送,目前支持的最大值为 100。
          • point 一个列表,此项与 time_unit 相对应:
time_unitpoint描述
dayNIL当 time_unit 为 day 时 point 此项无效
week"MON","TUE","WED","THU","FRI","SAT","SUN"当 time_unit 为 week 时,point 为对应项的一项或多项,表示星期几进行触发,point 中的值大小写不敏感
month"01","02","03" …. "31"当 time_unit 为 month 时,point 为当前进行月对应的日期,且必须有效,如 month 为 2 月,则 31 或 30 日是不会进行触发的

创建定时任务

  1. POST https://api.jpush.cn/v3/schedules

Example Request

Request Header

  1. POST /v3/schedules
  2. Authorization: Basic (base64 auth string)
  3. Content-Type: application/json
  4. Accept: application/json

Request Data

  1. {
  2. "name": "定时推送示例",
  3. "enabled": true,
  4. "trigger": {
  5. "periodical": {
  6. "start":"2014-09-17 12:00:00",
  7. "end": "2014-10-18 12:00:00",
  8. "time": "12:00:00",
  9. "time_unit": "WEEK", //month, week, day;大小写不敏感
  10. "frequency": 2,
  11. "point": ["WED","FRI"] //time_unit 为 day 的时候,point 不能存在。WED,FRI 大小写不敏感。month:"01","02"
  12. }
  13. },
  14. "push": {
  15. "platform": "all",
  16. "audience": "all",
  17. "notification": {
  18. "ios": {
  19. "alert":"this a test",
  20. "sound":"default",
  21. "badge":"+1"
  22. }
  23. },
  24. "message": {},
  25. "options": {"apns_production":"false"}
  26. }
  27. }

Request Data 说明

  • 由于定时任务相对简单,我们例中只对定期任务进行说明
  • 以上表示创建一个定期任务,起始生效时间必须 '2014-09-17 12:00:00' 之后第一个 time 时间点,过期时间为 '2014-10-18 12:00:00',在有效期内每两周的周三、周五中午 12 点分别执行一次
  • 定期任务首次创建时的触发时间不得晚于其 end 中指定的时间。否则创建失败
  • 定期任务(包括定时任务)首次创建时其 enabled 项必须为 true。不能创建 enabled:false 的任务,否则创建失败
  • push 必须为有效合法的 push 动作,否则创建失败。

Example Response

Success Response

  1. HTTP/1.1 200 CREATED
  2. Content-Type: application/json; charset=utf-8
  1. {
  2. "schedule_id":"0eac1b80-c2ac-4b69-948b-c65b34b96512",
  3. "name":"定时推送示例" //长度最大 255 字节,数字、字母、下划线、汉字。
  4. }

Failed Response

  1. HTTP/1.1 400 BAD REQUEST
  2. Content-Type: application/json; charset=utf-8
  1. {
  2. "error":
  3. {
  4. "code":8400,
  5. "message":"error message"
  6. }
  7. }

获取有效的 Schedule 列表

  1. GET https://api.jpush.cn/v3/schedules?page=

获取当前有效(endtime 未过期)的 schedule 列表

Example Request

Request Header

  1. GET /v3/schedules?page=
  2. Authorization: Basic (base64 auth string)
  3. Content-Type: application/json
  4. Accept: application/json
  • 返回当前请求页的详细的 schedule-task 列表,如未指定 page 则 page 为 1。
  • 排序规则:创建时间,由 schedule-service 完成。
  • 如果请求页数大于总页数,则 page 为请求值,schedules 为空。
  • 每页最多返回 50 个 task,如请求页实际的 task 的个数小于 50,则返回实际数量的 task。

Example Response

Success Response

  1. HTTP/1.1 200 OK
  2. Content-Type: application/json; charset=utf-8
  1. {
  2. "total_count":1000, //表示总数
  3. "total_pages":5, //总页数。
  4. "page":4, //当前为第四页。
  5. "schedules":[
  6. {"schedule_id":"0eac1b80-c2ac-4b69-948b-c65b34b96512","name":"","enabled":...},{}, //详细信息列表。
  7. ]
  8. }
  • 以上表示总共 1000 个 schedule-task,总共 5 页,当前为第 4 页,包含 50 个 schedule-task 的信息。
  • 返回的 schedules 为 schedule-task 的详细信息列表。

获取指定的定时任务

  1. GET https://api.jpush.cn/v3/schedules/{schedule_id}

Example Request

Request Header

  1. GET /v3/schedules/{schedule_id}
  2. Authorization: Basic (base64 auth string)
  3. Content-Type: application/json
  4. Accept: application/json
  • 获取当前用户的 schedule 任务 id 为 {schedule_id} 的定时任务的详情。

Example Response

Success Reponse

  1. HTTP/1.1 200 OK
  2. Content-Type: application/json; charset=utf-8

Response Data

  1. {
  2. "schedule_id":"0eac1b80-c2ac-4b69-948b-c65b34b96512"
  3. "name": "定时推送示例",
  4. "enabled": true,
  5. "trigger": {
  6. ...
  7. },
  8. "push": { ... }
  9. }
  • 如 schedule_id 不存在,则返回 404,否则返回实际 schedule-task 的详情。

获取定时任务对应的所有 msg_id

  1. GET https://api.jpush.cn/v3/schedules/{schedule_id}/msg_ids

Example Request

Request Header

  1. GET /v3/schedules/{schedule_id}/msg_ids
  2. Authorization: Basic (base64 auth string)
  3. Content-Type: application/json
  4. Accept: application/json
  • 获取当前用户的 schedule 任务 id 为 {schedule_id} 对应的所有消息 id 列表。

Example Response

Success Reponse

  1. HTTP/1.1 200 OK
  2. Content-Type: application/json; charset=utf-8

新 Response Data

  1. {
  2. "count":3,
  3. "msgids":[
  4. "{"msg_id":"1076080897","error":{"code":0,"message":""},"needRetry":false}",
  5. "{"msg_id":"1076080898","error":{"code":0,"message":""},"needRetry":false}",
  6. "{"msg_id":"1076080899","error":{"code":0,"message":""},"needRetry":false}",
  7. ]
  8. }

旧 Response Data

  1. {
  2. "count":3,
  3. "msgids":["12345567","2234567","3234567"]
  4. }
  • 新 Response Data 格式在 2018-09-12 至 2018-09-13 号上线,若 schedule_id 是 12 日前,则返回旧 Response Data 格式;若 schedule_id 是 13 日后,则返回新 Response Data 格式;需要开发者做好兼容。

修改指定的 Schedule

  1. PUT https://api.jpush.cn/v3/schedules/{schedule_id}

Example Request

  1. PUT /v3/schedules/{schedule_id}
  2. Authorization: Basic (base64 auth string)
  3. Content-Type: application/x-www-form-urlencoded
  4. Accept: application/json
  • 更新指定 id 的 schedule 任务。
  1. {
  2. "name": "task",
  3. "enabled": true,
  4. "trigger": {
  5. ...
  6. },
  7. "push": { ... }
  8. }
  • 更新操作可为 "name","enabled"、"trigger" 或 "push" 四项中的一项或多项。
  • 不支持部分更新,如更新之前的任务为:
  1. {
  2. "name": "定时推送示例",
  3. "enabled": true,
  4. "trigger": {
  5. "periodical": {
  6. "start":"2014-09-17 12:00:00",
  7. "end": "2014-10-18 12:00:00",
  8. "time": "12:00:00",
  9. "time_unit": "WEEK",
  10. "frequency": 2,
  11. "point": ["WED","FRI"]
  12. }
  13. },
  14. "push": {
  15. "platform":"ios",
  16. "options":{"apns_production":"false"},
  17. "audience":"all",
  18. "notification" : {"alert":"定时任务更新"}
  19. }
  20. }
  • 则以下为错误的更新及与之对应的正确的更新示例:
  1. ## WRONG: 更新 push 中的平台为安卓:
  2. {
  3. "push":{"platform":"android"}
  4. }
  5. ## RIGHT: 更新 push 中的平台为安卓:
  6. {
  7. "push":{
  8. "platform":"android",
  9. "options":{"apns_production":"false"},
  10. "audience":"all",
  11. "notification" : {"alert":"定时任务更新"}
  12. }
  13. }
  14. ## 此处的 push 更新后必须仍是有效的,否则也会更新失败。
  15. ## WRONG: 更新 periodical 中的过期时间延后一个月:
  16. {
  17. "trigger":{
  18. "end":"2014-11-18 12:00:00"
  19. }
  20. ## RIGHT: 更新 periodical 中的过期时间延后一个月:
  21. {
  22. "trigger":{
  23. "periodical": {
  24. "start":"2014-09-17 12:00:00",
  25. "end": "2014-11-18 12:00:00",
  26. "time": "12:00:00",
  27. "time_unit": "WEEK",
  28. "frequency": 2,
  29. "point": ["WED","FRI"]
  30. }
  31. }
  32. }
  33. ## time、time_unit、frequency、point 的更新同上。
  34. ## 更新后的 trigger 必须仍是有效合法的,否则即使 trigger 整体更新也会失败。可以更新 enable:false 的任务。
  35. ## 定时任务(single)与定期任务(periodical)之间不能进行相互更新,即,原先为 single 类任务,则不能更新为 periodical 任务,反之亦然。
  36. ## 不能更新已过期的 schedule 任务

Example Response

Success Response

  1. HTTP/1.0 200 CREATED
  2. Content-Type: application/json
  1. {
  2. "name": "定时推送示例",
  3. "enabled": true,
  4. "trigger": {
  5. "periodical": {
  6. "start":"2014-09-17 12:00:00",
  7. "end": "2014-11-18 12:00:00",
  8. "time": "12:00:00",
  9. "time_unit": "WEEK",
  10. "frequency": 2,
  11. "point": ["WED","FRI"] }
  12. },
  13. "push": {
  14. "platform":"andiro",
  15. "options":{"apns_production":"false"},
  16. "audience":"all",
  17. "notification" : {"alert":"定时任务更新"}
  18. }
  19. }

Fail Response

  • schedule_id 无效,不是有效的 uuid。
  1. HTTP/1.0 404 Not Found
  2. Content-Type: application/json
  • 更新操作不合法
  1. HTTP/1.0 400 BAD REQUEST
  2. Content-Type: application/json

删除指定的 Schedule 任务

  1. DELETE https://api.jpush.cn/v3/schedules/{schedule_id}

schedule_id 为已创建的 schedule 任务的 id,如果 schedule_id 不合法即不是有效的 uuid,则 404。

Example Request

  1. DELETE /v3/schedules/{schedule_id}
  2. Authorization: Basic (base64 auth string)
  3. Content-Type: application/json
  4. Accept: application/json

Example Response

Success Response

  1. HTTP/1.0 200
  2. Content-Type: application/json
  3. Content-Length: 0

Failed Response

  1. HTTP/1.0 404 Not Found
  2. Content-Type: application/json
  3. Content-Length: 0
  1. {
  2. "error":{
  3. "code":8404,
  4. "message":"..."
  5. }
  6. }

错误码描述

CodeHTTP描述Error Message详细解释
8000200正确返回nil成功状态码
8104404请求的 schedule 任务不存在Request schedule operation doesn't exist对应的任务已发送,或 schedule id 错误
8101401鉴权失败Basic authentication failed.appkey masterscrect 不匹配
8100400参数无效The schedule-task is invalid:section is invalid;has been at term;expired;request data is not json;update target task;Delete target task;schedule request is not exist参数不合法或者无效,没通过校验
8203503系统内部错误,建议稍后重试Execute action timeout, please try later again与 schedule-server 通信错误
8200500系统内部错误Server internal error.发生未预料错误。

错误返回格式

  1. {"error":{"code":errcode, "message":"error message"}}

调用限制

  • 定时最多有效数(当前未过期数)与周期最多有效数(当前未过期数)总数 100 个。超过后失败。
  • VIP 客户可申请提高总数上限,最高可达 2000 个,联系商务开通。
  • 最大频率当前为 100/分。
  • 定时任务(single)的最晚时间与定期任务(periodical)的最大跨度均不能超过 1 年。