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à.
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 Endpoints
oggetto, che è una mappa che associa l'endpoint alle definizioni degli endpoint IDs per i destinatari dei messaggi.
Le definizioni degli endpoint utilizzano la struttura definita dalla risorsa Endpoint di Amazon Pinpoint. API 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.
Per 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 su3
.) 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'oggettoAttributes
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'oggettoRecommendations
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 AWS regione 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 al gestore 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
.