消息推送开发指南
部署在WorkPlus平台应用中心中的各种应用——包括轻应用、iOS和Android原生应用——可以通过WorkPlus平台向用户发送包括文本和图文在内的各种消息。
本文具体描述消息发送请求和响应的详细格式。
1. 支持的消息类型
WorkPlus支持下列的消息类型:
- 文本消息TEXT
- 图片消息IMAGE
- 语音消息VOICE
- 文件消息FILE
- 图文消息ARTICLE
2. 消息推送API
WorkPlus通过REST向外界暴露API。发送所有类型消息的API都是下面这个:
POST https://api.workplus.io/app/mbox?access_token={access_token}
(如果您的WorkPlus是私有化部署,请根据实际情况修改API服务器的域名/IP和端口)
请把{access_token}替换为你的应用登录WorkPlus后获得的access_token。获取access_token的方法请参考应用快速接入与单点登录指南。
3. HTTP HEADER设置
WorkPlus RESTful API的请求和响应的媒体类型都是JSON。因此,发送消息时必须设置以下的HTTP HEADER:
Content-Type="application/json"
4. 请求参数
请求参数是个JSON对象,下面是个文本消息请求参数的例子,要将文本消息“你好!”推送给名为"zhangsan", "lisi"的两个用户:
{
"type": "TEXT",
"body": {
"content": "你好!"
"dest_type": "P2P"
},
"client_ids": ["zhangsan", "lisi"]
}
每种消息类型都包含type、body和client_ids三个属性。
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
type | 消息类型,有TEXT(文本)、图片(IMAGE)、VOICE(语音)、VIDEO(视频)、FILE(文件)、ARTICLE(图文)等几种类型 | string | true |
body | 消息体。不同类型的消息的消息体内容各不相同 | JSON对象 | true |
client_ids | 接收方的username列表。可以同时向一个或一个以上的人发送同一条消息 | JSON数组 | true |
不同的消息type具有不同的body结构(下文会详细介绍)。
各种消息请求的body对象中都有个必填的dest_type属性,其取值范围只有P2P和DISCUSSION。当dest_type=P2P时,消息发送给个人(client_ids是用户名的列表);当dest_type=DISCUSSION时,消息发送给群组(client_ids是群组名称的列表)。
4.1 文本消息TEXT
范例:
{
"type": "TEXT",
"body": {
"content": "你好!"
"dest_type": "P2P"
},
"client_ids": ["zhangsan", "lisi"]
}
当请求对象的type="TEXT"时,body对象包含下列属性:
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
content | 要推送的文本消息内容 | 文本 | true |
4.2 图片消息IMAGE
范例:
{
"type" : "IMAGE",
"body": {
"media_id": "56722e6d83143c4999b45843",
"content" : "/9j/4AAQSkZJRgABAQAASABIAAD/"
"dest_type": "DISCUSSION"
}
"client_ids": ["dev"]
}
当请求对象的type="IMAGE"时,body对象包含下列属性:
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
media_id | 要推送的图片在WorkPlus媒体中心中的媒体ID | 文本 | true |
content | 要推送的图片内容 | 文本 | true |
4.3 语音消息VOICE
范例:
{
"type": "VOICE",
“body”: {
"media_id": "56722ac083143c4999b4583f",
"played": "YES",
"duration": 2,
"dest_type": "P2P"
}
"client_ids": ["zhangsan", "lisi"]
}
当请求对象的type="IMAGE"时,body对象包含下列属性:
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
media_id | 要推送的音频在WorkPlus媒体中心中的媒体ID | 文本 | true |
played | 是否即时播放 | 布尔值 | true |
duration | 播放时长(秒) | 整数 | true |
4.4 文件消息FILE
范例:
{
"type": "FILE",
“body”: {
"media_id": "5672706f83143c4999b45849",
"name": "HTTP-RFC2616.pdf",
"size" : 713185
"dest_type": "P2P"
}
"client_ids": ["zhangsan", "lisi"]
}
当请求对象的type="FILE"时,body对象包含下列属性:
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
media_id | 要推送的文件在WorkPlus媒体中心中的媒体ID | 文本 | true |
name | 文件名 | 文本 | true |
size | 文件长度(字节) | 整数 | true |
4.5 图文消息ARTICLE
范例:
{
"type": "ARTICLE",
"body": {
"articles":
[
{
"url" : "文章打开地址",
"show_cover" : true,
"cover_url" : "图文封面图片url",
"summary" : "文章摘要",
"create_time" : 1433314282603,
"content_source" : "文章原文链接",
"author" : "文章作者",
"sort" : 0,
"title" : "文章标题",
"content" : "<p>文章内容</p>"
}
]
"dest_type": "P2P"
},
"client_ids": ["zhangsan", "lisi"]
}
当请求对象的type="ARTICLE"时,body对象包含单一属性articles,它本身是一个JSON数组,包含一个或多个JSON对象,这些该对象有下列的属性:
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
url | 文章的URL | 文本 | true |
show_cover | 是否显示封面图片 | 布尔值 | true |
cover_url | 图文封面图片的URL | 文本 | true |
summary | 文章摘要 | 文本 | false |
create_time | 用数值表示的创建时间 | 整数 | true |
content_source | 文章原文链接 | 文本 | false |
author | 文章作者 | 文本 | false |
sort | 排序号(按由小到大顺序排列) | 整数 | true |
title | 文章标题 | 文本 | true |
content | 文章内容 | 文本 | true |
5. 响应格式
消息推送的响应同样是个JSON对象。
5.1 成功响应
成功响应的范例:
{
"status": 0,
"message": "Everything is ok.",
"result": {
"id": "推送计划ID",
"app_id": "应用id",
"tenant_id": "租户id",
"material_id": "",
"expects": "",
"fails": "",
"oks": "",
"create_time": "创建时间",
"refresh_time": "刷新时间",
"expect_time": ""
}
}
说明:
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
status | 执行状态。0为正常,各种非0值代表各种不同的异常 | 整数 | true |
message | 执行结果说明。如果一切正常,内容为"Everything is ok."。如果执行异常,呈现异常消息 | 文本 | true |
result | 执行结果内容 | JSON对象 | true |
result对象的属性说明如下:
参数名称 | 说明 | 类型 | 是否必填 |
---|---|---|---|
id | 自动生成的消息ID | 文本 | true |
app_id | 发送消息的应用的ID | 文本 | true |
tenant_id | 所属租户的ID | 文本 | true |
material_id | 所属租户的ID | 文本 | true |
expects | 文本 | true | |
fails | 文本 | true | |
oks | 文本 | true | |
create_time | 消息创建时间 | 文本 | true |
refresh_time | 刷新时间 | 文本 | true |
expect_time | 文本 | true |
5.2 失败响应
失败响应的范例:
{
"status": 115,
"message": "Internal Server Error.",
"result": {
}
}
属性说明同成功响应。不过status属性是非0整数。