Personalizzazione dei suggerimenti con AWS Lambda - Amazon Pinpoint

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Personalizzazione dei suggerimenti con AWS Lambda

In Amazon Pinpoint, puoi recuperare le raccomandazioni personalizzate da un modello di raccomandazione e aggiungerle ai messaggi inviati da campagne e percorsi. Un modello della funzione di suggerimento è un tipo di modello di machine learning (ML) che individua pattern nei dati e genera previsioni e suggerimenti in base ai pattern individuati. Predice ciò che un particolare utente preferirà da un determinato set di prodotti o articoli, e fornisce tali informazioni come una serie di suggerimenti per l'utente.

Utilizzando i modelli di raccomandazione con Amazon Pinpoint, puoi inviare raccomandazioni personalizzate ai destinatari dei messaggi in base agli attributi e al comportamento di ciascun destinatario. Con AWS Lambda, puoi anche personalizzare e migliorare questi suggerimenti. Ad esempio, puoi trasformare dinamicamente un suggerimento da un singolo valore di testo (ad esempio un nome prodotto o un ID) a contenuti più sofisticati (ad esempio un nome prodotto, una descrizione e un'immagine). Puoi inoltre farlo in tempo reale, quando Amazon Pinpoint invia il messaggio.

Questa funzionalità è disponibile nelle regioni AWS seguenti: Stati Uniti orientali (Virginia settentrionale), Stati Uniti occidentali (Oregon), Asia Pacifico (Mumbai), Asia Pacifico (Sydney) ed Europa (Irlanda).

Utilizzo dei suggerimenti nei messaggi

Per utilizzare un modello di raccomandazione con Amazon Pinpoint, crea una soluzione Amazon Personalize e quindi implementala come campagna Amazon Personalize. Quindi, puoi creare una configurazione per il modello di raccomandazione in Amazon Pinpoint. Nella configurazione è necessario specificare le impostazioni che determinano come recuperare ed elaborare i dati relativi alle raccomandazioni dalla campagna Amazon Personalize. Ciò include se invocare o meno una funzione AWS Lambda per eseguire un'ulteriore elaborazione dei dati recuperati.

Amazon Personalize è un servizio AWS progettato per aiutarti a creare modelli di machine learning che forniscono raccomandazioni personalizzate in tempo reale per i clienti che utilizzano le tue applicazioni. Grazie a procedure semplificate, Amazon Personalize supporta l'utente nel processo di creazione e addestramento di un modello di machine learning, quindi nella preparazione e implementazione del modello come campagna Amazon Personalize. Puoi quindi recuperare i suggerimenti personalizzati in tempo reale dalla campagna. Per ulteriori informazioni su Amazon Personalize, consulta la Guida per gli sviluppatori di Amazon Personalize.

AWS Lambda è un servizio di calcolo che consente di eseguire il codice senza gestire i server o effettuarne il provisioning. Devi pacchettizzare il tuo codice e caricarlo su AWS Lambda come funzione Lambda. Quindi AWS Lambda esegue la funzione quando questa viene richiamata. Puoi richiamare una funzione manualmente, come risposta automatica agli eventi o in risposta a richieste provenienti da applicazioni o servizi, compreso Amazon Pinpoint. Per ulteriori informazioni su come creare e richiamare le funzioni Lambda, consulta Guida per gli sviluppatori di AWS Lambda.

Dopo aver creato una configurazione Amazon Pinpoint per un modello di raccomandazione, puoi aggiungere raccomandazioni dal modello ai messaggi inviati da campagne e percorsi. Puoi eseguire questa operazione utilizzando i modelli di messaggio che contengono variabili di messaggio per gli attributi suggeriti. Un attributo suggerito è un endpoint dinamico o un attributo utente progettato per memorizzare i dati dei suggerimenti. Puoi definire questi attributi crei la configurazione per un modello della funzione di suggerimento.

Puoi utilizzare le variabili per gli attributi suggeriti nei seguenti tipi di modelli di messaggio:

  • Modelli di posta elettronica, per i messaggi di posta elettronica inviati da campagne o viaggi.

  • Modelli di notifica push, per le notifiche push inviate dalle campagne.

  • Modelli SMS, per messaggi di testo SMS inviati da campagne.

Per ulteriori informazioni sull'utilizzo dei modelli di raccomandazione con Amazon Pinpoint, consulta Modelli di machine learning nella Guida per l'utente di Amazon Pinpoint.

Se configuri Amazon Pinpoint per richiamare una funzione Lambda che elabora i dati delle raccomandazioni, Amazon Pinpoint esegue le seguenti attività generali ogni volta che invia raccomandazioni personalizzate in un messaggio per una campagna o un percorso:

  1. Valuta ed elabora le impostazioni di configurazione e il contenuto del messaggio e del modello di messaggio.

  2. Determina che il modello di messaggio è connesso a un modello della funzione di suggerimento.

  3. Valuta le impostazioni di configurazione per la connessione e l'utilizzo del modello. Queste impostazioni sono definite dalla risorsa del Modello della funzione di suggerimento per il modello.

  4. Rileva una o più variabili di messaggio per gli attributi suggeriti definiti dalle impostazioni di configurazione per il modello.

  5. Recupera i dati delle raccomandazioni dalla campagna Amazon Personalize specificata nelle impostazioni di configurazione per il modello. Utilizza l'operazione GetRecommendations dell'API runtime Amazon Personalize per eseguire questa attività.

  6. Aggiunge i dati suggeriti appropriati a un attributo dinamico suggerito (RecommendationItems) per ogni destinatario del messaggio.

  7. Richiama la funzione Lambda e invia i dati delle raccomandazioni per ciascun destinatario a tale funzione per l'elaborazione.

    I dati vengono inviati come oggetto JSON che contiene la definizione dell'endpoint per ogni destinatario. Ogni definizione di endpoint include un campo RecommendationItems contenente un array ordinato contenente da 1 a 5 valori. Il numero di valori nella matrice dipende dalle impostazioni di configurazione del modello.

  8. Attende che la funzione Lambda elabori i dati e restituisca i risultati.

    I risultati consistono in un oggetto JSON che contiene una definizione dell’endpoint aggiornata per ogni destinatario. Ogni definizione dell’endpoint aggiornata contiene un nuovo oggetto Recommendations. Questo oggetto contiene da 1 a 10 campi, uno per ogni attributo consigliato personalizzato definito nelle impostazioni di configurazione per il modello. Ciascuno di questi campi memorizza dati dei suggerimenti avanzati per l'endpoint.

  9. Utilizza la definizione dell'endpoint aggiornata per ciascun destinatario per sostituire ogni variabile di messaggio con il valore appropriato per tale destinatario.

  10. Invia una versione del messaggio contenente i suggerimenti personalizzati per ciascun destinatario del messaggio.

Per personalizzare e migliorare le raccomandazioni in questo modo, crea una funzione Lambda che elabori le definizioni di endpoint inviate da Amazon Pinpoint e restituisca le definizioni aggiornate. Quindi, assegna una policy di funzione Lambda alla funzione e autorizza Amazon Pinpoint a richiamare la funzione. Quindi, configura il modello di raccomandazione in Amazon Pinpoint. Quando configuri il modello, specifica la funzione da richiamare e definisci gli attributi suggeriti da utilizzare.

Creazione di una funzione Lambda

Per informazioni su come creare una funzione Lambda, consulta Guida introduttiva nella Guida per gli sviluppatori di AWS Lambda. Quando progetti e sviluppi la tua funzione, tiene a mente i requisiti e le linee guida seguenti.

Dati dell’evento di input

Quando Amazon Pinpoint richiama una funzione Lambda per un modello di raccomandazione, invia un payload contenente la configurazione e altre impostazioni per la campagna o il percorso di invio del messaggio. Il payload include un oggetto Endpoints, ovvero una mappa che associa gli ID endpoint alle definizioni degli endpoint per i destinatari dei messaggi.

Le definizioni di endpoint utilizzano la struttura definita dalla risorsa Endpoint dell'API Amazon Pinpoint. Tuttavia, includono anche un campo per un attributo dinamico suggerito denominato RecommendationItems. Il campo RecommendationItems contiene uno o più elementi suggeriti per l'endpoint, come restituiti dalla campagna Amazon Personalize. Il valore di questo campo è un array ordinato contenente da 1 a 5 elementi suggeriti (come stringhe). Il numero di elementi nell'array dipende dal numero di elementi suggeriti configurati per il recupero da parte di Amazon Pinpoint per ciascun endpoint o utente.

Ad esempio:

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

Nell'esempio precedente, le impostazioni Amazon Pinpoint pertinenti sono:

  • Il modello della funzione di suggerimento è configurato per recuperare tre elementi suggeriti per ogni endpoint o utente. (Il valore della proprietà RecommendationsPerMessage è impostato su 3.) Con questa impostazione, Amazon Pinpoint recupera e aggiunge solo i primi, secondi e terzi elementi suggeriti per ogni endpoint o utente.

  • Il progetto è configurato per utilizzare attributi utente personalizzati che memorizzano il nome, il cognome e il quartiere in cui vive ogni utente. (L'oggetto UserAttributes contiene i valori per questi attributi.)

  • Il progetto è configurato per utilizzare un attributo endpoint personalizzato (AddressType) che indica se l'endpoint è l'indirizzo (canale) preferito dall'utente per ricevere messaggi dal progetto. (L'oggetto Attributes contiene il valore per questo attributo.)

Quando Amazon Pinpoint richiama la funzione Lambda e invia il payload come dati dell'evento, AWS Lambda passa i dati alla funzione Lambda per l'elaborazione.

Ogni payload può contenere dati per un massimo di 50 endpoint. Se un segmento contiene più di 50 endpoint, Amazon Pinpoint richiama la funzione ripetutamente, per un massimo di 50 endpoint alla volta, finché non vengono elaborati tutti i dati.

Dati e requisiti di risposta

Quando progetti e sviluppi la funzione Lambda, considera le quote per i modelli di machine learning. Se la funzione non soddisfa le condizioni definite da queste quote, Amazon Pinpoint non sarà in grado di elaborare e inviare il messaggio.

Tieni a mente anche i seguenti requisiti:

  • La funzione deve restituire le definizioni degli endpoint aggiornate nello stesso formato fornito dai dati degli eventi di input.

  • Ogni definizione di endpoint aggiornata può contenere da 1 a 10 attributi consigliati personalizzati per l'endpoint o l'utente. I nomi di questi attributi devono corrispondere ai nomi degli attributi specificati quando configuri il modello di raccomandazione in Amazon Pinpoint.

  • Tutti gli attributi suggeriti personalizzati devono essere restituiti in un singolo oggetto Recommendations per ogni endpoint o utente. Questo requisito consente di garantire che i conflitti di denominazione non si verifichino. Puoi aggiungere l'oggetto Recommendations in qualsiasi posizione in una definizione di endpoint.

  • Il valore per ogni attributo suggerito personalizzato deve essere una stringa (valore singolo) o una matrice di stringhe (valori multipli). Se il valore è un array di stringhe, è consigliabile mantenere l'ordine degli elementi suggeriti restituiti da Amazon Personalize, come indicato nel campo RecommendationItems. In caso contrario, il contenuto potrebbe non riflettere le previsioni del modello per un endpoint o un utente.

  • La funzione non deve modificare altri elementi nei dati dell'evento, inclusi altri valori di attributo per un endpoint o un utente. Deve aggiungere e restituire solo valori per gli attributi consigliati personalizzati. Amazon Pinpoint non accetterà aggiornamenti a nessun altro valore nella risposta della funzione.

  • La funzione deve essere ospitata nella stessa regione AWS del progetto Amazon Pinpoint che richiama la funzione. Se la funzione e il progetto non si trovano nella stessa regione, Amazon Pinpoint non è in grado di inviare i dati degli eventi alla funzione.

Se uno dei requisiti precedenti non viene soddisfatto, Amazon Pinpoint non sarà in grado di elaborare e inviare il messaggio a uno o più endpoint. Ciò potrebbe causare un fallimento di una campagna o di un'attività di viaggio.

Infine, si consiglia di riservare 256 esecuzioni simultanee per la funzione.

Nel complesso, la funzione Lambda deve elaborare i dati degli eventi inviati da Amazon Pinpoint e restituire le definizioni di endpoint modificate. È possibile eseguire questa operazione mediante l'iterazione di ciascun endpoint nell'oggetto Endpoints e, per ogni endpoint, creando e impostando valori per gli attributi suggeriti personalizzati che si desidera utilizzare. Il seguente handler di esempio, scritto in Python e che prosegue l'esempio precedente di dati degli eventi di input, mostra quanto segue:

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

Nell'esempio precedente, AWS Lambda passa i dati dell'evento all’handler come parametro event. L’handler esegue l'iterazione di ciascun endpoint nell'oggetto Endpoints e imposta i valori per gli attributi suggeriti personalizzati denominati Recommendations.Title e Recommendations.Genre. L'istruzione return restituisce ogni definizione di endpoint aggiornata ad Amazon Pinpoint.

Continuando con l'esempio precedente di dati degli eventi di input, le definizioni degli endpoint aggiornati sono:

"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" ] } } }

Nell'esempio precedente, la funzione ha modificato l'oggetto Endpoints ricevuto e restituito i risultati. L'oggetto Endpoint per ogni endpoint ora contiene un nuovo oggetto Recommendations, che contiene i campi Title e Genre. Ciascuno di questi campi memorizza una matrice ordinata di tre valori (come stringhe), in cui ogni valore fornisce contenuto migliorato per un elemento suggerito corrispondente nel campo RecommendationItems.

Assegnazione di una policy di funzione Lambda

Prima di poter utilizzare la funzione Lambda per elaborare i dati delle raccomandazioni, devi autorizzare Amazon Pinpoint a richiamare la funzione. Per concedere l'autorizzazione per l'invocazione, assegna una policy di funzione Lambda alla funzione. Una policy di funzione Lambda è una policy di autorizzazione basata su risorse che designa le entità che possono utilizzare la funzione e le azioni che tali entità possono eseguire. Per ulteriori informazioni, consulta Uso delle policy basate sulle risorse per AWS Lambda nella Guida per gli sviluppatori di AWS Lambda.

La policy di esempio seguente consente al principale del servizio Amazon Pinpoint di utilizzare l'azione lambda:InvokeFunction per una particolare campagna Amazon Pinpoint (campaignId) in un particolare progetto Amazon Pinpoint (projectId):

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:accountId:function:function-name}", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*" } } }

La policy di funzione richiede un blocco Condition che includa una chiave AWS:SourceArn. Questa chiave specifica quale risorsa può invocare la funzione. Nell'esempio precedente, la policy consente a una particolare campagna di richiamare la funzione.

Puoi anche scrivere una policy che consenta al principale del servizio Amazon Pinpoint di utilizzare l'azione lambda:InvokeFunction per tutte le campagne e tutti i percorsi in un progetto Amazon Pinpoint specifico (projectId). Di seguito viene illustrato un esempio di policy che mostra questo approccio:

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:accountId:function:function-name}", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*" } } }

A differenza del primo esempio, la chiave AWS:SourceArn nel blocco Condition di questo esempio consente a un particolare progetto di invocare la funzione. Questa autorizzazione si applica a tutte le campagne e viaggi nel progetto.

Per scrivere una policy più generica, puoi utilizzare un carattere jolly di corrispondenza con più caratteri (*). Ad esempio, puoi utilizzare il seguente blocco Condition per consentire a qualsiasi progetto Amazon Pinpoint di richiamare la funzione:

"Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*" } }

Se desideri utilizzare la funzione Lambda con tutti i progetti per l'account Amazon Pinpoint, è consigliabile configurare il blocco Condition della policy come indicato in precedenza. Tuttavia, come procedura consigliata, dovresti creare policy che includano solo le autorizzazioni necessarie per eseguire un'operazione specifica su una risorsa specifica.

Autorizzazione di Amazon Pinpoint a richiamare la funzione

Dopo aver assegnato una policy di funzione Lambda alla funzione, puoi aggiungere autorizzazioni che consentono ad Amazon Pinpoint di richiamare la funzione per un progetto, una campagna o un percorso specifico. A tale scopo, utilizza la AWS Command Line Interface (AWS CLI) e il comando Lambda add-permission. L'esempio seguente mostra come eseguire questa operazione per un progetto specifico (projectId):

$ aws lambda add-permission \ --function-name function-name \ --statement-id sid \ --action lambda:InvokeFunction \ --principal pinpoint.us-east-1.amazonaws.com \ --source-arn arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*

L'esempio precedente è formattato per Unix, Linux e macOS. Per Microsoft Windows, sostituire il carattere di continuazione della riga (\) con un accento circonflesso (^).

Se il comando viene eseguito correttamente, verrà visualizzato un output simile al seguente:

{ "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:recommenders/*\"}}}" }

Il valore di Statement è una versione in formato stringa JSON dell'istruzione aggiunta alla policy della funzione Lambda.

Configurazione del modello della funzione di suggerimento

Per configurare Amazon Pinpoint per richiamare la funzione Lambda per un modello di raccomandazione, specifica le seguenti impostazioni di configurazione specifiche di Lambda per il modello:

  • RecommendationTransformerUri: questa proprietà specifica il nome o il nome della risorsa Amazon (ARN) della funzione Lambda.

  • Attributes: questo oggetto è una mappa che definisce gli attributi consigliati personalizzati che la funzione aggiunge a ciascuna definizione di endpoint. Ciascuno di questi attributi può essere utilizzato come variabile di messaggio in un modello di messaggio.

Puoi specificare queste impostazioni utilizzando la risorsa Modelli di raccomandazione dell'API Amazon Pinpoint (quando crei la configurazione per un modello) o la risorsa Modello di raccomandazione dell'API Amazon Pinpoint (se aggiorni la configurazione per un modello). Puoi inoltre definire queste impostazioni utilizzando la console Amazon Pinpoint.

Per ulteriori informazioni sull'utilizzo dei modelli di raccomandazione con Amazon Pinpoint, consulta Modelli di machine learning nella Guida per l'utente di Amazon Pinpoint.