# 创建运行

该 API 用于在某个飞书 Aily 应用会话（Session）上创建一次运行（Run）。
**注意事项**：更多信息及示例代码，可参考 [Aily OpenAPI 接入与接口说明](https://bytedance.larkoffice.com/wiki/UTU6wVTVGigefykjO1acAOOvnNc)。

## 实体概念说明

- **会话**（Session）：管理用户与 Aily 助手之间的交互会话；每次会话记录了用户发送给 Aily 助手的消息以及 Aily 助手的响应。
- **消息**（Message）：消息可以包含文本、表格、图片等多种类型的内容。
- **运行**（Run）：Aily 助手基于会话内消息进行意图判定、调用匹配的技能，并返回技能执行后的结果消息。

## 请求

基本 | &nbsp;
---|---
HTTP URL | https://open.feishu.cn/open-apis/aily/v1/sessions/:aily_session_id/runs
HTTP Method | POST
接口频率限制 | [100 次/分钟](https://open.feishu.cn/document/ukTMukTMukTM/uUzN04SN3QjL1cDN)
支持的应用类型 | Custom App
权限要求<br>**调用该 API 所需的权限。开启其中任意一项权限即可调用** | 创建运行(aily:run:write)

### 请求头

名称 | 类型 | 必填 | 描述
---|---|---|---
Authorization | string | 是 | `tenant_access_token`<br>或<br>`user_access_token`<br>**值格式**："Bearer `access_token`"<br>**示例值**："Bearer u-7f1bcd13fc57d46bac21793a18e560"<br>[了解更多：如何选择与获取 access token](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-choose-which-type-of-token-to-use)
Content-Type | string | 是 | **固定值**："application/json; charset=utf-8"
X-Aily-BizUserID | string | 否 | 为标识创建会话的唯一用户 ID<br>- 建议使用唯一内部 ID 或其他可标识用户唯一身份的字段（如飞书账号的 user_id），可用于分析来自 API 的具体用户<br>**示例值**："ou_5ad573a6411d72b8305fda3a9c15c70e"<br>**数据校验规则**：<br>- 长度范围：`0` ～ `64` 字符

### 路径参数

名称 | 类型 | 描述
---|---|---
aily_session_id | string | 会话 ID；参考 [创建会话](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/aily-v1/aily_session/create) 接口<br>**示例值**："session_4dfunz7sp1g8m"<br>**数据校验规则**：<br>- 长度范围：`0` ～ `32` 字符<br>- 正则校验：`session_[0-9a-hjkmnp-z]{1,24}`

### 请求体

名称 | 类型 | 必填 | 描述
---|---|---|---
app_id | string | 是 | 为 Aily 应用 ID（`spring_xxx__c`），可以在 Aily 应用开发页面的浏览器地址里获取<br>**示例值**："spring_449d72db2f__c"<br>**数据校验规则**：<br>- 长度范围：`0` ～ `64` 字符
skill_id | string | 否 | 指定技能 ID（`skill_xxx`），可以在 Aily 技能配置页面的浏览器地址里获取<br>> 指定技能后、能够节省意图匹配的耗时<br>**示例值**："skill_6cc6166178ca"<br>**数据校验规则**：<br>- 长度范围：`0` ～ `32` 字符
skill_input | string | 否 | 指定技能 ID 时可以同时指定技能输入<br>> 备注：常用于工作流技能内指定自定义参数，`skill_input` 需要配合 `skill_id` 同时传递才能生效<br>**示例值**："{\"key\": \"value\"}"<br>**数据校验规则**：<br>- 长度范围：`0` ～ `255` 字符
metadata | string | 否 | 其他扩展的参数（JSON String）<br>> 备注：`metadata` 传递的参数，可以在后续 `GetRun` 调用中原样读取获得<br>**示例值**："{}"<br>**数据校验规则**：<br>- 长度范围：`0` ～ `255` 字符

**备注：**

> 同一个会话（`session_id`）只能创建一个活跃的 `Run`
>
> 活跃状态即 ：`status` 为 `QUEUED` | `IN_PROGRESS` | `REQUIRES_MESSAGE`

### 请求体示例
```json
{
    "app_id": "spring_449d72db2f__c",
    "skill_id": "skill_6cc6166178ca",
    "skill_input": "{\"key\": \"value\"}",
    "metadata": "{}"
}
```

## 响应

### 响应体

名称 | 类型 | 描述
---|---|---
code | int | 错误码，非 0 表示失败
msg | string | 错误描述
data | \- | \-
run | run | 运行信息
id | string | 运行 ID
created_at | string | 运行的创建时间，毫秒时间戳
app_id | string | 应用 ID
session_id | string | 会话 ID
status | string | 状态
started_at | string | 开始时间，毫秒时间戳
ended_at | string | 结束时间，毫秒时间戳
error | run_error | 失败时的错误信息
code | string | 错误码
message | string | 错误信息
metadata | string | 其他透传信息

### 响应体示例
```json
{
    "code": 0,
    "msg": "success",
    "data": {
        "run": {
            "id": "run_4dfrxvctjqzzj",
            "created_at": "1711975665710",
            "app_id": "spring_xxx__c",
            "session_id": "session_4dfunz7sp1g8m",
            "status": "IN_PROGRESS",
            "started_at": "1711975665710",
            "ended_at": "1711975665710",
            "error": {
                "code": "sp_ec_sm_900101",
                "message": "技能不存在或已删除"
            },
            "metadata": "{}"
        }
    }
}
```

### 错误码

HTTP状态码 | 错误码 | 描述 | 排查建议
---|---|---|---
400 | 2700001 | param is invalid | 参数错误

