消息通知
发送应用消息(应用号通道)
接口说明:通过该接口,应用可以给指定的人和分支发送系统定义的几种消息。适用于绝大多数应用消息通知场景,消息卡片中可携带链接,支持点击跳转应用详情页。请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v1/messages/create?app_token=APP_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN |
| user_token | 否 | 非必填字段, 人员TOKEN |
请求数据示例:
{
"userIdList": [ "524288-8euoAJ1avCqrpqSyyV2FVYJVB" ,"524288-8euoAJ1avCqrpqSyyV2FVYJVC" ],
"departmentIdList":["524288-vAuMGGePYt7Oz7urrExFJxaVA"],
"msgType": "type",
"msgData":{
"type" :{
}
},
"//": "以下字段为选填字段,普通应用不需要填,以下字段仅适用于微应用或蓝信自研应用,普通应用不需要填",
"entryId":"154741",
"accountId":"524288-xxxxxxx",
"attach":"xxxx"
}
请求参数字段说明:|参数|类型 |必须|说明 | |------------------|----------|-------------|--------------------------------------------------------------------------------------| | userIdList | string array | 否 | 接收者人员列表,指定消息接收者时使用,可选,与departmentIdList二者间必选一个, 最多支持1000个| | departmentIdList | string array | 否 | 接收者分支列表(分支下的所有人),可选,与userIdList二者间必选一个,如果需要全组织广播,则填根分支Id:orgId-0,例如:524288-0, 最多支持100个, 全组织广播时,只支持1个组织 | | msgType | string | 是 | 发送的消息格式,支持以下几种:"text","oacard","linkCard","appCard" | | msgData | json obj | 是 | 和 type 类型名对应的同名的格式化数据。每种格式都有对应的数据类型。消息体类型 | | 以下字段选填| - |否 |组织自研应用不需要,以下字段仅适用于蓝信公司微应用或蓝信公司自研应用,组织自研应用不需要填 | | entryId | string | 否 | 单应用多入口情况,如果不同入口有不同消息通道,可以使用该参数指定入口对应的消息通道。其他情况组织自研应用不需要填,仅适用于蓝信公司微应用 | | accountId | string | 否 | 组织自研应用不需要填,仅适用于应用使用多公号消息通道的情况,例如移动会务。accountId为公号ID/entryId为应用入口ID。优先使用accountId做为目标公号。如果accountId为空,则使用entryId指定的的应用入口所关联的公号。如果应用只有一个入口可不填 | | attach | string | 否 | 组织自研应用不需要填,仅适用于蓝信公司微应用,公号消息附加数据,目前用于传递微应用链接上下文数据,内容需要做UrlEncode。|
返回参数字段说明:|参数 |类型|描述 | |-------------------|--------|-----------------------------------------------------------------------------| | invalidStaff | string array | 请求staffIdList 列表中的人员ID 无效,无法发送 | | invalidDepartment | string array | 请求departmentIdList列表中的分支ID 无效,无法发送 | | msgId | string | 消息ID |
返回数据示例:
业务正常返回:
{
"errCode":0 ,
"errMsg":"ok",
"data":{
"invalidStaff":["staffid1","staffid2"],
"invalidDepartment":["id1","id2"],
"msgId":"678590"
}
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
}
发送摘要消息
接口说明:通过该接口,应用可以给指定人发送通知消息。特别说明:该消息类型仅展示会话列表摘要,不展示会话消息详情,点击会话摘要直接跳转应用首页入口。仅适用于通知,邮件等特定待办数量&摘要类型的消息场景。普通办公类卡片消息不建议使用该接口。另外需要说明的是该类消息在蓝信客户端会话中的未读数由应用自己控制,应用可以使用以下接口查询查询通知消息会话状态 和更新消息未读数状态更新通知消息会话状态请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v1/messages/notification/create?app_token=APP_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN |
| user_token | 否 | 非必填字段, 人员TOKEN |
请求数据示例:
{
"uuid":"154fdsfa...",
"senderId":"524288-AB45MMKHIM",
"receiverIds":["524288-AB4DDDABBKHIM","524288-JIKADLJFIHENAJ",...],
"outline":"[通知]:关于...的通知"
"msgType":"msgType",
"msgData": {
"type": {}
}
}
请求参数字段说明:|参数 |类型| 必须|说明 | |-------------|----------|--------|------------------------------------------------------------------| | uuid | string | 否 | 一个随机字符串(uuid) | | senderId | string | 否 | 如果不提供该字段,则必须要有userToken,userToken与该字段至少有一个 | | receiverIds | string array| 是 | 消息接收者的openId列表, 最多1000个 | | outline | string | 否 | 消息概要信息 | | msgType | string | 是 | 消息的类型,文本等 | | msgData | json obj| 是 | 通过openApi发送私聊消息,内容根据type具体定义,消息体类型 |
返回参数字段说明:|参数 |类型| 描述 | |----------|--------------|------------------------| | msgIds | string array | 消息ID列表 |
返回数据示例:
业务正常返回:
{
"errCode": 0,
"errMsg": "ok",
"data": {
"status":[
{
"errCode": 0,
"errMsg": "ok"
},
{
"errCode": 0,
"errMsg": "ok"
},
...
],
"msgIds":["524288-lBhwC7ag5xEh","524288-JALJFDLLJ",...]
}
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
}
对应可能的错误码说明:
更新动态卡片消息状态
接口说明:更新动态卡片消息状态,需要和发送应用消息配合使用。先使用发送应用消息接口发送动态卡片消息,返回消息ID,然后可通过本接口(更新动态卡片消息状态)对发送的动态卡片消息状态进行更新,一般用于审批类卡片消息需要状态变更的场景,例如:待审批,已审批,已完成等。请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v1/messages/dynamic/update?app_token=APP_TOKEN&user_token=USER_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN |
| user_token | 否 | 更新私聊消息(比如红包的私聊消息)时必填 |
请求数据示例,以更新动态应用卡片消息状态为例:
{
"说明":"需要使用具体的值替换请求参数中的各个示例ID和参数,例如524288-xxxxxxx,具体ID的获取途径参考开发者文档的相关接口字段说明",
"必须字段":"msgId-被修改的消息ID, msgType:目前支持的动态卡片消息类型为 appCard, msgData:具体要修改后的消息内容:appCardUpdateMsg",
"消息体类型":"消息体类型与msgData的type不同,请参考开发者文档中关于蓝信消息体类型的定义",
"特别说明":"发送appCard卡片消息时,需要指定发送的消息为动态卡片时(isDynamic=true),消息才能更新,详见消息体类型说明文档",
"msgId":"524288-xxxxxxxxxxxx",
"msgType": "appCard",
"msgData":{
"appCardUpdateMsg":{
"isLastUpdate":false,
"headStatusInfo":{
"iconLink":"https://test.com/status_icon.png",
"description":"<div style=\"color:#5A83E9\">已审批</div>",
"colour":"#FADD14"
},
"links":[
{"title": "<div style=\"color: #0033FF;text-align: left\">跳转链接变更1</div>","url": "https://www.test1.com"},
{"title": "<div style=\"color: #66CC00;text-align: left\">跳转链接变更2</div>","url": "https://www.test2.com"}
]
}
}
}
请求参数字段说明:|参数|类型|必须|说明 | |-------------|----------|----------|-------------------------------------------------------------| | msgId | string | 是 | 要更新的消息ID,应用调用消息发送接口时的返回值 | | msgType | string | 是 | 要更新的消息类型:目前支持appCard(对应的动态消息内容为:appCardUpdateMsg)| | msgData | json obj | 是 | 要更新动态消息内容,根据msgType类型构造对应的数据更新内容,详细描述参考 消息体类型 说明中的“更新类动态消息体类型” |
返回参数字段说明:|参数|描述 | |----------|----------|
返回数据示例:
业务正常返回:
{
"errCode": 0,
"errMsg": "ok",
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
}
对应可能的错误码说明:
更新通知消息会话状态
接口说明:更新通知消息会话状态请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v1/chat/notification/update?app_token=APP_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN |
| user_token | 否 | 非必填字段, 人员TOKEN |
请求数据示例:
{
"uuid":"154fdsfa...",
"userId":"524288-AB45MMKHIM",
"unreadCount":1,
"noDisturb": "true/false",
"baseVersion":"0"
}
请求参数字段说明:|参数|类型|必须|说明 | |-------------|----------|----------|-----------------------------------------------------------------------------------------------------------------| | uuid | string | 是 | 一个随机字符串(uuid) | | userId | string | 是 | 通知会话所有者,通知的peerId就是通知应用的appId | | unreadCount | int | 否 | 会话未读数。注:noDistrub和unreadCount为互斥项,只能同时出现一个 | | noDisturb | string | 否 | 免打扰标识。"true":开启免打扰功能,"false":关闭免打扰功能。注:noDistrub和unreadCount为互斥项,只能同时出现一个 | | baseVersion | string | 是 | 保证每次请求时,该值递增。该值由应用服务端维护|返回参数字段说明:
返回数据示例:
业务正常返回:
{
"errCode": 0,
"errMsg": "ok",
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
}
对应可能的错误码说明:
更新通知消息会话状态(批量)
接口说明:更新通知消息会话状态(批量)请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v2/chat/notification/update?app_token=APP_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN |
| user_token | 否 | 非必填字段, 人员TOKEN |
请求数据示例:
{
"statusList":[
{
"uuid":"154fdsfa...",
"userId":"524288-AB45MMKHIM",
"unreadCount":1,
"noDisturb": "true/false",
"baseVersion":"0"
},
{
"uuid":"fgdrgereew234...",
"userId":"524288-dfdkfldfsdff",
"unreadCount":1,
"noDisturb": "true/false",
"baseVersion":"0"
}
]
}
请求参数字段说明:|参数|类型|必须|说明 | |-------------|----------|----------|-----------------------------------------------------------------------| | statusList | obj array | 是 | 用户状态更新数据对象数组,数组最大允许长度1000。 | | statusList.uuid | string | 是 | 一个随机字符串(uuid) | | statusList.userId | string | 是 | 通知会话所有者,通知的peerId就是通知应用的appId | | statusList.unreadCount | int | 否 | 会话未读数。注:noDistrub和unreadCount为互斥项,只能同时出现一个 | | statusList.noDisturb | string | 否 | 免打扰标识。"true":开启免打扰功能,"false":关闭免打扰功能。注:noDistrub和unreadCount为互斥项,只能同时出现一个 | | statusList.baseVersion | string | 是 | 保证每次请求时,该值递增。该值由应用服务端维护|返回参数字段说明:
返回数据示例:
业务正常返回:
{
"errCode": 0,
"errMsg": "ok",
"data": {
"subStatus"[
{
"errCode": 0,
"errMsg": "ok"
},
{
"errCode": 0,
"errMsg": "ok"
},
...
]
}
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
}
对应可能的错误码说明:
获取通知消息会话状态
接口说明:获取通知消息会话状态请求方式:GET (HTTPS)请求地址:https://apigw-example.domain/v1/chat/notification/:userid/fetch?app_token=APP_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN |
| user_token | 否 | 非必填字段, 人员TOKEN |
param 参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| userid | 是 |
返回参数字段说明:|参数|类型|描述 | |-----------|----------|------------| | noDisturb | string | 免打扰标识 |
返回数据示例:
业务正常返回:
{
"errCode": 0,
"errMsg": "ok",
"data":{
"noDisturb": "true/false"
}
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
}
对应可能的错误码说明:
撤回消息
接口说明:通过该接口,应用可以撤回已发送消息,消息撤回有时效性,并非所有消息都可以撤回。目前私聊和群聊只能撤回5分钟内发送的消息,应用消息(公号通道)可以撤回24小时内的消息。请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v1/messages/revoke?app_token=APP_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN,撤回webhook群消息时可选,其他情况必填 |
| hook_token | 否 | webhook机器人Token,仅在撤回webhook群消息时使用。hook_token在客户端webhook机器人管理页的webhook URL中获取。wehbhook消息撤回请求地址如下: https://apigw-example.domain/v1/messages/revoke?hook_token=HOOK_TOKEN |
| user_token | 否 | 非必填字段, 人员TOKEN |
请求数据示例:
{
"chatType":"TYPE",
"senderId":"524288-AB4DDDABBKHIM",
"messageIds":["524288-JKJLDJIENVB", "524288-JKJLDJIENVB",....],
"sysMsg":
{
"content":"该消息已撤回",
"mediaId":"524288-FJEIMMDFSLFWELFWSDG"
}
}
请求参数字段说明:|参数|类型|必须|说明 | |----------------|----|----------|-----------------------------------------------------------| | chatType |string |是 | 消息类型,字符串枚举:staff, group, notification, account, bot。; 说明:; staff--私聊消息; group--群聊消息(包含webhook机器人群消息和应用机器人群消息); notification--应用通知消息; account--应用号消息; bot--机器人私聊消息 | | senderId | string |否 | 私聊(staff),群聊(group)时必须要填 senderId (staffId)。webhook机器人和应用机器人群消息撤回时不填 | | messageIds | string |是 | 消息ID列表 | | sysMsg | json obj|否 | 撤回消息时展示的系统消息内容信息 | | sysMsg.content | string |否 | 撤回消息时展示的系统消息内容 | | sysMsg.mediaId | string |否 | 撤回消息时展示的撤回图标的id |
返回参数字段说明:|参数 |类型|描述 | |-----------|--------|--------------------------| | errCode | int |返回错误码 | | errMsg | string |返回的错误内容 | | subStatus | obj array |子状态数组,包含错误码和错误内容 |
返回数据示例:
业务正常返回:
{
"errCode": 0,
"errMsg": "ok",
"data": {
"subStatus":[
{
"errCode": 0,
"errMsg": "ok"
},
{
"errCode": 0,
"errMsg": "ok"
},
...
]
}
}
业务异常返回:
{
"errCode": "错误码",
"errMsg": "错误描述",
"data": {
"subStatus":[
{
"errCode": "错误码",
"errMsg": "错误描述",
},
{
"errCode": "错误码",
"errMsg": "错误描述",
},
...
]
}
}
对应可能的错误码说明:
## 消息体类型
消息类型锚点目录在左侧边栏, 请点击 "消息体类型" 后面的 ">" ;
| 消息体类型 | 使用场景 |
|---|---|
| text 类型 | 普通文本消息 |
| linkCard 类型 | 链接卡片,适用于简单链接跳转 |
| appCard 类型 | 应用卡片,支持复杂格式,部分字段样式(位置,颜色,大小)可由应用指定,适用于大部分办公应用消息类型需求 |
| oacard 类型 | 办公卡片,支持简单格式办公消息,可以用appCard代替本消息,目前不推荐使用oacard消息类型 |
| appArticles 类型 | 图文卡片,适用多图文类消息 |
| document 类型 | 公文卡片,适用于正式公文类消息 |
| system 类型 | 系统消息,使用于系统提醒类消息 |
| redPacket 类型 | 红包消息 |
| appCard DynamicMsg 类型 | 应用卡片状态更新消息 |
| redPacket DynamicMsg 类型 | 红包状态变更消息 |
创建类消息体类型
<span id="text">1 text 类型 </span>
对应的参数说明:|参数|类型|必须|说明 | |-----------------|----------|----------|--------------------| | content | string | 是 | 发送的文本消息内容 | | reminder.all | bool | 否| 消息 @全体成员 | | reminder.userIds| string array | 否| 消息 @人员列表 |
{
...
"msgType":"text",
"msgData": {
"text": {
"content": "this is text message content",
"reminder": {
"all": false,
"userIds": ["524288-abcdefg","524288-xabedsfaf",...]
}
}
}
}
其在端上展示形式如下: <div> <img src="build-in/server-api/message/media/message_text.jpg" alt="文本消息" width=50% height=50% /> </div>
<span id="linkcard">2 linkCard 类型</span>
对应参数说明:|参数|类型|必须|说明 | |--------------|----------|----------|----------| | title | string | 是 | 卡片标题 | | description | string | 否 | 卡片描述,可不填| | iconLink | string | 否 | 卡片消息中展示的图片链接,可不填| | link | string | 是 | 卡片链接 | | pcLink | string | 否 | PC端卡片链接,可不填 | | fromName | string | 否 | 卡片来源名称, 可不填| | fromIconLink | string | 否 | 卡片来源图片链接,一般是公司Logo, 可不填|
{
...
"msgType":"linkCard",
"msgData": {
"linkCard": {
"title": "标题",
"description": "这是一张link卡片的描述,我写长一点,感觉长的样子会更加的好看一些。这么长够不够呀,哈哈哈哈哈哈...",
"iconLink": "图片连接",
"link": "点击跳转连接",
"pcLink":"PC端点击跳转连接",
"fromName": "2018-11-20 20:24:27.138614184 +0800 CST m=+0.339592914",
"fromIconLink": "link"
}
}
}
其在端上展示形式如下:
<div> <img src="build-in/server-api/message/media/link_card.png" alt="link card 消息" width=50% height=50% /> </div>
<span id="appcard">3 appCard类型</span>
注:应用卡片消息类型新增动态消息状态更新特性,以下参数说明中红色字体部分字段为动态消息状态相关参数,普通通知类消息可不填动态消息内容部分。
对应参数说明:|参数|类型|必须|说明|tag格式支持 | |--------------|----------|----------|-------------------------------|--------------------------------| | headTitle | string | 否 | 应用的title | 不支持 | | headIconId | string | 否 | 应用的title图片media的openId | 不支持 | | headIconUrl | string | 否 | icon的网络地址 | 不适用 | |isDynamic | bool | 否 | 是否动态卡片消息,一般用于审批类卡片消息需要状态变更的场景,结合更新动态卡片消息状态 接口,使用DynamicMsg appCard消息类型对动态卡片消息状态和部分内容进行动态更新 | 不适用 | | headStatusInfo | json obj | 否 | 动态卡片的动态信息区,当isDynamic=true时必填 | 支持 | | headStatusInfo.iconLink | string | 否 | 状态icon的网络下载地址,和headStatusInfo.colour字段互斥,colour值为空时,headStatusInfo.iconLink 才会生效 | 不适用 | | headStatusInfo.description| string | 否 | 如果isDynamic=ture, 描述必填,卡片头部状态描述 (长度不超过30字节) | 支持 颜色 | | headStatusInfo.colour | string | 否 | 状态描述信息头部的实心圆颜色,和headStatusInfo.iconLink互斥,colour值不为空时优先展示实心圆 | 支持 颜色 | | bodyTitle | string | 是 | 文本标题(长度限制2003个字节) | 支持 颜色,字号,位置 | | bodySubTitle | string | 否 | 文本副标题,两行(接口限制4003字节) | 支持 颜色,字号,位置 | | bodyContent | string | 否 | 松散内容,八行(1000*3字节),默认首行缩进2个单位(2em) | 支持首行缩进,颜色,字号,位置 | | signature | string | 否 | 署名字段 | 支持颜色设置 | | staffId | string | 否 | 人员ID,用于卡片消息中展示消息发起者头像,可不填 | 不支持 | | fields | obj array| 否 | key /value为依赖关系,上限10对 | 仅支持颜色 | | fields.key | string | 否 | key /value为依赖关系,key值可单独存在(长度不超过6个汉字)|仅支持颜色 | | fields.value | string | 否 | key /value为依赖关系,value值不可单独存在,两行(接口限制64字)| 仅支持颜色 | | links | obj array| 否 | 此处title与url字段数据相互依赖,不可单独存在;最多3对 | 仅title 支持颜色与位置 | | links.title | string | 否 | 链接标题 | 支持颜色与位置 | | links.url | string | 否 | 链接url | 不适用 | | cardLink | string | 否 | 本条消息的跳转地址;当本链接地址为空,有其他链接地址时,用第一条其他链接地址自动填到基本链接地址 | 不支持 | | pcCardLink | string | 否 | PC端跳转地址,可不填 | 不支持 |
tag格式支持说明:
使用div标签的style属性对文本内容进行格式控制,支持控制的格式有颜色(color)、字体大小(font-size),位置(text-align),首行缩进(text-indent)。
例如:<div style="color: brown; text-align: left;font-size:xx-large"> 第一个div 靠左 超大 </div>
| 格式 | 参考值 | 说明 |
|---|---|---|
| color | #5A83E9(蓝色),#FADD14(绿色) . . . rgba(0,0,0,.87) (黑色), rgba(0,0,0,.47) (粉红) | 颜色 |
| font-size | 12pt, 13pt, 15pt, 18pt, 22pt, 36pt | 字体大小,可使用像素来控制更细粒度的大小 |
| text-align | left(居左),center(居中),right(居右) | 位置 |
| text-indent | 2em(2个字) | 首行缩进 |
{
...
"msgType":"appCard",
"msgData": {
"appCard": {
"headTitle": "支付消息",
"headIconId": "567-789456...",
"isDynamic":true,
"headStatusInfo":{
"iconLink":"https://test.com/icon.png",
"description":"<div style=\"color:#5A83E9\">待审批</div>",
"colour":"#FF0000"
},
"bodyTitle": "<div style=\"color:#5A83E9;font-size:18pt;text-align:left\">正文标题</div>",
"bodySubTitle": "<div style=\"color:#FADD14;font-size:12pt;text-align:left\">正文副标题</div>",
"staffId": "528244-2211556...",
"bodyContent": "<div style=\"color: #FADD14;font-size: 15pt;text-align: left;text-indent: 2em\">松散内容有点长</div>",
"fields": [
{"key": "<div style=\"color: #FADD14\">键1</div>","value": "<div style=\"color: #FADD14\">值1</div>"},
{"key": "键2","value": "值2"},
...
],
"links": [
{"title": "<div style=\"color: #FADD14;text-align: left\">支持颜色与位置</div>","url": "http: //test.com"},
{"title": "title01","url": "http: //test.com"},
...
],
"cardLink": "http: //test.com",
"pcCardLink": "http: //testpc.com"
}
}
}
其在端上展示形式如下: <div> <img src="build-in/server-api/message/media/appCard_1.png" alt="单文章消息" width="50%" height="50%" /> <img src="build-in/server-api/message/media/appCard.png" alt="单文章消息" width="50%" height="50%" /> <img src="build-in/server-api/message/media/dynamic_app_card01.jpg" alt="原始消息" width="50%" height="50%" /> </div>
<span id="oacard">4 oacard 类型</span>
可以用appCard代替本消息,目前不推荐使用oacard消息类型
对应的参数说明:|参数|类型 |必须|说明 | |----------|----------|----------|-----------------| | head | string | 否 | 页眉标题 | | title | string | 是 | 标题 | | subTitle | string | 否 | 副标题 | | staffId | string | 否 | 人员ID,用于在卡片消息中展示消息发送者头像 | | fields | obj array | 否 | 0个或多个键值对,上限10对 | | fields.key | string | 否 | 键值对的键 | | fields.value | string | 否 | 键值对的值 | | link | string | 否 | 卡片链接 | | pcLink | string | 否 | PC端卡片链接 |
消息格式
{
...
"msgType":"oacard",
"msgData":{
"oacard" :{
"head":"这是标题头",
"title": "这是标题",
"subTitle": "副标题",
"staffId":"524288-abcdefghigklmn",
"fields":[
{"key":"key1", "value":"value1"},
{"key":"key2", "value":"value2"}
],
"link":"http://www.test.com",
"pcLink":"http://www.testpc.com"
}
}
}
其在端上展示形式如下: <div> <img src="build-in/server-api/message/media/message_oacard_group.png" alt="OA Card 消息" width=50% height=50% /> </div>
<span id="apparticles">5 appArticles类型</span>
对应参数说明:|参数|类型|必须|说明 | |----------|----------|----------|--------------------------------------------| | imgUrl | string | 是 | 图片链接 | | title | string | 是 | 标题 | | summary | string | 否 | 摘要 | | url | string | 是 | 内容地址 | | pcUrl | string | 是 | PC端内容地址 | | attach | string | 否 | 微应用跳转参数,其他应用忽略(或填空) |
{
...
"msgType":"appArticles",
"msgData": {
"appArticles":[
{
"imgUrl": "https://...",
"title": "稿件标题",
"summary": "摘要信息",
"url": "https://...",
"pcUrl": "https://...",
"attach" :"attach"
},
{
"imgUrl": "https://...",
"title": "稿件标题",
"summary": "摘要信息",
"url": "https://...",
"pcUrl": "https://...",
"attach" :"attach"
},
]
}
}
其在端上展示形式如下:
1,单文章消息 <div> <img src="build-in/server-api/message/media/single_article.png" alt="单文章消息" width=50% height=50% /> </div> 2,多文章消息 <div> <img src="build-in/server-api/message/media/multi_article.png" alt="多文章消息" width=50% height=50% /> </div>
<span id="document">6 document类型</span>
参数说明:|参数|类型|必须|说明 | |--------------|----------|----------|----------| | title | string | 是 | 主标题 | | subTitle | string | 否 | 副标题 | | contentTitle | string | 否 | 内容标题 | | url | string | 是 | 链接地址 | | pcUrl | string | 否 | PC端链接地址 |
代码示例:
{
...
"msgType":"document",
"msgData": {
"document":[
{
"title": "这是标题",
"subTitle": "这是副标题",
"contentTitle": "内容标题",
"url": "https://...",
"pcUrl": "https://..."
}
]
}
}
端上展示形式:
单公文消息: <div> <img src="build-in/server-api/message/media/single_doc.png" alt="单公文消息" width=50% height=50% /> </div>
多公文消息: <div> <img src="build-in/server-api/message/media/multi_doc.png" alt="多公文消息" width=50% height=50% /> </div>
<span id="system">7 system 类型</span>
对应的参数说明:|参数|类型|必须|说明 | |----------|----------|----------|--------------------| | content | string | 是 | 发送的系统消息内容 |
{
...
"msgType":"system",
"msgData":{
"system" :{
"content":"this is system message content"
}
}
}
其在端上展示形式如下:
<div> <img src="build-in/server-api/message/media/message_system.png" alt="系统消息" width=50% height=50% /> </div>
<span id="redpacket">8 redPacket 类型</span>
对应参数说明:|参数|类型|必须|说明 | |----------|----------|----------|-------------------------------------------------------------------| | id | string | 是 | | | comment | string | 是 | | | link | string | 是 | | | type | number | 是 | 红包类型; 0-PRIVATE(私信红包) ; 1-AVERAGE(平均红包) ; 2-RANDOM(随机红包) |
{
...
"msgType":"redPacket",
"msgData": {
"redPacket": {
"id": "1234",
"comment": "恭喜发财,万事如意!",
"link": "http://...",
"type":code,
}
}
}
其在端上展示形式如下:
<div> <img src="build-in/server-api/message/media/red_packet.png" alt="红包消息" width=50% height=50% /> </div>
更新类动态消息体类型
注:更新动态消息类型的msgType键对应的值应为类型名,并非与msgData中的键保持一致,例如appCard类型的msgType对应的msgData中的键值为:appCardUpdateMsg
<span id="appCard_dyn">9 DynamicMsg appCard 类型 </span>
特别说明:发送appCard卡片消息时,需要指定发送的消息为动态卡片时(isDynamic=true),消息才能更新,详见appCard消息体类型说明文档。
对应参数说明:|参数|类型|必须|说明 |
|---------------------------|----------|----------|--------------------------------------------------------------|
| isLastUpdate | bool | 否 | 是否最后一次修改 ; 默认为false (非最后一次更新)。即自消息更新时间起之后30天内,动态模板区域支持更新。; 如果为true (是最后一次修改)。即自消息更新时间起,动态模板区域不再支持更新。 |
| headStatusInfo | json obj | 是 | 需要更新的状态信息,详见下面说明 |
| headStatusInfo.iconLink | string | 否 | 状态icon的网络下载地址,选填字段 |
| headStatusInfo.description| string | 是 | 卡片头部状态描述信息 (长度不超过30个字节) |
| headStatusInfo..colour | string | 是 | 状态描述信息头部位置实心圆状态颜色 |
| links | json obj | 否 | 链接区更新内容(为空时,不更新原卡片消息链接字段)|
| links.title | string | 是 | 链接区标题 |
| links.url | string | 是 | 链接区跳转链接地址 |
{
...
"msgType":"appCard",
"msgData":{
"appCardUpdateMsg":{
"isLastUpdate":false,
"headStatusInfo":{
"iconLink":"https://test.com/icon.png",
"description":"<div style="color:#5A83E9">已审批</div>",
"colour":"#FADD14"
},
"links":[
{"title": "<div style=\"color: #0033FF;text-align: left\">跳转链接变更1</div>","url": "https://test.com"},
{"title": "<div style=\"color: #66CC00;text-align: left\">跳转链接变更2</div>","url": "https://test.com"}
]
}
}
}
其在端上展示形式如下: <div> <img src="build-in/server-api/message/media/dynamic_app_card01.jpg" alt="原始消息" width="55%" height="55%" /> <img src="build-in/server-api/message/media/dynamic_app_card02.jpg" alt="第一次更新" width="55%" height="55%" /> <img src="build-in/server-api/message/media/dynamic_app_card03.jpg" alt="第二次更新" width="55%" height="55%" /> </div>
<span id="redpacket_dyn">10 DynamicMsg redPacket 类型 </span>
对应参数说明:|参数|类型|必须|说明 | |----------|----------|----------|----------------------------------------------------------------------------| | status | string | 是 | 红包消息对应状态码:; "0"-DynamicRedPacket_AVAILABLE,; "1"-DynamicRedPacket_NOT_AVAILABLE,; "2"-DynamicRedPacket_EXPIRED,; "3"-DynamicRedPacket_EXPIRED_WITHOUT_OPEN | | isopen | bool | 是 | 表示红包是否打开的bool值 |
{
...
"msgType":"redPacket",
"msgData": {
"redPacketUpdateMsg": {
"status": "1",
"isopen": true
}
}
}
应用事件推送接口
接口说明:应用事件推送接口,提供事件通道,应用服务端可以发送事件给应用的客户端。注意:本接口只提供低频小数据量的应用事件通知,严禁通过该接口传输应用的大量数据。该事件主要用于触发应用客户端通过应用自己的接口去同步应用服务端数据,不可用于应用服务端通过该接口传输大量数据给其客户端。请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v2/event/notification/create?app_token=APP_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | |
| user_token | 否 | 非必填字段, 人员TOKEN |
param参数说明:|参数|数据类型 |必须|说明 |
|----------|----|--------------|--------------------------------------------------------|
| events | obj array | 是 | 推送的事件列表 |
| receiverIds | string array | 是 | 接收者的open staffId列表 |
| eventType | string | 是 | 事件类型,目前支持的系统预定义事件有工作台红点:app_changes。 对应用自定义事件数据类型拼接的建议规则 “应用type_场景type_场景Id(openid)” 应用自定义类型,应用内区分不同的事件类型,由应用自行决定具体值(接口透传该值)。 |
| eventData | string (json序列化之后的字符串) | 是 | 事件内容,系统预定义的事件-工作台角标参数参见下面数据类型与数据格式定义。对应用自定义事件,此内容由应用服务端与应用客户端沟通协商确定,蓝信开放平台不关心具体内容。 |
| version | int64 | 否 | 可选字段,数据的版本号,要求是个时间戳,精确到微秒, 例如:1605693953610320。该字段描述的是数据变化的时间点,目的是解决高并发场景下,数据事件推送乱序时的数据一致性保证,可以让接收者确定数据更新的先后顺序,避免后到的旧数据覆盖先到的新数据。当事件数据不存在变化的先后顺序时,可不填,该字段不填时,平台会默认取接口调用时的当前系统时间。 |
| expires | int | 否 | 事件的过期时间,单位是秒。默认值为0是表示永不过期。如果设置指定过期时间(非0),则应用需要实现事件拉取的回调接口。 |
| channelType | int | 是 | 通道类型:; 1:只通知在线用户(notify) ; 2:通知在线和离线用户(event), 如果需要通知离线用户,应用需要实现拉取回调接口定义,详细说明参见:拉取回调接口定义 ; 4:只推送通知栏消息(push); 5:1+4=notify + push; 6:2+4=event + push |
| pushData | json obj | 否 | 需要通知栏消息推送时必填 |
| pushData.title | string | 否 | 通知消息标题,为空时取应用名称 |
| pushData.content | string | 否 | 通知消息内容 |
| pushData.appType | string | 是 | 通知栏消息拉起应用时用的应用类型:“webview”, “net_meeting”, “security_mail”, “blueprint” |
| pushData.url | string | 否 | 应用详情页跳转地址,用于通过推送消息拉起应用时透传给应用 。如果不需要,可以为空。 |
| pushData.androidSoundUrl | string | 否 | 安卓端个性化铃声 |
| pushData.iosSoundUrl | string | 否 | ios端个性化铃声 |
| entryId | string | 否 | 应用的入口ID(主要用于微应用) |
部分预定义事件
| 使用场景 | eventType | eventData :事件内容 JSON 序列化之后的字符串 填充 eventData 字段即可 |
|---|---|---|
| 蓝信工作台应用代办未读数(工作台红点)参考:应用入口红点; 注:该事件推送只能送达在线的蓝信客户端用户。如果也需要通知离线客户端用户,应用需要实现拉取回调接口,从而客户端可以获取到在离线期间,应用推送的事件。参考:拉取回调接口定义 ; 说明:unread 字段为工作台应用代办事项角标未读数,hasNew 字段为工作台应用代办事项红点。红点和角标未读数不可同时工作,如果使用未读数效果,则hasNew必须填false。如果使用红点效果,则unread 字段必须填0。 | app_changes | { ; "unread":8 //int类型 ; "hasNew":true //bool类型 ; } |
请求数据示例: //工作台红点的事件数据
{
"events":[
{
"receiverIds":["524288-JJtYnCnaBGVjCAzpYb5HggKvC20dKV@524288"],
"eventType":"app_changes",
"eventData":"{\"hasNew\":true,\"unread\":0}",
"version":1605693953610320,
"expires":2147483647,
"channelType":2,
"entryId":"a9a2258c-0b50-4abc-b6b9-1a32bc650140"
},
...
]
}
//视频会议通知栏消息推送的事件数据
{
"events":[
{
"receiverId":"524288-LMuYOHoaXkPvFw921AxIDDv0HOp07m",
"eventType":"videoconference_wbitem_524288-LMuYOHoaXkPvFw921AxIDDv0HOp07m",
"eventData":"{\"Title\":\"视频会议\"}",
"version":1606106423524,
"expires":2147483647,
"channelType":4,
"pushData":{
"title":"视频会议",
"content":"张三-技术邀请你加入视频会议",
"appType":"net_meeting",
"androidSoundUrl":"raw/xylinkmeeting_phonering",
"iosSoundUrl":"/Resources.bundle/phonering.mp3"
}
},
...
]
}
业务正常返回:
{
"errcode": 0,
"errmsg": "请求成功"
"data":{
"subStatus":[
{
"errcode": 0,
"errmsg": "请求成功"
},
{
"errcode": 0,
"errmsg": "请求成功"
}
]
}
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
"data":{
"subStatus":[
{
"errcode": 错误码,
"errmsg": "错误信息"
},
{
"errcode": 错误码,
"errmsg": "错误信息"
}
]
}
}
发送人员私聊消息
接口说明:通过该接口,当前用户在应用内以自己的人员身份(user_token)给其他人员发送私聊消息。请求方式:POST (HTTPS),Content-Type: application/json请求地址:https://apigw-example.domain/v1/messages/chat/create?app_token=APP_TOKEN&user_token=USER_TOKENquery参数说明:
| 参数 | 必须 | 说明 |
|---|---|---|
| app_token | 是 | 应用访问TOKEN |
| user_token | 是 | 必填字段,通过oauth拿到当前用户身份才能发私聊消息 |
请求数据示例:
{
"receiverId":"524288-AB4DDDABBKHIM",
"msgType":"type",
"msgData": {
"common": {},
"type": {}
}
}
请求参数字段说明:|参数|类型|必须|说明 | |------------------|----------|----------|--------------------------------------------------------------------| | receiverId | string | 是 | 消息接收者人员openId| | msgType | string | 是 | 发送的消息格式,支持以下几种:"text","oacard","linkCard","appCard" | | msgData | json obj | 是 | 和 type 类型名对应的同名的格式化数据。每种格式都有对应的数据类型。消息体类型 |
返回参数字段说明:|参数|类型|描述 | |--------------|-----|-------------------------------------------------------------------------------------| | msgId |string| 消息openId |
返回数据示例:
业务正常返回:
{
"errCode": 0,
"errMsg": "ok",
"data": {
"msgId":"524288-lBhwC7ag5xEhxxx"
}
}
业务异常返回:
{
"errCode": 错误码 ,
"errMsg": 对应的统一错误码描述
}