Démarrage avec les connecteurs Greengrass (CLI) - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Démarrage avec les connecteurs Greengrass (CLI)

Cette fonction est disponible pourAWS IoT GreengrassCore v1.7 et versions ultérieures.

Ce didacticiel explique comment utiliser la AWS CLI pour travailler avec les connecteurs.

Utilisez des connecteurs pour accélérer votre cycle de développement. Les connecteurs sont des modules réutilisables prédéfinis qui contribuent à interagir avec les services, les protocoles et les ressources. Ils peuvent vous aider à déployer plus rapidement une logique métier pour les appareils Greengrass. Pour plus d'informations, consultez Intégrer à des services et protocoles à l'aide de connecteurs Greengrass.

Dans ce didacticiel, vous configurez et déployez leNotifications Twilioconnecteur. Le connecteur reçoit des informations du message Twilio en tant que données d'entrée, puis déclenche un SMS Twilio. Le flux de données est illustré dans le diagramme suivant.

Flux de données à partir de la fonction Lambda vers le connecteur Notifications Twilio vers Twilio.

Une fois que vous avez configuré le connecteur, vous créez une fonction Lambda et un abonnement.

  • La fonction évalue les données simulées à partir d'un capteur de température. Elle publie les informations du message Twilio sous certaines conditions dans une rubrique MQTT. Il s'agit de la rubrique à laquelle le connecteur est abonné.

  • L'abonnement autorise la fonction à publier dans la rubrique et le connecteur à recevoir des données provenant de la rubrique.

Le connecteur Twilio Notifications nécessite un jeton d'authentification Twilio pour interagir avec l'API Twilio. Le jeton est un secret de type texte dans AWS Secrets Manager et référencé à partir d'une ressource de groupe. Cela permet à AWS IoT Greengrass de créer une copie locale du secret sur le noyau Greengrass, où il est chiffré et mis à la disposition du connecteur. Pour plus d'informations, consultez Déployer des secrets sur AWS IoT Greengrass Core.

Le didacticiel contient les étapes détaillées suivantes :

Le didacticiel devrait prendre environ 30 minutes.

Utilisation de l'API AWS IoT Greengrass

Il est utile de comprendre les modèles suivants lorsque vous utilisez des groupes Greengrass et des composants de groupe (par exemple, les fonctions, les connecteurs et les ressources du groupe).

  • En haut de la hiérarchie, un composant possède un objet de définition qui est un conteneur d'objets de version. En revanche, une version est un conteneur pour les connecteurs, les fonctions ou d'autres types de composants.

  • Lorsque vous déployez vers le noyau Greengrass, vous déployez une version de groupe spécifique. Une version de groupe peut contenir une version de chaque type de composant. Un noyau est obligatoire, mais les autres sont inclus en fonction des besoins.

  • Les versions sont immuables. Ainsi, vous devez créer de nouvelles versions lorsque vous souhaitez apporter des modifications.

Astuce

Si vous recevez une erreur lorsque vous exécutez une commande AWS CLI, ajoutez le paramètre --debug, puis relancez la commande pour obtenir plus d'informations sur l'erreur.

L'API AWS IoT Greengrass vous permet de créer plusieurs définitions pour un type de composant. Par exemple, vous pouvez créer un objet FunctionDefinition à chaque fois que vous créez une FunctionDefinitionVersion ou vous pouvez ajouter de nouvelles versions à une définition existante. Cette flexibilité vous permet de personnaliser votre système de gestion de version.

Prérequis

Pour suivre ce didacticiel, vous devez disposer des éléments suivants :

  • Un groupe Greengrass et un appareil principal (noyau) Greengrass (version 1.9.3 ou ultérieure). Pour savoir comment créer un groupe et un service principal Greengrass, consultez Commencer avec AWS IoT Greengrass. Le didacticiel Mise en route comprend également les étapes d'installation du logiciel AWS IoT Greengrass Core.

  • Python 3.7 installé sur l'appareil principal (noyau) AWS IoT Greengrass.

  • AWS IoT Greengrassdoit être configuré pour prendre en charge les secrets locaux, comme décrit dans leExigences relatives aux secrets.

    Note

    Cette exigence inclut l'autorisation d'accès à vos Secrets Manager. Si vous utilisez le rôle de service Greengrass par défaut, Greengrass est autorisé à obtenir les valeurs des secrets dont les noms commencent pargreengrass.

  • Un SID de compte Twilio, un jeton d'authentification et un numéro de téléphone Twilio. Une fois que vous avez créé un projet Twilio, ces valeurs sont disponibles sur le tableau de bord du projet.

    Note

    Vous pouvez utiliser un compte d'essai Twilio. Si vous utilisez un compte d'essai, vous devez ajouter des numéros de téléphone qui ne sont pas des destinataires Twilio à une liste de numéros de téléphone vérifiés. Pour de plus amples informations, veuillez consulterComment travailler avec votre compte d'essai Twilio.

  • AWS CLI installée et configurée sur votre machine. Pour de plus amples informations, veuillez consulterInstallation deAWS Command Line InterfaceetConfiguration deAWS CLIdans leAWS Command Line InterfaceGuide de l'utilisateur.

     

    Les exemples de ce didacticiel sont écrits pour Linux et d'autres systèmes Unix. Si vous utilisez Windows, consultezSpécification des valeurs des paramètres pour l'AWS Command Line Interfacepour en savoir plus sur les différences de syntaxe.

    Si la commande contient une chaîne JSON, le didacticiel fournit un exemple qui possède le fichier JSON sur une seule ligne. Sur certains systèmes, il peut être plus facile de modifier et exécuter des commandes à l'aide de ce format.

Étape 1 : Créer un secret Secrets Manager

Au cours de cette étape, vous utilisez l'API AWS Secrets Manager pour créer un secret pour votre jeton AUTH Twilio.

  1. D'abord, créez le secret.

    • Remplaceztwilio-auth-tokenavec votre jeton d'authentification Twilio.

    aws secretsmanager create-secret --name greengrass-TwilioAuthToken --secret-string twilio-auth-token
    Note

    Par défaut, le rôle de service Greengrass permetAWS IoT Greengrasspour obtenir la valeur des secrets dont le nom commence àgreengrass. Pour plus d'informations, consultez les exigences liées aux secrets.

  2. Copiez l'ARN du secret à partir de la sortie. Vous utilisez cela pour créer la ressource du secret et pour configurer le connecteur Twilio Notifications.

Étape 2 : Créer une version et une définition de ressource

Au cours de cette étape, vous utilisez leAWS IoT GreengrassAPI pour créer une ressource de Secrets Manager.

  1. Créez une définition de ressource qui inclut une version initiale.

    • Remplacez secret-arn avec l'ARN de la clé du secret que vous avez copiée à l'étape précédente.

     

    JSON Expanded
    aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{ "Resources": [ { "Id": "TwilioAuthToken", "Name": "MyTwilioAuthToken", "ResourceDataContainer": { "SecretsManagerSecretResourceData": { "ARN": "secret-arn" } } } ] }'
    JSON Single-line
    aws greengrass create-resource-definition \ --name MyGreengrassResources \ --initial-version '{"Resources": [{"Id": "TwilioAuthToken", "Name": "MyTwilioAuthToken", "ResourceDataContainer": {"SecretsManagerSecretResourceData": {"ARN": "secret-arn"}}}]}'
  2. Copiez l'LatestVersionArn de la définition de ressource à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition de ressource à la version de groupe que vous déployez pour le noyau.

Étape 3 : Créer une version et une définition de connecteur

Dans cette étape, vous configurez les paramètres pour le connecteur Twilio Notifications.

  1. Créez une définition de connecteur avec une version initiale.

    • Remplacez account-sid par votre SID de compte Twilio.

    • RemplacezARN secretavec leARNde votre secret Secrets Manager. Le connecteur utilise ceci pour obtenir la valeur du secret local.

    • Remplacez le phone-number avec votre numéro de téléphone Twilio. Twilio utilise celui-ci pour initier le SMS. Cela peut être remplacé dans la charge utile du message d'entrée. Utilisez le format suivant : +19999999999.

     

    JSON Expanded
    aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyTwilioNotificationsConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Parameters": { "TWILIO_ACCOUNT_SID": "account-sid", "TwilioAuthTokenSecretArn": "secret-arn", "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken", "DefaultFromPhoneNumber": "phone-number" } } ] }'
    JSON Single-line
    aws greengrass create-connector-definition \ --name MyGreengrassConnectors \ --initial-version '{"Connectors": [{"Id": "MyTwilioNotificationsConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Parameters": {"TWILIO_ACCOUNT_SID": "account-sid", "TwilioAuthTokenSecretArn": "secret-arn", "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken", "DefaultFromPhoneNumber": "phone-number"}}]}'
    Note

    TwilioAuthToken est l'ID que vous avez utilisé à l'étape précédente pour créer les ressources de secret.

  2. Copiez l'LatestVersionArn de la définition de connecteur à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition de connecteur à la version de groupe que vous déployez pour le noyau.

Étape 4 : Créer un package de déploiement de fonction Lambda

Pour créer une fonction Lambda, vous devez d'abord créer une fonction Lambdapackage de déploiementqui contient le code de fonction et les dépendances. Les fonctions Lambda de Greengrass nécessitentAWS IoT GreengrassKit SDK Corepour des tâches telles que la communication avec les messages MQTT dans l'environnement principal et l'accès aux secrets locaux. Ce didacticiel crée une fonction Python, de sorte que vous utilisiez la version Python du SDK dans le package de déploiement.

  1. À partir de laAWS IoT GreengrassKit SDK Corepage de téléchargement, téléchargez leAWS IoT GreengrassSDK Core pour Python sur votre ordinateur.

  2. Décompressez le package téléchargé pour obtenir le kit SDK. Le kit SDK est représenté par le dossier greengrasssdk.

  3. Enregistrez la fonction de code Python suivante dans un fichier local nommé temp_monitor.py.

    import greengrasssdk import json import random client = greengrasssdk.client('iot-data') # publish to the Twilio Notifications connector through the twilio/txt topic def function_handler(event, context): temp = event['temperature'] # check the temperature # if greater than 30C, send a notification if temp > 30: data = build_request(event) client.publish(topic='twilio/txt', payload=json.dumps(data)) print('published:' + str(data)) print('temperature:' + str(temp)) return # build the Twilio request from the input data def build_request(event): to_name = event['to_name'] to_number = event['to_number'] temp_report = 'temperature:' + str(event['temperature']) return { "request": { "recipient": { "name": to_name, "phone_number": to_number, "message": temp_report } }, "id": "request_" + str(random.randint(1,101)) }
  4. Compressez les éléments suivants dans un fichier nommé temp_monitor_python.zip. Lorsque vous créez le fichier zip, insérez uniquement le code et ses dépendances, pas le dossier dans lequel il se trouve.

    • temp_monitor.py. Logique d'application.

    • greengrasssdk. Bibliothèque requise pour toutes les fonctions Lambda Python Greengrass qui publient des messages MQTT.

    Il s'agit du package de déploiement de votre fonction Lambda.

Étape 5 : Création d'une fonction Lambda

Maintenant, créez une fonction Lambda qui utilise le package de déploiement.

  1. Créez un rôle IAM pour vous permettre de transmettre l'ARN du rôle lorsque vous créez la fonction.

    JSON Expanded
    aws iam create-role --role-name Lambda_empty --assume-role-policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
    JSON Single-line
    aws iam create-role --role-name Lambda_empty --assume-role-policy '{"Version": "2012-10-17", "Statement": [{"Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"},"Action": "sts:AssumeRole"}]}'
    Note

    AWS IoT Greengrassn'utilise pas ce rôle car les autorisations pour vos fonctions Greengrass Lambda sont spécifiées dans le rôle de groupe Greengrass. Dans le cadre de ce didacticiel, vous créez un rôle vide.

  2. Copiez la Arn à partir de la sortie.

  3. Utilisation de l'AWS LambdaAPI pour créer le TempMonitor . La commande suivante suppose que le fichier ZIP se trouve dans le répertoire actuel.

    • Remplacez role-arn par l'Arn que vous avez copié.

    aws lambda create-function \ --function-name TempMonitor \ --zip-file fileb://temp_monitor_python.zip \ --role role-arn \ --handler temp_monitor.function_handler \ --runtime python3.7
  4. Publiez une version de la fonction.

    aws lambda publish-version --function-name TempMonitor --description 'First version'
  5. Créez un alias pour la version publiée.

    Les groupes Greengrass peuvent référencer une fonction Lambda par alias (recommandé) ou par version. L'utilisation d'un alias facilite la gestion des mises à jour de code, car vous n'avez pas besoin de changer votre table d'abonnement ou votre définition de groupe lorsque le code de fonction est mis à jour. Au lieu de cela, il vous suffit de pointer l'alias vers la nouvelle version de fonction.

    Note

    AWS IoT Greengrassne prend pas en charge les alias Lambda pour$LATESTversions.

    aws lambda create-alias --function-name TempMonitor --name GG_TempMonitor --function-version 1
  6. Copiez la AliasArn à partir de la sortie. Vous utilisez cette valeur lorsque vous configurez la fonction pour AWS IoT Greengrass et lorsque vous créez un abonnement.

Maintenant, vous êtes prêt à configurer la fonction pour AWS IoT Greengrass.

Étape 6 : Créer une version et une définition de fonction

Pour utiliser une fonction Lambda sur unAWS IoT Greengrasscore, vous créez une version de définition de fonction qui fait référence à la fonction Lambda en alias et définit la configuration au niveau du groupe. Pour plus d'informations, consultez Contrôle de l'exécution des fonctions Greengrass Lambda à l'aide d'une configuration spécifique au groupe.

  1. Créez une définition de fonction qui inclut une version initiale.

    • Remplacez alias-arn par l'AliasArn que vous avez copié lorsque vous avez créé l'alias.

     

    JSON Expanded
    aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{ "Functions": [ { "Id": "TempMonitorFunction", "FunctionArn": "alias-arn", "FunctionConfiguration": { "Executable": "temp_monitor.function_handler", "MemorySize": 16000, "Timeout": 5 } } ] }'
    JSON Single-line
    aws greengrass create-function-definition \ --name MyGreengrassFunctions \ --initial-version '{"Functions": [{"Id": "TempMonitorFunction", "FunctionArn": "alias-arn", "FunctionConfiguration": {"Executable": "temp_monitor.function_handler", "MemorySize": 16000,"Timeout": 5}}]}'
  2. Copiez la LatestVersionArn à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition de fonction à la version de groupe que vous déployez pour le noyau.

  3. Copiez la Id à partir de la sortie. Vous utiliserez cette valeur ultérieurement lorsque vous mettrez à jour la fonction.

Étape 7 : Créer une version et une définition d'abonnement

Au cours de cette étape, vous allez ajouter un abonnement qui permet à la fonction Lambda d'envoyer des données d'entrée au connecteur. Le connecteur définit les rubriques MQTT auxquelles il est abonné, de sorte que cet abonnement utilise l'une des rubriques. Il s'agit de la même rubrique dans laquelle l'exemple de fonction effectue la publication.

Dans le cadre de ce didacticiel, vous pouvez également créer des abonnements qui autorisent la fonction à recevoir des relevés simulés de température de AWS IoT et autorisent AWS IoT à recevoir les informations d'état du connecteur.

  1. Création d'une définition d'abonnement qui contient une version initiale qui inclut les abonnements.

    • Remplacez alias-arn par l'AliasArn que vous avez copié lorsque vous avez créé l'alias de cette fonction. Utilisez cet ARN pour les deux abonnements qui l'utilisent.

     

    JSON Expanded
    aws greengrass create-subscription-definition --initial-version '{ "Subscriptions": [ { "Id": "TriggerNotification", "Source": "alias-arn", "Subject": "twilio/txt", "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4" }, { "Id": "TemperatureInput", "Source": "cloud", "Subject": "temperature/input", "Target": "alias-arn" }, { "Id": "OutputStatus", "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Subject": "twilio/message/status", "Target": "cloud" } ] }'
    JSON Single-line
    aws greengrass create-subscription-definition \ --initial-version '{"Subscriptions": [{"Id": "TriggerNotification", "Source": "alias-arn", "Subject": "twilio/txt", "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4"},{"Id": "TemperatureInput", "Source": "cloud", "Subject": "temperature/input", "Target": "alias-arn"},{"Id": "OutputStatus", "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Subject": "twilio/message/status", "Target": "cloud"}]}'
  2. Copiez la LatestVersionArn à partir de la sortie. Vous utilisez cette valeur pour ajouter la version de définition d'abonnement à la version de groupe que vous déployez pour le noyau.

Étape 8 : Créer une version de groupe

Maintenant, vous êtes prêt à créer une version de groupe qui contient tous les éléments que vous souhaitez déployer. Pour ce faire, vous devez créer une version de groupe qui fait référence à la version cible de chaque type de composant.

Tout d'abord, obtenez l'ID de groupe et l'ARN de la version de définition du noyau. Ces valeurs sont requises pour créer la version de groupe.

  1. Obtenir l'ID du groupe et la dernière version du groupe :

    1. Obtenez les ID du groupe et de la version de groupe Greengrass cible. Cette procédure suppose qu'il s'agit du dernier groupe et de la dernière version du groupe. La requête suivante renvoie le groupe créé le plus récemment.

      aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"

      Vous pouvez également procéder à une interrogation par nom. Les noms de groupe ne devant pas nécessairement être uniques, plusieurs groupes peuvent être renvoyés.

      aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
      Note

      Vous trouverez également ces valeurs dans leAWS IoTconsole L'ID du groupe s'affiche sur la page Paramètres du groupe. Les ID de version de groupe sont affichés dans leDéploiementsonglet.

    2. Copiez l'Id du groupe cible à partir de la sortie. Vous utilisez cela pour obtenir la version de définition du noyau et lorsque vous déployez le groupe.

    3. Copiez l'élément LatestVersion à partir de la sortie (ID de la dernière version ajoutée au groupe). Vous utilisez cela pour obtenir la version de la définition du noyau.

  2. Obtenir l'ARN de la version de la définition du noyau :

    1. Obtenez la version de groupe. Pour cette étape, nous supposons que la dernière version de groupe inclut une version de définition du noyau.

      • Remplacez group-id par l'Id que vous avez copié pour le groupe.

      • Remplacezgroup-version-idavec leLatestVersionque vous avez copié pour le groupe.

      aws greengrass get-group-version \ --group-id group-id \ --group-version-id group-version-id
    2. Copiez la CoreDefinitionVersionArn à partir de la sortie.

  3. Créer une version de groupe.

    • Remplacez group-id par l'Id que vous avez copié pour le groupe.

    • Remplacezcore-definition-version-arnavec leCoreDefinitionVersionArnque vous avez copié pour la version de la définition du noyau.

    • Remplacezresource-definition-version-arnavec leLatestVersionArnque vous avez copié pour la définition de ressource.

    • Remplacezconnector-definition-version-arnavec leLatestVersionArnque vous avez copié pour la définition du connecteur.

    • Remplacezfunction-definition-version-arnavec leLatestVersionArnque vous avez copié pour la définition de fonction.

    • Remplacezsubscription-definition-version-arnavec leLatestVersionArnque vous avez copié pour la définition d'abonnement.

    aws greengrass create-group-version \ --group-id group-id \ --core-definition-version-arn core-definition-version-arn \ --resource-definition-version-arn resource-definition-version-arn \ --connector-definition-version-arn connector-definition-version-arn \ --function-definition-version-arn function-definition-version-arn \ --subscription-definition-version-arn subscription-definition-version-arn
  4. Copiez la valeur Version à partir de la sortie. Il s'agit de l'ID de la version de groupe. Vous utilisez cette valeur pour déployer la version de groupe.

Étape 9 : Créer un déploiement

Déployer le groupe sur l'appareil principal (noyau)

  1. Sur votre appareil principal, assurez-vous que le démon AWS IoT Greengrass est en cours d'exécution.

    1. Pour vérifier si le démon est en cours d'exécution :

      ps aux | grep -E 'greengrass.*daemon'

      Si la sortie contient une entrée root pour /greengrass/ggc/packages/1.11.6/bin/daemon, le démon est en cours d'exécution.

    2. Pour démarrer le démon :

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Créer un déploiement.

    • Remplacez group-id par l'Id que vous avez copié pour le groupe.

    • Remplacezgroup-version-idavec leVersionque vous avez copié pour la nouvelle version de groupe.

    aws greengrass create-deployment \ --deployment-type NewDeployment \ --group-id group-id \ --group-version-id group-version-id
  3. Copiez la DeploymentId à partir de la sortie.

  4. Obtenir le statut du déploiement.

    • Remplacez group-id par l'Id que vous avez copié pour le groupe.

    • Remplacez deployment-id par l'DeploymentId que vous avez copié pour le déploiement.

    aws greengrass get-deployment-status \ --group-id group-id \ --deployment-id deployment-id

    Si le statut estSuccess, le déploiement a réussi. Pour bénéficier d'une aide à la résolution des problèmes, consultez Résolution des problèmes de AWS IoT Greengrass.

Tester la solution

  1. Dans la pageAWS IoTpage d'accueil de la console, choisissezTest.

  2. PourS'abonner à la rubrique, utilisez les valeurs suivantes, puis choisissezS'abonner. Le connecteur Twilio Notifications Twilio Notifications Twilio Notifications Twilio

    Propriété

    Valeur

    rubrique abonnement

    twilio/message/status

    Affichage de la charge utile MQTT

    Affichage des charges utiles sous forme de chaînes

  3. PourPublier dans la rubrique, utilisez les valeurs suivantes, puis choisissezPublierpour appeler la fonction.

    Propriété

    Valeur

    Sujet

    temperature/input

    Message

    Remplacezrecipient-nameavec un nom etrecipient-phone-numberavec le numéro de téléphone du destinataire du SMS. Exemple : +12345000000

    { "to_name": "recipient-name", "to_number": "recipient-phone-number", "temperature": 31 }

    Si vous utilisez un compte d'essai, vous devez ajouter des numéros de téléphone qui ne sont pas des destinataires Twilio à une liste de numéros de téléphone vérifiés. Pour de plus amples informations, veuillez consulterVerify your Personal Phone Number.

    En cas de réussite, le destinataire reçoit le SMS et la console affiche le statut success depuis les données de sortie.

    Maintenant, passez la temperature dans le message d'entrée à 29 et publiez. Étant donné que cette valeur est inférieure à 30, le TempMonitor ne déclenche pas de message Twilio.

Consulter aussi