Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membuat saluran khusus di Amazon Pinpoint
Amazon Pinpoint mencakup dukungan bawaan untuk mengirim pesan melalui notifikasi push, email, SMS, dan saluran suara. Anda juga dapat mengonfigurasi Amazon Pinpoint untuk mengirim pesan melalui saluran lain dengan membuat saluran khusus. Saluran khusus di Amazon Pinpoint memungkinkan Anda mengirim pesan melalui layanan apa pun yang memiliki API, termasuk layanan pihak ketiga. Anda dapat berinteraksi dengan API menggunakan webhook, atau dengan memanggil AWS Lambda fungsi.
Segmen yang Anda kirimi kampanye saluran kustom dapat berisi titik akhir dari semua jenis (yaitu, titik akhir yang nilai ChannelType
atributnya adalah EMAIL, SUARA, SMS, KUSTOM, atau salah satu dari berbagai jenis titik akhir pemberitahuan push).
Membuat kampanye yang mengirim pesan melalui saluran khusus
MessageConfiguration
Objek dalam kampanye juga harus berisi CustomMessage
objek. Objek ini memiliki satu anggota,Data
. Nilai Data
adalah string JSON yang berisi payload pesan yang ingin Anda kirim ke saluran kustom.
Kampanye harus berisi CustomDeliveryConfiguration
objek. Di dalam CustomDeliveryConfiguration
objek, tentukan yang berikut ini:
-
EndpointTypes
— Array yang berisi semua jenis titik akhir yang harus dikirimkan ke kampanye saluran kustom. Ini dapat berisi salah satu atau semua jenis saluran berikut:-
ADM
-
APNS
-
APNS_SANDBOX
-
APNS_VOIP
-
APNS_VOIP_SANDBOX
-
BAIDU
-
CUSTOM
-
EMAIL
-
GCM
-
SMS
-
VOICE
-
-
DeliveryUri
— Tujuan yang titik akhir dikirim ke. Anda hanya dapat menentukan salah satu dari berikut ini:-
Nama Sumber Daya Amazon (ARN) dari fungsi Lambda yang ingin Anda jalankan saat kampanye berjalan.
-
URL webhook yang ingin Anda kirimi data endpoint saat kampanye berjalan.
-
catatan
Campaign
Objek juga dapat berisi Hook
objek. Objek ini hanya digunakan untuk membuat segmen yang disesuaikan dengan fungsi Lambda saat kampanye dijalankan. Untuk informasi selengkapnya, lihat Menyesuaikan segmen dengan AWS Lambda.
Memahami data peristiwa yang dikirimkan Amazon Pinpoint ke saluran khusus
Sebelum membuat fungsi Lambda yang mengirim pesan melalui saluran khusus, Anda harus membiasakan diri dengan data yang dipancarkan Amazon Pinpoint. Saat kampanye Amazon Pinpoint mengirim pesan melalui saluran khusus, kampanye tersebut akan mengirimkan payload ke fungsi Lambda target yang menyerupai contoh berikut:
{ "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" } } }
Data acara menyediakan atribut berikut:
-
ApplicationId
— ID proyek Amazon Pinpoint yang menjadi milik kampanye. -
CampaignId
— ID kampanye Amazon Pinpoint yang memanggil fungsi Lambda. -
TreatmentId
— ID dari varian kampanye. Jika Anda membuat kampanye standar, nilai ini selalu 0. Jika Anda membuat kampanye pengujian A/B, nilai ini adalah bilangan bulat antara 0 dan 4. -
ActivityId
— ID kegiatan yang dilakukan oleh kampanye. -
ScheduledTime
— Waktu ketika Amazon Pinpoint mengeksekusi kampanye, ditampilkan dalam format ISO 8601. -
Endpoints
— Daftar titik akhir yang ditargetkan oleh kampanye. Setiap muatan dapat berisi hingga 50 titik akhir. Jika segmen tempat kampanye dikirim berisi lebih dari 50 titik akhir, Amazon Pinpoint akan memanggil fungsi tersebut berulang kali, dengan hingga 50 titik akhir sekaligus, hingga semua titik akhir diproses.
Anda dapat menggunakan data sampel ini saat membuat dan menguji fungsi Lambda saluran kustom Anda.
Mengkonfigurasi webhook
Jika Anda menggunakan webhook untuk mengirim pesan saluran khusus, URL webhook harus dimulai dengan “https://”. URL webhook hanya dapat berisi karakter alfanumerik, ditambah simbol berikut: tanda hubung (-), periode (.), garis bawah (_), tilde (~), tanda tanya (?) , garis miring atau solidus (/), tanda pound atau hash (#), dan titik koma (:). URL harus mematuhi RFC3986
Saat Anda membuat kampanye yang menentukan URL webhook, Amazon Pinpoint mengeluarkan HEAD
HTTP ke URL tersebut. Respons terhadap HEAD
permintaan harus berisi header yang disebutX-Amz-Pinpoint-AccountId
. Nilai header ini harus sama dengan ID AWS akun Anda.
Mengkonfigurasi fungsi Lambda
Bagian ini memberikan ikhtisar langkah-langkah yang perlu Anda ambil saat membuat fungsi Lambda yang mengirim pesan melalui saluran khusus. Pertama, Anda membuat fungsi. Setelah itu, Anda menambahkan kebijakan eksekusi ke fungsi. Kebijakan ini memungkinkan Amazon Pinpoint untuk menjalankan kebijakan saat kampanye berjalan.
Untuk pengenalan cara membuat fungsi Lambda, lihat Membangun fungsi Lambda di Panduan Pengembang.AWS Lambda
Contoh fungsi Lambda
Contoh kode berikut memproses payload dan mencatat jumlah titik akhir dari setiap tipe titik akhir. 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)
Saat kampanye Amazon Pinpoint menjalankan fungsi Lambda ini, Amazon Pinpoint mengirimkan fungsi daftar anggota segmen. Fungsi menghitung jumlah titik akhir masing-masing. ChannelType
Kemudian mengirimkan data itu ke Amazon CloudWatch. Anda dapat melihat metrik ini di bagian Metrik konsol. CloudWatch Metrik tersedia di PinpointCustomChannelExecutionnamespace.
Anda dapat memodifikasi contoh kode ini sehingga juga terhubung ke API dari layanan eksternal untuk mengirim pesan melalui layanan itu.
Format respons fungsi Lambda untuk Amazon Pinpoint
Jika Anda ingin menggunakan multivariat perjalanan atau pemisahan ya/tidak untuk menentukan jalur titik akhir setelah aktivitas saluran khusus, Anda harus menyusun respons fungsi Lambda Anda ke dalam format yang dapat dipahami Amazon Pinpoint, lalu mengirim titik akhir ke jalur yang benar.
Struktur respons harus dalam format berikut:
{ <Endpoint ID 1>:{ EventAttributes: { <Key1>: <Value1>, <Key2>: <Value2>, ... } }, <Endpoint ID 2>:{ EventAttributes: { <Key1>: <Value1>, <Key2>: <Value2>, ... } }, ... }
Ini kemudian akan memungkinkan Anda memilih kunci dan nilai yang ingin Anda tentukan jalur titik akhir.
Memberikan izin Amazon Pinpoint untuk menjalankan fungsi Lambda
Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk menambahkan izin ke kebijakan fungsi Lambda yang ditetapkan ke fungsi Lambda Anda. Untuk mengizinkan Amazon Pinpoint menjalankan fungsi, gunakan perintah izin tambahan Lambda, seperti yang ditunjukkan oleh contoh berikut:
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
Pada perintah sebelumnya, lakukan hal berikut:
-
Ganti
MyFunction dengan nama fungsi
Lambda. -
Ganti
us-east-1
dengan Wilayah AWS tempat Anda menggunakan Amazon Pinpoint. -
Ganti
111122223333
dengan ID akun AWS Anda.
Ketika Anda menjalankan add-permission
perintah, Lambda mengembalikan output berikut:
{ "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
Nilai adalah versi string JSON dari pernyataan yang ditambahkan ke kebijakan fungsi Lambda.
Lebih lanjut membatasi kebijakan eksekusi
Anda dapat mengubah kebijakan eksekusi dengan membatasinya ke proyek Amazon Pinpoint tertentu. Untuk melakukan ini, ganti contoh sebelumnya dengan ID unik proyek. *
Anda dapat membatasi kebijakan lebih lanjut dengan membatasinya pada kampanye tertentu. Misalnya, untuk membatasi kebijakan agar hanya mengizinkan kampanye dengan ID kampanye 95fee4cd1d7f5cd67987c1436example
dalam proyek dengan ID proyekdbaf6ec2226f0a9a8615e3ea5example
, gunakan nilai berikut untuk source-arn
atribut:
arn:aws:mobiletargeting:
us-east-1
:111122223333
:apps/dbaf6ec2226f0a9a8615e3ea5example/campaigns/95fee4cd1d7f5cd67987c1436example
catatan
Jika Anda membatasi eksekusi fungsi Lambda ke kampanye tertentu, pertama-tama Anda harus membuat fungsi dengan kebijakan yang tidak terlalu ketat. Selanjutnya, Anda harus membuat kampanye di Amazon Pinpoint dan memilih fungsinya. Terakhir, Anda harus memperbarui kebijakan eksekusi untuk merujuk ke kampanye yang ditentukan.