Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Passen Sie Amazon Pinpoint-Segmente mithilfe einer Funktion an AWS Lambda
Dies ist die Vorabdokumentation eines Features, das als öffentliche Beta-Version vorliegt. Änderungen sind vorbehalten. |
Sie können AWS Lambda damit individuell anpassen, wie eine Amazon Pinpoint Pinpoint-Kampagne Ihre Zielgruppe anspricht. Mit AWS Lambda können Sie das Kampagnensegment in dem Moment ändern, in dem Amazon Pinpoint die Botschaft der Kampagne sendet.
AWS Lambda ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Sie packen Ihren Code und laden ihn als Lambda-Funktionen in Lambda hoch. Lambda führt eine Funktion aus, wenn die Funktion ausgerufen wird, was manuell durch Sie oder automatisch als Reaktion auf Ereignisse passieren kann. Weitere Informationen finden Sie im AWS Lambda -Entwicklerhandbuch.
Um einer Kampagne eine Lambda-Funktion zuzuweisen, definieren Sie die CampaignHook
Kampagneneinstellungen mithilfe der Kampagnenressource in Amazon API Pinpoint. Diese Einstellungen schließen den Namen der Lambda-Funktion ein. Sie schließen auch den CampaignHook
-Modus ein, der festlegt, ob Amazon Pinpoint einen Rückgabewert aus der Funktion erhält.
Eine Lambda-Funktion, die Sie einer Kampagne zuweisen, wird als Amazon-Pinpoint-Erweiterung bezeichnet.
Mit den definierten CampaignHook
-Einstellungen ruft Amazon Pinpoint automatisch die Lambda-Funktion auf, wenn die Kampagne ausgeführt wird, bevor die Nachricht der Kampagne gesendet wird. Wenn Amazon Pinpoint die Funktion aufruft, stellt es Ereignisdaten über die Nachrichtenzustellung bereit. Diese Daten schließen das Kampagnensegment ein. Dies ist die Liste der Endpunkte, an die Amazon Pinpoint die Nachricht sendet.
Wenn der CampaignHook
-Modus auf FILTER
gesetzt ist, gestattet Amazon Pinpoint der Funktion, das Segment zu ändern und zurückzugeben, bevor die Nachricht gesendet wird. Beispielsweise könnte die Funktion die Endpunktdefinitionen mit Attributen aktualisieren, die Daten aus einer Quelle außerhalb von Amazon Pinpoint enthalten. Die Funktion könnte das Segment auch filtern, indem bestimmte Endpunkte abhängig von den Bedingungen in Ihrem Funktionscode entfernt werden. Nachdem Amazon Pinpoint das geänderte Segment aus Ihrer Funktion erhalten hat, sendet es die Nachricht an alle Endpunkte des Segments unter Verwendung des Bereitstellungskanals der Kampagne.
Indem Sie Ihre Segmente mit verarbeiten AWS Lambda, haben Sie mehr Kontrolle darüber, an wen Sie Nachrichten senden und was diese Nachrichten enthalten. Sie können Ihre Kampagnen in Echtzeit anpassen, wenn die Nachrichten der Kampagne Nachrichten gesendet werden. Das Filtern von Segmenten ermöglicht Ihnen, präziser definierte Untergruppen Ihrer Segmente anzusprechen. Das Hinzufügen oder Aktualisieren von Endpunkt-Attributen ermöglicht Ihnen, neue Daten für Nachrichtenvariablen bereitzustellen.
Anmerkung
Sie können auch die CampaignHook
-Einstellungen verwenden, um eine Lambda-Funktion zuzuweisen, die die Nachrichtenzustellung verarbeitet. Diese Art Funktion ist nützlich, wenn Nachrichten über benutzerdefinierte Kanäle zugestellt werden sollen, die Amazon Pinpoint nicht unterstützt, z. B. Social Media-Plattformen. Weitere Informationen finden Sie unter Erstellen Sie einen benutzerdefinierten Kanal in Amazon Pinpoint mithilfe einer Webhook- oder Lambda-Funktion.
Wenn Sie einen Lambda-Hook mit Amazon Pinpoint aufrufen, muss sich die Lambda-Funktion auch in derselben Region wie das Amazon-Pinpoint-Projekt befinden.
Um Kampagnensegmente mit zu ändern AWS Lambda, erstellen Sie zunächst eine Funktion, die die von Amazon Pinpoint gesendeten Eventdaten verarbeitet und ein modifiziertes Segment zurückgibt. Anschließend autorisieren Sie Amazon Pinpoint, die Funktion aufzurufen, indem Sie eine Lambda-Funktionsrichtlinie zuweisen. Schließlich weisen Sie der Funktion eine oder mehrere Kampagnen zu, indem Sie die CampaignHook
-Einstellungen definieren.
Weitere Codebeispiele finden Sie unter Codebeispiele.
Ereignisdaten
Wenn Amazon Pinpoint Ihre Lambda-Funktion aufruft, stellt es die folgende Nutzlast als Ereignisdaten bereit:
{ "MessageConfiguration": {
Message configuration
} "ApplicationId":ApplicationId
, "CampaignId":CampaignId
, "TreatmentId":TreatmentId
, "ActivityId":ActivityId
, "ScheduledTime":Scheduled Time
, "Endpoints": {EndpointId
: {Endpoint definition
} . . . } }
AWS Lambda übergibt die Ereignisdaten an Ihren Funktionscode. Die Ereignisdaten stellen die folgenden Attribute bereit:
-
MessageConfiguration
— Hat dieselbe Struktur wie dasDirectMessageConfiguration
Objekt der Nachrichtenressource in Amazon PinpointAPI. -
ApplicationId
: Die ID des Amazon-Pinpoint-Projekts, zu dem die Kampagne gehört. -
CampaignId
: Die ID der Amazon-Pinpoint-Kampagne, für die die Funktion aufgerufen wurde. -
TreatmentId
: Die ID einer Kampagnenvariante, die für A/B-Tests verwendet wird. -
ActivityId
: Die ID der Aktivität, die von der Kampagne ausgeführt wird. -
ScheduledTime
— Datum und Uhrzeit im Format ISO 8601, an dem die Nachrichten der Kampagne zugestellt werden. -
Endpoints
— Eine Karte, die Endpunkte Endpunktdefinitionen IDs zuordnet. Jede Ereignisdaten-Nutzlast enthält bis zu 50 Endpunkte. Wenn das Kampagnensegment mehr als 50 Endpunkte enthält, ruft Amazon Pinpoint die Funktion wiederholt mit bis zu 50 Endpunkten auf, bis alle Endpunkte verarbeitet wurden.
Erstellen einer Lambda-Funktion
Informationen zum Erstellen einer Lambda-Funktion finden Sie unter Erste Schritte im AWS Lambda -Entwicklerhandbuch. Denken Sie bei der Erstellung der Funktion daran, dass die Nachrichtenzustellung unter folgenden Bedingungen fehlschlägt:
-
Die Lambda-Funktion benötigt mehr als 15 Sekunden, um das modifizierte Segment zurückzugeben.
-
Amazon Pinpoint kann den Rückgabewert der Funktion nicht decodieren.
-
Die Funktion benötigt mehr als 3 Versuche von Amazon Pinpoint für einen erfolgreichen Aufruf.
Amazon Pinpoint akzeptiert nur Endpunktdefinitionen im Rückgabewert der Funktion. Die Funktion kann keine anderen Elemente in den Ereignisdaten ändern.
Beispiel-Lambda-Funktion
Ihre Lambda-Funktion verarbeitet die von Amazon Pinpoint gesendeten Ereignisdaten und gibt die geänderten Endpunkte zurück, wie in der folgenden Beispielprozedur gezeigt, die in Node.js geschrieben ist:
'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 übergibt die Ereignisdaten der Prozedur als event
-Parameter.
In diesem Beispiel durchläuft die Prozedur jeden Endpunkt im event.Endpoints
-Objekt und fügt dem Endpunkt ein neues Attribut hinzu, CreditScore
. Der Wert des CreditScore
-Attributs ist einfach eine Zufallszahl.
Die console.log()
Anweisung protokolliert das Ereignis in CloudWatch Logs.
Die callback()
-Anweisung gibt die geänderten Endpunkte an Amazon Pinpoint zurück. Normalerweise ist der callback
-Parameter optional in Node.js Lambda-Funktionen, aber in diesem Kontext ist er erforderlich, da die Funktion die aktualisierten Endpunkte an Amazon Pinpoint zurückgeben muss.
Ihre Funktion muss Endpunkte in demselben Format zurückgeben, das in den Ereignisdaten angegeben ist. Dabei handelt es sich um eine Zuordnung, die Endpunkte IDs Endpunktdefinitionen zuordnet, wie im folgenden Beispiel:
{
"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": {}
}
}
Die Beispiel-Funktion ändert das event.Endpoints
-Objekt, das sie in den Ereignisdaten erhalten hat, und gibt es zurück.
Optional können Sie die Attribute TitleOverride
und BodyOverride
in die Endpunktdefinitionen aufnehmen, die Sie zurückgeben.
Anmerkung
Wenn Sie mit dieser Lösung Nachrichten senden, berücksichtigt Amazon Pinpoint die Attribute TitleOverride
und BodyOverride
nur für Endpunkte, bei denen der Wert des ChannelType
-Attributs einen der folgenden Werte hat: ADM
, APNS
, APNS_SANDBOX
, APNS_VOIP
, APNS_VOIP_SANDBOX
, BAIDU
, GCM
oder SMS
.
Amazon Pinpoint berücksichtigt nicht diese Attribute für Endpunkte, bei denen der Wert des ChannelType
-Attributs EMAIL
ist.
Weisen Sie eine Lambda-Funktionsrichtlinie zu
Bevor Sie Ihre Lambda-Funktion verwenden können, um Ihre Endpunkte zu verarbeiten, müssen Sie Amazon Pinpoint autorisieren, Ihre Lambda-Funktion aufzurufen. Um eine Aufrufberechtigung zu erteilen, weisen Sie der Funktion eine Lambda-Funktionsrichtlinie zu. Eine Lambda-Funktionsrichtlinie ist eine ressourcenbasierte Richtlinie, die bestimmt, welche Entitäten Ihre Funktion verwenden dürfen, und welche Aktionen diese Entitäten durchführen können.
Weitere Informationen finden Sie unter Verwenden von ressourcenbasierten Richtlinien für AWS Lambda im AWS Lambda -Entwicklerhandbuch.
Beispiel für eine Funktionsrichtlinie
Die folgende Richtlinie erteilt dem Amazon Pinpoint Service Principal die Erlaubnis, die lambda:InvokeFunction
Aktion für eine bestimmte Kampagne zu verwenden (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
" } } }
Ihre Funktionsrichtlinie benötigt einen Condition
-Block, der einen AWS:SourceArn
-Schlüssel beinhaltet. Dieser Code gibt an, welche Amazon-Pinpoint-Kampagne die Funktion aufrufen darf. In diesem Beispiel erteilt die Richtlinie eine Berechtigung für nur eine einzelne Kampagne. Der Condition
Block muss auch einen AWS:SourceAccount
Schlüssel enthalten, der steuert, welches AWS Konto die Aktion aufrufen kann.
Um eine allgemeinere Richtlinie zu schreiben, verwenden Sie Wildcards (*), die mehrere Zeichen darstellen. Sie können beispielsweise den folgenden Condition
Block verwenden, um jede Kampagne in einem bestimmten Amazon Pinpoint Pinpoint-Projekt zuzulassen (application-id
), um die Funktion aufzurufen:
... "Condition": { "StringEquals": { "AWS:SourceAccount": "
111122223333
" }, "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id
:apps/application-id
/campaigns/*" } } ...
Wenn Sie die Lambda-Funktion als Standardfunktion verwenden möchten, die von allen Kampagnen für ein Projekt verwendet wird, empfehlen wir, den Condition
-Block für die Richtlinie auf die zuvor beschriebene Weise zu konfigurieren. Informationen zum Festlegen einer Lambda-Funktion als Standard für alle Kampagnen in einem Projekt finden Sie unter Einer Kampagne eine Lambda-Funktion zuweisen.
Erteilen Sie Amazon Pinpoint Pinpoint-Aufrufrechte
Sie können die AWS Command Line Interface (AWS CLI) verwenden, um der Lambda-Funktionsrichtlinie, die Ihrer Lambda-Funktion zugewiesen ist, Berechtigungen hinzuzufügen. Um Amazon Pinpoint zu erlauben, eine Funktion für eine bestimmte Kampagne aufzurufen, verwenden Sie den Lambda-Befehl add-permission
, wie im folgenden Beispiel gezeigt:
$
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
Sie können Ihre Kampagne mit IDs dem Befehl get-campaigns in der nachschlagen. AWS CLI Sie können Ihre Anwendungs-ID auch mit dem Befehl get-apps nachschlagen.
Wenn Sie den Lambda-Befehl add-permission
ausführen, gibt Lambda die folgende Ausgabe zurück:
{ "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\"}}} }
Der Statement
Wert ist eine JSON Zeichenkettenversion der Anweisung, die der Lambda-Funktionsrichtlinie hinzugefügt wurde.
Einer Kampagne eine Lambda-Funktion zuweisen
Sie können eine Lambda-Funktion einer einzelnen Amazon-Pinpoint-Kampagne zuweisen. Sie können auch die Lambda-Funktion als Standard festlegen, der von allen Kampagnen für ein Projekt verwendet wird, außer für Kampagnen, für die Sie separat eine Funktion zuweisen.
Um einer einzelnen Kampagne eine Lambda-Funktion zuzuweisen, verwenden Sie Amazon Pinpoint, um ein Campaign
Objekt API zu erstellen oder zu aktualisieren und sein CampaignHook
Attribut zu definieren. Um eine Lambda-Funktion als Standard für alle Kampagnen in einem Projekt festzulege, erstellen Sie die Settings
-Ressource für dieses Projekt und definieren ihr CampaignHook
-Objekt.
In beiden Fällen legen Sie die folgenden CampaignHook
-Attribute fest:
-
LambdaFunctionName
— Der Name oder ARN der Lambda-Funktion, die Amazon Pinpoint aufruft, bevor Nachrichten für die Kampagne gesendet werden. -
Mode
– Eingestellt aufFILTER
. Mit diesem Modus ruft Amazon Pinpoint die Funktion auf und wartet, bis sie die geänderten Endpunkte zurückgibt. Nachdem es sie erhalten hat, sendet Amazon Pinpoint die Nachricht. Amazon Pinpoint wartet bis zu 15 Sekunden, bevor die Zustellung von Nachrichten als fehlgeschlagen betrachtet wird.
Mit für eine Kampagne definierten CampaignHook
-Einstellungen ruft Amazon Pinpoint die angegebene Lambda-Funktion auf, bevor die Nachrichten der Kampagne gesendet werden. Amazon Pinpoint wartet, bis es die geänderten Endpunkte von der Funktion erhalten hat. Wenn Amazon Pinpoint die aktualisierten Endpunkte empfängt, setzt es die Nachrichtenzustellung unter Verwendung der aktualisierten Endpunktdaten fort.