
# 智能交互驱动流程
 #### 流程图示例
用户与数字人进行智能交互的流程图示例，如下所示，对应流程的详细说明，如[流程图总体说明]所示。
- 智能交互非流式驱动流程图，如[图1]所示。
- 智能交互流式驱动流程图，如[图2]所示。
- 智能交互流式音频驱动流程图，如[图3]所示。
- 智能交互驱动打断对话流程图，如[图4]所示。
- 智能交互驱动停止对话流程图，如[图5]所示。
- 智能交互驱动心跳保活流程图，如[图 智能交互驱动心跳保活流程图]所示。
- 智能交互驱动超时流程图，如[图7]所示。
- 智能交互驱动任务结束流程图，如[图8]所示。
智能交互驱动WebSocket接口说明，如[智能交互驱动WebSocket接口](https://support.huaweicloud.com/api-metastudio/metastudio_02_0029.html)所示。
图1智能交互非流式驱动流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000001833943998.png)
图2智能交互流式驱动流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000001880743221.png)
图3智能交互流式音频驱动流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000002365324674.png)
图4智能交互驱动打断对话流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000001860914929.png)
图5智能交互驱动停止对话流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000001860875053.png)
图6智能交互驱动心跳保活流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000001900084168.png)
图7智能交互驱动超时流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000001860885005.png)
图8智能交互驱动任务结束流程图   
![](https://support.huaweicloud.com/api-metastudio/zh-cn_image_0000001814088988.png)
 #### 流程图总体说明
[流程图示例]中详细的接口交互说明，如下所示：
1. [用户请求建立WebSocket连接]
2. [用户发送文本驱动消息]
3. [用户发送音频驱动消息]
4. [用户发送中断对话的消息]
5. [用户发送结束对话的消息]
6. [用户发送心跳请求消息]
7. [用户与数字人对话超时断连]
8. [会话任务结束]
 
 #### 用户请求建立WebSocket连接
用户请求建立WebSocket连接时，会调用接口[智能交互驱动WebSocket接口](https://support.huaweicloud.com/api-metastudio/metastudio_02_0029.html)创建与MetaStudio智能交互服务之间的Websocket连接。
连接建立成功后，MetaStudio智能交互服务已准备就绪，会发送START_CHAT命令给第三方应用。第三方应用接收到START_CHAT命令后，用户开始发送文本驱动命令。
详细交互流程如下所示：
1. 用户请求建立与数字人对话的WebSocket连接。 代码示例如下所示，其中，{*终端接入地址* }请参考[终端节点获取方式](https://support.huaweicloud.com/api-metastudio/metastudio_02_0029.html#metastudio_02_0029__section189051693382)获取。
   ```
   wss://{终端接入地址}/v1/70b76xxxxxx34253880af501cdxxxxxx/digital-human-chat/chat-command/e37a28485f684769aa537466e719629d
   ```
   
2. MetaStudio接收WebSocket建立连接的请求后，返回响应消息。
   代码示例如下所示：
   ```
   {
       "error_code": "MSS.00000000",
       "error_msg": "success",
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf"
   }
   ```
   

3. MetaStudio发送启动对话的消息。 代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "START_CHAT",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
 
 #### 用户发送文本驱动消息
第三方应用使用TEXT_DRIVE命令，发送文本驱动消息，给MetaStudio智能交互服务。
- MetaStudio发送的启动会话消息START_CHAT，会返回chat_id字段。用户发送文本驱动消息TEXT_DRIVE、中断对话消息INTERRUPT_CHAT或结束对话消息STOP_CHAT时，都需要携带该chat_id。
- 支持流式文本消息。seq为流式文本序号，从1开始计数；is_last用于判断流式文本的最后一包数据。如果不使用流式文本消息，seq设置为"1"，is_last设置为"true"。 建议每个分包数据长度大于6个字，否则可能会导致数字人说话卡顿。
  
详细交互流程如下所示：
1. 用户发送文本驱动消息。 代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "job_id": "e37a28485f684769aa537466e719629d",
           "robot_id": "2c9d60818b365847018b365f40320000",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
           "command": "TEXT_DRIVE",
           "data": {
               "text": "您好，我是您的数字人",
               "seq": 1,
               "is_last": true
           }
       }
   }
   ```
   
2. MetaStudio收到用户发送的文本驱动消息后，返回响应消息。
   代码示例如下所示：
   ```
   {
       "error_code": "MSS.00000000",
       "error_msg": "success",
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "TEXT_DRIVE_RSP",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
3. MetaStudio响应成功后，数字人开始讲话。MetaStudio对应发送开始讲话的消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "START_SPEAKING",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
4. 数字人讲话完成后，MetaStudio对应发送结束讲话的消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "STOP_SPEAKING",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
 
 #### 用户发送音频驱动消息
第三方应用使用AUDIO_DRIVE命令，发送文本驱动消息，给MetaStudio智能交互服务。
- MetaStudio发送的启动会话消息START_CHAT，会返回chat_id字段。用户发送音频驱动消息AUDIO_DRIVE、中断对话消息INTERRUPT_CHAT或结束对话消息STOP_CHAT时，都需要携带该chat_id。
- 支持流式音频消息。seq为流式文本序号，从1开始计数；is_last用于判断流式音频的最后一包数据。 建议每个分包数据长度为160ms（5120B），发送间隔为120ms，否则可能会导致数字人说话卡顿。
  
详细交互流程如下所示：
1. 用户发送音频驱动消息。 代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "job_id": "e37a28485f684769aa537466e719629d",
           "robot_id": "2c9d60818b365847018b365f40320000",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
           "command": "AUDIO_DRIVE",
           "data": {
               "audio": "AAAAAPxxxxxxxxxxxxCAAAAxxxxxxxxxxx/8AAAAAAwD+xxxxxxxxxxx/AAACAA==",
               "seq": 1,
               "is_last": false
           }
       }
   }
   ```
   
2. MetaStudio收到用户发送的音频驱动消息后，返回响应消息。
   代码示例如下所示：
   ```
   {
       "error_code": "MSS.00000000",
       "error_msg": "success",
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "AUDIO_DRIVE_RSP",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
3. MetaStudio响应成功后，数字人开始讲话。MetaStudio对应发送开始讲话的消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "START_SPEAKING",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
4. 数字人讲话完成后，MetaStudio对应发送结束讲话的消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "STOP_SPEAKING",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
 
 #### 用户发送中断对话的消息
文本驱动数字人讲话过程中，支持使用INTERRUPT_CHAT命令，中断数字人与用户的对话。对话被打断后，数字人将停止说话，并发送下一次对话的START_CHAT消息给用户。
详细交互流程如下所示：
1. 用户发送中断对话的消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
           "command": "INTERRUPT_CHAT"
       }
   }
   ```
   
2. MetaStudio接收到用户发送的中断对话消息后，返回响应消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "INTERRUPT_CHAT_RSP",
           "job_id": "e37a28485f684769aa537466e719629d,
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
3. MetaStudio返回结束对话的消息给用户。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "STOP_SPEAKING",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
4. MetaStudio发送接收下一次开始对话的消息。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "START_CHAT",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "00f1c200389e434485260777a2ad57bc",
       }
   }
   ```
   
 
 #### 用户发送结束对话的消息
文本驱动数字人讲话过程中，支持通过STOP_CHAT命令停止对话。对话停止后，数字人将停止说话，并不会再发送下一次对话的START_CHAT消息。
详细交互流程如下所示：
1. 用户发送停止对话消息。 代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
           "command": "STOP_CHAT"
       }
   }
   ```
   
2. MetaStudio接收用户发送的停止对话消息后，返回响应消息。 代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "STOP_CHAT_RSP",
           "job_id": "e37a28485f684769aa537466e719629d,
           "chat_id": "ac71c539395b4446865074589ffa2c6c"
       }
   }
   ```
   
3. MetaStudio返回结束讲话的消息给用户。
   代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "STOP_SPEAKING",
           "job_id": "e37a28485f684769aa537466e719629d",
           "chat_id": "ac71c539395b4446865074589ffa2c6c",
       }
   }
   ```
   
 
 #### 用户发送心跳请求消息
文本驱动数字人讲话过程中，支持通过PING命令发送心跳请求，用于对WebSocket链路进行保活。
详细交互流程如下所示：
1. 用户发送心跳请求消息。 代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "job_id": "e37a28485f684769aa537466e719629d",
           "command": "PING"
       }
   }
   ```
   
2. MetaStudio接收用户发送的心跳请求消息后，返回心跳响应消息。 代码示例如下所示：
   ```
   {
       "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
       "payload": {
           "command": "PONG",
           "job_id": "e37a28485f684769aa537466e719629d
       }
   }
   ```
   
 
 #### 用户与数字人对话超时断连
用户与MetaStudio服务建立WebSocket连接后， 如果用户超过30秒未发送对话消息或心跳请求消息，即MetaStudio超过30秒未收到第三方应用的TEXT_DRIVE命令或PING命令，MetaStudio将主动关闭WebSocket连接。
 #### 会话任务结束
MetaStudio智能对话服务结束时，如：应用或其对话页面关闭。MetaStudio将发送JOB_FINISHED命令给第三方应用，并关闭WebSocket连接。
MetaStudio发送结束任务的消息。
代码示例如下所示：
```
{
    "request_id": "d7aa08da33dd4a662ad5be508c5b77cf",
    "payload": {
        "command": "JOB_FINISHED",
        "job_id": "e37a28485f684769aa537466e719629d
    }
}
```
