Hívásfelvétel – rövid útmutató

Ez a rövid útmutató a hang- és videohívások hívásrögzítésének első lépéseit ismerteti. A hívásrögzítési API-k használatának megkezdéséhez rendelkeznie kell egy hívással. Győződjön meg arról, hogy ismeri az ügyféloldali SDK és/vagy a Call Automation hívását a végfelhasználói hívási élmény kiépítéséhez.

Példakód

A mintaalkalmazást letöltheti a GitHubról

Előfeltételek

  • Aktív előfizetéssel rendelkező Azure-fiókra van szüksége.
  • Kommunikációs szolgáltatás-erőforrás üzembe helyezése. Jegyezze fel az erőforrás-kapcsolati sztring.
  • Iratkozzon fel az eseményekre Azure Event Grid keresztül.
  • A .NET SDK letöltése

Előkészületek

A hívásrögzítési API-k kizárólag a serverCallIdfelvételt használják. A forgatókönyvtől függően többféle módszerrel is lekérheti a serverCallId következőt:

Automation-forgatókönyvek hívása

  • A Hívásautomatizálás használatakor két lehetőség közül választhat:serverCallId
    1. A hívás létrehozása serverCallId után a függvény az CallConnected esemény tulajdonságaként ad vissza egy hívást. Ismerje meg, hogyan szerezhet be CallConnected eseményt a Call Automation SDK-ból.
    2. A hívás fogadása vagy a hívás létrehozása után a serverCallId függvény a vagy CreateCallResult az AnswerCallResult API-válaszok tulajdonságaként adja vissza.

SDK-forgatókönyvek meghívása

Lássunk néhány egyszerű lépést!

1. Hívásautomatizálási ügyfél létrehozása

A hívásrögzítési API-k a Azure Communication Services Hívásautomatizálási kódtárak részét képezik. Ezért létre kell hozni egy Call Automation-ügyfelet. Hívásautomatizálási ügyfél létrehozásához használja a Communication Services kapcsolati sztring, és adja át az objektumnakCallAutomationClient.

CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");

2. Indítsa el a munkamenet felvételét a StartRecordingOptions használatával a "StartAsync" API használatával

Használja a serverCallId kapott elemet a hívás kezdeményezése során.

  • A RecordingContent a rögzítési tartalomtípus átadására szolgál. Hang használata
  • A RecordingChannel a rögzítési csatorna típusának átadására szolgál. Kevert vagy nem kevert.
  • A RecordingFormat a felvétel formátumának átadására szolgál. Használja a wav parancsot.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>")) 
{
    RecordingContent = RecordingContent.Audio,
    RecordingChannel = RecordingChannel.Unmixed,
    RecordingFormat = RecordingFormat.Wav,
    RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);

2.1. Csak nem kevert – Felhasználó megadása a 0. csatornán

A nem kevert hangrögzítési fájlok létrehozásához a AudioChannelParticipantOrdering funkcióval megadhatja, hogy melyik felhasználót szeretné rögzíteni a 0. csatornán. A többi résztvevőt egy csatornához rendelik, miközben beszélnek. Ha használja RecordingChannel.Unmixed , de nem használja AudioChannelParticipantOrdering, a Hívásfelvétel a 0 csatornát rendeli hozzá az első beszélő résztvevőhöz.

StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>")) 
{
    RecordingContent = RecordingContent.Audio,
    RecordingChannel = RecordingChannel.Unmixed,
    RecordingFormat = RecordingFormat.Wav,
    RecordingStateCallbackUri = new Uri("<CallbackUri>"),
    AudioChannelParticipantOrdering = { new CommunicationUserIdentifier("<ACS_USER_MRI>") }
    
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);

2.2. Csak nem kevert – Csatorna-affinitás megadása

var channelAffinity = new ChannelAffinity(new CommunicationUserIdentifier("<ACS_USER_MRI>")) { Channel = 0};
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
{
   RecordingContent = RecordingContent.Audio,
   RecordingChannel = RecordingChannel.Unmixed,
   RecordingFormat = RecordingFormat.Wav,
   RecordingStateCallbackUri = new Uri("<CallbackUri>"),
   ChannelAffinity = new List<ChannelAffinity>{ channelAffinity }
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);

Az StartAsync API-válasz tartalmazza a recordingId rögzítési munkamenetet.

3. A munkamenet felvételének leállítása a "StopAsync" API használatával

Használja a recordingId kapott választ a következőre StartAsync: .

var stopRecording = await callAutomationClient.GetCallRecording().StopAsync(recordingId);

4. A rögzítési munkamenet szüneteltetése a "PauseAsync" API használatával

Használja a recordingId kapott választ a következőre StartAsync: .

var pauseRecording = await callAutomationClient.GetCallRecording ().PauseAsync(recordingId);

5. A rögzítési munkamenet folytatása a "ResumeAsync" API használatával

Használja a recordingId kapott választ a következőre StartAsync: .

var resumeRecording = await callAutomationClient.GetCallRecording().ResumeAsync(recordingId);

6. Felvételfájl letöltése a DownloadToAsync API használatával

Használjon Azure Event Grid webes horogot vagy más aktivált műveletet a szolgáltatások értesítésére, ha a rögzített adathordozó készen áll a letöltésre.

Az Event Grid-értesítés Microsoft.Communication.RecordingFileStatusUpdated akkor jelenik meg, ha egy felvétel készen áll a lekérésre, általában néhány perccel a rögzítési folyamat befejezése után (például az értekezlet befejeződött, a rögzítés leállt). A rögzítési eseményértesítések közé tartoznak a contentLocation és metadataLocationa, amelyek a rögzített adathordozók és a rögzítési metaadat-fájlok lekérésére szolgálnak.

Példa az eseménysémára:

{
    "id": string, // Unique guid for event
    "topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
    "subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
    "data": {
        "recordingStorageInfo": {
            "recordingChunks": [
                {
                    "documentId": string, // Document id for the recording chunk
                    "contentLocation": string, //Azure Communication Services URL where the content is located
                    "metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
                    "deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
                    "index": int, // Index providing ordering for this chunk in the entire recording
                    "endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
                }
            ]
        },
        "recordingStartTime": string, // ISO 8601 date time for the start of the recording
        "recordingDurationMs": int, // Duration of recording in milliseconds
        "sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
    },
    "eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
    "dataVersion": string, // "1.0"
    "metadataVersion": string, // "1"
    "eventTime": string // ISO 8601 date time for when the event was created
}

Használja DownloadToAsync az API-t a rögzített adathordozó letöltéséhez.

var recordingDownloadUri = new Uri(contentLocation);
var response = await callAutomationClient.GetCallRecording().DownloadToAsync(recordingDownloadUri, fileName);

A downloadLocation felvételhez tartozó adat lekérhető a contentLocation attribútumból recordingChunk. DownloadToAsync metódus letölti a tartalmat a megadott fájlnévre.

7. Felvétel tartalmának törlése a "DeleteAsync" API használatával

A rögzítési tartalom (például rögzített adathordozó, metaadatok) törléséhez használja DeleteAsync az API-t

var recordingDeleteUri = new Uri(deleteLocation);
var response = await callAutomationClient.GetCallRecording().DeleteAsync(recordingDeleteUri);

Példakód

A mintaalkalmazást letöltheti a GitHubról

Előfeltételek

  • Aktív előfizetéssel rendelkező Azure-fiókra van szüksége.
  • Kommunikációs szolgáltatás-erőforrás üzembe helyezése. Jegyezze fel az erőforrás-kapcsolati sztring.
  • Iratkozzon fel az eseményekre Azure Event Grid keresztül.
  • A Java SDK letöltése

Előkészületek

A hívásrögzítési API-k kizárólag a serverCallIdfelvételt használják. A forgatókönyvtől függően többféle módszerrel is lekérheti a serverCallId következőt:

Automation-forgatókönyvek hívása

  • A Hívásautomatizálás használatakor két lehetőség közül választhat:serverCallId
    1. A hívás létrehozása serverCallId után a függvény az CallConnected esemény tulajdonságaként ad vissza egy hívást. Ismerje meg, hogyan szerezhet be CallConnected eseményt a Call Automation SDK-ból.
    2. A hívás fogadása vagy a hívás létrehozása után a serverCallId függvény a vagy CreateCallResult az AnswerCallResult API-válaszok tulajdonságaként adja vissza.

SDK-forgatókönyvek meghívása

Lássunk néhány egyszerű lépést!

1. Hívásautomatizálási ügyfél létrehozása

A hívásrögzítési API-k a Azure Communication Services Hívásautomatizálási kódtárak részét képezik. Ezért létre kell hozni egy Call Automation-ügyfelet. Hívásautomatizálási ügyfél létrehozásához használja a Communication Services kapcsolati sztring, és átadja azt az objektumnakCallAutomationClient.

CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
            .connectionString("<acsConnectionString>")
            .buildClient();

2. Indítsa el a munkamenet felvételét a StartRecordingOptions használatával a "startWithResponse" API használatával

Használja a serverCallId kapott elemet a hívás kezdeményezése során.

  • A RecordingContent a rögzítési tartalomtípus átadására szolgál. Az AUDIO használata
  • A RecordingChannel a rögzítési csatorna típusának átadására szolgál. Használja a MIXED vagy a UNMIXED parancsot.
  • A RecordingFormat a felvétel formátumának átadására szolgál. Használja a WAV-t.
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
                    .setRecordingChannel(RecordingChannel.UNMIXED)
                    .setRecordingFormat(RecordingFormat.WAV)
                    .setRecordingContent(RecordingContent.AUDIO)
                    .setRecordingStateCallbackUrl("<recordingStateCallbackUrl>");

Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);

2.1. Csak nem kevert – Felhasználó megadása a 0. csatornán

A nem kevert hangrögzítési fájlok létrehozásához a AudioChannelParticipantOrdering funkcióval megadhatja, hogy melyik felhasználót szeretné rögzíteni a 0. csatornán. A többi résztvevőt egy csatornához rendeljük, miközben beszélnek. Ha használja RecordingChannel.Unmixed , de nem használja AudioChannelParticipantOrdering, a Hívásfelvétel 0 csatornát rendel az első beszélőhöz.

StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
                    .setRecordingChannel(RecordingChannel.UNMIXED)
                    .setRecordingFormat(RecordingFormat.WAV)
                    .setRecordingContent(RecordingContent.AUDIO)
                    .setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
                    .setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));

Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startWithResponse(recordingOptions, null);

2.2. Csak nem kevert esetén – Csatorna-affinitás megadása

ChannelAffinity channelAffinity = new ChannelAffinity()
.setParticipant(new PhoneNumberIdentifier("RECORDING_ID"))
.setChannel(0);
List<ChannelAffinity> channelAffinities = Arrays.asList(channelAffinity);

StartRecordingOptions startRecordingOptions = new StartRecordingOptions(new ServerCallLocator(SERVER_CALL_ID))
   .setRecordingChannel(RecordingChannel.UNMIXED)
   .setRecordingFormat(RecordingFormat.WAV)
   .setRecordingContent(RecordingContent.AUDIO)
   .setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
   .setChannelAffinity(channelAffinities);
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
.startRecordingWithResponse(recordingOptions, null);

Az startWithResponse API-válasz tartalmazza a recordingId rögzítési munkamenetet.

3. A munkamenet rögzítésének leállítása a "stopWithResponse" API használatával

Használja a recordingId kapott választ a következőre startWithResponse: .

Response<Void> response = callAutomationClient.getCallRecording()
               .stopWithResponse(response.getValue().getRecordingId(), null);

4. A rögzítési munkamenet szüneteltetése a "pauseWithResponse" API használatával

Használja a recordingId kapott választ a következőre startWithResponse: .

Response<Void> response = callAutomationClient.getCallRecording()
              .pauseWithResponse(response.getValue().getRecordingId(), null);

5. A rögzítési munkamenet folytatása a resumeWithResponse API használatával

Használja a recordingId kapott választ a következőre startWithResponse: .

Response<Void> response = callAutomationClient.getCallRecording()
               .resumeWithResponse(response.getValue().getRecordingId(), null);

6. A rögzítési fájl letöltése a downloadToWithResponse API használatával

Használjon Azure Event Grid webhookot vagy más aktivált műveletet, hogy értesítse a szolgáltatásokat, ha a rögzített adathordozó készen áll a letöltésre.

Az Event Grid-értesítés Microsoft.Communication.RecordingFileStatusUpdated akkor jelenik meg, ha egy felvétel készen áll a lekérésre, általában néhány perccel a rögzítési folyamat befejezése után (például az értekezlet befejeződött, a rögzítés leállt). A rögzítési eseményértesítések közé tartoznak a contentLocation és metadataLocationa is, amelyek a rögzített adathordozó és a rögzítési metaadatfájl lekérésére szolgálnak.

Az alábbiakban egy példa látható az eseménysémára.

{
    "id": string, // Unique guid for event
    "topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
    "subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
    "data": {
        "recordingStorageInfo": {
            "recordingChunks": [
                {
                    "documentId": string, // Document id for the recording chunk
                    "contentLocation": string, //Azure Communication Services URL where the content is located
                    "metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
                    "deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
                    "index": int, // Index providing ordering for this chunk in the entire recording
                    "endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
                }
            ]
        },
        "recordingStartTime": string, // ISO 8601 date time for the start of the recording
        "recordingDurationMs": int, // Duration of recording in milliseconds
        "sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
    },
    "eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
    "dataVersion": string, // "1.0"
    "metadataVersion": string, // "1"
    "eventTime": string // ISO 8601 date time for when the event was created
}

A rögzített adathordozó letöltéséhez CallRecording használjon downloadToWithResponse osztálymetódust. A metódus támogatott paraméterei a downloadToWithResponse következők:

  • contentLocation: Azure Communication Services URL-cím, ahol a tartalom található.
  • destinationPath : Fájl helye.
  • parallelDownloadOptions: Nem kötelező ParallelDownloadOptions objektum a párhuzamos letöltés működésének módosításához.
  • overwrite: Igaz, ha felülírja a fájlt, ha létezik.
  • context: A kérelemkörnyezetet jelölő környezet.
Boolean overwrite = true;
ParallelDownloadOptions parallelDownloadOptions = null;
Context context = null;

String filePath = String.format(".\\%s.%s", documentId, fileType);
Path destinationPath = Paths.get(filePath);

Response<Void> downloadResponse = callAutomationClient.getCallRecording().downloadToWithResponse(contentLocation, destinationPath, parallelDownloadOptions, overwrite, context);

A rögzítési fájlok tartalomhelyét és dokumentumazonosítóit a és documentId a contentLocation mezőkből lehet lekérni mindegyikhezrecordingChunk.

7. A felvétel tartalmának törlése a deleteWithResponse API használatával.

Osztálymetódus CallRecording használata deleteWithResponse a rögzített adathordozó törléséhez. A metódus támogatott paraméterei a deleteWithResponse következők:

  • deleteLocation: Azure Communication Services URL-címet, ahol a törölni kívánt tartalom található.
  • context: A kérelemkörnyezetet jelölő környezet.
Response<Void> deleteResponse = callAutomationClient.getCallRecording().deleteWithResponse(deleteLocation, context);

A felvétel törlési helye lekérhető az deleteLocation Event Grid-esemény mezőjéből.

Példakód

A mintaalkalmazást letöltheti a GitHubról

Előfeltételek

  • Aktív előfizetéssel rendelkező Azure-fiókra van szüksége.
  • Kommunikációs szolgáltatási erőforrás üzembe helyezése. Jegyezze fel az erőforrás-kapcsolati sztring.
  • Iratkozzon fel az eseményekre Azure Event Grid keresztül.
  • Python 3.7+.

Előkészületek

A hívásrögzítési API-k kizárólag a használatával kezdeményezik a serverCallIdfelvételt. A forgatókönyvtől függően többféle módszerrel is lekérheti a serverCallId metódust:

Hívásautomatizálási forgatókönyvek

  • A Hívásautomatizálás használatakor két lehetőség közül választhat:serverCallId
    1. A hívás létrehozása serverCallId után a a az esemény tulajdonságaként lesz visszaadva a CallConnected hívás létrehozása után. Ismerje meg, hogyan szerezhet be CallConnected eseményt a Call Automation SDK-ból.
    2. A hívás fogadása vagy a hívás létrehozása után a serverCallId függvény a vagy CreateCallResult az AnswerCallResult API-válaszok tulajdonságaként adja vissza a függvényt.

SDK-forgatókönyvek meghívása

Lássunk neki néhány egyszerű lépésnek!

1. Hívásautomatizálási ügyfél létrehozása

A hívásrögzítési API-k a Azure Communication Services Hívásautomatizálási kódtárak részét képezik. Ezért létre kell hoznia egy Hívásautomatizálási ügyfelet. Hívásautomatizálási ügyfél létrehozásához használja a Communication Services-kapcsolati sztring, és átadja azt az objektumnakCallAutomationClient.

call_automation_client = CallAutomationClient.from_connection_string("<ACSConnectionString>")

2. A munkamenet rögzítésének megkezdése start_recording API-val

Használja a serverCallId hívás kezdeményezése során kapott elemet.

  • A RecordingContent a rögzítési tartalomtípus átadására szolgál. Hang használata
  • A RecordingChannel a rögzítési csatorna típusának átadására szolgál. Használjon vegyes vagy nem kevert elemet.
  • A RecordingFormat a felvétel formátumának átadására szolgál. Használja a wav parancsot.
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
            recording_content_type = RecordingContent.Audio,
            recording_channel_type = RecordingChannel.Unmixed,
            recording_format_type = RecordingFormat.Wav,
            recording_state_callback_url = "<CallbackUri>")

2.1. Csak nem kevert – Felhasználó megadása a 0. csatornán

A nem kevert hangrögzítési fájlok létrehozásához a AudioChannelParticipantOrdering funkcióval megadhatja, hogy melyik felhasználót szeretné rögzíteni a 0. csatornán. A többi résztvevőt a beszéd közben egy csatornához rendeljük. Ha használja RecordingChannel.Unmixed , de nem használja AudioChannelParticipantOrdering, a Hívásrögzítés a 0. csatornát rendeli hozzá az első beszélő résztvevőhöz.

response =  call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
            recording_content_type = RecordingContent.Audio,
            recording_channel_type = RecordingChannel.Unmixed,
            recording_format_type = RecordingFormat.Wav,
            recording_state_callback_url = "<CallbackUri>",
            audio_channel_participant_ordering=[CommunicationUserIdentifier(id="<ACS_USER_MRI>")])

2.2. Csak nem kevert esetén – Csatorna-affinitás megadása

_channel_affinity = ChannelAffinity(target_participant=CommunicationUserIdentifier("<ACS_USER_MRI>"), channel=0)

response =  call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
            recording_content_type = RecordingContent.Audio,
            recording_channel_type = RecordingChannel.Unmixed,
            recording_format_type = RecordingFormat.Wav,
            recording_state_callback_url = "<CallbackUri>",
            channel_affinity=[_channel_affinity])

Az StartAsync API-válasz tartalmazza a recordingId rögzítési munkamenetet.

3. A munkamenet rögzítésének leállítása a "stop_recording" API-val

Használja a recording_id kapott választ a következőre start_recording: .

stop_recording = call_automation_client.stop_recording(recording_id = recording_id)

4. A rögzítési munkamenet szüneteltetése a "pause_recording" API használatával

Használja a recording_id kapott választ a következőre start_recording: .

pause_recording = call_automation_client.pause_recording(recording_id = recording_id)

5. A rögzítési munkamenet folytatása a "resume_recording" API használatával

Használja a recording_id kapott választ a következőre start_recording: .

resume_recording = call_automation_client.resume_recording(recording_id = recording_id)

6. A rögzítési fájl letöltése a "download_recording" API használatával

Használjon Azure Event Grid webhookot vagy más aktivált műveletet, hogy értesítse a szolgáltatásokat, ha a rögzített adathordozó készen áll a letöltésre.

Az Event Grid-értesítés Microsoft.Communication.RecordingFileStatusUpdated akkor jelenik meg, ha egy felvétel készen áll a lekérésre, általában néhány perccel a rögzítési folyamat befejezése után (például az értekezlet befejeződött, a rögzítés leállt). A rögzítési eseményértesítések közé tartoznak a contentLocation és metadataLocationa is, amelyek a rögzített adathordozó és a rögzítési metaadatfájl lekérésére szolgálnak.

Az alábbiakban egy példa látható az eseménysémára.

{
    "id": string, // Unique guid for event
    "topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
    "subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
    "data": {
        "recordingStorageInfo": {
            "recordingChunks": [
                {
                    "documentId": string, // Document id for the recording chunk
                    "contentLocation": string, //Azure Communication Services URL where the content is located
                    "metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
                    "deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
                    "index": int, // Index providing ordering for this chunk in the entire recording
                    "endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
                }
            ]
        },
        "recordingStartTime": string, // ISO 8601 date time for the start of the recording
        "recordingDurationMs": int, // Duration of recording in milliseconds
        "sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
    },
    "eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
    "dataVersion": string, // "1.0"
    "metadataVersion": string, // "1"
    "eventTime": string // ISO 8601 date time for when the event was created
}

Használja download_recording az API-t a rögzített adathordozó letöltéséhez.

response = recording_data = call_automation_client.download_recording(content_location)

with open("<file_name>", "wb") as binary_file:
    binary_file.write(recording_data.read())

A downloadLocation felvételhez tartozó adatok a contentLocation attribútumából recordingChunkkérhetők le. download_recording metódus letölti a tartalmat bájtokba.

7. A felvétel tartalmának törlése a "delete_recording" API használatával

A rögzítési tartalom (például rögzített adathordozó, metaadatok) törléséhez használja delete_recording az API-t

response = call_automation_client.delete_recording(delete_location);

Példakód

A mintaalkalmazást letöltheti a GitHubról

Előfeltételek

  • Aktív előfizetéssel rendelkező Azure-fiókra van szüksége.
  • Kommunikációs szolgáltatási erőforrás üzembe helyezése. Jegyezze fel az erőforrás-kapcsolati sztring.
  • Iratkozzon fel az eseményekre Azure Event Grid keresztül.
  • Node.js Aktív LTS- és karbantartási LTS-verziók (8.11.1 és 10.14.1 ajánlott)

Előkészületek

A hívásrögzítési API-k kizárólag a használatával kezdeményezik a serverCallIdfelvételt. A forgatókönyvtől függően többféle módszerrel is lekérheti a serverCallId metódust:

Hívásautomatizálási forgatókönyvek

  • A Hívásautomatizálás használatakor két lehetőség közül választhat:serverCallId
    1. A hívás létrehozása serverCallId után a a az esemény tulajdonságaként lesz visszaadva a CallConnected hívás létrehozása után. Ismerje meg, hogyan szerezhet be CallConnected eseményt a Call Automation SDK-ból.
    2. A hívás fogadása vagy a hívás létrehozása után a serverCallId függvény a vagy CreateCallResult az AnswerCallResult API-válaszok tulajdonságaként adja vissza a függvényt.

SDK-forgatókönyvek meghívása

Lássunk néhány egyszerű lépést!

1. Hívásautomatizálási ügyfél létrehozása

A hívásrögzítési API-k a Azure Communication Services Hívásautomatizálási kódtárak részét képezik. Ezért létre kell hozni egy Call Automation-ügyfelet. Hívásautomatizálási ügyfél létrehozásához használja a Communication Services kapcsolati sztring, és átadja azt az objektumnakCallAutomationClient.

const callAutomationClient = new CallAutomationClient.CallAutomationClient("<ACSConnectionString>");

2. Indítsa el a munkamenet felvételét a StartRecordingOptions használatával a "StartAsync" API használatával

Használja a serverCallId kapott elemet a hívás kezdeményezése során.

  • A RecordingContent a rögzítési tartalomtípus átadására szolgál. Hang használata
  • A RecordingChannel a rögzítési csatorna típusának átadására szolgál. Kevert vagy nem kevert.
  • A RecordingFormat a felvétel formátumának átadására szolgál. Használja a wav parancsot.
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };

var options: StartRecordingOptions =
{
  callLocator: locator,
  recordingContent: "audio",
  recordingChannel:"unmixed",
  recordingFormat: "wav",
  recordingStateCallbackEndpointUrl: "<CallbackUri>"
};
var response = await callAutomationClient.getCallRecording().start(options);

2.1. Csak nem kevert – Felhasználó megadása a 0. csatornán

A nem kevert hangrögzítési fájlok létrehozásához a AudioChannelParticipantOrdering funkcióval megadhatja, hogy melyik felhasználót szeretné rögzíteni a 0. csatornán. A többi résztvevőt egy csatornához rendeljük, miközben beszélnek. Ha használja RecordingChannel.Unmixed , de nem használja AudioChannelParticipantOrdering, a Hívásfelvétel 0 csatornát rendel az első beszélőhöz.

var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };

var options: StartRecordingOptions =
{
  callLocator: locator,
  recordingContent: "audio",
  recordingChannel:"unmixed",
  recordingFormat: "wav",
  recordingStateCallbackEndpointUrl: "<CallbackUri>",
  audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
};
var response = await callAutomationClient.getCallRecording().start(options);

2.2. Csak nem kevert – Csatorna-affinitás megadása

var options: StartRecordingOptions =
{
  callLocator: locator,
  recordingContent: "audio",
  recordingChannel:"unmixed",
  recordingFormat: "wav",
  recordingStateCallbackEndpointUrl: "<CallbackUri>",
  ChannelAffinity:
  [
    {
      channel:0,
      targetParticipant:{communicationUserId: "<ACS_USER_MRI>"}
    }
  ]
};
var response = await callAutomationClient.getCallRecording().start(options);

Az StartAsync API-válasz tartalmazza a recordingId rögzítési munkamenetet.

3. A munkamenet rögzítésének leállítása a "stop" API használatával

Használja a recordingId kapott választ a következőre start: .

var stopRecording = await callAutomationClient.getCallRecording().stop(recordingId);

4. A rögzítési munkamenet szüneteltetése a "pause" API használatával

Használja a recordingId kapott választ a következőre start: .

var pauseRecording = await callAutomationClient.getCallRecording().pause(recordingId);

5. A rögzítési munkamenet folytatása a "ResumeAsync" API használatával

Használja a recordingId kapott választ a következőre start: .

var resumeRecording = await callAutomationClient.getCallRecording().resume(recordingId);

6. Felvételfájl letöltése a DownloadToAsync API használatával

Használjon Azure Event Grid webes horogot vagy más aktivált műveletet a szolgáltatások értesítésére, ha a rögzített adathordozó készen áll a letöltésre.

Az Event Grid-értesítés Microsoft.Communication.RecordingFileStatusUpdated akkor jelenik meg, ha egy felvétel készen áll a lekérésre, általában néhány perccel a rögzítési folyamat befejezése után (például az értekezlet befejeződött, a rögzítés leállt). A rögzítési eseményértesítések közé tartoznak a contentLocation és metadataLocationa, amelyek a rögzített adathordozók és a rögzítési metaadat-fájlok lekérésére szolgálnak.

Az alábbi példa az eseményséma.

{
    "id": string, // Unique guid for event
    "topic": string, // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
    "subject": string, // /recording/call/{call-id}/serverCallId/{serverCallId}
    "data": {
        "recordingStorageInfo": {
            "recordingChunks": [
                {
                    "documentId": string, // Document id for the recording chunk
                    "contentLocation": string, //Azure Communication Services URL where the content is located
                    "metadataLocation": string, // Azure Communication Services URL where the metadata for this chunk is located
                    "deleteLocation": string, // Azure Communication Services URL to use to delete all content, including recording and metadata.
                    "index": int, // Index providing ordering for this chunk in the entire recording
                    "endReason": string, // Reason for chunk ending: "SessionEnded", "ChunkMaximumSizeExceeded”, etc.
                }
            ]
        },
        "recordingStartTime": string, // ISO 8601 date time for the start of the recording
        "recordingDurationMs": int, // Duration of recording in milliseconds
        "sessionEndReason": string // Reason for call ending: "CallEnded", "InitiatorLeft”, etc.
    },
    "eventType": string, // "Microsoft.Communication.RecordingFileStatusUpdated"
    "dataVersion": string, // "1.0"
    "metadataVersion": string, // "1"
    "eventTime": string // ISO 8601 date time for when the event was created
}

Használja downloadToPath az API-t a rögzített adathordozó letöltéséhez.

var response = await callAutomationClient.getCallRecording().downloadToPath(contentLocation, fileName);

A downloadLocation felvételhez tartozó adat lekérhető a contentLocation attribútumból recordingChunk. DownloadToAsync metódus letölti a tartalmat a megadott fájlnévre.

7. Felvétel tartalmának törlése a "DeleteAsync" API használatával

A rögzítési tartalom (például rögzített adathordozó, metaadatok) törléséhez használja delete az API-t

var response = await callAutomationClient.getCallRecording().delete(deleteLocation);

Az erőforrások eltávolítása

Ha törölni és eltávolítani szeretne egy Communication Services-előfizetést, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése a hozzá társított egyéb erőforrásokat is törli. További információ az erőforrások eltávolításáról.

Következő lépések

További információért tekintse át a következő cikkeket: