使用 API 导入对话

了解如何使用 API 导入音频文件和转写文件及其元数据。您可以使用 UploadConversation API 导入单个文件,也可以使用 IngestConversations API 从 Cloud Storage 存储桶批量导入所有文件。

两个请求命令 UploadConversationIngestConversations 支持以下函数:

请求命令 文件数 Speech-to-Text 隐去 元数据注入 自动分析
UploadConversation 1 通过分析规则或项目中的上传对话分析百分比 [设置](/contact-center/insights/docs/reference/rest/v1alpha1/Settings#analysisconfig)
IngestConversations 存储桶中的所有文件 仅限分析规则

前提条件

  1. 在您用于 Dialogflow 的 Google Cloud 项目中启用 Cloud Storage、Speech-to-Text、Cloud Data Loss Prevention 和 Customer Experience Insights API
  2. 使用标准存储类别将对话数据(双声道音频和转写文件)保存在 Cloud Storage 存储桶中。
    1. 按照 Cloud Storage 快速入门中的说明创建存储桶。
    2. 存储桶位置设置为离您最近的位置。
    3. 请注意,提供对话数据时需要提供以下信息:
      • 存储桶名称
      • 位置 ID,格式:us-west1
      • 对象路径,格式:gs://<bucket>/<object>
  3. 向 Speech-to-Text 和 Customer Experience Insights 服务代理授予对 Cloud Storage 存储桶中对象的访问权限。如需有关服务账号的帮助,请参阅此问题排查页面
  4. 如果您选择导入对话元数据,请确保元数据文件位于自己的存储桶中,并且元数据文件名与其对应的对话文件名一致。

    例如,如果对话的 Cloud Storage URI 为 gs://transcript-bucket-name/conversation.mp3,则必须有相应的元数据文件(例如 gs://metadata-bucket-name/conversation.json)。

对话数据

对话数据包括语音或聊天转写文稿和音频。

转录内容

Chat 记录必须以 JSON 格式文件提供,其中每个文件包含单个对话的数据。您的 JSON 格式文本文件包含对话数据格式

语音转写可以采用对话数据格式提供,也可以作为 Speech-to-Text API 转写的返回语音识别结果提供。对于所有 Speech-to-Text API 版本,同步识别和异步识别的响应都是相同的。

音频

客户体验分析洞见使用 Cloud Speech-to-Text 的批量识别功能来转写音频。CX 数据洞见使用 Recognizer 资源配置 Speech-to-Text 转写设置。您可以在请求中创建自定义识别器,也可以在设置或请求中不提供识别器,这样 CX Insights 会在您的项目中创建默认的 ccai-insights-recognizer

CX Insights 识别器使用电话模型转写英语语音,默认语言为 en-US。如需查看 Speech-to-Text 在不同区域、语言、模型和识别功能方面的支持情况的完整列表,请参阅 Speech-to-Text 语言支持文档

在首次将音频导入 CX Insights 之前,请评估您是否希望:

  • 使用自定义 Speech-to-Text 转写配置。
  • 分析(可选)经过遮盖处理的对话。

您可以在项目设置资源中设置适当的字段,以配置这些操作在每个 UploadConversationIngestConversation 请求中默认运行。您还可以根据具体请求替换语音和隐去设置。如果您未指定任何语音设置,CX Insights 将使用默认语音设置,并且不会对转写内容进行模糊处理。

隐去

除非您在项目设置UploadConversationRequestIngestConversationsRequest 中明确提供隐去配置,否则 Cloud Data Loss Prevention 不会隐去转写内容。Cloud Data Loss Prevention 支持使用检查模板去标识化模板进行遮盖。

配置项目设置

通过设置相应的项目设置参数,可以为 UploadConversationIngestConversations 请求配置遮盖和语音。这些配置也可以单独针对每个请求进行设置,从而替换项目设置。在分析规则中配置的 analysis_percentage 会覆盖通过项目设置配置的 upload_conversation_analysis_percentage

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://contactcenterinsights.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/settings?updateMask=redaction_config,speech_config,analysis_config.upload_conversation_analysis_percentage"

元数据

以单文件或批量导入的方式导入元数据。

直接在请求中包含元数据

对于单文件导入,您可以直接在 UploadConversationsRequest 的 curl 命令中添加质量元数据

curl --request POST \
  'https://contactcenterinsights.googleapis.com/v1/projects/project-id/locations/location-id/conversations:upload' \
   --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
   --header 'Accept: application/json' \
   --header 'Content-Type: application/json' \
   --data '{
           "conversation":{
            "qualityMetadata":{
               "agentInfo":[{"agentId":"agent-id","displayName":"agent-name"}]
             },
            "dataSource":{"gcsSource":{"transcriptUri":"transcript-uri"}}}
          }'
  

从 Cloud Storage 文件导入元数据

以 JSON 格式的文件形式提供对话元数据文件。对于批量导入,请提供 IngestConversationsRequestgcs_source.metadata_bucket_uri 字段中指定的存储桶。对于单次导入,请在 UploadConversationRequestdata_source.metadata_uri 字段中提供对象路径。

CX Insights 会填充文件中找到的对话质量元数据,但您也可以创建自定义元数据

例如,如需为数据集中的每个对话指定自定义对话 ID,请在 Cloud Storage 中为对话对象指定自定义元数据。将键设置为 ccai_insights_conversation_id。该值是您的自定义对话 ID。您还可以在元数据文件中提供自定义对话 ID。

如果您在 IngestConversationsRequestcustom_metadata_keys 字段中提供任何自定义元数据,CX Insights 会将该自定义元数据存储在对话标签中。最多支持 100 个标签。

请参阅以下示例,了解包含 Conversation.quality_metadata 资源以及自定义对话 ID 和对话开始时间的有效元数据文件:

{
  "customer_satisfaction_rating": 5,
  "agent_info": [
    {
      "agent_id": "123456",
      "display_name": "Agent Name",
      "team": "Agent Team",
      "disposition_code": "resolved"
    }
  ],
  "custom_key": "custom value"
  "conversation_id": "custom-conversation-id"
  "start_time": "%Y-%m-%d%ET%H:%M:%E*S%Ez"
}

导入单个音频文件

UploadConversation API 会创建一个长时间运行的操作,用于转写对话内容并选择性地对对话内容进行遮盖处理。如果对话仅包含 DataSource 中的 audio_uri,系统将转写音频文件。否则,系统会读取并使用提供的 transcript_uri

请求 JSON 正文:

{ 
  "conversation": { 
    "data_source": { 
      "gcs_source": { "audio_uri": AUDIO_URI }
    }
  },
  "redaction_config": {
    "deidentify_template": DEIDENTIFY_TEMPLATE,
    "inspect_template": INSPECT_TEMPLATE
  },
  "speech_config": {
    "speech_recognizer": RECOGNIZER_NAME
  }
}

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://contactcenterinsights.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/conversations:upload"

批量导入

REST

如需了解完整的详细信息,请参阅 conversations:ingest API 端点。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud Platform 项目 ID。
  • GCS_BUCKET_URI:指向包含对话转写的存储桶的 Cloud Storage URI。可能包含前缀。例如 gs://BUCKET_NAME 或 gs://BUCKET_NAME/PREFIX。不支持通配符。
  • MEDIUM:根据数据类型设置为 PHONE_CALLCHAT。如果未指定,则默认值为 PHONE_CALL
  • AGENT_ID:可选。整个存储桶的代理 ID。

HTTP 方法和网址:

POST https://contactcenterinsights.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/conversations:ingest

请求 JSON 正文:

{
  "gcsSource":  {
    "bucketUri": "GCS_BUCKET_URI",
    "bucketObjectType": "AUDIO"
  },
  "transcriptObjectConfig": { "medium": "PHONE_CALL" },
  "conversationConfig": {
    "agentId": "AGENT_ID",
    "agentChannel": "AGENT_CHANNEL",
    "customerChannel": "CUSTOMER_CHANNEL"
  }
}

Or

{
  "gcsSource":  {
    "bucketUri": "GCS_BUCKET_URI",
    "bucketObjectType": "TRANSCRIPT"
  },
  "transcriptObjectConfig": { "medium": "MEDIUM" },
  "conversationConfig": {"agentId": "AGENT_ID"}
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:


{
  "name": "projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.contactcenterinsights.v1main.IngestConversationsMetadata",
    "createTime": "...",
    "request": {
      "parent": "projects/PROJECT_ID/locations/us-central1",
      "gcsSource": {
        "bucketUri": "GCS_BUCKET_URI",
        "bucketObjectType": "BUCKET_OBJECT_TYPE"
      },
      "transcriptObjectConfig": {
        "medium": "MEDIUM"
      },
      "conversationConfig": {
        "agentId": "AGENT_ID"
      }
    }
  }
}

轮询操作

UploadConversationIngestConversation 请求都会返回长时间运行的操作。长时间运行的方法是异步执行的,当方法返回响应时,操作可能尚未完成。您可以轮询操作以查看其状态。如需了解详情和代码示例,请参阅长时间运行的操作页面

Speech-to-Text 配额

客户体验分析洞见使用两种不同的 Speech-to-Text API:BatchRecognizeGetOperation。客户体验数据分析会发出 BatchRecognize 请求来开始 Speech-to-Text 转写,并发出 GetOperation 请求来监控转写是否完成。若要启动 BatchRecognize 操作,系统会发出 BatchRecognize 请求,以使用每分钟每区域配额。为了监控操作,系统会发出 GetOperation 请求,以使用按分钟计的每个区域配额。

对于单个 UploadConversation 调用,客户体验数据分析会消耗一个 BatchRecognize,但可能会消耗更多 GetOperation 请求,具体取决于任务的持续时间。对于批量导入,Customer Experience Insights 会消耗每种类型的 100 个请求。