Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A integração dos recursos de chamada telefônica dos Serviços de Comunicação do Azure em um aplicativo personalizado de Linha de Negócios (LOB) oferece vários benefícios importantes para as empresas e seus usuários:
- Permite uma comunicação contínua e em tempo real entre funcionários, clientes e parceiros, diretamente a partir do aplicativo LOB, eliminando a necessidade de alternar entre várias plataformas ou dispositivos.
- Melhora a experiência do usuário e melhora a eficiência operacional geral.
- Facilita a resolução rápida de problemas, pois os usuários podem se conectar rapidamente com equipes de suporte relevantes ou especialistas no assunto de forma rápida e fácil.
Neste exercício, você irá:
- Explore o recurso de chamada telefônica no aplicativo.
- Percorra o código para saber como o recurso de chamada telefônica é criado.
Usando o recurso de chamada telefônica
No exercício anterior , você criou um recurso do Azure Communication Services (ACS) e iniciou o banco de dados, o servidor Web e o servidor de API. Você também atualizou os seguintes valores no arquivo .env .
ACS_CONNECTION_STRING=<ACS_CONNECTION_STRING> ACS_PHONE_NUMBER=<ACS_PHONE_NUMBER> ACS_EMAIL_ADDRESS=<ACS_EMAIL_ADDRESS> CUSTOMER_EMAIL_ADDRESS=<EMAIL_ADDRESS_TO_SEND_EMAIL_TO> CUSTOMER_PHONE_NUMBER=<UNITED_STATES_BASED_NUMBER_TO_SEND_SMS_TO>Certifique-se de ter concluído o exercício anterior antes de continuar.
Volte para o navegador (http://localhost:4200), localize a grade de dados e selecione Entrar em contato com o cliente seguido por Ligar para o cliente na primeira linha.
Um componente de chamada telefônica será adicionado ao cabeçalho. Introduza o seu número de telefone para o qual pretende ligar (certifique-se de que começa com + e inclui o código do país) e selecione Chamar. Ser-lhe-á pedido que permita o acesso ao seu microfone.
Selecione Desligar para encerrar a chamada. Selecione Fechar para fechar o componente de chamada telefônica.
Explorando o código de chamada telefônica
Sugestão
Se você estiver usando o Visual Studio Code, poderá abrir arquivos diretamente selecionando:
- Windows/Linux: Ctrl + P
- Mac: Cmd + P
Em seguida, digite o nome do arquivo que deseja abrir.
Abra o arquivo customers-list.component.ts . O caminho completo para o arquivo é client/src/app/customers-list/customers-list.component.ts.
Observe que
openCallDialog()envia umaCustomerCallmensagem e o número de telefone do cliente usando um barramento de eventos.openCallDialog(data: Phone) { this.eventBus.emit({ name: Events.CustomerCall, value: data }); }Observação
O código do barramento de eventos pode ser encontrado no arquivo eventbus.service.ts se você estiver interessado em explorá-lo mais. O caminho completo para o arquivo é client/src/app/core/eventbus.service.ts.
A função do
ngOnInit()componente de cabeçalho assina oCustomerCallevento enviado pelo barramento de eventos e exibe o componente de chamada telefônica. Você pode encontrar esse código em header.component.ts.ngOnInit() { this.subscription.add( this.eventBus.on(Events.CustomerCall, (data: Phone) => { this.callVisible = true; // Show phone call component this.callData = data; // Set phone number to call }) ); }Abra phone-call.component.ts. Reserve um momento para expor o código. O caminho completo para o arquivo é client/src/app/phone-call/phone-call.component.ts. Observe os seguintes recursos principais:
- Recupera um token de acesso dos Serviços de Comunicação do Azure chamando a
acsService.getAcsToken()função emngOnInit(); - Adiciona um "discador telefônico" à página. Você pode ver o discador clicando na entrada do número de telefone no cabeçalho.
- Inicia e termina uma chamada usando as
startCall()funções eendCall()respectivamente.
- Recupera um token de acesso dos Serviços de Comunicação do Azure chamando a
Antes de examinar o código que faz a chamada telefônica, vamos examinar como o token de acesso ACS é recuperado e como os objetos de chamada telefônica são criados. Localize a
ngOnInit()função no phone-call.component.ts.async ngOnInit() { if (ACS_CONNECTION_STRING) { this.subscription.add( this.acsService.getAcsToken().subscribe(async (user: AcsUser) => { const callClient = new CallClient(); const tokenCredential = new AzureCommunicationTokenCredential(user.token); this.callAgent = await callClient.createCallAgent(tokenCredential); }) ); } }Esta função executa as seguintes ações:
- Recupera um userId do ACS e um token de acesso chamando a
acsService.getAcsToken()função. - Depois que o token de acesso é recuperado, o código executa as seguintes ações:
- Cria uma nova instância de e
CallClientusando o token deAzureCommunicationTokenCredentialacesso. - Cria uma nova instância de uso dos
CallAgentCallClientobjetos eAzureCommunicationTokenCredential. Mais tarde, você verá queCallAgenté usado para iniciar e terminar uma chamada.
- Cria uma nova instância de e
- Recupera um userId do ACS e um token de acesso chamando a
Abra acs.services.ts e localize a
getAcsToken()função. O caminho completo para o arquivo é client/src/app/core/acs.service.ts. A função faz uma solicitação HTTP GET para a/acstokenrota exposta pelo servidor de API.getAcsToken(): Observable<AcsUser> { return this.http.get<AcsUser>(this.apiUrl + 'acstoken') .pipe( catchError(this.handleError) ); }Uma função de servidor de API chamada
createACSToken()recupera o userId e o token de acesso e o retorna ao cliente. Ele pode ser encontrado no arquivo server/typescript/acs.ts .import { CommunicationIdentityClient } from '@azure/communication-identity'; const connectionString = process.env.ACS_CONNECTION_STRING as string; async function createACSToken() { if (!connectionString) return { userId: '', token: '' }; const tokenClient = new CommunicationIdentityClient(connectionString); const { user, token } = await tokenClient.createUserAndToken(["voip"]); return { userId: user.communicationUserId, token }; }Esta função executa as seguintes ações:
- Verifica se um valor ACS
connectionStringestá disponível. Caso contrário, retorna um objeto com um vaziouserIdetoken. - Cria uma nova instância e
CommunicationIdentityClientpassa oconnectionStringvalor para ela. - Cria um novo usuário e token usando
tokenClient.createUserAndToken()com o escopo "voip". - Retorna um objeto que contém os
userIdvalores etoken.
- Verifica se um valor ACS
Agora que você já viu como o userId e o token são recuperados, volte e
phone-call.component.tslocalize astartCall()função.Esta função é chamada quando Call é selecionado no componente de chamada telefônica. Ele usa o
CallAgentobjeto mencionado anteriormente para iniciar uma chamada. AcallAgent.startCall()função aceita um objeto que representa o número a ser chamado e o número de telefone ACS usado para fazer a chamada.startCall() { this.call = this.callAgent?.startCall( [{ phoneNumber: this.customerPhoneNumber }], { alternateCallerId: { phoneNumber: this.fromNumber } }); console.log('Calling: ', this.customerPhoneNumber); console.log('Call id: ', this.call?.id); this.inCall = true; // Adding event handlers to monitor call state this.call?.on('stateChanged', () => { console.log('Call state changed: ', this.call?.state); if (this.call?.state === 'Disconnected') { console.log('Call ended. Reason: ', this.call.callEndReason); this.inCall = false; } }); }A
endCall()função é chamada quando Hang Up é selecionado no componente de chamada telefônica.endCall() { if (this.call) { this.call.hangUp({ forEveryone: true }); this.call = undefined; this.inCall = false; } else { this.hangup.emit(); } }Se uma chamada estiver em andamento, a
call.hangUp()função será chamada para encerrar a chamada. Se nenhuma chamada estiver em andamento, ohangupevento será emitido para o componente pai do cabeçalho para ocultar o componente de chamada telefônica.Antes de passar para o próximo exercício, vamos rever os principais conceitos abordados neste exercício:
- Um userId do ACS e um token de acesso são recuperados do servidor de API usando a
acsService.createUserAndToken()função. - O token é usado para criar um
CallClienteCallAgentobjeto. - O
CallAgentobjeto é usado para iniciar e terminar uma chamada chamando ascallAgent.startCall()funções ecallAgent.hangUp()respectivamente.
- Um userId do ACS e um token de acesso são recuperados do servidor de API usando a
Agora que você aprendeu como as chamadas telefônicas podem ser integradas a um aplicativo, vamos mudar nosso foco para usar os Serviços de Comunicação do Azure para enviar mensagens de email e SMS.