Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En plus des appels téléphoniques, Azure Communication Services peut également envoyer des messages électroniques et SMS. Cela peut être utile lorsque vous souhaitez envoyer un message à un client ou à un autre utilisateur directement à partir de l’application.
Dans cet exercice, vous allez :
- Découvrez comment envoyer des messages électroniques et SMS à partir de l’application.
- Parcourez le code pour découvrir comment la fonctionnalité e-mail et SMS est implémentée.
Utilisation des fonctionnalités e-mail et SMS
Dans un exercice précédent , vous avez créé une ressource Azure Communication Services (ACS) et démarré la base de données, le serveur web et le serveur API. Vous avez également mis à jour les valeurs suivantes dans le fichier .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>Vérifiez que vous avez terminé l’exercice précédent avant de continuer.
Revenez au navigateur (http://localhost:4200) et sélectionnez Contact Customer suivi par e-mail/SMS Customer dans la première ligne.
Sélectionnez l’onglet e-mail/SMS et effectuez les tâches suivantes :
- Entrez un objet et un corps de l’e-mail, puis sélectionnez le bouton Envoyer un e-mail .
- Entrez un sms et sélectionnez le bouton Envoyer un SMS .
Remarque
La vérification par SMS pour les numéros gratuits est désormais obligatoire dans les États-Unis et le Canada. Pour activer la messagerie SMS, vous devez soumettre la vérification après l’achat du numéro de téléphone. Bien que ce tutoriel ne passe pas par ce processus, vous pouvez sélectionner les documents de téléphonie et SMS -->Réglementaires à partir de votre ressource Azure Communication Services dans le portail Azure et ajouter la documentation de validation requise.
Vérifiez que vous avez reçu les messages électroniques et SMS. La fonctionnalité SMS fonctionne uniquement si vous avez soumis les documents réglementaires mentionnés dans la note précédente. En guise de rappel, le message électronique sera envoyé à la valeur définie
CUSTOMER_EMAIL_ADDRESSet le sms sera envoyé à la valeur définie dansCUSTOMER_PHONE_NUMBERle fichier .env . Si vous n’avez pas pu fournir un numéro de téléphone basé sur États-Unis à utiliser pour les sms, vous pouvez ignorer cette étape.Remarque
Si vous ne voyez pas le message électronique dans votre boîte de réception pour l’adresse que
CUSTOMER_EMAIL_ADDRESSvous avez définie dans le fichier .env , vérifiez votre dossier de courrier indésirable.
Exploration du code de messagerie
Conseil / Astuce
Si vous utilisez Visual Studio Code, vous pouvez ouvrir des fichiers directement en sélectionnant :
- Windows/Linux : Ctrl + P
- Mac : Cmd + P
Tapez ensuite le nom du fichier que vous souhaitez ouvrir.
Ouvrez le fichier customers-list.component.ts . Le chemin complet du fichier est client/src/app/customers-list/customers-list.component.ts.
Lorsque vous avez sélectionné Contacter le client suivi par e-mail/SMS client dans le datagrid, le
customer-listcomposant affiche une boîte de dialogue. Cela est géré par laopenEmailSmsDialog()fonction dans le fichier customer-list.component.ts .openEmailSmsDialog(data: any) { if (data.phone && data.email) { // Create the data for the dialog let dialogData: EmailSmsDialogData = { prompt: '', title: `Contact ${data.company}`, company: data.company, customerName: data.first_name + ' ' + data.last_name, customerEmailAddress: data.email, customerPhoneNumber: data.phone } // Open the dialog const dialogRef = this.dialog.open(EmailSmsDialogComponent, { data: dialogData }); // Subscribe to the dialog afterClosed observable to get the dialog result this.subscription.add( dialogRef.afterClosed().subscribe((response: EmailSmsDialogData) => { console.log('SMS dialog result:', response); if (response) { dialogData = response; } }) ); } else { alert('No phone number available.'); } }La
openEmailSmsDialog()fonction effectue les tâches suivantes :- Vérifie si l’objet
data(qui représente la ligne à partir du datagrid) contient une propriété etphoneuneemailvaleur. Si c’est le cas, il crée undialogDataobjet qui contient les informations à transmettre à la boîte de dialogue. - Ouvre la
EmailSmsDialogComponentboîte de dialogue et lui transmet l’objetdialogData. - S’abonne à l’événement
afterClosed()de la boîte de dialogue. Cet événement est déclenché lorsque la boîte de dialogue est fermée. L’objetresponsecontient les informations entrées dans la boîte de dialogue.
- Vérifie si l’objet
Ouvrez le fichier email-sms-dialog.component.ts . Le chemin complet du fichier est client/src/app/email-sms-dialog/email-sms-dialog.component.ts.
Recherchez la
sendEmail()fonction :sendEmail() { if (this.featureFlags.acsEmailEnabled) { // Using CUSTOMER_EMAIL_ADDRESS instead of this.data.email for testing purposes this.subscription.add( this.acsService.sendEmail(this.emailSubject, this.emailBody, this.getFirstName(this.data.customerName), CUSTOMER_EMAIL_ADDRESS /* this.data.email */) .subscribe(res => { console.log('Email sent:', res); if (res.status) { this.emailSent = true; } }) ); } else { this.emailSent = true; // Used when ACS email isn't enabled } }La
sendEmail()fonction effectue les tâches suivantes :- Vérifie si l’indicateur de
acsEmailEnabledfonctionnalité est défini surtrue. Cet indicateur vérifie si laACS_EMAIL_ADDRESSvariable d’environnement a une valeur affectée. - Si
acsEmailEnabledla valeur est true, laacsService.sendEmail()fonction est appelée et l’objet de l’e-mail, le corps, le nom du client et l’adresse e-mail du client sont transmis. Étant donné que la base de données contient des exemples de données, laCUSTOMER_EMAIL_ADDRESSvariable d’environnement est utilisée au lieu dethis.data.email. Dans une application réelle, lathis.data.emailvaleur serait utilisée. - S’abonne à la
sendEmail()fonction dans leacsServiceservice. Cette fonction retourne une fonction RxJS observable qui contient la réponse du service côté client. - Si l’e-mail a été envoyé avec succès, la
emailSentpropriété est définie surtrue.
- Vérifie si l’indicateur de
Pour fournir une meilleure encapsulation et réutilisation du code, les services côté client tels que les acs.service.ts sont utilisés dans l’application. Cela permet à toutes les fonctionnalités ACS d’être consolidées dans un emplacement unique.
Ouvrez acs.service.ts et recherchez la
sendEmail()fonction. Le chemin complet du fichier est client/src/app/core/acs.service.ts.sendEmail(subject: string, message: string, customerName: string, customerEmailAddress: string) : Observable<EmailSmsResponse> { return this.http.post<EmailSmsResponse>(this.apiUrl + 'sendEmail', { subject, message, customerName, customerEmailAddress }) .pipe( catchError(this.handleError) ); }La
sendEmail()fonction dansAcsServiceeffectue les tâches suivantes :- Appelle la fonction et transmet l’objet
http.post()de l’e-mail, le message, le nom du client et son adresse e-mail. Lahttp.post()fonction retourne un RxJS observable qui contient la réponse de l’appel d’API. - Gère les erreurs retournées par la fonction à l’aide
http.post()de l’opérateur RxJScatchError.
- Appelle la fonction et transmet l’objet
Examinons maintenant comment l’application interagit avec la fonctionnalité de messagerie ACS. Ouvrez le fichier acs.ts et recherchez la
sendEmail()fonction. Le chemin complet du fichier est serveur/typescript/acs.ts.La
sendEmail()fonction effectue les tâches suivantes :Crée un
EmailClientobjet et transmet le chaîne de connexion ACS à celui-ci (cette valeur est récupérée à partir de la variable d’environnementACS_CONNECTION_STRING).const emailClient = new EmailClient(connectionString);Crée un
EmailMessageobjet et transmet les informations de l’expéditeur, de l’objet, du message et du destinataire.const msgObject: EmailMessage = { senderAddress: process.env.ACS_EMAIL_ADDRESS as string, content: { subject: subject, plainText: message, }, recipients: { to: [ { address: customerEmailAddress, displayName: customerName, }, ], }, };Envoie l’e-mail à l’aide de la
emailClient.beginSend()fonction et retourne la réponse. Bien que la fonction n’envoie qu’un seul destinataire dans cet exemple, labeginSend()fonction peut également être utilisée pour envoyer plusieurs destinataires.const poller = await emailClient.beginSend(msgObject);Attend que l’objet
pollersignale qu’il est terminé et envoie la réponse à l’appelant.
Exploration du code SMS
Revenez au fichier email-sms-dialog.component.ts que vous avez ouvert précédemment. Le chemin complet du fichier est client/src/app/email-sms-dialog/email-sms-dialog.component.ts.
Recherchez la
sendSms()fonction :sendSms() { if (this.featureFlags.acsPhoneEnabled) { // Using CUSTOMER_PHONE_NUMBER instead of this.data.customerPhoneNumber for testing purposes this.subscription.add( this.acsService.sendSms(this.smsMessage, CUSTOMER_PHONE_NUMBER /* this.data.customerPhoneNumber */) .subscribe(res => { if (res.status) { this.smsSent = true; } }) ); } else { this.smsSent = true; } }La
sendSMS()fonction effectue les tâches suivantes :- Vérifie si l’indicateur de
acsPhoneEnabledfonctionnalité est défini surtrue. Cet indicateur vérifie si laACS_PHONE_NUMBERvariable d’environnement a une valeur affectée. - Si
acsPhoneEnabledla valeur est true, laacsService.SendSms()fonction est appelée et le sms et le numéro de téléphone du client sont passés. Étant donné que la base de données contient des exemples de données, laCUSTOMER_PHONE_NUMBERvariable d’environnement est utilisée au lieu dethis.data.customerPhoneNumber. Dans une application réelle, lathis.data.customerPhoneNumbervaleur serait utilisée. - S’abonne à la
sendSms()fonction dans leacsServiceservice. Cette fonction retourne une fonction RxJS observable qui contient la réponse du service côté client. - Si le message SMS a été envoyé avec succès, il définit la
smsSentpropriété surtrue.
- Vérifie si l’indicateur de
Ouvrez acs.service.ts et recherchez la
sendSms()fonction. Le chemin complet du fichier est client/src/app/core/acs.service.ts.sendSms(message: string, customerPhoneNumber: string) : Observable<EmailSmsResponse> { return this.http.post<EmailSmsResponse>(this.apiUrl + 'sendSms', { message, customerPhoneNumber }) .pipe( catchError(this.handleError) ); }La
sendSms()fonction effectue les tâches suivantes :- Appelle la
http.post()fonction et transmet le message et le numéro de téléphone client à celui-ci. Lahttp.post()fonction retourne un RxJS observable qui contient la réponse de l’appel d’API. - Gère les erreurs retournées par la fonction à l’aide
http.post()de l’opérateur RxJScatchError.
- Appelle la
Enfin, examinons comment l’application interagit avec la fonctionnalité DE SMS ACS. Ouvrez le fichier acs.ts . Le chemin complet du fichier est serveur/typescript/acs.ts et recherchez la
sendSms()fonction.La
sendSms()fonction effectue les tâches suivantes :Crée un
SmsClientobjet et transmet le chaîne de connexion ACS à celui-ci (cette valeur est récupérée à partir de la variable d’environnementACS_CONNECTION_STRING).const smsClient = new SmsClient(connectionString);Appelle la
smsClient.send()fonction et transmet le numéro de téléphone ACS (from), le numéro de téléphone client (to) et le sms :const sendResults = await smsClient.send({ from: process.env.ACS_PHONE_NUMBER as string, to: [customerPhoneNumber], message: message }); return sendResults;Retourne la réponse à l’appelant.
Vous pouvez en savoir plus sur les fonctionnalités de messagerie et SMS ACS dans les articles suivants :
Avant de passer à l’exercice suivant, examinons les concepts clés abordés dans cet exercice :
- Le fichier acs.service.ts encapsule les fonctionnalités de messagerie et SMS ACS utilisées par l’application côté client. Il gère les appels d’API au serveur et retourne la réponse à l’appelant.
- L’API côté serveur utilise les services ACS
EmailClientetSmsClientles objets pour envoyer des messages électroniques et SMS.
Maintenant que vous avez appris comment envoyer des messages électroniques et SMS, nous allons nous concentrer sur l’intégration des données organisationnelles dans l’application.