解决方案架构师系列 - AWS - Pinpoint

AWS Pinpoint介绍

Amazon Pinpoint 为营销人员和开发人员提供了一款可自定义的工具,助力他们大规模地开展跨渠道、行业和活动的客户通信。

Amazon Pinpoint是一个全面的客户参与平台,‌旨在帮助营销人员和开发人员大规模地开展跨渠道、‌行业和活动的客户通信。‌它提供了一系列功能,‌包括创建和管理营销活动、‌客户细分、‌推送通知、‌电子邮件、‌短信、‌语音消息以及应用程序内消息等,‌通过这些功能,‌用户可以与客户进行互动并分析活动效果,‌以优化营销策略。‌

使用Amazon Pinpoint的主要步骤包括:‌

  1. 创建项目:‌首先,‌用户需要在AWS控制台中创建一个新的项目,‌这是使用Amazon Pinpoint的第一步。‌
  2. 导入数据并创建客户细分:‌接下来,‌导入客户数据并创建不同的客户细分,‌以便更精确地定位目标受众。‌
  3. 创建活动:‌设计并创建各种营销活动,‌包括推送通知、‌电子邮件、‌短信等。‌
  4. 查看活动分析:‌活动创建后,‌可以通过分析工具查看活动的效果,‌包括送达率、‌打开率、‌点击率等,‌以便优化未来的活动。‌
  5. 项目管理和发送:‌管理项目,‌包括设置推送通知、‌电子邮件、‌短信等,‌并监控其性能。‌

Amazon Pinpoint还提供了多种最佳实践和建议,‌帮助用户优化送达率、‌提高客户参与度,‌并通过收件箱置入测试等方式确保邮件不被标记为垃圾邮件。‌此外,‌它还支持使用专用IP地址,‌帮助用户更好地管理邮件发送,‌以及通过沙盒模式对短信和语音消息进行限制和管理。‌

总的来说,‌Amazon Pinpoint是一个功能强大的工具,‌它允许用户通过多种渠道与客户进行互动,‌并通过详细的数据分析和优化建议,‌提高营销活动的效率和效果12。‌

Amazon Pinpoint 的安全最佳实践

使用 AWS 身份和访问管理 (IAM) 账户控制 API 操作的 Amazon Pinpoint 访问权限,尤其是创建、修改或 Amazon Pinpoint 删除资源的操作。对于 Amazon Pinpoint API,此类资源包括项目、活动和旅程。对于 Amazon Pinpoint SMS 和 Voice API,此类资源包括电话号码、资源池和配置集。

  • 为每个管理 Amazon Pinpoint 资源的人创建一个单独的用户,包括你自己。请勿使用 AWS 根凭证来管理 Amazon Pinpoint 资源。

  • 授予每位用户执行其职责所需的最低权限集。

  • 使用 IAM 组有效地管理适用于多个用户的权限。

  • 定期轮换您的 IAM 凭证。

发送短信或语音消息的示例

您可以参照以下代码示例,使用 AWS SDK for Python (Boto3)发送短信。

复制代码
import boto3
from botocore.exceptions import ClientError


def send_sms_message(sms_voice_v2_client, configuration_set, context_keys,
                     country_parameters, destination_number, dry_run, keyword,
                     max_price, message_body, message_type, origination_number,
                     ttl):
    try:
        response = sms_voice_v2_client.send_text_message(
            ConfigurationSetName=configuration_set,
            Context=context_keys,
            DestinationCountryParameters=country_parameters,
            DestinationPhoneNumber=destination_number,
            DryRun=dry_run,
            Keyword=keyword,
            MaxPrice=max_price,
            MessageBody=message_body,
            MessageType=message_type,
            OriginationIdentity=origination_number,
            TimeToLive=ttl
        )

    except ClientError as e:
        print(e.response)
    else:
        return response['MessageId']


def main():
    configuration_set = "MyConfigurationSet"
    context_keys = {"key1": "value1"}
    country_parameters = {
        "IN_TEMPLATE_ID": "TEMPLATE01234",
        "IN_ENTITY_ID": "ENTITY98765"
    }
    destination_number = "+14255550168"
    dry_run = False
    keyword = "MyKeyword"
    max_price = "2.00"
    message_body = ("This is a test message sent from Amazon Pinpoint SMS "
                    "using the AWS SDK for Python (Boto3). ")
    message_type = "TRANSACTIONAL"
    origination_number = "+12065550183"
    ttl = 120

    print(
        f"Sending text message to {destination_number}.")

    message_id = send_sms_message(
        boto3.client('pinpoint-sms-voice-v2'), configuration_set, context_keys,
        country_parameters, destination_number, dry_run, keyword, max_price,
        message_body, message_type, origination_number, ttl)

    print(f"Message sent!\nMessage ID: {message_id}")


if __name__ == '__main__':
    main()

在前面的示例中,对 main() 函数进行以下更改:

  • configuration_set 的值改为您要用于发送此消息的配置集的名称或 Amazon 资源名称 (ARN)。

  • context_keys 的值改为您要在发送此消息时使用的键和值。这些键出现在与此消息关联的事件记录中。

  • 如果您使用已注册的发件人 ID 向印度的客户发送消息,请将 country_parameters 的值改为匹配您在注册发件人 ID 时收到的注册实体 ID 和模板 ID。

  • 重要

    如果您不使用注册的发件人 ID 向印度的客户发送消息,请完全忽略此参数。同时,还必须删除 send_sms_message 函数中的相应行。

  • destination_number 的值改为您要向其发送消息的电话号码。

  • 如果要在不发送任何消息的情况下执行此操作,请将 dry_run 的值改为 True

  • max_price 的值改为您发送此消息的每个消息部分要花费的最大金额(以美元为单位)。一个消息部分最多包含 140 字节的信息。有关更多信息,请参阅 短信字符限制

  • 更改 message_body 的值以包括您要发送的消息。一条消息的最大长度取决于其所包含的字符。有关短信字符编码的更多信息,请参阅短信字符限制

  • 更改 message_type 的值以表示相应的消息类别。有效值包括 TRANSACTIONAT(适用于重要或对时间敏感的消息)和 PROMOTION(适用于不重要或对不时间敏感的消息)。

  • origination_number 的值改为您要用于发送消息的电话号码。电话号码必须使用 E.164 格式。

  • 将的值更改ttl为 Amazon Pinpoint SMS 应尝试发送消息的时间(以秒为单位)。您可以将 TTL 值设置为最多 259200 秒(72 小时)。

发送语音消息

您可以使用以下代码示例,通过 AWS SDK for Python (Boto3)发送语音消息。

复制代码
import boto3
from botocore.exceptions import ClientError


def send_voice_message(sms_voice_v2_client, configuration_set, context_keys,
                       destination_number, dry_run, max_price, message_body,
                       message_type, origination_number, ttl, voice_id):
    try:
        response = sms_voice_v2_client.send_voice_message(
            ConfigurationSetName=configuration_set,
            Context=context_keys,
            DestinationPhoneNumber=destination_number,
            DryRun=dry_run,
            MaxPricePerMinute=max_price,
            MessageBody=message_body,
            MessageBodyTextType=message_type,
            OriginationIdentity=origination_number,
            TimeToLive=ttl,
            VoiceId=voice_id
        )

    except ClientError as e:
        print(e.response)
    else:
        return response['MessageId']


def main():
    configuration_set = "MyConfigurationSet"
    context_keys = {"key1":"value1"}
    destination_number = "+12065550123"
    dry_run = False
    max_price = "2.00"
    message_body = (
        "<speak>"
        "This is a test message sent from <emphasis>Amazon Pinpoint SMS</emphasis>"
        "using the <break strength='weak'/> AWS SDK for Python (Boto3). "
        "<amazon:effect phonation='soft'>Thank you for listening."
        "</amazon:effect>"
        "</speak>")
    message_type = "SSML"
    origination_number = "+18445550142"
    ttl = 120
    voice_id = "MATTHEW"

    print(
        f"Sending voice message with Amazon Pinpoint SMS from {origination_number} to {destination_number}.")

    message_id = send_voice_message(
        boto3.client('pinpoint-sms-voice-v2'), configuration_set, context_keys,
        destination_number, dry_run, max_price, message_body, message_type,
        origination_number, ttl, voice_id)

    print(f"Message sent!\nMessage ID: {message_id}")


if __name__ == '__main__':
    main()
复制代码

在前面的示例中,对 main() 函数进行以下更改:

  • configuration_set 的值改为您要用于发送此消息的配置集的名称或 Amazon 资源名称 (ARN)。

  • context_keys 的值改为您要在发送此消息时使用的键和值。这些键出现在与此消息关联的事件记录中。

  • destination_number 的值改为您要向其发送消息的电话号码。

  • max_price 的值改为发送此消息每分钟要花费的最大金额。

  • 更改 message_body 的值以包括您要发送的消息。消息最多可包含 6,000 个字符。

  • 如果要使用纯文本脚本而不是 SSML 格式的脚本,请将 message_type 的值改为 TEXT

  • origination_number 的值改为您要用于发送消息的电话号码。电话号码必须使用 E.164 格式。

  • 如果要在不发送任何消息的情况下执行此操作,请将 dry_run 的值改为 True

  • 将的值更改ttl为 Amazon Pinpoint SMS 应尝试发送消息的时间(以秒为单位)。您可以将 TTL 值设置为最多 259200 秒(72 小时)。

  • MATTHEW 替换为要用于发送消息的 Amazon Polly 语音的名称。有关支持的语音的完整列表,请参阅《*短信和语音》第 2 版 API 参考SendVoiceMessage*中。如果您未指定语音,则您的消息将使用 "MATTHEW" 语音发送。

相关推荐
威联通网络存储2 小时前
基于TS-h3087XU-RP的大型成套空分设备DCS历史趋势数据治理
aws
主机哥哥1 天前
2026年腾讯云秒杀活动抢购攻略
云计算·腾讯云
花千烬1 天前
crictl info 连不上 containerd 怎么办?endpoint、socket 与权限一次查清
云计算
AKAMAI4 天前
每百万 Token 成本砍六成,出海 AI 团队开始重算推理这笔账
人工智能·云计算
A小辣椒15 天前
AWS Clould Support Engineer就职面试题
aws
tiancaijiben17 天前
阿里云Kubernetes集群托管完全指南:从创建到生产级运维
云计算
亚林瓜子17 天前
AWS WAF中如何放行某个触发了托管规则的接口
aws·waf
互联网推荐官17 天前
上海软件定制开发公司推荐:从PaaS工程化路径看D-coding的技术取舍
云原生·云计算·paas·软件开发·开发经验·上海
sbjdhjd17 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
tiancaijiben17 天前
阿里云应用实时监控服务ARMS完全接入指南:从探针部署到全链路可观测
云计算