管理应用
管理应用
消息推送
应用向成员推送消息
请求方式:POST(HTTPS)
请求地址:https://api.im.baidu.com/api/message/send?access_token=ACCESS_TOKEN
请求body:(每种类型的消息请求body不同,详见消息推送格式)
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
access_token | String | Url参数 | 是 | 调用接口凭证,获取方法查看获取企业凭证 |
其他参数 | JsonObject | RequestBody | 是 | 发送不同类型的消息使用不同的参数,详见下面 |
权限要求: access_token对应管理组须拥有指定应用的使用权限,消息接受者必须处于应用的可见范围内并已经关注应用
返回结果:
{
"errcode": 0,
"errmsg": "ok",
"invaliduser": "UserID1",
"invalidparty":"PartyID1",
"invalidtag":"TagID1"
}
参数说明:
参数 | 说明 |
---|---|
errcode | 返回码 |
errmsg | 对返回码的文本描述内容 |
invaliduser | 无效员工列表 |
invalidparty | 无效部门列表 |
invalidtag | 无效标签列表 |
消息推送格式
文本消息
消息示例:
{
"touser": "UserID1|UserID2|UserID3",
"toparty": " PartyID1 | PartyID2 ",
"totag": " TagID1 | TagID2 ",
"msgtype": "text",
"agentid": "1",
"text": {
"content": "Holiday Request For ****(http://www.baidu.com)"
}
}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
touser | String | RequestBody | 否 | 成员ID列表 消息接收者,多个接收者用竖线分隔,最多支持1000个 touser、toparty、totag三者不能全空 |
toparty | String | RequestBody | 否 | 部门ID列表 消息接收者,多个接收者用竖线分隔,最多支持100个 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
totag | String | RequestBody | 否 | 标签ID列表 消息接收者,多个接收者用竖线分隔 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
msgtype | String | RequestBody | 是 | text,固定值 |
agentid | String | RequestBody | 是 | 应用ID 整型,管理后台应用详情页面获取 |
content | String | RequestBody | 是 | 消息内容 |
图文消息
消息示例:
{
"touser": "UserID1|UserID2|UserID3",
"toparty": " PartyID1|PartyID2 ",
"totag": " TagID1|TagID2 ",
"msgtype": "news",
"agentid": "1",
"news": {
"articles": [
{
"title": "Title",
"description": "Description",
"url": "URL",
"picurl": "PIC_URL"
},
{
"title": "Title",
"description": "Description",
"url": "URL",
"picurl": "PIC_URL"
}
]
}
}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
touser | String | RequestBody | 否 | 成员ID列表 消息接收者,多个接收者用竖线分隔,最多支持1000个 touser、toparty、totag三者不能全空 |
toparty | String | RequestBody | 否 | 部门ID列表 消息接收者,多个接收者用竖线分隔,最多支持100个 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
totag | String | RequestBody | 否 | 标签ID列表 消息接收者,多个接收者用竖线分隔 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
msgtype | String | RequestBody | 是 | news,固定值 |
agentid | String | RequestBody | 是 | 应用ID 整型,管理后台应用详情页面获取 |
articles | List | RequestBody | 是 | 图文消息 一个图文消息支持1到8条图文 |
title | String | RequestBody | 是 | 标题,显示在封面上方 |
description | String | RequestBody | 是 | 摘要,显示在封面下方 |
url | String | RequestBody | 是 | 点击消息后跳转的链接 |
picurl | String | RequestBody | 是 | 封面图的URL 封面图支持JPG、PNG格式,较好的效果为大图640 320,小图80 80。如不填,在客户端不显示图片 |
图片消息
消息示例:
{
"touser": "UserID1|UserID2|UserID3",
"toparty": " PartyID1 | PartyID2 ",
"totag": " TagID1 | TagID2 ",
"msgtype": "image",
"agentid": "1",
"image": {
"content": "A+QIGv8u3c6YCCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKKCAAgoooIACCiiggAIKKFAjAv8L0+vxkA8rL2IAAAAASUVORK5CYII="
}
}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
touser | String | RequestBody | 否 | 成员ID列表 消息接收者,多个接收者用竖线分隔,最多支持1000个 touser、toparty、totag三者不能全空 |
toparty | String | RequestBody | 否 | 部门ID列表 消息接收者,多个接收者用竖线分隔,最多支持100个 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
totag | String | RequestBody | 否 | 标签ID列表 消息接收者,多个接收者用竖线分隔 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
msgtype | String | RequestBody | 是 | image,固定值 |
agentid | String | RequestBody | 是 | 应用ID 整型,管理后台应用详情页面获取 |
content | String | RequestBody | 是 | 图片byte数据base64编码后的值,byte小于1m |
多格式消息
消息示例
{
"touser": "UserID1|UserID2|UserID3",
"toparty": " PartyID1 | PartyID2 ",
"totag": " TagID1 | TagID2 ",
"msgtype": "richtext",
"agentid": "1",
"richtext": {
"content": [
{
"type": "text",
"text": "阿斯顿发斯蒂芬"
},
{
"type": "a",
"href": "event:manual",
"label": "百度"
}
]
}
}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
touser | String | RequestBody | 否 | 成员ID列表 消息接收者,多个接收者用竖线分隔,最多支持1000个 touser、toparty、totag三者不能全空 |
toparty | String | RequestBody | 否 | 部门ID列表 消息接收者,多个接收者用竖线分隔,最多支持100个 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
totag | String | RequestBody | 否 | 标签ID列表 消息接收者,多个接收者用竖线分隔 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
msgtype | String | RequestBody | 是 | richtext,固定值 |
agentid | String | RequestBody | 是 | 应用ID 整型,管理后台应用详情页面获取 |
content | String | RequestBody | 是 | 消息内容 |
type | String | RequestBody | 是 | text、a,二选一 |
text | String | RequestBody | 否 | 当type="text"时必须 |
href | String | RequestBody | 否 | 当type="a"时有效 |
label | String | RequestBody | 否 | 当type="a"时有效 |
Markdown
消息示例
{
"touser": "UserID1|UserID2|UserID3",
"toparty": " PartyID1 | PartyID2 ",
"totag": " TagID1 | TagID2 ",
"msgtype": "md",
"agentid": "1",
"md": {
"content": "# markdown示例 \n## 标题2 \n* 列表1 \n![alt](https://www.baidu.com/img/baidu_jgylogo3.gif)"
}
}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
touser | String | RequestBody | 否 | 成员ID列表 消息接收者,多个接收者用竖线分隔,最多支持1000个 touser、toparty、totag三者不能全空 |
toparty | String | RequestBody | 否 | 部门ID列表 消息接收者,多个接收者用竖线分隔,最多支持100个 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
totag | String | RequestBody | 否 | 标签ID列表 消息接收者,多个接收者用竖线分隔 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
msgtype | String | RequestBody | 是 | richtext,固定值 |
agentid | String | RequestBody | 是 | 应用ID 整型,管理后台应用详情页面获取 |
content | String | RequestBody | 是 | 消息内容 |
type | String | RequestBody | 是 | md |
md | String | RequestBody | 否 | 当type="md"时必须 |
content | String | RequestBody | 否 | Markdown消息内容 |
Markdown支持如下语法子集:
1.标题:1-6级标题,# 号和文本之间要有一个空格
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
2.粗体:
**加粗文本**
3.斜体:
*斜体文本*
4.引用:
>引用文本
5.字体颜色:只支持三种内置颜色
<font color="green">绿色</font>
<font color="gray">灰色</font>
<font color="red">红色</font>
6.链接
1. [百度一下](https://www.baidu.com/)
2. https://www.baidu.com/
7.有序列表:1. 和文本之间要加一个空格
1. 有序列表
2. 有序列表
3. 有序列表
8.无序列表:- 和文本之间要加一个空格
- 无序列表
- 无序列表
9.行内代码
`code`
文件消息
消息示例:
{
"touser": "UserID1|UserID2|UserID3",
"toparty": " PartyID1 | PartyID2 ",
"totag": " TagID1 | TagID2 ",
"msgtype": "file",
"agentid": "1",
"file": {
"md5": "a6f7b6a9b5e821d674a8590764715df4",
"filename": "设计文档.txt"
}
}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
touser | String | RequestBody | 否 | 成员ID列表 消息接收者,多个接收者用竖线分隔,最多支持1000个 touser、toparty、totag三者不能全空 |
toparty | String | RequestBody | 否 | 部门ID列表 消息接收者,多个接收者用竖线分隔,最多支持100个 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
totag | String | RequestBody | 否 | 标签ID列表 消息接收者,多个接收者用竖线分隔 当touser为@all时忽略本参数 touser、toparty、totag三者不能全空 |
msgtype | String | RequestBody | 是 | image,固定值 |
agentid | String | RequestBody | 是 | 应用ID 整型,管理后台应用详情页面获取 |
filename | String | RequestBody | 是 | 附件名称,注:带文件格式后缀的 |
md5 | String | RequestBody | 是 | 与文件上传接口相同的md5值 |
接收消息和事件
为了能够让第三方应用和用户进行双向通信,服务商可以在应用的开发信息中设置回调配置,设置回调配置成功后,如应用主动给用户发过消息,则用户可以在会话框中向应用发消息,如流平台会将用户发送的消息转发至应用的接收消息服务器URL,同时也会将各类事件通知到此URL
设置接收服务器
服务商可以在应用的开发信息中设置回调配置
参数 | 说明 |
---|---|
URL | 接收消息和事件服务器URL,由开发者搭建,建议使用HTTPS |
Token | 用于生成签名,可由企业任意填写 |
EncodingAESKey | 用于消息体的加密,是AES密钥的Base64编码,长度固定为22个字符,从a-z、A-Z、0-9共62个字符中选取,解码后即为16字节长的AESKey |
验证URL有效性
当点击“保存”提交以上信息时,Hi平台会发送一条POST验证消息到填写的回调URL上,</br> 接收消息的服务器接收到验证请求后,需要作出正确的响应才能通过URL验证。</br> 校验通过后你的服务才可以正常接收机器人收到的消息。</br> 假设回调URL为https://example.com
</br>企业平台会使用以下参数发送请求到回调地址。
请求地址:https://example.com
请求body:signature=5d03603ea6f77b5608d5735a914b3221×tamp=1543647265&rn=376117246&echostr=7cff9
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
signature | String | Query参数 | 是 | 签名 用于验证调用者的合法性。具体算法见附录 |
rn | Integer | Query参数 | 是 | 请求中的随机数 |
timestamp | Integer | Query参数 | 是 | 请求中的timestamp |
echostr | String | Query参数 | 是 | 随机字符串 |
接收消息服务器URL收到请求后,需要做如下操作:
- 通过参数signature对请求进行校验,确认调用者的合法性。详见附录
- 在3秒内响应请求,响应内容为上一步得到的echostr值之后接入验证生效,接收消息开启成功。
接收事件
请求方式:POST(HTTPS)
请求地址:https://example.com/?signature=5d03603ea6f77b5608d5735a914b3221×tamp=1543647265&rn=376117246
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
signature | String | Query参数 | 是 | 签名 用于验证调用者的合法性。具体算法见附录 |
rn | Integer | Query参数 | 是 | 请求中的随机数 |
timestamp | Integer | Query参数 | 是 | 请求中的timestamp |
接收消息服务器URL收到请求后,需要做如下操作:
- 可通过参数signature对请求进行校验,确认调用者的合法性。详见附录
- 开发者需要及时响应http status 200,服务器在五秒内收不到响应会断掉连接
请求body:
事件明文经过AES加密后的值Base64_Encode(AES_Encrypt[msg]),msg为事件内容明文,解密方式见附录 msg明文示例:
{
"eventtype": "CHANGE_AUTH",
"suiteid": "tjATMNQPPASSWDR",
"authcorpid": "hiTXaBQPMQTPM",
"eventtime": 12121212121 //ms
}
接收事件协议的说明
- 如流服务器在3秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。如果在调试中,发现无法收到响应的消息,可以检查是否消息处理超时。
- 当接收成功后,http头部返回200表示接收ok,其他错误码会被判定失败并发起重试
接收服务号消息
请求方式:POST(HTTPS) 请求地址:https://example.com/?signature=5d03603ea6f77b5608d5735a914b3221×tamp=1543647265&rn=376117246
请求body: message=xml_string&messageJson=json_string
xml_string格式:
<xml>
<ToUserName><![CDATA[corpId]></ToUserName>
<AgentID><![CDATA[agentId]]></AgentID>
<Encrypt><![CDATA[msgEncrypt]]></Encrypt>
</xml>
json_string格式:
{
"ToUserName": "corpId",
"AgentID": "agentId",
"Encrypt": "msgEncrypt,解密后为xml对应的json格式"
}
参数说明:
参数 | 类型 | 参数位置 | 是否必须 | 说明 |
---|---|---|---|---|
signature | String | Url参数 | 是 | 签名 用于验证调用者的合法性。具体算法见附录 |
rn | Integer | Url参数 | 是 | 请求中的随机数 |
timestamp | Integer | Url参数 | 是 | 请求中的timestamp |
ToUserName | String | RequestBody | 是 | 企业CorpID |
AgentID | String | RequestBody | 是 | 接收消息的应用ID,在管理后台应用详情页面获取 |
Encrypt | String | RequestBody | 是 | 消息内容密文 |
消息明文经过AES加密后的值Base64_Encode(AES_Encrypt[msg]),msg为消息内容明文,解密方式见附录
接收消息服务器URL收到请求后,需要做如下操作:
- 可通过参数signature对请求进行校验,确认调用者的合法性。详见附录
- 解密Encrypt参数得到消息内容,详见附录
- 开发者需要及时响应http status 200,服务器在五秒内收不到响应会断掉连接
接收事件格式
授权通知事件
请求body:
{
"eventtype": "CHANGE_AUTH",
"suiteid": "tjATMNQPPASSWDR",
"authcorpid": "hiTXaBQPMQTPM",
"eventtime": 12121212121 //ms
}
参数说明:
参数 | 说明 |
---|---|
eventtype | CHANGE_AUTH:变更授权通知,当授权方(即授权企业)在管理后台修改了对应用的授权后,如流平台会推送变更授权通知。服务商接收到变更通知之后,需自行调用获取企业授权信息进行授权内容变更比对 CANCEL_AUTH:取消授权通知,当授权方(即授权企业)在管理后台取消了对应用的授权后,如流平台会推送取消授权通知 |
suiteid | 第三方应用的SuiteId |
authcorpid | 授权方CorpID |
eventtime | 事件发生时间 |
成员通知事件
权限要求: 获得企业安装应用时的通讯录信息只读或读写授权 联系如流开通成员通知事件权限 请求body:
{
"eventtype": "CONTACT_EE_ADD",
"corpid": "tjATMNQPPASSWDR",
"userid": "zhangsan",
"time": 12121212121 //ms
}
参数说明:
参数 | 说明 |
---|---|
eventtype | CONTACT_EE_ADD:通讯录添加员工 CONTACT_EE_DEL:通讯录删除员工 CONTACT_EE_CHANGE:通讯录员工信息变更 |
corpid | 授权方CorpID |
userid | 成员UserID |
time | 时间戳(ms) |
部门通知事件
权限要求: 获得企业安装应用时的通讯录信息只读或读写授权 联系如流开通部门通知事件权限 请求body:
{
"eventtype": "CONTACT_DEPT_ADD",
"corpid": "tjATMNQPPASSWDR",
"deptid": 1,
"time": 12121212121 //ms
}
参数说明:
参数 | 说明 |
---|---|
eventtype | CONTACT_DEPT_ADD:通讯录添加部门 CONTACT_DEPT_DEL:通讯录删除部门 CONTACT_DEPT_CHANGE:通讯录部门变更 |
corpid | 授权方CorpID |
deptid | 部门ID |
time | 时间戳(ms) |
可见范围通知事件
权限要求: 企业安装应用时选择的可见范围发生变更时会下发该通知
部门 请求body:
{
"eventtype": "AGENT_ALLOW_DEPARTMENT_ADD",
"corpid": "tjATMNQPPASSWDR",
"agentid": 1234
"department": [
{
"id": 2,
"name": "PARTYNAME",
"parentid": 1
}
],
"time": 12121212121 //ms
}
参数说明:
参数 | 说明 |
---|---|
eventtype | AGENT_ALLOW_DEPARTMENT_ADD:可见范围添加部门 AGENT_ALLOW_DEPARTMENT_DEL:可见范围删除部门 |
corpid | 授权方CorpID |
agentid | 授权方应用ID |
time | 时间戳(ms) |
department | 授权的应用可见范围(部门) |
department:id | 授权的应用可见范围(部门)ID |
department:name | 授权的应用可见范围(部门)名称 |
department:parentid | 授权的应用可见范围(部门)父部门ID |
标签 请求body:
{
"eventtype": "AGENT_ALLOW_TAG_ADD",
"corpid": "tjATMNQPPASSWDR",
"agentid": 1234,
"tag": [
{
"id": 2,
"name": "tagName"
}
],
"time": 12121212121 //ms
}
参数说明:
参数 | 说明 |
---|---|
eventtype | AGENT_ALLOW_TAG_ADD:可见范围添加标签 AGENT_ALLOW_TAG_DEL:可见范围删除标签 |
corpid | 授权方CorpID |
agentid | 授权方应用ID |
time | 时间戳(ms) |
tag | 授权的应用可见范围(标签) |
tag:id | 授权的应用可见范围(标签)ID |
tag:name | 授权的应用可见范围(标签)名称 |
成员 请求body:
{
"eventtype": "AGENT_ALLOW_EMPLOYEE_ADD",
"corpid": "tjATMNQPPASSWDR",
"agentid": 1234,
"user": [
{
"id": 2,
"name": "tagName"
}
],
"time": 12121212121 //ms
}
参数说明:
参数 | 说明 |
---|---|
eventtype | AGENT_ALLOW_EMPLOYEE_ADD:可见范围添加成员 AGENT_ALLOW_EMPLOYEE_DEL:可见范围删除成员 |
corpid | 授权方CorpID |
agentid | 授权方应用ID |
time | 时间戳(ms) |
user | 授权的应用可见范围(成员) |
user:id | 授权的应用可见范围(成员)ID |
user:name | 授权的应用可见范围(成员)姓名 |
接收服务号消息格式
文本消息
消息示例:
<xml>
<FromUserId><![CDATA[UserId]]></FromUserId>
<FromUserName><![CDATA[UserName]]></FromUserName>
<CreateTime>1542780295</CreateTime>
<MsgType>text</MsgType>
<Content><![CDATA[text]]></Content>
</xml>
参数说明:
参数 | 说明 |
---|---|
FromUserId | 成员UserID |
FromUserName | 如流登录帐号 |
CreateTime | 消息创建时间 (32位整型) |
MsgType | text,固定值 |
Content | 文本消息内容 |
图片消息
消息示例:
<xml>
<FromUserId><![CDATA[UserId]]></FromUserId>
<FromUserName><![CDATA[UserName]]></FromUserName>
<CreateTime>1542780295</CreateTime>
<MsgType>image</MsgType>
<PicUrl><![CDATA[this is a url]]></PicUrl>
<xml>
参数说明:
参数 | 说明 |
---|---|
FromUserId | 成员UserID |
FromUserName | 如流登录帐号 |
CreateTime | 消息创建时间 (32位整型) |
MsgType | image,固定值 |
PicUrl | 图片链接 |
语音消息
消息示例:
<xml>
<FromUserId><![CDATA[UserId]]></FromUserId>
<FromUserName><![CDATA[UserName]]></FromUserName>
<CreateTime>1542780295</CreateTime>
<MsgType>voice</MsgType>
<VoiceUrl><![CDATA[this is a url]]></PicUrl>
<xml>
参数说明:
参数 | 说明 |
---|---|
FromUserId | 成员UserID |
FromUserName | 如流登录帐号 |
CreateTime | 消息创建时间 (32位整型) |
MsgType | voice,固定值 |
VoiceUrl | 语音文件链接 |