
# 处理会话
#### 功能介绍
问答会话API由开启会话、处理会话、关闭会话三个接口组成。用户可通过调用该接口与机器人进行会话。该接口即将下线，请优先使用问答机器人API接口进行调用。
#### 调试
您可以在[API Explorer](https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=CBS&api=ExecuteSession)中调试该接口，支持自动认证鉴权。API Explorer可以自动生成SDK代码示例，并提供SDK代码示例调试功能。
#### URI
POST https://{endpoint}/v1/{project_id}/qabots/{qabot_id}/sessions/{session_id}
表1路径参数 
| 参数         | 是否必选 | 参数类型   | 描述                                                                                                                                                            |
|:---|:---|:---|:---|
| endpoint   | 是    | String | 终端节点，即调用API的请求地址。 不同服务不同区域的endpoint不同，您可以从[终端节点](https://support.huaweicloud.com/api-cbs/cbs_03_0102.html)中获取。                  |
| project_id | 是    | String | 项目ID，用于资源隔离。请参见[获取项目ID](https://support.huaweicloud.com/api-cbs/cbs_03_0069.html)。                                                                            |
| qabot_id   | 是    | String | 机器人标识符，qabot编号，UUID格式。如：303a0a00-c88a-43e3-aa2f-d5b8b9832b02。 进入问答机器人的Console界面，在"机器人名称/ID"列显示对应的qabot_id。                         |
| session_id | 是    | String | 会话标识符，UUID格式。如：c04e6f7b-61d7-4a2d-a0c8-f9ecd2f62359。 具体获取方式请参见[开启会话](https://support.huaweicloud.com/api-cbs/cbs_03_0112.html)章节。 |
   
#### 请求参数
表2请求Header参数 
| 参数           | 是否必选 | 参数类型   | 描述                                                                                                                                                     |
|:---|:---|:---|:---|
| X-Auth-Token | 是    | String | 用户Token。 用于获取操作API的权限。[获取Token接口](https://support.huaweicloud.com/api-cbs/cbs_03_0006.html)响应消息头中X-Subject-Token的值即为Token。 |
| Content-Type | 是    | String | 消息体的类型（格式），参数值为"application/json"。                                                                                                                     |
   
表3SessionExtends 
| 参数         | 是否必选 | 参数类型                                           | 描述                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| tag_ids    | 否    | [Tag] object | 待匹配的答案标签信息。                                                                                                                                                                                                                                                                                                                |
| domain_ids | 否    | Array of string                                | 问题类别id列表。 只有属于这些问题类别的知识库问答对才会被匹配到。 获取domain_ids方法： 登录对话机器人控制台，在"问答机器人 \> 知识库 \> 问答管理"界面，鼠标指向问题类别，获取domain_ids。 ![](https://support.huaweicloud.com/api-cbs/zh-cn_image_0000001121058651.png "点击放大") |
| source     | 否    | String                                         | 问题来源。 支持用户自定义，最终体现在问答日志里。                                                                                                                                                                                                                                                                    |
   
 表4Tag 
| 参数     | 是否必选 | 参数类型             | 描述                  |
|:---|:---|:---|:---|
| should | 否    | Array of strings | 必须要包含其中之一的答案标签id列表。 |
   
 #### 响应参数
**状态码： 200**
表5QaBotAnswers 
| 参数      | 参数类型                                                             | 描述       |
|:---|:---|:---|
| answers | Array of [QaBotAnswer] objects | 问答机器人回复。 |
   
 表6QaBotAnswer 
| 参数                 | 参数类型   | 描述                                                   |
|:---|:---|:---|
| qa_pair_id         | String | 问答对ID，UUID格式，如：305cd440-ab4f-4704-9b30-ffa4e82a5606。 |
| st_question        | String | 标准问题，如：桌面云打不开。                                       |
| answer             | String | 知识库中的语料答案，包含该字段时，为直接回答；不包含时，为推荐答案。                   |
| score              | Double | 相似度得分，精确到小数点后3位。                                     |
| domain             | String | 问题类别。                                                |
| top_score_question | String | 最高评分的扩展问或标准问。                                        |
   
表7ChatAnswers 
| 参数     | 参数类型   | 描述                                |
|:---|:---|:---|
| answer | String | 答案，如：美好的一天祝您一切顺利。                 |
| score  | Float  | 闲聊的置信度，范围：\[0.0,1.0 \]。0.0表示兜底回复。 |
   
表8TaskBotAnswers 
| 参数              | 参数类型                                                               | 描述                                                   |
|:---|:---|:---|
| answer          | String                                                             | 答案， 如：请问您需要查询哪里的天气？                                  |
| skill_id        | String                                                             | 技能标识符，UUID格式。如：9eece064-bdb5-43cb-8e0f-8c19a929e25c。 |
| skill_responses | Array of [SkillResponse] objects | 技能信息。                                                |
   
 表9SkillResponse 
| 参数                | 参数类型                                                                         | 描述                                                       |
|:---|:---|:---|
| skill_id          | String                                                                       | 输入问题，不能为空，UUID格式，如：9eece064-bdb5-43cb-8e0f-8c19a929e25c。 |
| skill_version     | String                                                                       | skill的版本。                                                |
| frame             | [Frame] object                              | 命中意图。                                                    |
| candidate         | object                                                                       | 候选意图，具体参见[表15]。           |
| locked            | Boolean                                                                      | 技能是否被锁定，默认是false                                         |
| related_intenions | Array of [RelatedIntention] objects | 相关意图信息。                                                  |
   
 表10Frame 
| 参数              | 参数类型                                                              | 描述       |
|:---|:---|:---|
| intention       | String                                                            | 意图。      |
| confidence      | Double                                                            | 命中意图置信度。 |
| current_slots   | Array of [CurrentSlot] objects | 当前槽位列表。  |
| history_slots   | Array of [HistorySlot] objects | 历史槽位列表。  |
| reply           | String                                                            | 机器人回复。   |
| task_complete   | Boolean                                                           | 任务是否完成。  |
| flow_complete   | Boolean                                                           | 对话流程是否结束 |
| candidate_words | Array of Strings                                                  | 候选词。     |
| intention_alias | String                                                            | 意图名称。    |
   
 表11CurrentSlot 
| 参数                  | 参数类型                                                           | 描述                                                  |
|:---|:---|:---|
| slot_id             | String                                                         | 槽位ID，UUID格式，如：9eece064-bdb5-43cb-8e0f-8c19a929e25c。 |
| slot_identification | String                                                         | 用户设置的槽位标识                                           |
| slot_name           | String                                                         | 槽位名称。                                               |
| slot_values         | Array of [SlotValue] objects | 槽位值。                                                |
   
 表12SlotValue 
| 参数             | 参数类型    | 描述        |
|:---|:---|:---|
| word           | String  | 词。        |
| norm_word      | String  | 归一化后的标准词。 |
| begin_position | Integer | 词的起始位置。   |
| end_position   | Integer | 词的结束位置。   |
   
 表13HistorySlot 
| 参数                  | 参数类型                                                                | 描述        |
|:---|:---|:---|
| slot_identification | String                                                              | 用户设置的槽位标识 |
| slot_name           | String                                                              | 槽位名称。     |
| slot_values         | Array of [HistorySlotWord] objects | 槽信息。      |
   
 表14HistorySlotWord 
| 参数        | 参数类型   | 描述      |
|:---|:---|:---|
| word      | String | 词。      |
| norm_word | String | 归一化后的词。 |
   
 表15CandidateIntention 
| 参数                   | 参数类型   | 描述       |
|:---|:---|:---|
| candidate_intention  | String | 候选意图。    |
| candidate_confidence | Double | 候选意图置信度。 |
   
 表16RelatedIntention 
| 参数         | 参数类型   | 描述     |
|:---|:---|:---|
| intention  | String | 意图名称。  |
| confidence | Double | 意图置信度。 |
   
**状态码： 400**
表17响应Body参数 
| 参数         | 参数类型   | 描述                     |
|:---|:---|:---|
| error_code | String | 调用失败时的错误码。 调用成功时无此字段。  |
| error_msg  | String | 调用失败时的错误信息。 调用成功时无此字段。 |
   
#### 请求示例
- 请求示例
  ```
  POST https://{endpoint}/v1/{project_id}/qabots/{qabot_id}/sessions/{session_id}
  Request Header:
  Content-Type: application/json
  X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG...
  Request Body:
  {
      "question": "桌面云打不开了"
  }
  ```
  
- Java语言请求代码示例
  ```
  import java.io.BufferedReader;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.OutputStreamWriter;
  import java.net.HttpURLConnection;
  import java.net.URL;
  public class CBSDemo {
      public void cbsDemo() {
          try {
              //endpoint、projectId、qabot_id等需要替换成实际信息。
              URL url = new URL("https://{endpoint}/v1/{project_id}/qabots/{qabot_id}/sessions/{session_id}");
              String token = "用户获取得到的实际token值";
              HttpURLConnection connection = (HttpURLConnection) url.openConnection();
              connection.setRequestMethod("POST");
              connection.setDoInput(true);
              connection.setDoOutput(true);
              connection.addRequestProperty("Content-Type", "application/json");
              connection.addRequestProperty("X-Auth-Token", token);
              //输入参数
              String body = "{\"question\": \"桌面云打不开了\"}";
              OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
              osw.append(body);
              osw.flush();
              InputStream is = connection.getInputStream();
              BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
              while (br.ready()) {
                  System.out.println(br.readLine());
              }
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      public static void main(String[] args) {
          CBSDemo CBSDemo = new CBSDemo();
          CBSDemo.cbsDemo();
      }
  }
  ```
  
 
#### 响应示例
**状态码：200**
成功响应示例
```
{
    {
        "answers":
        [
            {
                "score": 0.949,
                "answer": "重启电脑",
                "domain": "桌面云",
                "qa_pair_id": "888899999",
                "st_question": "桌面云打不开",
                "top_score_question": "桌面云打不开"
            }
        ],
        "recommend_answers":
        []
    },
    "session_id": "73e84311-32a0-43ff-9735-bb2be1150624"
}
```
**状态码：400**
失败响应示例
```
{
    "error_code":"CBS.0011",
    "error_msg":"auth failed"
}
```
#### 状态码
状态码请参见[状态码](https://support.huaweicloud.com/api-cbs/cbs_03_0054.html)。
#### 错误码
错误码请参见[错误码](https://support.huaweicloud.com/api-cbs/cbs_03_0053.html)。
