Démarrage rapide : recevoir et répondre aux SMS

Les fonctionnalités de SMS d’Azure Communication Services fournissent aux développeurs des options permettant d’utiliser des événements SMS reçus. Les événements sont publiés sur Azure Event Grid qui fournit des intégrations prêtes à l’emploi pour traiter ceux qui utilisent des webhooks, Azure Functions, des connecteurs Power Automate/Logic App, etc.

Une fois reçus, les messages SMS peuvent être traités pour y répondre ou simplement dans le but de les enregistrer dans une base de données pour y accéder accès ultérieurement.

Dans ce guide de démarrage rapide, nous allons nous concentrer sur la présentation du traitement des événements de SMS reçus via Azure Functions en utilisant des déclencheurs Event Grid et de connecteurs sans code pour Power Automate/Logic Apps.

L’événement SMSReceived généré lorsqu’un SMS est envoyé vers un numéro de téléphone Azure Communication Services est mis en forme de la manière suivante :

[{
  "id": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
  "topic": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/acse2e/providers/microsoft.communication/communicationservices/{communication-services-resource-name}",
  "subject": "/phonenumber/15555555555",
  "data": {
    "MessageId": "Incoming_20200918002745d29ebbea-3341-4466-9690-0a03af35228e",
    "From": "15555555555",
    "To": "15555555555",
    "Message": "Great to connect with Azure Communication Services events",
    "ReceivedTimestamp": "2020-09-18T00:27:45.32Z"
  },
  "eventType": "Microsoft.Communication.SMSReceived",
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "eventTime": "2020-09-18T00:27:47Z"
}]

Pour commencer à générer les événements, nous devons configurer Azure Event Grid pour notre ressource Azure Communication Services.

Notes

L’utilisation d’Azure Event Grid entraîne des coûts supplémentaires. Pour plus d’informations, consultez Tarification Azure Event Grid.

Conditions préalables

Event Grid fournit une prise en charge prête à l’emploi pour Azure Functions, ce qui facilite la configuration d’un écouteur d’événements sans avoir à gérer la complexité de l’analyse des en-têtes ou le débogage de webhooks. En tirant parti du déclencheur prêt à l’emploi, nous pouvons configurer une fonction Azure qui s’exécute chaque fois qu’un événement correspondant au déclencheur est détecté. Dans ce document, nous mettons l’accent sur les déclencheurs reçus par SMS.

Configuration de notre environnement local

  1. Installez l’extension Azure Functions en utilisant Visual Studio Code.

  2. Créez une fonction Azure avec l’extension Azure en suivant ces instructions.

    Configurez la fonction à l’aide des instructions suivantes :

    • Langage : TypeScript
    • Modèle : déclencheur Azure Event Grid
    • Nom de la fonction : défini par l’utilisateur

    Une fois créée, vous voyez une fonction créée dans votre répertoire comme suit :

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
    
    };
    
    export default eventGridTrigger;
    
    

Configurer Fonction Azure pour recevoir un événement de SMS

  1. Configurez Fonction Azure pour analyser des valeurs de l’événement, par exemple qui l’a envoyé, vers quel numéro et quel était le message.

    
    import { AzureFunction, Context } from "@azure/functions"
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
       context.log(eventGridEvent);
       const to = eventGridEvent['data']['to'];
       const from = eventGridEvent['data']['from'];
       const message = eventGridEvent['data']['message'];
    
    };
    
    export default eventGridTrigger;
    
    

À ce stade, vous avez correctement géré la réception d’un SMS via des événements. Maintenant, les possibilités d’utilisation de cet événement vont de la simple journalisation à la réponse à celui-ci. Dans la section suivante, nous nous concentrons sur la réponse à ce SMS que nous avons reçu. Si vous ne souhaitez pas répondre au SMS, passez à la section suivante sur l’utilisation de la fonction en local.

Réponse au SMS

  1. Pour répondre aux SMS entrants, nous utilisons les fonctionnalités SMS d’Azure Communication Service pour envoyer un SMS. Nous commençons par appeler SmsClient et l’initialiser avec connection string pour notre ressource. Vous pouvez coller la chaîne de connexion directement dans le code ou la placer dans le fichier local.settings.json de votre répertoire Azure Function sous les valeurs.

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "ACS_CONNECTION_STRING": "<<CONNECTION STRING>>"
  }
}

  1. Ensuite, nous rédigeons un SMS à envoyer en fonction des valeurs to et from de l’événement reçu.

    import { AzureFunction, Context } from "@azure/functions"
    import { SmsClient } from "@azure/communication-sms";
    
    const connectionString = process.env.ACS_CONNECTION_STRING; //Replace with your connection string
    
    const eventGridTrigger: AzureFunction = async function (context: Context, eventGridEvent: any): Promise<void> {
        context.log(eventGridEvent);
        const to = eventGridEvent['data']['to'];
        const from = eventGridEvent['data']['from'];
        const message = eventGridEvent['data']['message'];
    
        const smsClient = new SmsClient(connectionString);
    
        const sendResults = await smsClient.send({
            from: to,
            to: [from],
            message: "Message received successfully. Will respond shortly."
        });
    
    };
    
    export default eventGridTrigger;
    

À ce stade, les possibilités sont infinies. De la réponse à un message avec une réponse prédéfinie, à l’ajout d’un bot en passant par le simple stockage de réponses, vous pouvez adapter le code à la dernière étape pour effectuer ces opérations.

Exécution locale

Pour exécuter la fonction en local, appuyez sur F5 dans Visual Studio Code. Nous utilisons ngrok pour connecter notre fonction Azure en cours d’exécution locale à Azure Event Grid.

  1. Une fois la fonction en cours d’exécution, nous configurons ngrok. (Vous devez télécharger ngrok pour votre environnement.)

    ngrok http 7071
    

    Copiez le lien ngrok fourni dans l’emplacement d’exécution de votre fonction.

  2. Configurez des événements de SMS via Event Grid au sein de votre ressource Azure Communication Services. Nous l’effectuons en tirant parti d’Azure CLI. Vous avez besoin de l’ID de ressource de votre ressource Azure Communication Services qui se trouve dans le Portail Azure. (L’ID de ressource ressemblera à : /subscriptions/<<AZURE SUBSCRIPTION ID>>/resourceGroups/<<RESOURCE GROUP NAME>>/providers/Microsoft.Communication/CommunicationServices/<<RESOURCE NAME>>)

    
    az eventgrid event-subscription create --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type webhook --endpoint "<<NGROK URL>> " --source-resource-id "<<RESOURCE_ID>>"  --included-event-types Microsoft.Communication.SMSReceived 
    
    
  3. Maintenant que tout est connecté, testez le flux en envoyant un SMS vers le numéro de téléphone consigné sur votre ressource Azure Communication Services. Vous devez voir les journaux de console sur votre terminal où la fonction est en cours d’exécution. Si vous avez ajouté le code pour répondre au SMS, vous devriez voir ce SMS remis.

Déployer sur Azure

Pour déployer Fonction Azure sur Azure, vous devez suivre ces instructions. Une fois déployée, nous configurons Event Grid pour la ressource Azure Communication Services. À l’aide de l’URL de Fonction Azure qui a été déployée (URL trouvée dans le Portail Azure sous la fonction), nous exécutons la commande suivante :


az eventgrid event-subscription update --name "<<EVENT_SUBSCRIPTION_NAME>>" --endpoint-type azurefunction --endpoint "<<AZ FUNCTION URL>> " --source-resource-id "<<RESOURCE_ID>>"

Étant donné que nous mettons à jour l’abonnement de l’événement que nous avons créé pour les tests locaux, veillez à utiliser le même nom d’abonnement d’événement que celui utilisé ci-dessus.

Vous pouvez effectuer un test en envoyant un SMS vers le numéro de téléphone que vous avez acheté via la ressource Azure Communication Services.

Logic Apps et Power Automate fournissent des connecteurs prêts à l’emploi permettant de gérer des événements générés par Azure Communication Services via Event Grid. Logic Apps et Power Automate fournissent le même jeu de connecteurs. C’est à vous de décider ce que vous préférez. En savoir plus sur les différences entre les services pour éclairer votre décision.

Gestion des événements avec le connecteur Event Grid

  1. Commencez par créer un flux dans votre environnement préféré. Sélectionnez le déclencheur When a resource event occurs pour commencer.

    Capture d’écran du choix de déclencheur pour Power Automate.

  2. Maintenant, configurons-le. Le connecteur vous oblige à fournir l’abonnement que vous souhaitez utiliser. (Il doit s’agir du même abonnement que celui de votre ressource Azure Communication Services). Spécifiez le type de ressource. Pour ce cas, choisissez Microsoft.Communication.CommunicationServices. Vous devez ensuite fournir un nom de ressource pour la ressource Azure Communication Services à laquelle vous souhaitez vous connecter. Enfin, nous devons choisir les types d’événements que nous voulons recevoir, dans ce cas : Microsoft.Communication.SMSReceived.

    Capture d’écran du connecteur Event Grid.

    Le connecteur configure automatiquement l’abonnement aux événements à votre place et configure les événements qu’il souhaite recevoir.

  3. Pour nous faciliter la vie plus tard, ajoutez une réponse Parse JSON connector à traiter provenant du connecteur Event Grid. Configurez le connecteur pour prendre l’objet Body à partir du connecteur Event Grid et le faire correspondre à notre schéma attendu pour l’événement :

    Exemple de schéma (ouvert pour la consultation)
    
        {
            "properties": {
                "data": {
                    "properties": {
                        "From": {
                            "type": "string"
                        },
                        "Message": {
                            "type": "string"
                        },
                        "MessageId": {
                            "type": "string"
                        },
                        "ReceivedTimestamp": {
                            "type": "string"
                        },
                        "To": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "dataVersion": {
                    "type": "string"
                },
                "eventTime": {
                    "type": "string"
                },
                "eventType": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "metadataVersion": {
                    "type": "string"
                },
                "subject": {
                    "type": "string"
                },
                "topic": {
                    "type": "string"
                }
            },
            "type": "object"
        }
    
    

    Capture d’écran du connecteur Parse JSON.

À ce stade, vous avez correctement géré l’événement de SMS. Vous disposez ensuite de plusieurs options de traitement, allant de la journalisation de l’événement à la réponse au SMS. Dans le contexte de ce document, nous allons montrer comment y répondre. Poursuivez la lecture pour découvrir les étapes à suivre afin de répondre au SMS.

Réponse au SMS

  1. Commencez par ajouter le connecteur SMS à notre flux et configurez-le avec les informations de notre ressource Azure Communication Services. Elles permettent au connecteur d’accéder à la ressource et d’envoyer le SMS à notre place. Vous avez besoin de connection string pour votre ressource.

    Capture d’écran de l’écran de configuration du connecteur SMS.

  2. Ensuite, nous configurons le connecteur avec les informations de l’expéditeur et du destinataire. Nous utilisons les informations de l’événement reçu pour les remplir. Inversez les numéros to et from pour renvoyer un SMS à l’expéditeur d’origine. Enfin, ajoutez un message.

    Capture d’écran de la configuration d’un connecteur SMS.

À présent, vous pouvez enregistrer le flux et le tester en envoyant un SMS vers le numéro de téléphone associé à votre ressource Azure Communication Services. Vous devriez recevoir un SMS.

À ce stade, les possibilités sont infinies. De la réponse à un message avec une réponse prédéfinie, à l’ajout d’un bot en passant par le simple stockage de réponses, vous pouvez ajouter plus de logique aux flux.

Nettoyer les ressources

Si vous voulez nettoyer et supprimer un abonnement Communication Services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées. Apprenez-en davantage sur le nettoyage des ressources.

Vérification de numéro gratuit

Si vous disposez d’un nouveau numéro gratuit et que vous souhaitez envoyer un volume élevé de messages SMS ou envoyer des messages SMS à des numéros de téléphone canadiens, visitez cette page pour savoir comment vérifier votre numéro gratuit.

Étapes suivantes

Dans ce guide de démarrage rapide, vous avez appris à envoyer des SMS avec Communication Services.