Partilhar via


Gravação de chamadas: traga seu próprio início rápido de armazenamento do Azure

Este guia de início rápido ajuda você a começar com Traga seu próprio armazenamento do Azure para gravação de chamadas. Para começar a usar a funcionalidade Traga sua própria funcionalidade de Armazenamento do Azure, verifique se você está familiarizado com as APIs de Gravação de Chamadas.

Pré-requisito: Configurando atribuições de função RBAC (Controles de Acesso Baseados em Função) e Identidade Gerenciada

1. Habilitar a identidade gerenciada atribuída ao sistema para os Serviços de Comunicação do Azure

Diagrama mostrando um recurso de serviço de comunicação com identidade gerenciada desabilitada

  1. Abra o recurso dos Serviços de Comunicação do Azure. Navegue até Identidade à esquerda.
  2. Ative a Identidade Gerenciada Atribuída ao Sistema e clique em Salvar.
  3. Depois de concluído, você poderá ver a ID principal do objeto da identidade recém-criada.

Diagrama mostrando um recurso de serviço de comunicação com identidade gerenciada habilitada

  1. Depois que a identidade tiver sido criada com êxito, clique em Atribuições de função do Azure para começar a adicionar atribuições de função.

2. Adicionar atribuição de função

  1. Clique em "Adicionar atribuição de função"

Diagrama mostrando uma identidade gerenciada por recurso de serviço de comunicação adicionando atribuição de função

  1. No painel "Adicionar atribuição de função", selecione os seguintes valores
    1. Âmbito: Armazenamento
    2. Subscrição: Escolha a sua subscrição
    3. Recurso: escolha sua conta de armazenamento
    4. Função: os Serviços de Comunicação do Azure precisam de "Colaborador de Dados de Blob de Armazenamento" para poderem escrever na sua conta de armazenamento.

Diagrama mostrando uma identidade gerenciada por recurso de serviço de comunicação adicionando detalhes da atribuição de função

  1. Clique em "Salvar".
  2. Depois de concluída, você verá a atribuição de função recém-adicionada na janela "Atribuição de função do Azure".

Diagrama mostrando o êxito da atribuição de uma função de identidade gerenciada por um recurso de serviço de comunicação

Iniciar sessão de gravação com armazenamento externo especificado

Use o ID de chamada do servidor recebido durante o início da chamada.

Usando o armazenamento de blob do Azure para armazenamento externo

StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
{
    //...
    ExternalStorage = new BlobStorage(new Uri("<Insert Container / Blob Uri>"))
};
               
Response<RecordingStateResult> startRecordingWithResponse = await callAutomationClient.GetCallRecording()
        .StartRecordingAsync(options: recordingOptions);

Usando o armazenamento de blob do Azure para armazenamento externo

StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
                .setExternalStorage(new BlobStorage("<Insert Container / Blob Uri>"));

Response<StartCallRecordingResult> response = callAutomationClient.getCallRecording()
.startRecordingWithResponse(recordingOptions, null);

Notificação sobre o êxito da exportação

Use um gancho da Web da Grade de Eventos do Azure ou outra ação acionada para notificar seus serviços quando a mídia gravada estiver pronta e exportada para o local de armazenamento externo.

Consulte este exemplo do esquema de eventos.

{
    "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": {
        "storageType": "string", // AzureBlob etc.
        "recordingId": "string", // unique id for recording
        "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
}

Estrutura de pastas para gravação de chamadas

As gravações são armazenadas no seguinte formato, como mostrado no diagrama.

  • /AAAAMMDD/callId/first_8_of_recordingId + '-' + guid exclusivo/[chunk-id]-acsmetadata.documentId.json
  • /AAAAMMDD/callId/first_8_of_recordingId + '-' + guid exclusivo/[chunk-id]-audiomp3.documentId.mp3

Diagrama mostrando uma estrutura de pasta de gravação de chamada

Próximos passos

Para obter mais informações, consulte os seguintes artigos que podem estar em inglês: