Compartilhar via


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

Esse 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, Traga sua própria funcionalidade de Armazenamento do Azure; verifique se você está familiarizado com as APIs de Gravação de Chamadas.

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

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

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

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

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

  1. Agora que a identidade foi criada com sucesso, 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 de recurso do serviço de comunicação adicionando atribuição de função

  1. No painel "Adicionar atribuição de função", selecione os valores a seguir
    1. Escopo: Storage
    2. Assinatura: Escolha sua assinatura
    3. Recurso: Escolha sua conta de armazenamento
    4. Função: Serviços de Comunicação do Azure precisa de "Colaborador de Dados de Blob de Armazenamento" para poder gravar em sua conta de armazenamento.

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

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

Diagrama mostrando o sucesso de uma atribuição de função de identidade gerenciada de recurso do serviço de comunicação

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

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

Usando o armazenamento de blobs 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 blobs 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 exportação bem-sucedida

Use um web hook da Grade de Eventos do Azure ou outra ação disparada 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 evento.

{
    "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 formato a seguir, conforme mostrado no diagrama.

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

Diagrama mostrando uma estrutura de Pasta de Gravação de Chamadas

Próximas etapas

Para obter mais informações, consulte os seguintes artigos: