Personalice los segmentos de Amazon Pinpoint mediante una función AWS Lambda - Amazon Pinpoint

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Personalice los segmentos de Amazon Pinpoint mediante una función AWS Lambda

Esta es una documentación preliminar para una característica en versión beta pública. Está sujeta a cambios.

Puede utilizarla AWS Lambda para personalizar la forma en que una campaña de Amazon Pinpoint atrae a su público objetivo. Con AWS Lambda, puede modificar el segmento de la campaña en el momento en que Amazon Pinpoint envía el mensaje de la campaña.

AWS Lambda es un servicio informático que puede utilizar para ejecutar código sin aprovisionar ni administrar servidores. Puede empaquetar el código y cargarlo en Lambda como funciones de Lambda. Lambda ejecuta una función cuando se invoca la función, lo que se podría hacer de forma manual o automática en respuesta a eventos. Para obtener más información, consulte la Guía para desarrolladores de AWS Lambda.

Para asignar una función Lambda a una campaña, defina la CampaignHook configuración de la campaña mediante el recurso Campaign de Amazon Pinpoint. API Entre estos ajustes se incluye el nombre de la función de Lambda. También se incluye el modo CampaignHook, que establece si Amazon Pinpoint recibe un valor de retorno de la función.

Una función de Lambda que asigne a una campaña se conoce como una extensión de Amazon Pinpoint.

Con la configuración de CampaignHook definida, Amazon Pinpoint invoca automáticamente la función de Lambda cuando ejecuta la campaña, antes de enviar el mensaje de la campaña. Cuando Amazon Pinpoint invoca la función, proporciona datos de eventos sobre el envío de mensajes. Estos datos incluyen el segmento de la campaña, que es la lista de puntos de conexión a los que Amazon Pinpoint envía el mensaje.

Si el modo CampaignHook está establecido en FILTER, Amazon Pinpoint permite que la función modifique y devuelva el segmento antes de enviar el mensaje. Por ejemplo, la función podría actualizar las definiciones del punto de conexión con atributos que contienen datos de un origen externo a Amazon Pinpoint. O bien, la función podría filtrar el segmento quitando ciertos puntos de enlace dependiendo de las condiciones del código de la función. Una vez Amazon Pinpoint reciba el segmento modificado de la función, envía el mensaje a cada uno de los puntos de conexión del segmento utilizando el canal de entrega de la campaña.

Al procesar sus segmentos AWS Lambda, tiene más control sobre a quién envía los mensajes y qué contienen esos mensajes. Puede adaptar sus campañas en tiempo real, en el momento en que los mensajes de la campaña se envíen. Filtrar segmentos le permite atraer a subconjuntos de los segmentos definidos más concretamente. Agregar o actualizar los atributos de los puntos de enlace también permite que haya nuevos datos disponibles para las variables de mensajes.

nota

También puede utilizar la configuración de CampaignHook para asignar una función de Lambda que administre la entrega de mensajes. Este tipo de función resulta útil para la entrega de mensajes a través de canales personalizadas que Amazon Pinpoint no admite, como, por ejemplo, las plataformas de redes sociales. Para obtener más información, consulte Cree un canal personalizado en Amazon Pinpoint mediante un webhook o una función Lambda.

Al invocar un enlace de Lambda mediante Amazon Pinpoint, la función de Lambda también debe estar en la misma región que el proyecto de Amazon Pinpoint.

Para modificar los segmentos de la campaña AWS Lambda, cree primero una función que procese los datos de eventos enviados por Amazon Pinpoint y devuelva un segmento modificado. A continuación, autorice a Amazon Pinpoint a invocar la función asignando una política de función de Lambda. Por último, asigne la función a una o varias campañas definiendo configuraciones de CampaignHook.

Para obtener más ejemplos de código, consulte Ejemplos de código.

Datos de evento

Cuando Amazon Pinpoint invoca la función de Lambda, proporciona la siguiente carga como los datos de eventos:

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

AWS Lambda pasa los datos del evento al código de la función. Los datos de eventos proporciona los siguientes atributos:

  • MessageConfiguration— Tiene la misma estructura que el DirectMessageConfiguration objeto del recurso Messages en Amazon PinpointAPI.

  • ApplicationId: el ID del proyecto de Amazon Pinpoint al que pertenece la campaña.

  • CampaignId: el ID de la campaña de Amazon Pinpoint para la que se invocó la función.

  • TreatmentId: el ID de una variación de campaña utilizada para efectuar pruebas A/B.

  • ActivityId: el ID de la actividad que está realizando la campaña.

  • ScheduledTime— La fecha y la hora, en formato ISO 8601, en las que se entregarán los mensajes de la campaña.

  • Endpoints— Un mapa que asocia el punto final IDs con las definiciones del punto final. Cada carga de datos de eventos contiene hasta 50 puntos de enlace. Si el segmento de la campaña contiene más de 50 puntos de conexión, Amazon Pinpoint invoca la función reiteradamente, de 50 en 50 puntos de conexión, hasta que se hayan procesado todos ellos.

Crear una función de Lambda

Para obtener información sobre cómo crear una función de Lambda, consulte Introducción en la Guía para desarrolladores de AWS Lambda . Al crear la función, recuerde que la entrega de mensajes produce un error en las siguientes condiciones:

  • La función de Lambda tarda más de 15 segundos en devolver el segmento modificado.

  • Amazon Pinpoint no puede decodificar el valor de retorno de la función.

  • La función requiere más de 3 intentos de Amazon Pinpoint para invocarla correctamente.

Amazon Pinpoint solo acepta las definiciones de punto de conexión del valor de retorno de la función. La función no puede modificar otros elementos de los datos de eventos.

Ejemplo de función de Lambda

La función de Lambda procesa los datos de eventos enviados por Amazon Pinpoint y devuelve los puntos de conexión modificados, tal y como se muestra en el siguiente controlador de ejemplo, escrito 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 transfiere los datos de eventos al controlador según el parámetro event.

En este ejemplo, el controlador itera mediante cada punto de enlace en el objeto event.Endpoints y añade un nuevo atributo, CreditScore, en el punto de enlace. El valor del atributo CreditScore es simplemente un número aleatorio.

La console.log() declaración registra el evento en CloudWatch los registros.

La instrucción callback() devuelve los puntos de conexión modificados a Amazon Pinpoint. Normalmente, el parámetro callback es opcional en las funciones de Lambda de Node.js, pero es obligatorio en este contexto porque la función debe devolver los puntos de conexión actualizados a Amazon Pinpoint.

La función debe devolver los puntos finales en el mismo formato que proporcionan los datos del evento, es decir, un mapa que asocia los puntos finales IDs con las definiciones de los puntos finales, como en el siguiente ejemplo:

{ "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 función de ejemplo modifica y devuelve el objeto event.Endpoints que recibió en los datos de evento.

Si lo prefiere, puede incluir los atributos BodyOverride y TitleOverride en las definiciones de los puntos de enlace que se devuelven.

nota

Cuando se utiliza esta solución para enviar mensajes, Amazon Pinpoint solo respeta los atributos TitleOverride y BodyOverride de los puntos de conexión cuando el valor del atributo ChannelType es uno de los siguientes: ADM, APNS, APNS_SANDBOX, APNS_VOIP, APNS_VOIP_SANDBOX, BAIDU, GCM o SMS.

Amazon Pinpoint no respeta estos atributos de los puntos de conexión cuando el valor del atributo ChannelType es EMAIL.

Asignar una política de funciones Lambda

Antes de poder utilizar la función de Lambda para procesar los puntos de conexión, debe autorizar a Amazon Pinpoint a invocar la función de Lambda. Para conceder permiso de invocación, asigne una política de función de Lambda a la función. Una política de función de Lambda consiste en una política de permisos basada en el recurso que designa qué entidades pueden usar la función y qué acciones pueden realizar dichas entidades.

Para obtener más información, consulte Uso de políticas basadas en recursos para AWS Lambda en la Guía del desarrollador de AWS Lambda .

Política de función de ejemplo

La siguiente política otorga permiso al director del servicio Amazon Pinpoint para usar la lambda:InvokeFunction acción en una campaña específica (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" } } }

La política de función requiere un bloque Condition que incluye una clave AWS:SourceArn. Este código indica qué campaña de Amazon Pinpoint tiene permitido invocar la función. En este ejemplo, la política concede permiso solo a una única campaña. El Condition bloqueo también debe incluir una AWS:SourceAccount clave que controle qué AWS cuenta puede invocar la acción.

Para escribir una política más genérica, use caracteres comodín (*) que sustituyan a varios caracteres. Por ejemplo, puede usar el siguiente Condition bloque para permitir cualquier campaña en un proyecto específico de Amazon Pinpoint (application-id) para invocar la función:

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

Si desea que la función de Lambda sea la función predeterminada que utilizan todas las campañas de un proyecto, le recomendamos que configure el bloque Condition para la política de la forma anterior. Para obtener información sobre la configuración de una función de Lambda como predeterminada para todas las campañas de un proyecto, consulte Asignar una función Lambda a una campaña.

Conceder el permiso de invocación a Amazon Pinpoint

Puede usar AWS Command Line Interface (AWS CLI) para añadir permisos a la política de funciones de Lambda asignada a su función de Lambda. Para permitir que Amazon Pinpoint invoque una función para una campaña específica, use el comando add-permission de Lambda, como se muestra en el siguiente ejemplo:

$ 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

Puedes buscar tu campaña IDs mediante el comando get-campaigns de. AWS CLI También puede buscar el ID de la aplicación mediante el comando get-apps.

Cuando ejecuta el comando add-permission de Lambda, Lambda devuelve la siguiente salida:

{ "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\"}}} }

El Statement valor es una versión en JSON cadena de la sentencia que se agregó a la política de funciones de Lambda.

Asignar una función Lambda a una campaña

Puede asignar una función de Lambda a una campaña de Amazon Pinpoint individual. O bien, puede configurar la función de Lambda como la predeterminada que utilizan todas las campañas de un proyecto, excepto en el caso de las campañas a las que se le asigne una función de manera individual.

Para asignar una función Lambda a una campaña individual, utilice Amazon API Pinpoint para crear o actualizar Campaignun objeto y definir su atributo. CampaignHook Para establecer una función de Lambda como la predeterminada de todas las campañas de un proyecto, cree o actualice el recurso Settings de ese proyecto y defina su objeto CampaignHook.

En ambos casos, establezca los siguientes atributos CampaignHook:

  • LambdaFunctionName— El nombre o ARN la función Lambda que Amazon Pinpoint invoca antes de enviar los mensajes de la campaña.

  • Mode: se establece en FILTER. Con este modo, Amazon Pinpoint invoca la función y espera a que devuelva los puntos de conexión modificados. Tras recibirlos, Amazon Pinpoint envía el mensaje. Amazon Pinpoint espera hasta 15 segundos antes de que se produzca un error en el envío del mensaje.

Con la configuración de CampaignHook definida para una campaña, Amazon Pinpoint invoca la función de Lambda especificada antes de enviar los mensajes de la campaña. Amazon Pinpoint espera a recibir los puntos de conexión modificados de la función. Si Amazon Pinpoint recibe los puntos de conexión actualizados, continúa con el envío de mensajes, mediante los datos de punto de conexión actualizados.