LINE API
# LINE API
# 接口声明
在调用接口时必须在 https 请求的 header 中携带 "token" 参数。
Token 是智齿客服接口开放平台全局唯一的接口调用凭据。 开发者在调用各业务接口时都需使用 Token,开发者需要进行妥善保存。 Token 的存储至少要保留 32 个字符空间。Token 的有效期目前为 24 个小时,需定时刷新,或根据接口返回的 Token 失效提示,进行重新获取。请求 Token 接口,无论 Token 是否存在,都会返回新的 Token,并重置 Token 的过期时间(目前 24 小时)。
Token 使用方式说明: 1、开发者需要统一获取和管理 Token,在调用智齿客服各个业务开放接口时都应该使用同一个的 Token,不应该每个业务都刷新获取新的 Token,否则容易导致 Token 失效,影响接口的正常调用; 2、目前 Token 的有效期通过返回的 expire_in 来传达,目前是 86,400 秒之内的值。开发者需要根据这个有效时间提前去刷新新 Token。 3、开发者需要根据接口返回的 Token 失效提示,进行重新获取 Token。
# 接口调用
# ● 获取Token
接口说明:
获取 API 开放接口 Token,此 Token 仅适用于智齿开放平台 5.0 版本全部 API 接口 。API 接口中的参数 appid 、 app_key 请联系智齿售后人员获取。
请求方式:
GET
请求地址:
https://sg.sobot.com/api/get_token
请求参数:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
appid | String | 是 | 接口凭证 Id,第三方用户接口调用唯一凭证 id |
create_time | String | 是 | 10位数时间戳 |
sign | String | 是 | 签名 md5(appid+create_time+app_key) |
返回参数:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
ret_code | String | 是 | 返回编码 |
ret_msg | String | 是 | 返回信息 |
item | Object | 否 | 返回对象 |
item 对象:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
token | String | 是 | token 编码 |
expires_in | String | 是 | 凭证有效时间,单位:秒 |
时间戳转换参考工具:
http://tool.chinaz.com/Tools/unixtime.aspx
sign 签名生成示例:
例如,appid = "1"; create_time="1569397773"; app_key="2"
sign = Md5("115693977732") 为 258eec3118705112b2c53dc8043d4d34。
请求示例:
curl https://sg.sobot.com/api/get_token?appid=1&create_time=1569397773&sign=258eec3118705112b2c53dc8043d4d34
返回示例:
{
"item": {
"token": "4ac37cb2e9c740dba4b75a34d5358802",
"expires_in": "86400"
},
"ret_code": "000000",
"ret_msg": "操作成功"
}
2
3
4
5
6
7
8
# Webhook 消息转发
说明:
webhook通知消息返回示例, 在智齿管理中心后台配置,所有消息类型都遵循一个通用的结构,其中包含目的地、事件、回复令牌、消息类型、模式、时间戳、消息来源等信息。以下是一个示例,并对各个字段进行解释:
# ● 完整示例
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"id": "444573844083572737",
"type": "text",
"quoteToken": "q3Plxr4AgKd...",
"text": "@All @example Good Morning!! (love)",
"emojis": [
{
"index": 29,
"length": 6,
"productId": "5ac1bfd5040ab15980c9b435",
"emojiId": "001"
}
]
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
destination | String | 是 | 接收消息的目标用户 ID,通常是您所管理的 LINE 官方帐号的用户 ID。 |
events | Array | 是 | 事件数组,每个元素代表一个发生的事件 |
replyToken | String | 是 | 回复令牌,用于回复该事件的消息 |
type | String | 是 | 事件类型,在消息事件中通常为 "message" |
mode | String | 是 | 事件模式,可以是 "active" 或 "standby" |
timestamp | Long | 是 | 事件发生的时间戳,单位是毫秒 |
source | Object | 是 | 事件来源信息,包含来源类型和用户 ID |
webhookEventId | String | 是 | Webhook 事件 ID |
deliveryContext | Object | 是 | 投递上下文信息,表示事件是否为重新投递 |
message | Object | 是 | 消息内容,根据消息类型的不同包含不同的字段 |
{
"type": "user",
"userId": "U4af4980629..."
}
2
3
4
5
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
type | String | 是 | 来源类型,可以是 "user"、"group" 或 "room" |
userId | String | 是 | 用户 ID |
{
"isRedelivery": false
}
2
3
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
isRedelivery | Boolean | 是 | 是否为重新投递 |
# ● 接收客户消息
# 1. 文本类型消息
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"id": "444573844083572737",
"type": "text",
"quoteToken": "q3Plxr4AgKd...",
"text": "@All @example Good Morning!! (love)",
"emojis": [
{
"index": 29,
"length": 6,
"productId": "5ac1bfd5040ab15980c9b435",
"emojiId": "001"
}
]
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
id | String | 是 | 消息ID |
type | String | 是 | text |
text | String | 是 | 消息内容文本 |
emojis | Array | 否 | 消息内容表情 |
mention | Array | 否 | 消息内容表情 |
# 2. 图片类型消息
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"type": "message",
"message": {
"type": "image",
"id": "354718705033693859",
"quoteToken": "q3Plxr4AgKd...",
"contentProvider": {
"type": "line"
},
"imageSet": {
"id": "E005D41A7288F41B65593ED38FF6E9834B046AB36A37921A56BC236F13A91855",
"index": 1,
"total": 2
}
},
"timestamp": 1627356924513,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"replyToken": "7840b71058e24a5d91f9b5726c7512c9",
"mode": "active"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
id | String | 是 | 消息ID |
type | String | 是 | image |
quoteToken | String | 是 | 消息的引用令牌 |
contentProvider.type | String | 是 | 图像文件的提供者 1.line:该图片由 LINE 用户发送。可以通过指定消息 ID 并调用获取内容端点来检索图片文件的二进制数据 2.external: 属性中包含图片文件的 URL |
contentProvider.originalContentUrl | String | 否 | 图片文件的 URL。仅contentProvider.type在时包含external |
imageSet.id | String | 否 | 图片集 ID。仅在同时发送多张图片时包含 |
imageSet.index | Integer | 否 | 以 开头的索引1,表示同时发送的一组图像中的图像编号 |
imageSet.total | Integer | 否 | 同时发送的图片总数。如果同时发送两张图片,则数量为2 |
# 3. 视频类型消息
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"id": "325708",
"type": "video",
"quoteToken": "q3Plxr4AgKd...",
"duration": 60000,
"contentProvider": {
"type": "external",
"originalContentUrl": "https://example.com/original.mp4",
"previewImageUrl": "https://example.com/preview.jpg"
}
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
id | String | 是 | 消息ID |
type | String | 是 | video |
quoteToken | String | 是 | 消息的引用令牌 |
duration | String | 否 | 视频文件的长度(毫秒) |
contentProvider.type | String | 是 | 视频文件的提供商 1.line:该视频由 LINE 用户发送。可以通过指定消息 ID 并调用获取内容端点来检索视频文件的二进制数据 2.external:属性中包含视频文件的 URL contentProvider.originalContentUrl。如果视频文件的提供商是external,则无法使用获取内容端点检索视频文件的二进制数据 |
contentProvider.originalContentUrl | String | 否 | 视频文件的 URL。仅contentProvider.type在时包含external。视频文件所在的服务器不是由 LY Corporation 提供的 |
contentProvider.previewImageUrl | String | 否 | 预览图片的 URL。仅contentProvider.type在时包含external。预览图片文件所在的服务器不是由 LY Corporation 提供的 |
# 4. 音频类型消息
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"id": "325708",
"type": "audio",
"duration": 60000,
"contentProvider": {
"type": "line"
}
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
id | String | 是 | 消息ID |
type | String | 是 | audio |
duration | String | 否 | 音频文件的长度(毫秒)) |
contentProvider.type | String | 是 | 音频文件的提供者 1.line:音频由 LINE 用户发送。可以通过指定消息 ID 并调用获取内容端点来检索音频文件的二进制数据 2.external: 属性中包含音频文件的 URL contentProvider.originalContentUrl。如果音频文件的提供程序是external,则无法使用获取内容端点检索音频文件的二进制数据 |
contentProvider.originalContentUrl | String | 否 | 音频文件的 URL。仅contentProvider.type在时包含external。音频文件所在的服务器不是由 LY Corporation 提供的 |
# 5. 文件类型消息
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"id": "325708",
"type": "file",
"fileName": "file.txt",
"fileSize": 2138
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
id | String | 是 | 消息ID |
type | String | 是 | file |
fileName | String | 是 | 文件名 |
fileSize | Integer | 是 | 文件大小(以字节为单位) |
# 6. 地点类型消息
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"id": "325708",
"type": "location",
"title": "my location",
"address": "1-3 Kioicho, Chiyoda-ku, Tokyo, 102-8282 Japan",
"latitude": 35.67966,
"longitude": 139.73669
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
id | String | 是 | 消息ID |
type | String | 是 | location |
title | String | 否 | 标题 |
address | String | 否 | 地址 |
latitude | Decimal | 是 | 纬度 |
longitude | Decimal | 是 | 经度 |
# 7. 贴纸类型消息
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
},
"message": {
"type": "sticker",
"id": "1501597916",
"quoteToken": "q3Plxr4AgKd...",
"stickerId": "52002738",
"packageId": "11537",
"stickerResourceType": "ANIMATION",
"keywords": [
"cony",
"sally",
"Staring",
"hi",
"whatsup",
"line",
"howdy",
"HEY",
"Peeking",
"wave",
"peek",
"Hello",
"yo",
"greetings"
]
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
id | String | 是 | 消息ID |
type | String | 是 | sticker |
quoteToken | String | 是 | 消息的引用令牌 |
packageId | String | 是 | 包编号 |
stickerId | String | 是 | 贴纸 ID |
stickerResourceType | String | 是 | 贴纸资源类型 1.STATIC:静态图像 2.ANIMATION:动画贴纸 3.SOUND:有声贴纸 4.ANIMATION_SOUND:带声音的动画贴纸 5.POPUP:弹出贴纸或效果贴纸 6.POPUP_SOUND:带声音的弹出贴纸或带声音的效果贴纸 7.CUSTOM:自定义贴纸。无法检索用户输入的文本 8.MESSAGE:留言贴纸 |
keywords | Array | 否 | 最多 15 个描述贴纸的关键字的数组。如果贴纸有 16 个或更多关键字,则将返回随机选择的 15 个关键字。每个活动的关键字选择都是随机的,因此同一贴纸可能会返回不同的关键字 |
# ● 好友状态变更事件
# 1. 关注事件
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "85cbe770fa8b4f45bbe077b1d4be4a36",
"type": "follow",
"mode": "active",
"timestamp": 1705891467176,
"source": {
"type": "user",
"userId": "U3d3edab4f36c6292e6d8a8131f141b8b"
},
"webhookEventId": "01HMQGW40RZJPJM3RAJP7BHC2Q",
"deliveryContext": {
"isRedelivery": false
},
"follow": {
"isUnblocked": false
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
type | String | 是 | follow |
# 2. 取消关注事件
返回示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"type": "unfollow",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
}
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
type | String | 是 | unfollow |
# 获取媒体消息内容
# ● 获取媒体消息内容(图片/音频/视频/文件)
请求方式:
GET
请求地址:
https://sg.sobot.com/chat-line/api/line/get_media_content
请求标头:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
token | String | 是 | token |
路径参数:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
messageid | String | 是 | line消息 ID |
appid | String | 是 | 渠道id |
请求示例:
curl -v -X GET https://sg.sobot.com/chat-line/api/line/get_media_content?appid=12323&messageid=1501597916
-H 'token: 4ac37cb2e9c740dba4b75a34d5358802'
2
返回示例:
{
"item": {
"https://sg.sobot.com/chatres/c72d7e67c0f64d38879747c9cfd68e85/msg/20240626/0d63b822ba724e858a128f3f27a4f405/017a4945aa5a4832bf1809acc1878cb2.png"
},
"ret_code": "000000",
"ret_msg": "操作成功"
}
2
3
4
5
6
7
# 查询群发任务数据
接口说明:查询群发任务数据
请求方式:
POST
请求地址:
https://sg.sobot.com/chat-set/api/line/query_task_list
请求参数:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
task_start_time | Long | 否 | 任务开始时间(形如:1714295033250) |
task_end_time | Long | 否 | 任务结束时间(形如:1714295033250) |
sender | String | 否 | sender(Line官方账号) |
task_name | String | 否 | 任务名称 |
page_no | Integer | 否 | 开始页 (默认1) |
page_size | Integer | 否 | 查询条数(默认15,最大100) |
返回参数:
参数 | 类型 | 描述 |
---|---|---|
ret_code | String | 返回编码 |
ret_msg | String | 返回信息 |
items | List | 返回对象 |
page_count | Integer | 总页数 |
page_no | Integer | 开始页 |
page_size | Integer | 条数 |
total_count | Integer | 总条数 |
items 对象:
参数 | 类型 | 描述 |
---|---|---|
task_name | String | 任务名称 |
task_source | Integer | 任务来源(1.营销群发) |
taskid | String | 任务ID |
timezone | String | 时区 |
task_start_time | String | 任务开始时间 |
task_end_time | String | 任务结束时间 |
send_time_type | Integer | 发送类型(1.立即发送 2定时发送) |
estimate_send_num | Long | 预计发送数 |
send_success_num | Long | 发送成功数 |
send_error_num | Long | 发送失败数 |
请求示例:
curl https://sg.sobot.com/chat-set/api/line/query_task_list
-X POST
-H 'content-type:application/json'
-H 'token: 4ac37cb2e9c740dba4b75a34d5358802'
-d '{
"page_no": 1,
"page_size": 15,
"task_start_time": 1714295033250,
"task_end_time": 1714295033250,
"sender": "123456",
"task_name": "测试"
}'
2
3
4
5
6
7
8
9
10
11
12
返回示例:
{
"items": [
{
"task_name": "走查",
"send_error_num": 2,
"estimate_send_num": 2,
"task_source": 1,
"timezone": "GMT+08:00",
"task_end_time": "2024-07-10 20:11:15",
"send_success_num": 0,
"send_time_type": 1,
"taskid": "aa8eb4e79d8b46efaf4320622faf8e8d",
"task_start_time": "2024-07-10 20:10:12"
},
{
"task_name": "群发123123",
"send_error_num": 6,
"estimate_send_num": 7,
"task_source": 1,
"timezone": "GMT+08:00",
"task_end_time": "2024-07-03 13:55:15",
"send_success_num": 1,
"send_time_type": 1,
"taskid": "4ce03cb9585a4c7a941688dda8a695db",
"task_start_time": "2024-07-03 13:54:59"
}
],
"page_count": 5,
"page_no": 1,
"page_size": 2,
"ret_code": "000000",
"ret_msg": "操作成功",
"total_count": 9
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 查询发送记录
接口说明:查询发送记录数据
请求方式:
POST
请求地址:
https://sg.sobot.com/chat-set/api/line/send_record_list
请求参数:
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
send_start_time | Long | 否 | 发送开始时间(形如:1714295033250)[默认查询最近一个月] |
send_end_time | Long | 否 | 发送结束时间(形如:1714295033250)[默认查询最近一个月] |
messageid | String | 否 | 消息id |
message_status | String | 否 | 消息状态(见:message_status参数) |
taskid | String | 否 | 任务id |
task_name | String | 否 | 任务名称 |
send_agentid | String | 否 | 发送人 |
sender | String | 否 | sender |
recipient | String | 否 | 接收人 |
page_no | Integer | 否 | 开始页 (默认1) |
page_size | Integer | 否 | 查询条数(默认15,最大100) |
返回参数:
参数 | 类型 | 描述 |
---|---|---|
ret_code | String | 返回编码 |
ret_msg | String | 返回信息 |
items | List | 返回对象 |
page_count | Integer | 总页数 |
page_no | Integer | 开始页 |
page_size | Integer | 条数 |
total_count | Integer | 总条数 |
items 对象:
参数 | 类型 | 描述 |
---|---|---|
task_name | String | 任务名称 |
error_code | String | 错误日志(详情见:error_code错误码 ) |
timezone | String | 时区 |
messageid | String | 消息ID |
taskid | String | 任务ID |
recipient_id | String | 接收人ID |
send_agentid | String | 发送人 |
send_time | Long | 发送时间 |
sender | String | sender(Line官方账号) |
status_update_time | Long | 状态更新时间 |
请求示例:
curl https://sg.sobot.com/chat-set/api/line/send_record_list
-X POST
-H 'content-type:application/json'
-H 'token: 4ac37cb2e9c740dba4b75a34d5358802'
-d '{
"page_no": 1,
"page_size": 15,
"send_start_time": "1714295033250",
"send_end_time": "1714295033250",
"sender": "123456",
"messageid": "111111222222222333333333",
"send_agentid":"4ac37cb2e9c740dba4b75a34d5358802",
"recipient":"12345678,
"message_status":"2",
"taskid": 1123412432341234123412431,
"task_name": "测试"
}'
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
返回示例:
{
"items": [
{
"task_name": "test",
"send_time": 1720614015369,
"sender": "2005652357",
"timezone": "GMT+08:00",
"messageid": "",
"error_code": "999999",
"send_agentid": "67bb2e6ec79b4a43a2e235d6c7256fb0",
"taskid": "cdd8d20360b54aae9f73bc71296bbdcb",
"recipient_id": "131231",
"status_update_time": 1720614015369
},
{
"task_name": "群发123123",
"send_time": 1719986115534,
"sender": "2005652357",
"timezone": "GMT+08:00",
"messageid": "515320261680824337,515320261478973734",
"error_code": "000000",
"send_agentid": "3bdc079ab21d4db1847e36ae752e1048",
"taskid": "4ce03cb9585a4c7a941688dda8a695db",
"recipient_id": "Uf0246987876aea9a6b1e6cd7e3cd81c9",
"status_update_time": 1719986115534
}
],
"page_count": 2,
"page_no": 1,
"page_size": 12,
"ret_code": "000000",
"ret_msg": "操作成功",
"total_count": 19
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 错误编码
# ● 操作成功
错误编码 | 错误说明 |
---|---|
000000 | 操作成功(除此编码以外的编码为错误编码) |
# ● 系统异常
错误编码 | 错误说明 |
---|---|
900001 | token 为空 |
900002 | token 已失效,请重新获取 |
999994 | 参数异常,请检查 |
999999 | 系统未知异常 |
# ● error_code错误码
参数 | 描述 |
---|---|
000000 | 发送成功 |
999999 | 发送失败 |
# ● message_status
参数 | 描述 |
---|---|
0 | 已发送 |
1 | 已送达 |
2 | 已阅读 |
9 | 发送失败 |