翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Pinpoint でカスタムチャンネルの作成
Amazon Pinpoint には、プッシュ通知、E メール、SMS、音声チャンネルによるメッセージの送信の組み込みサポートが含まれています。カスタムチャンネルを作成することで、Amazon Pinpoint が他のチャンネル経由でメッセージを送信するように設定することもできます。Amazon Pinpoint のカスタムチャンネルを使用すると、サードパーティーサービスを含む、API を持つサービスを通じてメッセージを送信できます。Webhook を使用するか、AWS Lambda 関数を呼び出して API を操作できます。
カスタムチャンネルキャンペーンを送信するセグメントには、すべてのタイプのエンドポイント (つまり、ChannelType
属性の値が EMAL、VOICE、SMS、CUSTOM、またはさまざまなプッシュ通知エンドポイントタイプの 1 つであるエンドポイント) を含めることができます。
カスタムチャンネル経由でメッセージを送信するキャンペーンの作成
Lambda 関数または Webhook を個別のキャンペーンに割り当てるには、Amazon Pinpoint API を使用して Campaign オブジェクトを作成または更新します。
キャンペーン内の MessageConfiguration
オブジェクトには CustomMessage
オブジェクトも含まれている必要があります。このオブジェクトには、1 つのメンバー (Data
) があります。Data
の値は、カスタムチャンネルに送信するメッセージペイロードを含む JSON 文字列です。
キャンペーンには CustomDeliveryConfiguration
オブジェクトが含まれている必要があります。CustomDeliveryConfiguration
オブジェクト内で、以下を指定します。
-
EndpointTypes
– カスタムチャンネルキャンペーンの送信先となるすべてのエンドポイントタイプを含む配列。このチャンネルには、次のチャンネルタイプのいずれか、またはすべてを含めることができます。-
ADM
-
APNS
-
APNS_SANDBOX
-
APNS_VOIP
-
APNS_VOIP_SANDBOX
-
BAIDU
-
CUSTOM
-
EMAIL
-
GCM
-
SMS
-
VOICE
-
-
DeliveryUri
– エンドポイントの送信先。以下のいずれかを 1 つだけ指定できます。-
キャンペーンの実行時に実行する Lambda 関数の Amazon リソースネーム (ARN)。
-
キャンペーンの実行時にエンドポイントデータを送信する Webhook の URL。
-
注記
Campaign
オブジェクトには、Hook
オブジェクトを含めることもできます。このオブジェクトは、キャンペーンが実行されたときに Lambda 関数によってカスタマイズされるセグメントを作成するためにのみ使用されます。詳細については、「AWS Lambda を使用したセグメントのカスタマイズ」を参照してください。
Amazon Pinpoint がカスタムチャンネルに送信するイベントデータについて
カスタムチャンネル経由でメッセージを送信する Lambda 関数を作成する前に、Amazon Pinpoint が送信するデータについて理解しておく必要があります。Amazon Pinpoint キャンペーンがカスタムチャンネル経由でメッセージを送信すると、次の例のようなターゲット Lambda 関数にペイロードが送信されます。
{ "Message":{}, "Data":"The payload that's provided in the CustomMessage object in MessageConfiguration", "ApplicationId":"3a9b1f4e6c764ba7b031e7183example", "CampaignId":"13978104ce5d6017c72552257example", "TreatmentId":"0", "ActivityId":"575cb1929d5ba43e87e2478eeexample", "ScheduledTime":"2020-04-08T19:00:16.843Z", "Endpoints":{ "1dbcd396df28ac6cf8c1c2b7fexample":{ "ChannelType":"EMAIL", "Address":"mary.major@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "Location":{ "City":"Seattle", "Country":"USA" }, "Demographic":{ "Make":"OnePlus", "Platform":"android" }, "EffectiveDate":"2020-04-01T01:05:17.267Z", "Attributes":{ "CohortId":[ "42" ] }, "CreationDate":"2020-04-01T01:05:17.267Z" } } }
イベントデータは次の属性を提供します。
-
ApplicationId
– キャンペーンが属する Amazon Pinpoint プロジェクトの ID。 -
CampaignId
– Lambda 関数を呼び出した Amazon Pinpoint キャンペーンの ID。 -
TreatmentId
– キャンペーンバリアントの ID。標準キャンペーンを作成した場合、この値は常に 0 です。A/B テストキャンペーンを作成した場合、この値は 0~4 の整数です。 -
ActivityId
– キャンペーンによって実行中のアクティビティの ID。 -
ScheduledTime
– Amazon Pinpoint がキャンペーンを実行した時刻。ISO 8601 形式で表示されます。 -
Endpoints
– キャンペーンのターゲットとなったエンドポイントのリスト。各ペイロードには、最大 50 のエンドポイントを含めることができます。キャンペーンの送信先セグメントに 50 以上のエンドポイントが含まれている場合、Amazon Pinpoint はすべてのエンドポイントが処理されるまで、繰り返し関数を呼び出します (最大で一度に 50 のエンドポイント)。
このサンプルデータは、カスタムチャンネルの Lambda 関数を作成およびテストするときに使用できます。
Webhook の設定
Webhook を使用してカスタムチャンネルメッセージを送信する場合、Webhook の URL は「https://」で始まる必要があります。Webhook URL には、英数字と次の記号のみを含めることができます。ハイフン (-)、ピリオド (.)、アンダースコア (_)、チルダ (~)、疑問符 (?)、スラッシュ (/)、ポンドまたはハッシュ記号 (#)、セミコロン (:)。URL は RFC3986
Webhook URL を指定するキャンペーンを作成すると、Amazon Pinpoint はその URL に HTTP HEAD
を発行します。HEAD
リクエストに対する応答には、X-Amz-Pinpoint-AccountId
というヘッダーが含まれている必要があります。このヘッダーの値は、AWS アカウント ID と同じである必要があります。
Lambda 関数オプションの設定
このセクションでは、カスタムチャンネル経由でメッセージを送信する Lambda 関数を作成するときに必要な手順の概要を説明します。まず、関数を作成します。その後、関数に実行ポリシーを追加します。このポリシーにより、Amazon Pinpoint はキャンペーンの実行時にポリシーを実行できます。
Lambda 関数の作成の概要については、『AWS Lambda デベロッパーガイド』の「Building Lambda functions」を参照してください。
Lambda 関数の例
次のコード例では、ペイロードを処理し、CloudWatch の各エンドポイントタイプのエンドポイントの数を記録します。
import boto3 import random import pprint import json import time cloudwatch = boto3.client('cloudwatch') def lambda_handler(event, context): customEndpoints = 0 smsEndpoints = 0 pushEndpoints = 0 emailEndpoints = 0 voiceEndpoints = 0 numEndpoints = len(event['Endpoints']) print("Payload:\n", event) print("Endpoints in payload: " + str(numEndpoints)) for key in event['Endpoints'].keys(): if event['Endpoints'][key]['ChannelType'] == "CUSTOM": customEndpoints += 1 elif event['Endpoints'][key]['ChannelType'] == "SMS": smsEndpoints += 1 elif event['Endpoints'][key]['ChannelType'] == "EMAIL": emailEndpoints += 1 elif event['Endpoints'][key]['ChannelType'] == "VOICE": voiceEndpoints += 1 else: pushEndpoints += 1 response = cloudwatch.put_metric_data( MetricData = [ { 'MetricName': 'EndpointCount', 'Dimensions': [ { 'Name': 'CampaignId', 'Value': event['CampaignId'] }, { 'Name': 'ApplicationId', 'Value': event['ApplicationId'] } ], 'Unit': 'None', 'Value': len(event['Endpoints']) }, { 'MetricName': 'CustomCount', 'Dimensions': [ { 'Name': 'CampaignId', 'Value': event['CampaignId'] }, { 'Name': 'ApplicationId', 'Value': event['ApplicationId'] } ], 'Unit': 'None', 'Value': customEndpoints }, { 'MetricName': 'SMSCount', 'Dimensions': [ { 'Name': 'CampaignId', 'Value': event['CampaignId'] }, { 'Name': 'ApplicationId', 'Value': event['ApplicationId'] } ], 'Unit': 'None', 'Value': smsEndpoints }, { 'MetricName': 'EmailCount', 'Dimensions': [ { 'Name': 'CampaignId', 'Value': event['CampaignId'] }, { 'Name': 'ApplicationId', 'Value': event['ApplicationId'] } ], 'Unit': 'None', 'Value': emailEndpoints }, { 'MetricName': 'VoiceCount', 'Dimensions': [ { 'Name': 'CampaignId', 'Value': event['CampaignId'] }, { 'Name': 'ApplicationId', 'Value': event['ApplicationId'] } ], 'Unit': 'None', 'Value': voiceEndpoints }, { 'MetricName': 'PushCount', 'Dimensions': [ { 'Name': 'CampaignId', 'Value': event['CampaignId'] }, { 'Name': 'ApplicationId', 'Value': event['ApplicationId'] } ], 'Unit': 'None', 'Value': pushEndpoints }, { 'MetricName': 'EndpointCount', 'Dimensions': [ ], 'Unit': 'None', 'Value': len(event['Endpoints']) }, { 'MetricName': 'CustomCount', 'Dimensions': [ ], 'Unit': 'None', 'Value': customEndpoints }, { 'MetricName': 'SMSCount', 'Dimensions': [ ], 'Unit': 'None', 'Value': smsEndpoints }, { 'MetricName': 'EmailCount', 'Dimensions': [ ], 'Unit': 'None', 'Value': emailEndpoints }, { 'MetricName': 'VoiceCount', 'Dimensions': [ ], 'Unit': 'None', 'Value': voiceEndpoints }, { 'MetricName': 'PushCount', 'Dimensions': [ ], 'Unit': 'None', 'Value': pushEndpoints } ], Namespace = 'PinpointCustomChannelExecution' ) print("cloudwatchResponse:\n",response)
Amazon Pinpoint キャンペーンがこの Lambda 関数を実行すると、Amazon Pinpoint はセグメントメンバーのリストを関数に送信します。この関数は、それぞれの ChannelType
のエンドポイントの数をカウントします。その後、そのデータを Amazon CloudWatch に送信します。CloudWatch コンソールでこれらのメトリクスを表示することもできます。メトリクスは、PinPointCustomChannelExecution 名前空間で使用できます。
このコード例を変更して、このサービスを通じてメッセージを送信するために、外部サービスの API に接続するようにもできます。
Amazon Pinpoint の Lambda 関数レスポンス形式
カスタムのチャンネルアクティビティの後にジャーニー多変量分割または、はい/いいえ分割を使用してエンドポイントパスを決定するには、Lambda 関数レスポンスを Amazon Pinpoint で認識可能な形式に構成し、エンドポイントを正しいパスに送信する必要があります。
レスポンスの構造は次の形式にする必要があります。
{ <Endpoint ID 1>:{ EventAttributes: { <Key1>: <Value1>, <Key2>: <Value2>, ... } }, <Endpoint ID 2>:{ EventAttributes: { <Key1>: <Value1>, <Key2>: <Value2>, ... } }, ... }
これにより、エンドポイントパスを決定するためのキーと値を選択できます。
Lambda 関数を呼び出すための Amazon Pinpoint アクセス許可を付与する
AWS Command Line Interface (AWS CLI) を使用して、Lambda 関数に割り当てられた Lambda 関数ポリシーにアクセス許可を追加できます。Amazon Pinpoint に関数の呼び出しを許可するには、次の例に示すように Lambda の add-permission コマンドを使用します。
aws lambda add-permission \
--function-name
myFunction
\
--statement-id sid0 \
--action lambda:InvokeFunction \
--principal pinpoint.
us-east-1
.amazonaws.com \
--source-arn arn:aws:mobiletargeting:
us-east-1
:111122223333
:apps/*
--source-account
111122223333
上記のコマンドで、次の操作を行います。
-
myFunction
を Lambda 関数の名前に置き換えます。 -
us-east-1
を、Amazon Pinpoint を使用する AWS リージョンに置き換えます。 -
111122223333
を自分の AWS アカウント ID に置き換えます。
add-permission
のコマンドを実行すると、Lambda により以下のような出力が表示されます。
{ "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:myFunction\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:mobiletargeting:us-east-1:111122223333:apps/*\"}}, {\"StringEquals\": {\"AWS:SourceAccount\": \"111122223333\"}}} }
Statement
値は Lambda 関数ポリシーに追加されたステートメントの JSON 文字列バージョンです。
実行ポリシーのその他の制限
特定の Amazon Pinpoint プロジェクトに制限することで、実行ポリシーを変更できます。これを行うには、前の例にある *
をプロジェクトの一意の ID に置き換えます。ポリシーを特定のキャンペーンに限定することで、ポリシーをさらに制限できます。例えば、プロジェクト ID 95fee4cd1d7f5cd67987c1436example
のプロジェクトで、キャンペーン ID dbaf6ec2226f0a9a8615e3ea5example
を持つキャンペーンのみを許可するようにポリシーを制限するには、source-arn
属性に次の値を使用します。
arn:aws:mobiletargeting:
us-east-1
:111122223333
:apps/dbaf6ec2226f0a9a8615e3ea5example/campaigns/95fee4cd1d7f5cd67987c1436example
注記
Lambda 関数の実行を特定のキャンペーンに制限する場合は、まず、制限の少ないポリシーを使用して関数を作成する必要があります。次に、Amazon Pinpoint でキャンペーンを作成し、機能を選択する必要があります。最後に、指定したキャンペーンを参照するように実行ポリシーを更新する必要があります。