
# 智能交互驱动WebSocket接口
#### 前提条件
需要申请开通智能交互权限后，才可集成智能交互SDK，并使用Websocket接口驱动数字人。
 #### 终端节点获取方式
![](https://support.huaweicloud.com/api-metastudio/public_sys-resources/caution_3.0-zh-cn.png)
终端接入地址需要每次启动数字人智能交互任务时动态获取，不允许输入固定域名，并使用固定地址访问。
智能交互驱动WebSocket接口终端节点的获取方式，如[表1]所示。
 表1终端节点获取方式 
| 场景             | 获取方式                                                                                                                         |
|:---|:---|
| 未通过WEB SDK调用场景 | 终端节点地址从接口[启动数字人智能交互任务](https://support.huaweicloud.com/api-metastudio/StartSmartChatJob.html)的响应参数chat_access_address中获取。    |
| 通过WEB SDK调用场景  | 终端节点地址从智能交互SDK的通知[jobInfoChange](https://support.huaweicloud.com/api-metastudio/metastudio_08_0011.html)的参数websocketAddr中获取。 |
   
#### 功能介绍
该接口用于创建用户与数字人对话的WebSocket连接，驱动数字人对话。
智能交互示例代码，详见[MetaStudio智能交互](https://codelabs.developer.huaweicloud.com/codelabs/samples/080724652e8649df91622c00aab67a14)。
#### 调用方法
可选用下述一种方法，调用本接口：
- IAM Token认证方式，操作请参考[如何调用API](https://support.huaweicloud.com/api-metastudio/metastudio_02_0002.html)。
- 一次性Token认证方式，操作请参考[创建一次性鉴权码](https://support.huaweicloud.com/api-metastudio/CreateOnceCode.html)。
 
#### URI
/v1/{project_id}/digital-human-chat/chat-command/{job_id}
[表2]、[表3]和[表4]是WebSocket建连时携带的参数。
 表2路径参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| project_id | 是    | String | 项目ID，获取方法请参考[获取项目ID](https://support.huaweicloud.com/api-metastudio/metastudio_02_0006.html)。                                                                                                                                               |
| job_id     | 是    | String | 任务ID。在Web SDK的[create](https://support.huaweicloud.com/api-metastudio/metastudio_08_0010.html#section1)接口入参eventListeners中，监听[jobInfoChange](https://support.huaweicloud.com/api-metastudio/metastudio_08_0011.html#section1)事件通知，用于获取任务ID。 |
   
 表3Query参数 
| 参数    | 是否必选 | 参数类型   | 描述                                                                                                                                                                   |
|:---|:---|:---|:---|
| token | 否    | String | 一次性token，获取方法请参考[创建一次性鉴权码](https://support.huaweicloud.com/api-metastudio/CreateOnceCode.html)。 如果使用JavaScript开发时，请使用一次性鉴权码认证方式。 |
   
 表4请求Header参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                          |
|:---|:---|:---|:---|
| X-Auth-Token | 否    | String | 用户Token。通过调用**IAM服务获取用户Token接口**获取，响应消息头中X-Subject-Token的值。 |
   
#### 请求参数
[表5]、[表6]和[表7]中的请求参数为WebSocket建连成功后，用户与数字人对话的请求参数。
 表5请求Message参数 
| 参数         | 是否必选 | 参数类型                                                                  | 描述      |
|:---|:---|:---|:---|
| request_id | 否    | String                                                                | 请求ID。   |
| payload    | 是    | [RequestPayloadInfo] object | 请求负载信息。 |
   
 表6RequestPayloadInfo 
| 参数       | 是否必选 | 参数类型                                                                                                 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| job_id   | 是    | String                                                                                               | 任务ID。获取方法请参考[获取任务ID](https://support.huaweicloud.com/api-metastudio/metastudio_08_0011.html#section1)。                                                                                                                                                                                                                                                                                                                                                                                                                     |
| robot_id | 否    | String                                                                                               | 应用ID。从数字人互动页面URL中获取，URL的获取方式，请参见《用户指南》的"创建智能交互数字人"章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| chat_id  | 是    | String                                                                                               | 对话ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| command  | 是    | String                                                                                               | 操作命令。 包含如下命令： - TEXT_DRIVE：文本驱动  - AUDIO_DRIVE：音频驱动  - INTERRUPT_CHAT：中断对话  - STOP_CHAT：停止对话   |
| data     | 是    | [ChatReqDataInfo] object | 对话请求数据信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   
 表7ChatReqDataInfo 
| 参数          | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| text        | 否    | String  | 文本信息，command为TEXT_DRIVE时必选。                                                                                                                                                                                                                                                                                                                                                                             |
| audio       | 否    | String  | 音频数据的byte数组，经Base64编码后的字符串，command为AUDIO_DRIVE时必选。 - 音频格式：PCM  - 采样位宽：16bits  - 最大长度40960字节   |
| sample_rate | 否    | Integer | 音频采样率，支持以下采样率：8000、12000、16000、24000、48000，默认16000HZ                                                                                                                                                                                                                                                                                                                                                    |
| seq         | 否    | Integer | 数据包序号。                                                                                                                                                                                                                                                                                                                                                                                                  |
| is_last     | 否    | Boolean | 判断是否为最后一个文本。                                                                                                                                                                                                                                                                                                                                                                                            |
   
#### 响应参数
**状态码： 101**
表8响应Header参数 
| 参数           | 参数类型   | 描述    |
|:---|:---|:---|
| X-Request-Id | String | 请求ID。 |
   
表9响应Message参数 
| 参数         | 参数类型                                                                    | 描述      |
|:---|:---|:---|
| error_code | String                                                                  | 错误码。    |
| error_msg  | String                                                                  | 错误描述。   |
| request_id | String                                                                  | 请求ID。   |
| payload    | [ResponsePayloadInfo] object | 响应负载信息。 |
   
 表10ResponsePayloadInfo 
| 参数      | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|
| job_id  | String | 任务ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| chat_id | String | 对话ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| command | String | 操作命令。 包含如下命令： - START_CHAT：开始对话  - TEXT_DRIVE_RSP：文本驱动响应  - START_SPEAKING：开始讲话  - STOP_SPEAKING：结束讲话  - INTERRUPT_CHAT_RSP：中断对话响应  - STOP_CHAT_RSP：停止对话响应  - JOB_FINISHED：结束任务  - PING：心跳请求  - PONG：心跳响应  - AUDIO_DRIVE_RSP：音频驱动响应   |
   
#### 请求示例
1. 用户请求建立与数字人对话的WebSocket连接。
   代码示例如下所示，其中，{*终端接入地址* }请参考[终端节点获取方式]获取。
   ```
   wss://{终端接入地址}/v1/70b76xxxxxx34253880af501cdxxxxxx/digital-human-chat/chat-command/e37a28485f684769aa537466e719629d
   ```
   
2. 等MetaStudio返回可以发送启动对话的消息时，如[2]所示。用户发送文本驱动消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "job_id": "e37a28485f684769aa537466e719629d",
           "robot_id": "2c9d60818b365847018b365f40320000",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
           "command": "TEXT_DRIVE",
           "data": {
               "text": "您好，我是您的分身数字人",
               "seq": 1,
               "is_last": true
           }
       }
   }
   ```
   
 
#### 响应示例
**状态码：101**
1. MetaStudio接收WebSocket建立连接的请求后，如[1]所示，返回响应消息。
   代码示例如下所示：
   ```
   {
       "error_code": "MSS.00000000",
       "error_msg": "success",
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf"
   }
   ```
   
2. MetaStudio发送启动对话的消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "START_CHAT",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
3. MetaStudio收到用户发送的文本驱动消息时，如[请求示例-2]所示。MetaStudio返回文本驱动的响应消息。
   代码示例如下所示：
   ```
   {
       "error_code": "MSS.00000000",
       "error_msg": "success",
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "TEXT_DRIVE_RSP",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
 
#### 状态码
| 状态码 | 描述    |
|:---|:---|
| 101 | 连接成功。 |
   
#### 错误码
请参见[错误码](https://support.huaweicloud.com/api-metastudio/ErrorCode.html)。
