解决方案架构师系列 - 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 小时前
独一无二,万字详谈——Linux之文件管理
linux·运维·服务器·云原生·云计算·ai原生
終不似少年遊*4 小时前
华为云计算HCIE笔记04
网络·华为云·云计算·学习笔记·hcie·认证·数据中心
神秘的土鸡5 小时前
LGMRec:结合局部与全局图学习的多模态推荐系统
目标检测·计算机视觉·云计算
♡喜欢做梦8 小时前
腾讯云云开发 Copilot 深度探索与实战分享
云计算·腾讯云·copilot·玩转云开发 copilot
HUIBUR科技10 小时前
人工智能与云计算的结合:如何释放数据的无限潜力?
人工智能·ai·云计算
云计算DevOps-韩老师10 小时前
【网络云计算】2024第52周-每日【2024/12/23】小测-理论&实操-解析
linux·运维·服务器·开发语言·网络·云计算·perl
云上的阿七10 小时前
云计算中的容器技术(如Docker)是什么?
docker·容器·云计算
終不似少年遊*12 小时前
华为云计算HCIE笔记05
网络·华为云·云计算·学习笔记·hcie·认证·hcs
KubeSphere 云原生13 小时前
云原生周刊:利用 eBPF 增强 K8s
云计算·k8s·容器平台·kubesphere
木子Linux1 天前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算