钉钉开发文档

钉钉云推送数据格式

更新时间: 2019-4-17

钉钉云推送数据表说明

钉钉云推送插入的数据库表创建参照设置RDS实例接收钉钉推送数据

主键 订阅者ID 企业ID 业务ID 业务类型 业务数据 简介
id subscribe_id corp_id biz_id biz_type biz_data
2 xxxxx_0 corpxxxx 716001 2 见2 套件票据。
4 xxxxx_0 corpxxxx 716001 4 见4 企业授权变更。
包含授权/解除授权/授权变更。
7 xxxxx_0 corpxxxx 1318 7 见7 企业微应用变更。
包含停用/启用/删除。(删除保留授权)
13 xxxxx_0 corpxxxx user123 13 见13 企业用户变更。包含用户添加修改删除
14 xxxxx_0 corpxxxx dept123 14 见14 企业部门变更。包含部门添加修改删除
15 xxxxx_0 corpxxxx role123 15 见15 企业角色变更。包含角色添加修改删除
16 xxxxx_0 corpxxxx corpxxxx 16 见16 企业变更。包含企业修改删除
17 xxxxx_0 corpxxxx orderidxx 17 见17 市场订单。
20 xxxxx_0 corpxxxx user123 20 见20 企业外部联系人变更。包含添加修改删除
22 xxxxx_0 corpxxxx ef-sss-sv 22 见22 ISV自定义审批。

钉钉云数据推送插入表逻辑

在推送数据表中,如上表格所示,subscribe_id、corp_id、biz_id、biz_type四个字段构成唯一索引。
当同一个订阅者(subscribe_id)订阅的一个企业(corp_id)下的一个业务类目(biz_type)下的同一条数据(biz_id)发生重复变更时,收件箱会删除老数据再插入新数据,收件箱的自增主键会发生变化。但是一个订阅者订阅一个企业下的相同业务类目下的同一条数据只存在一条。

数据字段含义说明

当biz_type = 2时,数据为套件票据suiteTicket最新状态

该数据为定时推送,插入表open_sync_biz_data中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   套件所属企业的corpid

  • biz_id            : 套件suiteid

  • biz_data        :   数据为如下Json格式

{
    "syncAction":"suite_ticket",
    "suiteTicket":"QsfJCEVF1h6E9fAaGwnAzbvYzRF6UzyUh"
}

当biz_type = 4时,数据为企业授权应用的最新状态

该数据为企业授权微应用、解除微应用授权、变更微应用的授权范围时刻推送,插入表open_sync_biz_data中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   开通套件微应用的企业corpid

  • biz_id             : 套件suiteid

  • biz_data         : 数据为如下Json格式,其中"syncAction" 字段取值含义如下:

    • "org_suite_auth" :表示企业授权套件

    • "org_suite_change":表示企业变更授权范围

    • "org_suite_relieve":表示企业解除授权

{
	"syncAction": "org_suite_auth",
	"auth_corp_info": {
		"auth_channel": "",
		"auth_channel_type": "",
		"auth_level": 1,
		"corp_logo_url": "http://url.com",
		"corp_name": "浩倡测试企业申请认证",
		"corpid": "dingxxxxxxxxxxxxxx",
		"industry": "信息技术咨询",
		"invite_code": "000000",
		"invite_url": "http://url.com",
		"is_authenticated": true,
		"license_code": "xxx"
	},
	"auth_info": {
		"agent": [{
			"admin_list": ["aaaa", "bbbb"],
			"agent_name": "Demo",
			"agentid": 16000,
			"appid": 1234,
			"logo_url": "http://url.png"
		}]
	},
	"auth_user_info": {
		"userId": "xxxx"
	},
	"auth_scope": {
		"errcode": 0,
		"condition_field": [],
		"auth_user_field": ["dingId", "position", "jobnumber", "avatar", "deviceId"],
		"auth_org_scopes": {
			"authed_user": [],
			"authed_dept": [1]
		},
		"errmsg": "ok"
	},
	"permanent_code": "xxxxxxxxxxxxx",
	"ch_permanent_code": "xxxxxxxxxxxxxx"
}
  • 字段释义
    • "auth_corp_info","auth_info","auth_user_info" 三段结构信息参见接口service/get_auth_info
    • "auth_scope" 结构信息参见接口auth/scopes
    • "permanent_code"已废弃。兼容老接口service/get_corp_token
    • "ch_permanent_code"已废弃。兼容老接口service/get_channel_corp_token

当biz_type =7时,数据为企业微应用的最新状态

该数据为企业停用、启动微应用的时刻推送,插入表open_sync_biz_data中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   开通套件微应用的企业corpid

  • biz_id             : 微应用的appid

  • biz_data         :数据为如下3种Json格式,其中"syncAction" 字段取值含义如下:

    • org_micro_app_restore  微应用启用

    • org_micro_app_stop  微应用停用

    • org_micro_app_remove  微应用删除,保留企业对套件的授权

微应用启用

{
    "agentId":12345677,
    "syncAction":"org_micro_app_restore"
}

微应用停用

{
    "agentId":12345677,
    "syncAction":"org_micro_app_stop"
}

微应用删除,保留企业对套件的授权

{
    "agentId":12345677,
    "syncAction":"org_micro_app_remove"
}

当 biz_type = 13时,数据为企业员工的最新状态

该数据为在授权微应用的企业中,发生员工的增加、删除、修改的时刻推送,
插入表open_sync_biz_data_medium中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   开通套件微应用的企业corpid

  • biz_id             : 员工userId

  • biz_data         :数据为如下两种 Json格式,企业增加或修改员工"syncAction" 字段取值含义如下:**

    • "user_add_org",表示企业增加员工事件之后的员工信息

    • "user_modify_org" ,表示企业修改员工事件之后的员工信息

    • "user_dept_change" ,表示企业修改员工所在部门事件之后的员工信息

    • "user_role_change",表示企业修改员工所在角色(包括管理员变更)事件之后的员工信息

    • "user_active_org",表示用户加入企业后的激活信息,下面active字段会变成true

{
	"errcode": 0,
	"unionid": "m8axYHBIiSbciE",
	"syncAction": "user_modify_org",
	"openId": "kiPw6f4AwmxUiE",
	"roles": [{
		"id": 289179322,
		"name": "角色01",
		"groupName": "职务01",
		"type": 0
	}],
	"userid": "1234567",
	"isCustomizedPortal": true,
	"isLeaderInDepts": "{1234567:false}",
	"isBoss": false,
	"isSenior": false,
	"department": [1234567],
	"email": "",
	"orderInDepts": "{1234567:23422}",
	"dingId": "$:LWCP_v1:$EWM7l7NUNDAoCq2zDw3MCg==",
	"mobile": "18633573234",
	"errmsg": "ok",
	"active": true,
	"avatar": "http://static.dingtalk.com/media/lADOD3zI380B080B0w_467_467.jpg",
	"isAdmin": false,
	"isHide": false,
	"jobnumber": "90010100999",
	"name": "暖心",
	"stateCode": "86",
	"position": "1111"
}

企业删除员工。行为字段见 "syncAction": "user_leave_org"

{
    "syncAction":"user_leave_org"
    // 删除员工userid从biz_id中获取
}
  • 字段释义        :参见接口user/get

当biz_type = 14 时,数据为企业部门的最新状态。

该数据为在授权微应用的企业中,发生部门的增加、删除、修改的时刻推送,
插入表open_sync_biz_data_medium中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   套件所属企业的corpid

  • biz_id             : 部门departmentid

  • biz_data         :数据为如下两种 Json格式,企业增加或者修改部门"syncAction" 字段取值含义如下:**

    • "org_dept_create",表示部门创建

    • "org_dept_modify",表示部门修改

{
	"errcode": 0,
	"userPerimits": "",
	"syncAction": "org_dept_create",
	"orgDeptOwner": "0541092856786053",
	"outerDept": false,
	"errmsg": "ok",
	"deptManagerUseridList": "",
	"parentid": 60398183,
	"groupContainSubDept": false,
	"outerPermitUsers": "",
	"outerPermitDepts": "",
	"deptPerimits": "",
	"createDeptGroup": true,
	"name": "部门02",
	"id": 60397224,
	"autoAddUser": true,
	"deptHiding": false,
	"order": 60397224
}

企业删除部门

{
    "syncAction":"org_dept_remove"
}

当biz_type = 15时,数据为企业角色最新状态

该数据为在授权微应用的企业中,发生角色的增加、删除、修改的时刻推送,
插入表open_sync_biz_data_medium中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   套件所属企业的corpid

  • biz_id             :为角色roleid

  • biz_data         :数据为如下两种 Json格式

"syncAction": "org_role_add",表示企业增加角色事件之后的角色信息
                  "syncAction": "org_role_modify" ,表示企业修改角色事件之后的角色信息


企业增加/修改角色

{
	"role_name": "角色01",
	"role_id": 12345,
	"group_id": 1,
	"group_name": "默认角色组",
	"syncAction": "org_role_add"
}


企业删除角色

{
    "syncAction":"org_role_remove"
}

当biz_type = 16时,数据为企业的最新状态

该数据为在授权微应用的企业中,企业信息发生变更的时刻推送,插入表open_sync_biz_data_medium中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   套件所属企业的corpid

  • biz_id             :为企业corpid

  • biz_data         :数据为如下两种 Json格式

企业变更

{
	"errcode": 0,
	"corpid": "ding9f50b15bccd16741",
	"auth_level": 1,
	"syncAction": "org_update",
	"errmsg": "ok",
	"industry": "信息技术咨询",
	"is_authenticated": true,
	"corp_name": "XX企业",
	"corp_logo_url": "http://static.dingtalk.com/media/lALPBY0V4xtagzFgYA_96_96.png"
}


企业删除

{
    "syncAction": "org_remove"
}

当biz_type = 17时,数据为订单信息

该数据为企业在钉钉服务市场购买开通应用产生订单时刻推送,插入表open_sync_biz_data中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   套件所属企业的corpid

  • biz_id             :为订单orderId

  • biz_data         :数据为Json格式

{
	"orderId": "312139204444444",
	"suiteId": 123123123,
	"suiteKey": "xxxxxxxxx",
	"goodsName": "测试商品",
	"goodsCode": "xxxxxxxxxxx",
	"itemName": "测试规格",
	"itemCode": "xxxxxxx",
	"corpId": "dingxxxxxxxxxxxx",
	"maxOfPeople": 100,
	"minOfPeople": 0,
	"paidtime": 1524897069000,
	"serviceStopTime": 1524897069000,
	"payFee": 1000,
	"orderCreatSource": "xxxx",
	"distributorCorpName": "测试代理企业""distributorCorpId": "dingxxxxxxxxxxxxx",
	"nominalPayFee": 1000,
	"discountFee": 0,
	"discount": 1.00,
	"subQuantity": 1
}
  • 字段释义
字段 字段释义 备注信息
orderId 订单id
syncAction 该订单对应的用户操作 "syncAction": "market_order"
表示市场订单支付
suiteId 用户购买套件的suiteId 应用的套件信息
suiteKey 用户购买套件的suiteKey
goodsName 商品名称 应用商品、规格信息
goodsCode 商品码
itemName 规格名称
itemCode 规格码
subQuantity 购买数量
maxOfPeople 规格支持最大使用人数
minOfPeople 规格支持最小使用人数
corpId 购买企业的corpId
distributorCorpName 分销商企业名称
distributorCorpId 分销商企业corpId
paidtime 支付时间
(单位:毫秒)
serviceStopTime 服务结束时间
(单位:毫秒)
orderCreatSource 订单来源 默认订单来自应用中心;若值为
DRP,表示来自DRP分销平台;
payFee 实际支付价格
(单位:分)
nominalPayFee 名义票面费用
(单位:分)
现与payFee值相等
discountFee 折扣减免费用
(单位:分)
现值为0
discount 折扣 现值为1.00

当 biz_type = 20时,数据为企业外部联系人的最新状态

该数据为在授权微应用的企业中,发生外部联系人的增加、删除、修改的时刻推送,
插入表open_sync_biz_data_medium中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   开通套件微应用的企业corpid

  • biz_id             : 外部联系人userId

  • biz_data         :数据为如下两种 Json格式, 企业增加或修改外部联系人,字段值来自于开放平台接口extcontact/get,其中"syncAction" 字段取值含义如下:

    • "contact_add_org",表示企业增加外部联系人事件之后的联系人信息

    • "contact_modify_org" ,表示企业修改外部联系人事件之后的联系人信息

{
	"errcode": 0,
	"shareUserIds": [],
	"syncAction": "contact_modify_org",
	"mobile": "18611111111",
	"errmsg": "ok",
	"remark": "",
	"title": "",
	"userId": "2012130422-811754543",
	"shareDeptIds": [62039002],
	"labelIds": [83029],
	"followerUserId": "2000121002668",
	"name": "潜在客户小张",
	"stateCode": "86"
}

企业删除外部联系人

{"syncAction":"contact_leave_org"}

当 biz_type = 22时,数据为由ISV通过接口发起的审批实例数据

该数据为在授权微应用的企业中,当由ISV通过接口发起的审批出现变更的时刻产生数据推送,
插入表open_sync_biz_data_medium中。

  • subscribe_id  : 套件suiteid加下划线0

  • corp_id          :   开通套件微应用的企业corpid

  • biz_id             : 审批实例id

  • biz_data         :数据为如下Json格式,其中"syncAction" 字段取值含义如下:

    • "isv_bpms",表示一条审批记录的创建或者流程更新。

    • "syncAction": "isv_bpms_cancel",表示一条审批记录撤销(字段保留待开发)。

{
  "processInstanceId": "bbdf6db4-8786-4cd7-afce-1ee955094716",
  "attachedProcessInstanceIds": [],
  "syncAction": "isv_bpms",
  "businessId": "201808201943000524542",
  "title": "13567666099的test_1534743715441",
  "originatorDeptId": "-1",
  "url": "https://aflow.dingtalk.com/dingtalk/mobile/homepage.htm?corpid=ding6e51bbd3049d542f35c2f4657eb6378f&dd_share=false&showmenu=true&dd_progress=false&back=native&procInstId=bbdf6db4-8786-4cd7-afce-1ee955094716c&taskId=&dinghash=approval&dd_from=isv#approval",
  "operationRecords": [{
    "date": 1534765433000,
    "result": "NONE",
    "type": "START_PROCESS_INSTANCE",
    "userId": "0805174458-2101290130"
  }],
  "result": "",
  "bizAction": "NONE",
  "ccUserids": ["0805174458-2101290130"],
  "createTime": 1534765433000,
  "originatorUserid": "0805174458-2101290130",
  "processCode": "PROC-0D214F00-1817-490F-8555-541FEF589574",
  "formValueVOS": [{
    "name": "文本1",
    "id": "TextField-JL1PLEE3",
    "value": "测试"
  }],
  "tasks": [{
    "result": "NONE",
    "createTime": 1534765434000,
    "userId": "0805174458-2101290130",
    "taskId": 39260212292,
    "status": "RUNNING"
  }],
  "approverUserids": ["0805174458-2101290130"],
  "originatorDeptName": "XX的体验组织",
  "status": "RUNNING"
}

钉钉推送数据处理伪代码

处理推送数据的逻辑。

/**
 * @param subscribeId 订阅者ID。格式为套件ID加下划线0。例如12345_0
 */
processMsgInbox(subscribeId):
    //加锁。对每个订阅者加锁。保证每个订阅者的收件箱同一时刻是有一个线程在处理。
    //如果开发者有多台机器,并发处理数据造成数据被并发重复处理。
    lock = tryLock(subscribeId)

    //如果获取锁失败,表示有其他线程在处理收件箱。返回
    //加锁是为了有多台机器或者多个线程同时处理收件箱任务的时候,发生并发问题。
    if !lock
        return

    //拉去待处理的收件箱数据列表
    list msgList = getMsgList(subscribeId,subscribeCursor )

    //循环处理每条消息数据,处理完之后更新每条数据的处理状态
    //自己定义。0为未处理状态。1为处理完成状态。2为处理失败状态。
    //如果有重试策略,可定义status状态为2,3,4,5表示重试过得次数。当重试次数大于5次不再重试
    //此处要有监控报警。当发现处理失败或者未处理的数据堆积,要报警
    for msg: msgList
        processStatus = processMsg(msg)
        updateMsgStatus(msg.getId,processStatus);

    //休眠一段时间,防止msgList 为空的时候死循环执行,系统压力增大
    sleep(500)

    //继续执行本方法
    return processMsgInbox(subscribeId)

在项目启动的时候立即执行处理钉钉推送数据

onProjectStart:
    processMsgInbox(subscribeId)

定时任务补偿执行处理钉钉推送数据(作为补偿机制存在)

onTask:
    processMsgInbox(subscribeId)

以上内容是否对您有帮助:
在文档使用中是否遇到以下问题(多选):
  • 内容错误
  • 更新不及时
  • 链接错误
  • 缺少代码/图片示例
  • 太简单/步骤待完善
手机号
更多建议
提交成功,感谢您的反馈!