# 调用已发布的CoMi工作流API
# 适用场景
在CoMiBuilder后台制作发布了工作流,第三方支持通过程序调用工作流API的形式进行集成。

# 适配方法
# 1、前提准备
# 1-1、准备Apikey
协同OA系统管理员后台 → CoMiBuilder → 应用中心 → API服务 → Api Key → 创建API Key给第三方调用使用,默认可选择全部接口:

# 1-2、获取远程调用工作流服务编码
首先,确保计划调用的工作流已经设计完成并正式发布。
然后,通过协同OA系统管理员后台 → CoMiBuilder → 应用中心 → 工作流页签 → 搜索到计划调用的工作流,获得“服务编码”:

# 2、执行远程调用
# 请求地址(流式输出)
由于工作流可能涉及多步、阻塞式操作,故请求采用stream流式数据输出(SSE标准):
请求地址 http(https)://Nginx地址/seeyon/ai-platform/ai-manager/workflow/svc/call/stream
请求方式:POST
Content-Type:application/json
Request Header:api-key
如调用服务和comi的ai-manager服务在同一局域网下,可以用如下地址
http://ip:port/ai-manager/workflow/svc/call/stream
请求参数:
| 参数 | 类型 | 含义 | 是否必填 | |
|---|---|---|---|---|
| chatSessionId | string | 每次会话的唯一标识,需要调用者生成,使用uuid即可。 | Y | |
| workflowCode | String | 已发布的工作流的服务编码 | Y | |
| input | String | 用户的输入内容 | Y | |
| citations | [] | 有文件上传时使用,需要使用comibuilder的文件上传接口之后的结果作为此值 | ||
| sessionId | Long | Ai-manager生成的会话,可不传,仅当需要记忆上下文时需要传。对应上一次调用comi工作流的输出data.aiSessionId | N | |
| varValueMap | Map | 配置了变量的workflow只能通过通过服务方式调用,调用时需要通过该字段传入变量的真实值 | N |
# 调试示例
CURL测试工作流示例:
curl -X POST \
http://10.101.68.10/seeyon/ai-platform/ai-manager/workflow/svc/call/stream \
-H "Content-Type: application/json" \
-H "api-key: sjoaOMDf1Ze5YJOZUaXwD8iS87bbBOXHBOR42aTY9DijGpCidS" \
-d '{
"chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
"workflowCode": "v5_workflow_form_approve",
"citations": [],
"sessionId": "",
"varValueMap":{}
}'

CURL返回结果(第一段):
data: {
"id": "-1441631494942929507",
"chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
"aiSessionId": "7765413880767791954",
"aiSessionName": "",
"callId": "-891878663125250145",
"agentId": "-315404879017523771",
"agentCode": "v5_workflow_form_approve",
"agentType": null,
"assistantId": "-315404879017523771",
"assistantCode": "v5_workflow_form_approve",
"sessionType": 5,
"input": null,
"messageType": 2,
"content": "",
"citationsJson": null,
"citationList": [
],
"messageTime": 1768801854756,
"runStepId": "-8939658967002168328",
"stepType": "智能场景识别",
"stepName": "智能场景识别",
"stepInput": "",
"runStepStatus": "completed",
"stepTime": null,
"startedAt": 1768801854592,
"completedAt": 1768801854756,
"expiredAt": null,
"cancelledAt": null,
"failedAt": null,
"totalTime": "164",
"errorMsgTag": null,
"errorCode": null,
"promptTokens": null,
"completionTokens": null,
"totalTokens": null,
"finish": 0,
"createUserName": null,
"modelCode": null,
"createTime": null,
"updateTime": null,
"runningStatus": null,
"sourceType": 6,
"runSteps": null,
"hitKnowledgeRunSteps": null,
"needMarkBlueRunSteps": null,
"recordSaveStatus": true,
"assistant": null,
"needHistoryRecord": true,
"isInterrupt": 0,
"currentNodeType": null
}
CURL返回结果(最后一段):
data: {
"id": null,
"chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
"aiSessionId": "7765413880767791954",
"aiSessionName": "",
"callId": "-891878663125250145",
"agentId": "-315404879017523771",
"agentCode": null,
"agentType": null,
"assistantId": null,
"assistantCode": null,
"sessionType": 5,
"input": null,
"messageType": 5,
"content": "",
"citationsJson": null,
"citationList": [
],
"messageTime": null,
"runStepId": null,
"stepType": null,
"stepName": null,
"stepInput": null,
"runStepStatus": "completed",
"stepTime": null,
"startedAt": 1768801854555,
"completedAt": 1768801855499,
"expiredAt": null,
"cancelledAt": null,
"failedAt": null,
"totalTime": "944",
"errorMsgTag": null,
"errorCode": null,
"promptTokens": 134,
"completionTokens": 2,
"totalTokens": 136,
"finish": 1,
"createUserName": "admin",
"modelCode": null,
"createTime": 1768801854537,
"updateTime": 1768801855499,
"runningStatus": 1,
"sourceType": null,
"runSteps": null,
"hitKnowledgeRunSteps": null,
"needMarkBlueRunSteps": null,
"recordSaveStatus": true,
"assistant": null,
"needHistoryRecord": true,
"isInterrupt": null,
"currentNodeType": null
}
# 流式结果messageType类型说明
1、messageType的各种情况
1:结果非流式
2:步骤
5:结果流式
7:命中知识源
2、消息中finish =1 代表本次会话结束,可以关闭接受消息。finish = 0 代表会话正在进行中,需要持续接收消息。
# 返回异常
已知,如果传入错误的工作流编码,会提示如下错误码:
{"code":"1000","message":"工作流不存在","data":null}
已知,如果工作流未发布,会提示如下错误码:
{"code":"1000","message":"工作流未发布","data":null}
编撰人:het
快速跳转