消息协议

概述

JMessage 对于不同的消息类型,有一个 JSON 格式的消息协议。这个业务级别的协议,由发送者编码,由接收者解码,并处理接收到的消息。

面向开发者接口提供的发送消息接口,也需要遵循此文档定义来组装消息,以发往客户端。

协议定义

  • version Number
    • 必须。
    • 协议版本号。第一版本:1,以此类推。
  • target_type String
    • 必须。
    • 接收者类型。
    • 选项:single, group
  • target_id String
    • 必须。
    • 接收者ID。
    • 可能值:${username}, ${gid}
    • 接收方可用此字段,校验消息是不是发给自己的。
  • target_name String
    • 可选。
    • 接收者的展示名。
  • from_type String
    • 必须。
    • 发送方来源。
    • 选项:user, robot, admin, …。可用于扩展特定消息来源。
    • 用户只允许发送 from_type = user 的消息。
  • from_id String
    • 必须。
    • 发送者 username
  • from_name String
    • 可选。
    • 发送方展示名。
  • create_time Number
    • 必须。
    • 消息发送时间。
    • 精确到秒。
  • msg_type String
    • 必须。
    • 选项:text, voice, image, file, video, location, custom
  • msg_body JsonObject
    • 必须。
    • 消息实体。
  • from_appkey String
    • 可选
    • 发送者所属应用appkey

消息体定义

根据 msg_type 的不同,msg_body 里会有以下字段信息。

  • extras
    • 可选。
    • JsonObject
    • 用于附加参数。所有的消息类型都可以带此字段。

msg_type = text

  • text String
    • 必须。
    • 文本类型消息内容。

msg_type = voice

  • media_id String
    • 必须。
    • 媒体文件上传到得到的KEY,用于生成下载URL。
  • media_crc32 Number
    • 必须。
    • 文件的 CRC32 校验码。
  • duration Number
    • 必须。
    • 语音时长(单位:秒)
  • format String
    • 必须。
    • 语音类型。
  • fsize Number
    • 必须
    • 文件大小(字节数)

msg_type = image

  • media_id String
    • 必须。
    • 媒体文件上传到得到的KEY,用于生成下载URL。
  • media_crc32 Number
    • 必须。
    • 文件的 CRC32 校验码。
  • width Number
    • 必须。
    • 原图片宽度。
  • height Number
    • 必须。
    • 原图片调度。
  • format String
    • 可选。
    • 图片格式。
  • fsize Number
    • 必须
    • 文件大小(字节数)

msg_type = file

  • media_id String
    • 必须。
    • 媒体文件上传到得到的KEY,用于生成下载URL。
  • media_crc32 Number
    • 必须。
    • 文件的 CRC32 校验码。
  • fsize Number
    • 必须
    • 文件大小(字节数)
  • fname String
    • 必须
    • 文件名

msg_type = location

  • latitude Number
    • 必须。
    • 纬度
  • longitude Number
    • 必须。
    • 经度
  • scale Number
    • 必须
    • 缩放比例
  • lable String
    • 必须
    • 位置信息

msg_type = video

  • video JsonObject
    • 必须
    • 视频文件信息, 使用FileObject消息体子类型,类型定义见下文
  • duration Number
    • 必须
    • 视频时长
  • thumb JsonObject
    • 可选
    • 缩略图文件信息, 使用ImageObject消息体子类型,类型定义见下文

msg_type = custom

  • 开发者自定义字段。JsonObject。

消息体子类型定义

FileObject

  • media_id String
    • 必须
    • 媒体文件上传之后得到的key,用于生成下载的URL
  • media_crc32 Number
    • 必须
    • 文件的 CRC32 校验码。
  • fsize Number
    • 必须
    • 文件大小
  • fname String
    • 必须
    • 发送与接收到的文件名

ImageObject

  • media_id String
    • 必须
    • 媒体文件上传之后得到的key,用于生成下载的URL
  • media_crc32 Number
    • 必须
    • 文件的 CRC32 校验码。
  • format String
    • 必须
    • 图片格式
  • width Number
    • 必须
    • 图宽度
  • height Number
    • 必须
    • 图高度
  • fsize Number
    • 必须
    • 文件大小

消息示例

  1. 文字消息
  2. {
  3. "version": 1,
  4. "target_type": "single",
  5. "target_id": "javen",
  6. "target_name": "Javen Fang",
  7. "from_type": "user",
  8. "from_id": "fang",
  9. "from_name": "Fang Javen",
  10. "create_time": 135432432187,
  11. "msg_type": "text",
  12. "msg_body": {
  13. "text": "Hello, JPush IM!"
  14. }
  15. }
  16. 图片消息
  17. {
  18. "version": 1,
  19. "target_type": "single",
  20. "target_id": "javen",
  21. "from_type": "admin",
  22. "from_id": "fang",
  23. "msg_type": "image",
  24. "msg_body": {
  25. "media_id": "qiniu/image/CE0ACD035CBF71F8",
  26. "media_crc32":2778919613,
  27. "width":3840,
  28. "height":2160,
  29. "fsize":3328738,
  30. "format":"jpg"
  31. }
  32. }
  33. 语音消息
  34. {
  35. "version": 1,
  36. "target_type": "single",
  37. "target_id": "ppppp",
  38. "from_type": "admin",
  39. "from_id": "admin_caiyh",
  40. "msg_type": "voice",
  41. "msg_body": {
  42. "media_id": "qiniu/voice/j/A96B61EB3AF0E5CDE66D377DEA4F76B8",
  43. "media_crc32":1882116055,
  44. "hash":"FoYn15bAGRUM9gZCAkvf9dolVH7h",
  45. "fsize" :12344,
  46. "duration": 6
  47. }
  48. }
  49. 位置消息
  50. {
  51. "version":1,
  52. "target_type":"single",
  53. "target_id":"oooo",
  54. "target_appkey":"4f7aef34fb361292c566a1cd",
  55. "from_type":"admin",
  56. "from_id":"oooo",
  57. "msg_type":"location",
  58. "msg_body":{
  59. "latitude":111.2,
  60. "longitude":22.3,
  61. "scale":500,
  62. "label":"xx省xx市xx区xx街道"
  63. }
  64. }
  65. 视频消息
  66. {
  67. "version":1,
  68. "target_type":"single",
  69. "target_id":"oooo",
  70. "target_appkey":"4f7aef34fb361292c566a1cd",
  71. "from_type":"admin",
  72. "from_id":"oooo",
  73. "msg_type":"video",
  74. "msg_body":{
  75. "duration":10,
  76. "thumb":{
  77. "fsize":20736,
  78. "width":72,
  79. "format":"png",
  80. "media_crc32":2565087609,
  81. "media_id":"qiniu/image/a/707F13B42CEDB275702938DD13ED76E8.png",
  82. "height":72
  83. },
  84. "video":{
  85. "fname":"testvideo",
  86. "fsize":2900883,
  87. "media_crc32":428957395,
  88. "media_id":"qiniu/file/a/2745EACC984972A4F914C7614CEC1572"
  89. }
  90. }
  91. }
  92. 自定义消息
  93. {
  94. "version": 1,
  95. "target_type": "single",
  96. "target_id": "ppppp",
  97. "from_type": "admin",
  98. "from_id": "admin_caiyh",
  99. "msg_type": "voice",
  100. "msg_body": {
  101. json define yourself
  102. }
  103. }

相关文档