Membuat saluran khusus di Amazon Pinpoint - Amazon Pinpoint

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

Untuk menetapkan fungsi Lambda atau webhook ke kampanye individual, gunakan Amazon Pinpoint API untuk membuat atau memperbarui objek Kampanye.

MessageConfigurationObjek 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

CampaignObjek 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.

Contoh pemisahan multivariat khusus.

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

StatementNilai 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.