待办消息对接-3.0(回调模式)
一、业务场景
该接口用于接收每刻单据流程变更所发送的回调消息。
注意事项
- 待办转已办数据说明
- 收到的数据为
- 1、taskId=taskId001,taskAssignee=张三,taskActionType=PROCESSING(创建待办);
- 2、taskId=taskId001,taskAssignee=李四,taskActionType=PROCESSING(创建待办);
- 3、taskId=taskId001,taskAssignee=张三,taskActionType=COMPLETED(创建已办);
- 4、taskId=taskId001,taskAssignee=李四,taskActionType=REMOVED(消除待办);
- 收到的数据为
- 接收到的taskId、taskAssignee一致,但taskActionType不一致的任务(如1、3;2、4),其中taskActionType=COMPLETED(3)为张三的待办转已办任务(代表此节点为该用户操作审批,用于三方系统的已办处理),taskActionType=REMOVED(4)为李四的待办转消除任务(代表或签节点等场景该用户不再需要处理任务,用于三方系统的消除任务处理)。
配置参数说明
| 字段 | 说明 |
|---|---|
| 回调名称 | 自定义 |
| 回调类型 | 固定选择“单据流程变更通知3.0” |
| 回调地址 | 回调地址,每刻这边会先验证该url,只有返回的响应为{"success":true},每刻才会认为这是一个正确的url |
| 请求类型 | Http的请求类型,GET、POST、PUT等 |
| 超时时长 | 请求的超时时长,默认5000ms |
| 重试次数 | 如果回调失败,重新推送的最大次数 |
特殊说明
- 加密秘钥:每刻在推送数据的时候,会通过加密方式生成签名,并放在请求头中。加签的秘钥暂时不支持修改,管理员可以点击每刻报销的“设置-安全设置-系统安全策略-账号管理”中获取到key和secret
- 重试间隔:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
请求数据
请求数据示例:
{
"calloutParams": {
"serviceType": "PROCESS_CHANGE_NOTIFY_V3",
"procInsId": "4ab6fc3a-3797-11ef-b113-0a580af421a3",
"submitter": "MK001",
"reason": "审批意见",
"departmentCode": "DI35071680841784536",
"coverUserName": "张三",
"taskActionType": "REMOVED",
"sendAuthorizer": false,
"formSubTypeBizCode": "FT210924WRLLWCG",
"formName": "测试事由",
"eventTime": 1721195802088,
"legalEntityName": "测试公司抬头",
"departmentBizCode": "10002",
"departmentName": "WQQ3QQQ",
"formType": "REIMBURSE",
"formSubTypeName": "测试报销单",
"taskAssigneeUserCode": "UI87629314650014752",
"coverUser": "MK001",
"formCode": "MK24070004",
"formDataCode": "BX99250316511288327",
"completed": false,
"taskVersion": 78358206,
"legalEntityBizCode": "ELC21102210QTSWHS",
"legalEntityCode": "ELC21102210QTSWHS",
"abnormal": false,
"entCode": "MK00001",
"eventScenario": "FINANCE_AUDIT",
"taskAssignee": "MK002",
"taskName": "部门主管",
"submitterName": "张三",
"taskId": "4ab7e6b6-3797-11ef-b113-0a580af421a3",
"authorizedPerson": false,
"approvedAmount": "100.00"
},
"uniqueId": "COT41195248"
}
请求参数说明:
| 字段名 | 类型 | 说明 |
|---|---|---|
| uniqueId | String | 待办唯一ID |
| calloutParams | Json | 回调内容 |
calloutParams结构信息
| 字段名 | 类型 | 说明 |
|---|---|---|
| taskId | String | 每刻流程的任务ID(对应sso接口procTaskId) |
| entCode | String | 公司编码 |
| createTime | long | 从消息队列写入数据库的时间 |
| status | String | 消息状态(0.未被推送,1.发送成功,2.发送失败) |
| serviceType | String | 回调类型(PROCESS_CHANGE_NOTIFY_V2) |
| procInsId | String | 每刻流程的实例ID |
| submitter | String | 提交人员工号 |
| reason | String | 审批意见、驳回理由、撤回理由 |
| formType | String | 单据类型: REIMBURSE(报销单) PRECONSUME(申请单) LOAN(借款单) CONTRACT(合同) PAYMENT(付款单) REPAYMENT(还款单) |
| formSubTypeName | String | 单据小类名称,企业自定义 |
| formSubTypeBizCode | String | 单据小类编码内码,企业自定义 |
| coverUser | String | 报销人员工号、申请人员工号、借款人工号 |
| formCode | String | 单据号外码 |
| formDataCode | String | 单据号内码 |
| coverUserName | String | 报销人员姓名、申请人员姓名、借款人姓名 |
| taskActionType | String | 任务类: PROCESSING 创建待办(流程新到达节点后会给处理人发送一条此类型任务) COMPLETED 创建已办(某一任务处理人处理成功后,会发送一条此类型任务) REMOVED 消除待办(或签/管理员审批等场景,其他任务处理人处理成功后,会给其余不再需要处理审批任务人员发送一条此类型任务) 通知类(不支持消除): URGE 催办 需要跳转的可以通过associatedTaskId拼接 COMMENT 评论(无taskId) AT @某人(无taskId) BACK_TO_SUBMITTER 驳回至提单人(无taskId) CC 抄送(无taskId) |
| completed | boolean | 单据是否已完成 (只有最后一个已办/消除代办/抄送时,此参数才为true) |
| abnormal | boolean | 是否异常流程 |
| eventScenario | String | 节点类型: APPROVAL--审批 CASHIER_SETTLE--结算 FINANCE_AUDIT--审核 CC--抄送 SIGN--签收 SHARE_PLATFORM--共享审核节点 SUBMITTER--提单人待处理任务 |
| formName | String | 表单名称(事由) |
| eventTime | String | 事件发生时间(推送时间) |
| taskAssignee | String | 该节点任务的单一处理人员工工号 |
| taskName | String | 流程节点名称 |
| submitterName | String | 提交人姓名 |
| legalEntityName. | String | 单据上所选的公司抬头名称 |
| legalEntityBizCode | String | 单据上所选的公司抬头业务编码 |
| departmentName | String | 单据上所选的承担部门名称 |
| departmentBizCode | String | 单据上所选的承担部门业务编码 |
| associatedTaskId | String | 用于通知类型需要实现待办功能(有审批按钮)的单据链接,目前适用于催办 |
| operationType | String | 用户的操作方式 START_PROCESS("提交单据") SUBMIT_TO_PREVIOUS("提交驳回节点"), APPROVAL_AGREE("审批通过"), SETTLE_AGREE("出纳通过"), APPROVAL_REJECT("审批驳回"), APPROVAL_REJECT_WITH_RETURNABLE("驳回直达"), APPROVAL_REJECT_TO_PREVIOUS("驳回至指定节点"), APPROVAL_REJECT_TO_PREVIOUS_RETRACE("驳回至指定节点重走"), SETTLE_REJECT("出纳拒绝"), SIGN_APPROVAL_REJECT_INCLUDE_APPROVAL("签收审批一并驳回"), FORM_CHANGE("单据变更"), FORM_ABANDON("单据作废"), FORM_DELETE("单据删除"), FORWARD("转交"), REVERT("撤回"), REVERT_FORWARD("撤回转交"), COUNTER_SIGN("加签"), COUNTER_SIGN_WITH_AGREE("加签并通过"), RECALL("召回"), EDIT_MORE("修改更多"), SIGN_START_PROCESS("发起签收"), SIGN_APPROVAL_AGREE("签收通过"), SIGN_APPROVAL_REJECT("签收驳回"), SIGN_RECALL("签收召回"), |
| approvedAmount | String | 审批通过金额 |
| payableAmount | String | 企业支付金额 |
五、主动查询待办列表
3.0 客户可通过此接口主动查询回调消息
接口地址
GET /api/openapi/callout/v3/query?pageIndex={pageIndex}&pageSize={pageSize}&uuid={uuid}&eventTimeStartAt={eventTimeStartAt}&eventTimeEndAt={eventTimeEndAt}&formCode={formCode}&taskId={taskId}&taskAssignee={taskAssignee}&calloutState={calloutState}&customerProcessStatus={customerProcessStatus}
请求参数
| 字段名 | 类型 | 必填性 | 说明 |
|---|---|---|---|
pageIndex |
int | 必填 | 分页角标,1 为第一页,默认值:1 |
pageSize |
int | 必填 | 分页数量,最大值为 200,默认值:100 |
uuid |
String | 非必填 | 待办唯一 ID(与 formCode、eventTimeStartAt+eventTimeEndAt 三选一必填) |
eventTimeStartAt |
Long | 非必填 | 待办生成时间起(含),毫秒时间戳(> 0 才生效) |
eventTimeEndAt |
Long | 非必填 | 待办生成时间止(含),毫秒时间戳(> 0 才生效) |
formCode |
String | 非必填 | 单据号 |
taskId |
String | 非必填 | 任务 ID |
taskAssignee |
String | 非必填 | 处理人工号 |
calloutState |
String | 非必填 | 回调发送状态过滤:PRE / INIT / INVOKING / COMPLETED,空字符串 = 不过滤 |
customerProcessStatus |
String | 非必填 | 客户处理状态过滤:UNPROCESSED / SUCCESS / FAILED,空字符串 = 不过滤 |
注:
uuid/formCode/eventTimeStartAt+eventTimeEndAt三选一必传(R-4 严格模式);若都不传返回CALL_OUT_V3_001参数错误。
eventTimeStartAt与eventTimeEndAt必须同时 > 0 才生效;任一 ≤ 0 时该过滤条件被忽略(不会生成 1970-01-01 退化区间)。
3.0 字段命名
响应数据示例
{
"code": "200",
"message": "success",
"data": {
"total": 2,
"calloutList": [
{
"uuid": "COT41195248",
"entCode": "EC21051411IKTDZ5",
"taskId": "4ab7e6b6-3797-11ef-b113-0a580af421a3",
"formCode": "MK24070004",
"formDataCode": "BX99250316511288327",
"formType": "REIMBURSE",
"procInsId": "7b51050e-a06e-11ef-b113-0a580af421a3",
"taskActionType": "PROCESSING",
"taskAssignee": "MK002",
"taskAssigneeName": "张三",
"submitter": "250065",
"submitterName": "李四",
"taskName": "领导审批",
"calloutState": "COMPLETED",
"customerProcessStatus": "UNPROCESSED",
"customerProcessedAt": null,
"formCompletedAt": null,
"eventTime": 1721195802088,
"invokeTime": 1,
"lastCallTime": 1724000000000,
"calloutResult": "SUCCESS",
"returnResult": "{\"success\":true}"
}
]
}
}
响应字段
| 字段名 | 类型 | 说明 |
|---|---|---|
| total | int | 命中数据总数 |
| calloutList | array | 命中消息列表 |
| uuid | String | 待办唯一ID(沿用 COT 前缀) |
| entCode | String | 企业编码 |
| taskId | String | 任务 ID |
| formCode | String | 单据号外码 |
| formDataCode | String | 单据内码 |
| formType | String | 单据类型 |
| procInsId | String | 流程实例 |
| taskActionType | String | 任务类(PROCESSING/COMPLETED/REMOVED/URGE/COMMENT/AT/BACK_TO_SUBMITTER/CC) |
| taskAssignee | String | 处理人工号 |
| taskAssigneeName | String | 处理人姓名 |
| submitter | String | 提交人工号 |
| submitterName | String | 提交人姓名 |
| taskName | String | 节点名称 |
| calloutState | String | 回调发送状态:PRE/INIT/INVOKING/COMPLETED |
| status | String | 2.0 状态码:0/1/2 |
| customerProcessStatus | String | 客户处理状态:UNPROCESSED/SUCCESS/FAILED |
| customerProcessedAt | Date | 客户最近一次标记时间 |
| formCompletedAt | Date | 单据完结时间(半年后清理) |
| eventTime | Date | 待办生成时间(毫秒时间戳) |
| invokeTime | int | 回调调用次数 |
| lastCallTime | Date | 最近回调时间(=updated_at) |
| calloutResult | String | 回调结果:SUCCESS/FAIL |
| returnResult | String | 客户响应原始 body |
六、更新待办状态
接口地址
PUT /api/openapi/callout/v3/update
请求参数
{
"items": [
{
"uuid": "COT41195248",
"status": "1"
}
]
}
| 字段名 | 类型 | 必填性 | 说明 |
|---|---|---|---|
| items | array | 必填 | 标记项列表(上限200,超出整批失败) |
| items[].uuid | String | 必填 | 待办唯一ID |
| items[].status | String | 必填 | 客户处理状态("1"=处理成功,"2"=处理失败) |
业务规则:
- 全部成功 →
data.items为空- 部分失败 →
data.items列出失败项(uuid + message)- 已 SUCCESS 的消息不会被 FAILED 覆盖(R-10)
响应数据示例
{
"code": "200",
"message": "success",
"data": {
"items": []
}
}
错误码
| 错误码 | 说明 |
|---|---|
CALL_OUT_V3_001 |
参数错误 |
CALL_OUT_V3_002 |
时间范围不合法 |
CALL_OUT_V3_003 |
分页大小超过上限 |
CALL_OUT_V3_004 |
批量大小超过上限 |
CALL_OUT_V3_005 |
标记状态值不合法 |