Personnalisez les segments Amazon Pinpoint à l'aide d'une fonction AWS Lambda - Amazon Pinpoint

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.

Personnalisez les segments Amazon Pinpoint à l'aide d'une fonction AWS Lambda

Ceci est une documentation préliminaire pour une fonctionnalité en version bêta publique. Elle est susceptible d’être modifiée.

Vous pouvez l'utiliser AWS Lambda pour personnaliser la manière dont une campagne Amazon Pinpoint engage votre public cible. Vous pouvez ainsi modifier le segment de la campagne au moment où Amazon Pinpoint envoie le message de la campagne. AWS Lambda

AWS Lambda est un service de calcul que vous pouvez utiliser pour exécuter du code sans provisionner ni gérer de serveurs. Vous pouvez intégrer votre code et le charger sur Lambda en tant que fonctions Lambda. Lambda exécute une fonction lorsqu'elle est appelée, ce que vous pouvez faire manuellement, ou automatiquement en réponse à des événements. Pour plus d’informations, consultez le Guide du développeur AWS Lambda.

Pour attribuer une fonction Lambda à une campagne, vous devez définir les CampaignHook paramètres de la campagne à l'aide de la ressource Campaign dans Amazon Pinpoint. API Ces paramètres incluent le nom de la fonction Lambda. Sont également définis le mode CampaignHook, qui détermine si Amazon Pinpoint reçoit une valeur renvoyée par la fonction.

Une fonction Lambda attribuée à une campagne est appelée extension Amazon Pinpoint.

Une fois les paramètres CampaignHook définis, Amazon Pinpoint appelle automatiquement la fonction Lambda lorsqu'il exécute la campagne, avant de diffuser le message de la campagne. Lorsqu'il invoque la fonction, Amazon Pinpoint fournit des données d'événement sur la diffusion du message. Ces données incluent le segment de la campagne, qui répertorie les points de terminaison auxquels Amazon Pinpoint envoie le message.

Si le mode CampaignHook est défini sur FILTER, Amazon Pinpoint autorise la fonction à modifier et à renvoyer le segment avant d'envoyer le message. Par exemple, la fonction peut mettre à jour les définitions des points de terminaison avec des attributs qui contiennent des données d'une source externe vers Amazon Pinpoint. La fonction peut également filtrer le segment en supprimant certains points de terminaison, selon les conditions de votre code de fonction. Après avoir reçu le segment modifié de votre fonction, Amazon Pinpoint envoie le message à chacun des points de terminaison du segment en utilisant le canal de livraison de la campagne.

En traitant vos segments avec AWS Lambda, vous pouvez mieux contrôler à qui vous envoyez des messages et leur contenu. Vous pouvez adapter vos campagnes en temps réel, au moment de l'envoi des messages de la campagne. Le filtrage des segments vous permet de définir plus précisément les sous-ensembles de vos segments. L'ajout ou la mise à jour des attributs de points de terminaison permet également de rendre de nouvelles données disponibles pour les variables de messages.

Note

Vous pouvez également utiliser les paramètres CampaignHook pour attribuer une fonction Amazon Pinpoint qui gère la diffusion du message. Ce type de fonction est utile pour diffuser des messages par le biais de canaux personnalisés qu'Amazon Pinpoint ne prend pas en charge, comme les plateformes de réseaux sociaux. Pour de plus amples informations, veuillez consulter Créez une chaîne personnalisée dans Amazon Pinpoint à l'aide d'un webhook ou d'une fonction Lambda.

Lorsque vous invoquez un hook Lambda à l’aide d’Amazon Pinpoint, la fonction Lambda doit également se trouver dans la même région que le projet Amazon Pinpoint.

Pour modifier les segments de campagne avec AWS Lambda, créez d'abord une fonction qui traite les données d'événement envoyées par Amazon Pinpoint et renvoie un segment modifié. Ensuite, autorisez Amazon Pinpoint à invoquer la fonction en affectant une stratégie de fonction Lambda. Pour finir, attribuez la fonction à une ou plusieurs campagnes en définissant les paramètres CampaignHook.

Pour plus d'exemples de code, consultez la section Exemples de code.

Données d’événement

Quand Amazon Pinpoint appelle votre fonction Lambda, la charge applicative suivante est fournie en tant que données d'événement :

{ "MessageConfiguration": {Message configuration} "ApplicationId": ApplicationId, "CampaignId": CampaignId, "TreatmentId": TreatmentId, "ActivityId": ActivityId, "ScheduledTime": Scheduled Time, "Endpoints": { EndpointId: {Endpoint definition} . . . } }

AWS Lambda transmet les données de l'événement à votre code de fonction. Les données d’événements fournissent les attributs suivants :

  • MessageConfiguration— Possède la même structure que l'DirectMessageConfigurationobjet de la ressource Messages dans Amazon PinpointAPI.

  • ApplicationId : ID du projet Amazon Pinpoint auquel la campagne appartient.

  • CampaignId : ID de la campagne Amazon Pinpoint pour laquelle la fonction est invoquée.

  • TreatmentId : ID de la variante de la campagne utilisée pour les tests A/B.

  • ActivityId : ID de l'activité effectuée par la campagne.

  • ScheduledTime— La date et l'heure, au format ISO 8601, auxquelles les messages de la campagne seront livrés.

  • Endpoints— Une carte qui associe un point de terminaison à IDs des définitions de point de terminaison. Chaque charge applicative de données d’événement contient un maximum de 50 points de terminaison. Si le segment de campagne contient plus de 50 points de terminaison, Amazon Pinpoint invoque la fonction à plusieurs reprises, avec un maximum de 50 points de terminaison à la fois, jusqu'à ce que tous les points de terminaison aient été traités.

Création d’une fonction Lambda

Pour savoir comment créer une fonction Lambda, consultez Démarrage dans le Guide du développeur AWS Lambda . Lorsque vous créez votre fonction, n'oubliez pas que la diffusion des messages échoue dans les conditions suivantes :

  • La fonction Lambda a besoin de plus de 15 secondes pour renvoyer le segment modifié.

  • Amazon Pinpoint ne peut pas décoder la valeur de retour de la fonction.

  • La fonction a besoin de plus de trois tentatives d'Amazon Pinpoint pour invoquer la valeur avec succès.

Amazon Pinpoint accepte uniquement les définitions des points de terminaison dans la valeur de retour de la fonction. La fonction ne peut pas modifier d'autres éléments dans les données d'événement.

Exemple de fonction Lambda

Votre fonction Lambda traite les données d'événement envoyées par Amazon Pinpoint et renvoie les points de terminaison modifiés comme indiqué dans l'exemple suivant écrit en Node.js :

'use strict'; exports.handler = (event, context, callback) => { for (var key in event.Endpoints) { if (event.Endpoints.hasOwnProperty(key)) { var endpoint = event.Endpoints[key]; var attr = endpoint.Attributes; if (!attr) { attr = {}; endpoint.Attributes = attr; } attr["CreditScore"] = [ Math.floor(Math.random() * 200) + 650]; } } console.log("Received event:", JSON.stringify(event, null, 2)); callback(null, event.Endpoints); };

Lambda transmet les données d'événement au gestionnaire en tant que paramètre event.

Dans cet exemple, le gestionnaire parcourt chaque point de terminaison de l’objet event.Endpoints et y ajoute un nouvel attribut, CreditScore. La valeur de l’attribut CreditScore est simplement un nombre aléatoire.

La console.log() déclaration enregistre l'événement dans CloudWatch Logs.

L'instruction callback() renvoie les points de terminaison modifiés à Amazon Pinpoint. Généralement, le paramètre callback est facultatif dans les fonctions Lambda écrites en Node.js, mais il est requis dans ce contexte, car la fonction doit renvoyer les points de terminaison mis à jour à Amazon Pinpoint.

Votre fonction doit renvoyer les points de terminaison dans le même format que celui fourni par les données d'événement, à savoir une carte qui associe le point de terminaison IDs aux définitions de points de terminaison, comme dans l'exemple suivant :

{ "eqmj8wpxszeqy/b3vch04sn41yw": { "ChannelType": "GCM", "Address": "4d5e6f1a2b3c4d5e6f7g8h9i0j1a2b3c", "EndpointStatus": "ACTIVE", "OptOut": "NONE", "Demographic": { "Make": "android" }, "EffectiveDate": "2017-11-02T21:26:48.598Z", "User": {} }, "idrexqqtn8sbwfex0ouscod0yto": { "ChannelType": "APNS", "Address": "1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f", "EndpointStatus": "ACTIVE", "OptOut": "NONE", "Demographic": { "Make": "apple" }, "EffectiveDate": "2017-11-02T21:26:48.598Z", "User": {} } }

La fonction de l’exemple modifie et renvoie l’objet event.Endpoints qu’elle a reçu dans les données d’événement.

Vous pouvez également inclure les attributs BodyOverride et TitleOverride dans les définitions des points de terminaison que vous renvoyez.

Note

Lorsque vous utilisez cette solution pour envoyer des messages, Amazon Pinpoint respecte uniquement les attributs TitleOverride et BodyOverride pour les points de terminaison où la valeur de l'attribut ChannelType correspond à l'un des éléments suivants : ADM, APNS, APNS_SANDBOX, APNS_VOIP, APNS_VOIP_SANDBOX, BAIDU, GCM ou SMS.

Amazon Pinpoint ne respecte pas ces attributs pour les points de terminaison dont la valeur de l'attribut ChannelType est EMAIL.

Attribuer une politique de fonction Lambda

Avant de pouvoir utiliser votre fonction Lambda pour traiter vos points de terminaison, vous devez autoriser Amazon Pinpoint à invoquer votre fonction Lambda. Pour accorder l'autorisation d'invocation, attribuez une stratégie de fonction Lambda à la fonction. Une stratégie de fonction Lambda est une stratégie d'autorisations basée sur les ressources qui désigne les entités qui peuvent utiliser votre fonction et les actions que ces entités peuvent effectuer.

Pour plus d'informations, consultez Utilisation des stratégies fondées sur les ressources pour AWS Lambda dans le Guide de l'utilisateur AWS Lambda .

Exemple de stratégie de fonction

La politique suivante autorise le responsable du service Amazon Pinpoint à utiliser l'lambda:InvokeFunctionaction pour une campagne spécifique (campaign-id):

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:account-id:function:function-name}", "Condition": { "StringEquals": { "AWS:SourceAccount": "111122223333" }, "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/campaign-id" } } }

Votre stratégie de fonction exige un bloc Condition qui inclut une clé AWS:SourceArn. Ce code indique la campagne Amazon Pinpoint qui est autorisée à invoquer la fonction. Dans cet exemple, la stratégie accorde l’autorisation à une seule campagne. Le Condition bloc doit également inclure une AWS:SourceAccount clé qui contrôle quel AWS compte peut invoquer l'action.

Pour écrire une stratégie plus générique, utilisez des caractères génériques (*) correspondant à plusieurs caractères. Par exemple, vous pouvez utiliser le Condition bloc suivant pour autoriser n'importe quelle campagne dans le cadre d'un projet Amazon Pinpoint spécifique (application-id) pour appeler la fonction :

... "Condition": { "StringEquals": { "AWS:SourceAccount": "111122223333" }, "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/*" } } ...

Si vous souhaitez que la fonction Lambda soit la fonction par défaut utilisée par toutes les campagnes pour un projet, nous vous recommandons de configurer le bloc Condition pour la stratégie de la manière précédente. Pour plus d'informations sur la définition d'une fonction Lambda comme fonction par défaut pour toutes les campagnes d'un projet, consultez Attribuer une fonction Lambda à une campagne.

Accorder l'autorisation d'invocation à Amazon Pinpoint

Vous pouvez utiliser le AWS Command Line Interface (AWS CLI) pour ajouter des autorisations à la politique de fonction Lambda attribuée à votre fonction Lambda. Pour autoriser Amazon Pinpoint à invoquer une fonction pour une campagne donnée, utilisez la commande Lambda add-permission, comme illustré dans l'exemple suivant :

$ aws lambda add-permission \ > --function-name function-name \ > --statement-id sid \ > --action lambda:InvokeFunction \ > --principal pinpoint.us-east-1.amazonaws.com \ > --source-account 111122223333 > --source-arn arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/campaign-id

Vous pouvez consulter votre campagne à l'aide IDs de la commande get-campaigns dans le. AWS CLI Vous pouvez également rechercher l'ID de votre application à l'aide de la commande get-apps.

Lorsque vous exécutez la commande add-permission de Lambda, celui-ci renvoie le résultat suivant :

{ "Statement": "{\"Sid\":\"sid\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"pinpoint.us-east-1.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:function-name\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:mobiletargeting:us-east-1:111122223333:apps/application-id/campaigns/campaign-id\"}} {\"StringEquals\": {\"AWS:SourceAccount\": \"111122223333\"}}} }

La Statement valeur est une version JSON sous forme de chaîne de l'instruction qui a été ajoutée à la politique de fonction Lambda.

Attribuer une fonction Lambda à une campagne

Vous pouvez attribuer une fonction Lambda à une campagne Amazon Pinpoint. Vous pouvez également définir la fonction Lambda comme fonction utilisée par défaut par toutes les campagnes d'un projet, excepté pour celles auxquelles vous attribuez une fonction individuellement.

Pour attribuer une fonction Lambda à une campagne individuelle, utilisez Amazon API Pinpoint pour créer ou mettre à jour Campaignun objet et définissez son attribut. CampaignHook Pour définir une fonction Lambda par défaut pour toutes les campagnes d'un projet, créez ou mettez à jour la ressource Settings de ce projet et définissez son objet CampaignHook.

Dans les deux cas, définissez les attributs CampaignHook suivants :

  • LambdaFunctionName— Le nom ou ARN la fonction Lambda qu'Amazon Pinpoint invoque avant d'envoyer des messages pour la campagne.

  • Mode – Défini sur FILTER. Avec ce mode, Amazon Pinpoint invoque la fonction et attend qu'elle renvoie les points de terminaison modifiés. Après les avoir reçus, Amazon Pinpoint envoie le message. Amazon Pinpoint patiente jusqu'à 15 secondes avant de déclarer l'échec de la distribution du message.

Une fois les paramètres CampaignHook de la campagne définis, Amazon Pinpoint invoque la fonction Lambda spécifiée avant d'envoyer les messages de la campagne. Amazon Pinpoint attend de recevoir les points de terminaison modifiés de la part de la fonction. Si Amazon Pinpoint reçoit les points de terminaison mis à jour, il procède à la diffusion de message à l'aide des données des points de terminaison mis à jour.