Partager via


Recevoir un SMS

Les fonctionnalités SMS d’Azure Communication Services offrent aux développeurs des options permettant de consommer des événements reçus par SMS. Les événements sont publiés sur Azure Event Grid, qui fournit des intégrations prêtes à l’emploi pour traiter celles qui utilisent des webhooks, Azure Functions, Power Automate / Connecteurs d’application logique, etc.

Une fois reçus, les sms peuvent être traités pour y répondre ou les connecter à une base de données pour un accès ultérieur.

Cet article explique comment traiter les événements reçus par SMS via Azure Functions à l’aide de 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é à un numéro de téléphone Azure Communication Services est mis en forme de la façon suivante :

[{
  "id": "d29ebbea-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": "d29ebbea-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"
}]

Remarque

Le format retourné MessageId par cette API est considéré comme un détail d’implémentation interne et peut être modifié sans préavis. Les clients doivent traiter les ID de message comme des identificateurs opaques et ne doivent pas analyser, inférer la structure ou générer une logique basée sur leur format ou leur contenu.

Pour commencer à générer des événements, configurez Azure Event Grid pour utiliser votre ressource Azure Communication Services.

Remarque

L’utilisation d’Azure Event Grid entraîne davantage de coûts. Pour plus d’informations, consultez la tarification d’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. À l’aide du déclencheur prêt à l’emploi, nous pouvons configurer une fonction Azure qui s’exécute chaque fois qu’un événement est détecté qui correspond au déclencheur. Dans ce document, nous nous concentrons sur les déclencheurs reçus par SMS.

Configuration de notre environnement local

  1. À l’aide de Visual Studio Code, installez l’extension Azure Functions.

  2. Avec l’extension, créez une fonction Azure en suivant ces instructions.

    Configurez la fonction avec les 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 Azure Function pour recevoir un événement SMS

  1. Configurez Azure Function pour analyser les valeurs de l’événement comme ceux qui l’ont envoyé, à quel nombre et à quel message il s’agissait.

    
    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 pour exécuter la fonction localement.

Réponse au SMS

  1. Pour répondre aux SMS entrants, nous utilisons les fonctionnalités SMS d’Azure Communication Service pour l’envoi de SMS. Nous commençons par invoquer le SmsClient et l’initialiser avec le 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 composons un SMS à envoyer en fonction des valeurs de to et from de l’événement que nous avons obtenu.

    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;
    

De là, les possibilités sont infinies. Vous pouvez répondre à un message avec une réponse préécrite, ajouter un bot ou stocker des réponses en adaptant le code à la dernière étape.

Exécution locale

Pour exécuter la fonction localement, appuyez F5 sur Visual Studio Code. Nous utilisons ngrok pour raccorder notre fonction Azure localement en cours d’exécution avec Azure Event Grid.

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

    ngrok http 7071
    

    Copiez le ngrok lien fourni à l’endroit où votre fonction est en cours d’exécution.

  2. Configurez des événements SMS via Event Grid dans votre ressource Azure Communication Services. Nous procédons ainsi à l’aide d’Azure CLI. Vous avez besoin de l’ID de ressource de votre ressource Azure Communication Services trouvée dans le portail Azure. L’ID de ressource ressemble à ceci : /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 branché, testez le flux en envoyant un SMS au numéro de téléphone 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 recevoir ce SMS.

Déployer sur Azure

Pour déployer la fonction Azure sur Azure, vous devez suivre ces instructions. Une fois déployé, nous configurons Event Grid pour la ressource Azure Communication Services. Avec l’URL de la fonction Azure 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 aux événements que nous avons créé pour les tests locaux, veillez à utiliser le même nom d’abonnement d’événement que celui que vous avez utilisé précédemment.

Vous pouvez tester en envoyant un SMS au numéro de téléphone que vous avez configuré dans votre ressource Azure Communication Services.

Logic Apps et Power Automate fournissent des connecteurs prêtes à l’emploi pour aider à gérer les événements générés par Azure Communication Services via Event Grid. Logic Apps et Power Automate fournissent le même ensemble de connecteurs. C’est à vous de décider de ce que vous préférez, lisez les différences entre les services pour informer 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 When a resource event occurs déclencheur pour commencer.

    Capture d’écran de la sélection du déclencheur pour Power Automate.

  2. À présent, vous pouvez configurer le connecteur. Vous devez fournir un abonnement que vous souhaitez utiliser. (Doit être le même abonnement que celui dans lequel se trouve votre ressource Azure Communication Services). Spécifiez le type de ressource. Dans ce cas, choisissez Microsoft.Communication.CommunicationServices. Ensuite, vous devez fournir un nom de ressource pour la ressource Azure Communication Services à laquelle vous souhaitez vous connecter. Enfin, nous devons sélectionner 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 en votre nom et configure les événements qu’il souhaite recevoir.

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

    Exemple de schéma (ouvert pour voir)
    
        {
            "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 d'analyse JSON.

À ce stade, vous avez correctement géré l’événement de SMS. Vous avez plusieurs options de ce qu’il faut faire, allant de la journalisation de l’événement à la réponse au SMS. Dans le contexte de ce document, nous répondons au sms reçu.

Réponse au SMS

  1. Commencez par ajouter le connecteur SMS à notre flux et en le configurant avec les informations de notre ressource Azure Communication Services. Il permet au connecteur d’accéder à la ressource et d’envoyer le SMS en notre nom. Vous avez besoin du connection string pour votre ressource.

    Capture d’écran de la page 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 que nous avons 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 du connecteur SMS.

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

De là, les possibilités sont infinies. Vous pouvez répondre à un message avec une réponse préécrite, ajouter un bot, stocker la réponse ou ajouter une automatisation du flux de travail.

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. En savoir plus 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 sms ou envoyer des sms à des numéros de téléphone canadiens, consultez le FAQ > Envoyer une vérification gratuite par SMS pour savoir comment vérifier votre numéro gratuit.

Étapes suivantes