# 调用已发布的CoMi工作流API

# 适用场景

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

1768793738033.png

# 适配方法

# 1、前提准备

# 1-1、准备Apikey

协同OA系统管理员后台 → CoMiBuilder → 应用中心 → API服务 → Api Key → 创建API Key给第三方调用使用,默认可选择全部接口:

1768532207695.png

# 1-2、获取远程调用工作流服务编码

首先,确保计划调用的工作流已经设计完成并正式发布。

然后,通过协同OA系统管理员后台 → CoMiBuilder → 应用中心 → 工作流页签 → 搜索到计划调用的工作流,获得“服务编码”:

1768793911879.png

# 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":{}
  }'

1768803290598.png

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