Criar uma função do Lambda para o Amazon Pinpoint invocar para um modelo de recomendação - Amazon Pinpoint

Aviso de fim do suporte: em 30 de outubro de 2026, AWS encerrará o suporte para o Amazon Pinpoint. Após 30 de outubro de 2026, você não poderá mais acessar o console do Amazon Pinpoint nem seus recursos (endpoints, segmentos, campanhas, jornadas e analytics). Para obter mais informações, consulte Fim do suporte do Amazon Pinpoint. Observação: APIs relacionados a SMS, voz, push móvel, OTP e validação de número de telefone não são afetados por essa alteração e são compatíveis com o AWS End User Messaging.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Criar uma função do Lambda para o Amazon Pinpoint invocar para um modelo de recomendação

Para saber como criar uma função do Lambda, consulte Conceitos básicos no Guia do desenvolvedor do AWS Lambda. Ao projetar e desenvolver sua função, lembre-se dos seguintes requisitos e diretrizes.

Dados de evento de entrada

Quando o Amazon Pinpoint invoca uma função do Lambda para um modelo de recomendação, ele envia uma carga que contém a configuração e outras definições da campanha ou jornada que está enviando a mensagem. A carga útil inclui um objeto Endpoints, que é um mapa que associa IDs de endpoint a definições de endpoint para os destinatários de mensagem.

As definições de endpoint usam a estrutura definida pelo recurso Endpoint da API do Amazon Pinpoint. No entanto, elas também incluem um campo para um atributo recomendado dinâmico chamado RecommendationItems. O campo RecommendationItems contém um ou mais itens recomendados para o endpoint, conforme retornado pela campanha do Amazon Personalize. O valor desse campo é uma matriz ordenada de 1 a 5 itens recomendados (como cadeias de caracteres). O número de itens na matriz depende do número de itens recomendados que você configurou o Amazon Pinpoint para recuperar para cada endpoint ou usuário.

Por exemplo:

"Endpoints": { "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z" }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z" } }

No exemplo anterior, as configurações relevantes do Amazon Pinpoint são:

  • O modelo de recomendação é configurado para recuperar três itens recomendados para cada endpoint ou usuário. (O valor da propriedade RecommendationsPerMessage é definido como 3.) Com essa configuração, o Amazon Pinpoint recupera e adiciona apenas o primeiro, o segundo e o terceiro item recomendado para cada endpoint ou usuário.

  • O projeto está configurado para usar atributos de usuário personalizados que armazenam o nome, o sobrenome e a região em que vivem. (O objeto UserAttributes contém os valores desses atributos.)

  • O projeto está configurado para usar um atributo de endpoint personalizado (AddressType) que indica se o endpoint é o endereço preferido do usuário (canal) para receber mensagens do projeto. (O objeto Attributes contém o valor desse atributo.)

Quando o Amazon Pinpoint invoca a função do Lambda e envia essa carga útil como os dados do evento, o AWS Lambda passa os dados para a função do Lambda para processamento.

Cada carga pode conter dados para até 50 endpoints. Se um segmento contiver mais de 50 endpoints, o Amazon Pinpoint invocará a função repetidamente, para até 50 endpoints de cada vez, até que a função processe todos os dados.

Dados e requisitos de resposta

Ao projetar e desenvolver sua função do Lambda, lembre-se das cotas de modelos de machine learning. Se a função não atender às condições definidas por essas cotas, o Amazon Pinpoint não poderá processar e enviar a mensagem.

Lembre-se também dos seguintes requisitos:

  • A função deve retornar definições de endpoint atualizadas no mesmo formato fornecido pelos dados do evento de entrada.

  • Cada definição de endpoint atualizada pode conter de 1 a 10 atributos personalizados recomendados para o endpoint ou usuário. Os nomes desses atributos devem corresponder aos nomes de atributos especificados ao configurar o modelo de recomendação no Amazon Pinpoint.

  • Todos os atributos recomendados personalizados devem ser retornados em um único objeto Recommendations para cada endpoint ou usuário. Esse requisito ajuda a garantir que não ocorram conflitos de nomenclatura. Você pode adicionar o objeto Recommendations a qualquer local em uma definição de endpoint.

  • O valor de cada atributo recomendado personalizado precisa ser uma string (valor único) ou uma matriz de strings (vários valores). Se o valor for uma matriz de cadeia de caracteres, recomendamos manter a ordem dos itens recomendados retornados pelo Amazon Personalize, conforme indicado no campo RecommendationItems. Caso contrário, seu conteúdo pode não refletir as previsões do modelo para um endpoint ou usuário.

  • A função não deve modificar outros elementos nos dados do evento, incluindo outros valores de atributos para um endpoint ou usuário. Ele só deve adicionar e retornar valores para atributos personalizados recomendados. O Amazon Pinpoint não aceitará atualizações em nenhum outro valor na resposta da função.

  • A função deve ser hospedada na mesma Região da AWS que o projeto do Amazon Pinpoint que está invocando a função. Se a função e o projeto não estiverem na mesma Região, o Amazon Pinpoint não poderá enviar dados de evento para a função.

Se qualquer um dos requisitos anteriores não for atendido, o Amazon Pinpoint não poderá processar e enviar a mensagem para um ou mais endpoints. Isso pode fazer com que uma atividade de campanha ou de jornada falhe.

Finalmente, recomendamos reservar 256 execuções simultâneas para a função.

No geral, a função do Lambda deve processar os dados de evento enviados pelo Amazon Pinpoint e retornar definições de endpoint modificadas. Ela pode fazer isso percorrendo cada endpoint no objeto Endpoints e, para cada endpoint, criando e definindo valores para os atributos recomendados personalizados que você deseja usar. O manipulador de exemplo a seguir, escrito em Python e continuando com o exemplo anterior de dados de evento de entrada, mostra o seguinte:

import json import string def lambda_handler(event, context): print("Received event: " + json.dumps(event)) print("Received context: " + str(context)) segment_endpoints = event["Endpoints"] new_segment = dict() for endpoint_id in segment_endpoints.keys(): endpoint = segment_endpoints[endpoint_id] if supported_endpoint(endpoint): new_segment[endpoint_id] = add_recommendation(endpoint) print("Returning endpoints: " + json.dumps(new_segment)) return new_segment def supported_endpoint(endpoint): return True def add_recommendation(endpoint): endpoint["Recommendations"] = dict() customTitleList = list() customGenreList = list() for i,item in enumerate(endpoint["RecommendationItems"]): item = int(item) if item == 1210: customTitleList.insert(i, "Hanna") customGenreList.insert(i, "Action") elif item == 1527: customTitleList.insert(i, "Catastrophe") customGenreList.insert(i, "Comedy") elif item == 1815: customTitleList.insert(i, "Fleabag") customGenreList.insert(i, "Comedy") elif item == 2009: customTitleList.insert(i, "Late Night") customGenreList.insert(i, "Drama") elif item == 4582: customTitleList.insert(i, "Agatha Christie\'s The ABC Murders") customGenreList.insert(i, "Crime") elif item == 6542: customTitleList.insert(i, "Hunters") customGenreList.insert(i, "Drama") endpoint["Recommendations"]["Title"] = customTitleList endpoint["Recommendations"]["Genre"] = customGenreList return endpoint

No exemplo anterior, o AWS Lambda passa os dados do evento para o manipulador como o parâmetro event. O manipulador percorre cada endpoint no objeto Endpoints e define valores para os atributos recomendados personalizados nomeados Recommendations.Title e Recommendations.Genre. A instrução return retorna cada definição de endpoint atualizada para o Amazon Pinpoint.

Continuando com o exemplo anterior de dados de evento de entrada, as definições de endpoint atualizadas são:

"Endpoints":{ "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z", "Recommendations":{ "Title":[ "Fleabag", "Late Night", "Catastrophe" ], "Genre":[ "Comedy", "Comedy", "Comedy" ] } }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z", "Recommendations":{ "Title":[ "Hanna", "Hunters", "Agatha Christie\'s The ABC Murders" ], "Genre":[ "Action", "Drama", "Crime" ] } } }

No exemplo anterior, a função modificou o objeto Endpoints que recebeu e retornou os resultados. O objeto Endpoint de cada endpoint agora contém um novo objeto Recommendations que contém os campos Title e Genre. Cada um desses campos armazena uma matriz ordenada de três valores (como strings), onde cada valor fornece conteúdo aprimorado para um item recomendado correspondente no campo RecommendationItems.