Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

ServiceCloudVoice の ConnectAPI を使用して完了した音声通話レコードに文字起こしデータを登録する方法

公開日: Mar 17, 2025
説明

概要

ServiceCloudVoice では、通話音声の文字起こしデータを Salesforce のユーザインタフェース上に表示することができます。テレフォニーシステムで文字起こしされたデータを Salesforce に連携・登録することにより、この機能を実現しています。
さまざまな要因 (Salesforce・テレフォニーシステムのインシデントやメンテナンスなど) により、文字起こしデータが通話中にテレフォニーシステムから Salesforce に正しく連携されず、文字起こしデータが Salesfore に正しく登録・表示されない場合があります。このような場合、ConnectRestAPI を使用することにより、通話完了後に Salesforce 側の文字起こしデータを登録・更新することが可能です。
ConnectRestAPI は、通話が完了した音声通話レコード (CallDisposition 項目の値が “completed”) に対して文字起こしデータを更新・登録する用途で使用されます。
本ナレッジでは、通話完了後に文字起こしデータを新規登録する方法を説明します。
解決策

1. 文字起こし関連のオブジェクト構成について

通話時の一連の会話の文字起こしは以下のオブジェクトを用いて表現されます。
  • (親) Conversation: 一連の会話を表します。つまり、一連の会話で 1 レコード作成されます。
  • (子) ConversationEntry: 発言に対応します。音声通話レコードの会話コンポーネントの 1 つの吹き出しが 1 つのレコードに対応します。
  • (子) ConversationParticipant: 会話の参加者を表します。会話にエージェントやエンドユーザが参加するたびにレコードが作成されます。
つまり、CnnectRestAPI で文字起こしを登録することは、ConversationEntry レコードを登録することを意味します。
ConversationEntry レコードを登録する際には、Conversation、ConversationParticipant と整合性を取る必要があります。

2. 完了した音声通話レコードに文字起こしデータを登録する場合の具体例

通話が完了しているにもかかわらず、文字起こしが表示されていない音声通話レコード (レコード ID: 0LQ0k0000010WQ5GAM) に対して文字起こしを登録する場合の具体例を説明します。
 

2-1. 会話関連の必要な情報をあらかじめ取得

対象の音声通話レコード (レコード ID: 0LQ0k0000010WQ5GAM) に関連付けられた Conversation レコードと ConversationParticipants レコードを取得します。
以下にサンプルの SOQL クエリとその結果を記載します。

SELECT
Id, ConversationIdentifier,StartTime, EndTime, (SELECT Id, AppType, ParticipantRole, ParticipantKey FROM ConversationParticipants)
FROM Conversation
WHERE Id IN (SELECT ConversationId FROM VoiceCall WHERE Id='0LQ0k0000010WQ5GAM')

このクエリにより以下の Conversation レコードと ConversationParticipant レコードが取得できたとします。

  • Conversation
IdConversationIdentifierStartTimeEndTime
0dw0k000000q5QNAAY14f0f77b-f4b5-4f0a-947d-fb04c0e13f792023-05-02T13:40:26.000Z2023-05-02T13:40:45.000Z

 

  • ConversationParticipant
IdAppTypeParticipantRoleParticipantKey
0ec0k000001H2ZMAA0telephony_integrationSupervisor14f0f77b-f4b5-4f0a-947d-fb04c0e13f79SUPERVISOR
0ec0k000001H2ZNAA0telephony_integrationAgent14f0f77b-f4b5-4f0a-947d-fb04c0e13f79VIRTUAL_AGENT
0ec0k000001H2ZbAAKagentAgent0050k000005Kjed
0ec0k000001H2ZOAA0telephony_integrationEndUser14f0f77b-f4b5-4f0a-947d-fb04c0e13f79END_USER
0ec0k000001H2ZPAA0conversationSystem0052x000002qU7E

 

2-2. テレフォニーシステム側で文字起こしデータを確認

文字起こしはテレフォニーシステムで実行されるため、テレフォニーシステム側で当該データを保持している場合があります。
たとえば、Amazon Connect をテレフォニーシステムに使用し、当該システムの Contact Lens サービスを用いて文字起こしをしている場合には Amazon S3 に文字起こしファイルが出力されています。
Contact Lens で分析済みファイルを出力する場所
テレフォニーシステム側で文字起こしデータを保持しているかや格納場所が不明な場合、使用しているテレフォニーシステムに問い合わせてください。
 

2-3. Salesforce へのアップロード用文字起こしファイルの作成

「2-2. テレフォニーシステム側で文字起こしデータを確認」でテレフォニーシステムより取得した文字起こしデータを、 ConversationEntry にレコードに登録します。文字起こしデータを含んだファイルを所定の URL にアップロードを行うことによりこの登録を行います。
当該ファイルは以下具体例のとおり、Json 形式で記載する必要が必要があります。

  • upload.json
{"type": "conversation", "payload": {"conversationId": "14f0f77b-f4b5-4f0a-947d-fb04c0e13f79 "}}
{"type": "conversationEntry", "payload": {"conversationId": "14f0f77b-f4b5-4f0a-947d-fb04c0e13f79", "id": "01", "clientSentTimestamp": 1683034827000, "clientDuration": 1, "messageText":"こんにちは。","sender": {"appType": "AGENT", "subject": "0050k000005Kjed","role": "AGENT"}}}
{"type": "conversationEntry", "payload": {"conversationId": "14f0f77b-f4b5-4f0a-947d-fb04c0e13f79", "id": "02", "clientSentTimestamp": 1683034827000, "clientDuration": 1, "messageText":"こんにちは。どうされましたか?","sender": {"appType": "TELEPHONY_INTEGRATION", "subject": "14f0f77b-f4b5-4f0a-947d-fb04c0e13f79END_USER","role": "END_USER"}}}


1 行目には親の Conversation レコードの情報を記載します。Conversation レコードの識別子として、「2-1. 会話関連の必要な情報をあらかじめ取得」で取得した Conversation レコードの ”ConversationIdentifier” の値を使用します。
2 行目以降に会話本文 (ConversationEntry) を記載します。ここで注意すべきことは以下の 2 点です。

① clientSentTimestamp の値について
関連付けたConversationレコードのStartTimeとEndTimeの間の時間を指定する必要があります。また、このファイル内ではUnix時間(ms)で時間を指定する必要があります。

② sender について
sender で「誰が」この発言をしたかを指定します。
appType、role、subject は ConversationParticipant の情報と整合性を取る必要があります。
具体的な対応付けは以下のとおりです。
 

アップロードファイルConversationParticipant レコード
payload.sender.appTypeConversationParticipant.appType
payload.sender.roleConversationParticipant.role
payload.sender.subjectConversationParticipant.ParticipantKey

ただし、appType と role については、ConversationParticipant レコードの値をそのまま転記するのではなく、Upload or Update Transcripts with Connect REST API に記載のマッピングに従い、値を変換する必要があります。

スクリーンショット 2023-07-26 22.28.12.pngimage

2-4. ファイルをアップロードする

以下のとおりリクエストヘッダ・リクエストボディ部を設定し POST メソッドでリクエストを送信することにより、API を使用したファイルのアップロードを行います。
Authorization ヘッダにはアクセストークンを設定する必要があります。
アクセストークンの取得方法は Step Three: Connect to Connect REST API Using OAuth を確認してください。

curl -XPOST \
-H 'Authorization:Bearer 00D0k000000XXXX!AQQAQIDLjZYcaJ2ZpOVdN65TSlbOlpcvAFZDR2dA3prDoTMelGGDL58_25wjSw6LR2Tzm8CIPAVvIUgAf1VoMY0PzjZwCHe1' \
-H 'Content-Type: multipart/form-data' \
-H 'Accept: application/json' \
-F 14f0f77b-f4b5-4f0a-947d-fb04c0e13f79=@/Users/localpath/upload.json \
'https://yourDomain.my.salesforce.com/services/data/v57.0/connect/conversations/upload'

ファイルのアップロードに成功すると以下のようなレスポンスがステータスコード 201 で返却されます。

{
  "conversationBulkUploadsResults": [
    {
      "conversationIdentifier": "14f0f77b-f4b5-4f0a-947d-fb04c0e13f79",
      "errorDetail": null,
      "status": "SUCCESS",
      "uploadId": "cfb8dfa7-f6d8-3cbe-b7eb-60400d512260"
    }
  ]
}

この API は非同期処理であり、アップロードした文字起こしデータが即座に Salesforce に登録されるとは限りません。
現在の処理状況を確認するため、以下のとおり Get リクエストを送信します。
このときリクエストパラメータの uploadIds では、ファイルアップロード時に返却された uploadId を指定する必要がある点に注意してください。

curl \
-H 'Authorization:Bearer 00D0k000000XXXX!AQQAQIDLjZYcaJ2ZpOVdN65TSlbOlpcvAFZDR2dA3prDoTMelGGDL58_25wjSw6LR2Tzm8CIPAVvIUgAf1VoMY0PzjZwCHe1' \
'https://yourDomain.sandbox.my.salesforce.com/services/data/v57.0/connect/conversations/upload?uploadIds=cfb8dfa7-f6d8-3cbe-b7eb-60400d512260‘

このとき以下のように status が “COMPLETED” のレスポンスがステータスコード 200 で返却されれば、文字起こしデータの登録が完了したことを意味します。

{
  "conversationBulkUploadStatuses": [
    {
      "conversationId": "14f0f77b-f4b5-4f0a-947d-fb04c0e13f79",
      "errorDetail": "",
      "failedEntryCount": 0,
      "failedEntryIds": [],
      "lastUpdatedTimestamp": 1684329799224,
      "status": "COMPLETED",
      "successEntryCount": 2,
      "uploadId": "cfb8dfa7-f6d8-3cbe-b7eb-60400d512260"
    }
  ]
}

音声通話レコード画面上の音声通話レコードの会話コンポーネントに、登録した文字起こしデータが表示されることを確認します。
 

4. 留意事項

アップロードファイル内の記載順序のとおり、会話コンポーネント上でも文字起こしは表示され、この表示順序をデータ登録後に入れ替えることはできません。
このため、順序を入れ替える必要がある場合、ConversationEntry レコードを削除した上で、再登録を行う必要があります。
なお、ConversationEntry レコードは Apex などにより削除することが可能です。

ナレッジ記事番号

000395383

 
読み込み中
Salesforce Help | Article