ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

在 SAP ABAP 中接入 Amazon Pinpoint:使用 AWS SDK for SAP ABAP 发送邮件、短信与模板消息实战指南

在 SAP ABAP 中接入 Amazon Pinpoint:使用 AWS SDK for SAP ABAP 发送邮件、短信与模板消息实战指南 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文基于 AWS 官方代码示例仓库aws-doc-sdk-examples中 sap-abab/services/ppt 目录的示例完整讲解如何在 SAP ABAP 环境中通过 AWS SDK for SAP ABAP 调用 Amazon Pinpoint 的SendMessages服务接口。读完本文你将掌握 Pinpoint 项目Application与模板的创建方式、邮件/短信/模板消息四条发送链路的完整 ABAP 实现、响应中消息 ID 的提取方法以及配套 ABAP 单元测试的资源编排与最小权限 IAM 设计。Amazon Pinpoint 通过邮件、SMS、语音消息和推送通知帮助企业与客户互动。本示例把该能力搬进了 SAP 技术栈SAP 系统如 S/4HANA可通过 SDK 直接调用 Pinpoint在业务流程中实时触达客户。示例概览仓库中与 Pinpoint 相关的文件整个示例位于 sap-abap/services/ppt 目录包含以下文件文件作用#awsex#cl_ppt_actions.clas.abap核心示例类/awsex/cl_ppt_actions封装了 4 个与 Pinpoint 消息发送相关的方法#awsex#cl_ppt_actions.clas.testclasses.abap本地测试类ltc_awsex_cl_ppt_actions覆盖 4 个方法的自动化验证与资源清理#awsex#cl_ppt_actions.clas.xml类对象的 abapGit 元数据描述为 Pinpoint Code Example启用单元测试WITH_UNIT_TESTSpackage.devc.xml开发包定义Package for PinpointREADME.md官方示例说明文档本文的骨架类定义中暴露了 4 个公开方法全部围绕 Pinpoint 的SendMessages服务函数展开METHODS send_email_message IMPORTING iv_app_id TYPE /aws1/ppt__string Pinpoint 项目 ID iv_sender TYPE /aws1/ppt__string 发件人地址 it_to_addresses TYPE ...tt_listof__string 收件人地址列表 iv_char_set TYPE /aws1/ppt__string 字符集如 UTF-8 iv_subject TYPE /aws1/ppt__string 邮件主题 iv_html_message TYPE /aws1/ppt__string HTML 正文 iv_text_message TYPE /aws1/ppt__string 纯文本正文 EXPORTING ot_message_ids TYPE ...tt_mapofmessageresult RAISING /aws1/cx_rt_generic. METHODS send_sms_message IMPORTING iv_app_id / iv_origination_number / iv_destination_number iv_message / iv_message_type(pptmessagetype) EXPORTING ov_message_id RAISING /aws1/cx_rt_generic. METHODS send_templated_email_msg IMPORTING iv_app_id / iv_sender / it_to_addresses iv_template_name / iv_template_version EXPORTING ot_message_ids RAISING /aws1/cx_rt_generic. METHODS send_templated_sms_message IMPORTING iv_app_id / iv_destination_number / iv_message_type iv_origination_number / iv_template_name / iv_template_version EXPORTING ov_message_id RAISING /aws1/cx_rt_generic.从源码结构可以看出四条发送链路共用同一套 Pinpoint 客户端工厂/aws1/cl_ppt_factorycreate仅在消息配置与模板配置上有所差异这正是理解本文后续四个小节的主线。环境准备前置条件与 AWS 连接配置在运行示例前需要完成以下准备与 sap-abap 目录 README 中列出的全局要求一致AWS 账户拥有可访问 Amazon Pinpoint 的 AWS 账户默认凭证与区域按 AWS SDK for SAP ABAP 的全局设置文档配置默认凭证Access Key/Secret Key与默认区域SDK 运行时会读取这些全局配置SAP 系统环境示例代码通过 abapGit 序列化类、测试类、开发包均为 abapGit 格式需将仓库导入 SAP 系统ABAP 运行时版本代码依赖 AWS SDK for SAP ABAP 提供的/aws1/命名空间下的运行时类与类型如cl_rt_session_aws、cl_ppt_factory及各请求/响应对象类。每个方法内部统一通过如下两行建立 Pinpoint 客户端其中ZCODE_DEMO是会话使用的 AWS 配置 Profile IDCONSTANTS cv_pfl TYPE /aws1/rt_profile_id VALUE ZCODE_DEMO. DATA(lo_session) /aws1/cl_rt_session_awscreate( cv_pfl ). DATA(lo_ppt) /aws1/cl_ppt_factorycreate( lo_session ).关于成本与权限仓库 README 明确提示运行本代码含测试可能产生 AWS 费用测试类被标记为RISK LEVEL DANGEROUS见下文测试小节会真实创建并删除 AWS 资源只应在合适的测试 AWS 账户中运行官方强烈建议遵循最小权限原则Grant least privilege只授予完成任务所需的最低权限。单动作示例四条 SendMessages 消息发送链路README 中列出的单动作Single actions为 SendMessages。SendMessages是 Pinpoint 向端点端点地址映射 消息配置批量发送消息的核心 API。下面结合源码逐条拆解 4 个封装方法。1. 发送普通邮件send_email_message对应源码 第 66 行起的实现核心代码分为三步第一步把收件人列表转换为 Pinpoint 的地址配置映射表Pinpoint 的MessageRequest要求地址以MapOfAddressConfiguration形式提供每个收件人需要声明消息渠道channelTypeDATA lt_addresses TYPE /aws1/cl_pptaddressconftt_mapofaddressconfiguration. LOOP AT it_to_addresses INTO DATA(lo_address). INSERT VALUE /aws1/cl_pptaddressconfts_mapofaddressconf_maprow( key lo_address-get_value( ) value NEW /aws1/cl_pptaddressconf( iv_channeltype EMAIL ) ) INTO TABLE lt_addresses. ENDLOOP.第二步组装消息请求并调用 sendmessagesDATA(lo_result) lo_ppt-sendmessages( iv_applicationid iv_app_id io_messagerequest NEW /aws1/cl_pptmessagerequest( it_addresses lt_addresses io_messageconfiguration NEW /aws1/cl_pptdirectmessageconf( io_emailmessage NEW /aws1/cl_pptemailmessage( iv_fromaddress iv_sender io_simpleemail NEW /aws1/cl_pptsimpleemail( io_subject NEW /aws1/cl_pptsimpleemailpart( iv_charset iv_char_set iv_data iv_subject ) io_htmlpart NEW /aws1/cl_pptsimpleemailpart( iv_charset iv_char_set iv_data iv_html_message ) io_textpart NEW /aws1/cl_pptsimpleemailpart( iv_charset iv_char_set iv_data iv_text_message ) ) ) ) ) ).请求对象层级为MessageRequest → DirectMessageConfiguration → EmailMessage → SimpleEmail → (Subject/HtmlPart/TextPart)。邮件正文同时支持 HTML 与纯文本两种表示且均需指定字符集示例与测试均使用UTF-8。第三步从响应中提取消息 IDDATA(lo_message_response) lo_result-get_messageresponse( ). ot_message_ids lo_message_response-get_result( ).get_result返回MapOfMessageResult键为端点/收件人地址值为MessageResult调用方可据此判断每个收件人的投递结果。2. 发送普通短信send_sms_message实现位于 第 118 行起。与邮件不同短信的地址映射表直接以目的地手机号为键channelType声明为SMSINSERT VALUE /aws1/cl_pptaddressconfts_mapofaddressconf_maprow( key iv_destination_number value NEW /aws1/cl_pptaddressconf( iv_channeltype SMS ) ) INTO TABLE lt_addresses.消息配置改为SMSMessage需要提供短信正文body、消息类型messageType与发送方号码originationNumberDATA(lo_result) lo_ppt-sendmessages( iv_applicationid iv_app_id io_messagerequest NEW /aws1/cl_pptmessagerequest( it_addresses lt_addresses io_messageconfiguration NEW /aws1/cl_pptdirectmessageconf( io_smsmessage NEW /aws1/cl_pptsmsmessage( iv_body iv_message iv_messagetype iv_message_type iv_originationnumber iv_origination_number ) ) ) ).响应提取时由于MapOfMessageResult以目的地号码为键源码遍历结果表匹配iv_destination_number后取出messageidDATA(lt_results) lo_message_response-get_result( ). LOOP AT lt_results INTO DATA(ls_result). IF ls_result-key iv_destination_number. ov_message_id ls_result-value-get_messageid( ). EXIT. ENDIF. ENDLOOP.messageType类型为/aws1/pptmessagetype测试中使用TRANSACTIONAL事务型消息不占用促销配额。短信发送在 SMS 渠道未启用或账户处于沙箱环境时可能失败这一约束在测试部分有专门处理见下文。3. 使用模板发送邮件send_templated_email_msg实现位于 第 162 行起。模板消息与普通消息的差异在于MessageRequest中新增templateConfiguration并复用DirectMessageConfiguration → EmailMessage指定发件人DATA(lo_result) lo_ppt-sendmessages( iv_applicationid iv_app_id io_messagerequest NEW /aws1/cl_pptmessagerequest( it_addresses lt_addresses io_messageconfiguration NEW /aws1/cl_pptdirectmessageconf( io_emailmessage NEW /aws1/cl_pptemailmessage( iv_fromaddress iv_sender ) ) io_templateconfiguration NEW /aws1/cl_ppttemplateconf( io_emailtemplate NEW /aws1/cl_ppttemplate( iv_name iv_template_name iv_version iv_template_version ) ) ) ).模板配置对象为TemplateConfiguration → EmailTemplate通过name模板名与version版本号定位具体模板模板内容主题、HTML/文本正文由 Pinpoint 服务端渲染客户端不再携带正文。测试中传入的版本号为1。4. 使用模板发送短信send_templated_sms_message实现位于 第 206 行起。这是模板机制在 SMS 渠道上的复用地址映射与普通短信相同键为目的地号码、channelTypeSMS消息配置保留SMSMessagemessageType、originationNumber模板配置则指向TemplateConfiguration → SmsTemplateio_templateconfiguration NEW /aws1/cl_ppttemplateconf( io_smstemplate NEW /aws1/cl_ppttemplate( iv_name iv_template_name iv_version iv_template_version ) ).响应处理与普通短信完全一致遍历结果表、按目的地号码取messageid。四条链路全部结束于MESSAGE ... TYPE I状态提示如Email message sent successfully.便于在 ABAP 环境中直接观察执行结果。源码级支撑模板与项目的创建/清理约定模板消息要真正可用前提是 Pinpoint 侧已存在模板。测试类的class_setup展示了最小可用实践可作为真实项目落地参考创建 Pinpoint 项目调用createapp项目名形如abap-ppt-app-uuid并打上convert_testtrue标签随后轮询getappwait_for_app_ready最多尝试 10 次、每次等待 2 秒确认项目可用创建邮件模板createemailtemplate请求包含subject、htmlPart如htmlbodyh1Test Email/h1.../body/html与textPart创建短信模板createsmstemplate请求仅包含body文本清理class_teardown中依次调用deleteemailtemplate、deletesmstemplate、deleteapp删除测试资源。模板创建是可选步骤对应mobiletargeting:CreateEmailTemplate等权限若创建失败测试类会记录告警并CLEAR模板名模板相关测试将跳过而普通邮件/短信测试不受影响。uuid来自 sap-abab/util 目录 的/awsex/cl_utilsget_random_string内部调用GENERAL_GET_RANDOM_STRING生成 10 位随机串用于保证每次测试资源名全局唯一。单元测试DANGEROUS 级别测试与测试地址约定测试类 ltc_awsex_cl_ppt_actions 声明为CLASS ltc_awsex_cl_ppt_actions DEFINITION FOR TESTING DURATION SHORT RISK LEVEL DANGEROUS.RISK LEVEL DANGEROUS意味着测试会真实创建/删除 AWS 资产与 sap-abab 根 README 中的警示一致只应在合适的测试 AWS 账户中运行。4 个测试方法send_email_message、send_sms_message、send_templated_email_msg、send_templated_sms_message覆盖 4 个动作方法关键断言包括邮件与模板邮件断言ot_message_ids非空且恰好返回 1 条消息 ID短信与模板短信允许两种情况——正常返回message_id或 API 调用成功但无消息 IDSMS 渠道未配置此时记录信息性消息若抛出cx_pptbadrequestexBadRequest则检查错误文本是否与SMS/channel/phone/number相关匹配则视为调用结构正确、仅需配置 SMS 渠道否则重新抛出异常。测试数据使用了两类官方认可的虚拟地址/号码无需真实申请即可跑通邮件链路邮件使用 Amazon SES 邮箱模拟器mailbox simulator地址successsimulator.amazonses.com作为发件人iv_fromaddress与收件人均可无需验证邮箱且不会投递真实邮件短信使用虚构测试号码发件方originationNumber为12065550100目的地为12065550142206 区号、555-01XX 段的假号码。IAM 最小权限设计测试类在源码注释中给出了完整的最小权限清单这是把该示例接入生产环境的直接依据。按职责分组如下职责IAM 权限发送消息四条链路共用mobiletargeting:SendMessages创建/查询/删除 Pinpoint 项目mobiletargeting:CreateApp、mobiletargeting:TagResource、mobiletargeting:GetApp、mobiletargeting:DeleteApp清理用创建/删除模板可选mobiletargeting:CreateEmailTemplate、mobiletargeting:CreateSmsTemplate、mobiletargeting:DeleteEmailTemplate、mobiletargeting:DeleteSmsTemplate创建/管理 IAM 角色可选iam:CreateRole、iam:PutRolePolicy、iam:TagRole、iam:GetRole、iam:DeleteRole、iam:DeleteRolePolicy清理用测试类的create_iam_role展示了角色配置细节信任策略允许pinpoint.amazonaws.com服务主体执行sts:AssumeRole内联策略PinpointSESPolicy授予ses:SendEmail、ses:SendRawEmail与sns:Publish使 Pinpoint 可以经 SES 发送邮件、经 SNS 发送消息。若角色已存在捕获cx_iamentityalrdyexex则回退为getrole获取既有角色 ARN角色创建失败时测试仍继续记录告警因为该角色只是可选增强项。如何运行示例与测试从 sap-abab 根 README 的说明可知本仓库的 ABAP 示例通过SE24类构建器运行将仓库通过 abapGit 导入 SAP 系统后打开类/awsex/cl_ppt_actions即可逐个执行示例方法或运行其测试类ltc_awsex_cl_ppt_actions完成自动化验证。运行前请务必确认AWS 凭证与默认区域已按 SDK 全局设置配置Profile 名为ZCODE_DEMO使用的是测试/开发 AWS 账户且拥有上表所列权限已了解运行会产生 AWS 费用SMS 沙箱、SES 模拟器地址等场景下费用或限制因账户而异。结语本示例以极简的单动作形式展示了 AWS SDK for SAP ABAP 与 Amazon Pinpoint 集成的完整闭环从会话创建、客户端工厂、地址映射表构建到普通/模板化邮件与短信的SendMessages调用、响应消息 ID 提取再到 DANGEROUS 级别单元测试的资源编排与最小权限设计。若要进一步扩展可在 sap-abab/services 目录中探索其他 AWS 服务在 SAP ABAP 环境下的同类示例模式。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐在 SAP ABAP 中使用 AWS SDK for SAP ABAP仓库示例结构、运行方式与 S3/DynamoDB 实战在 SAP ABAP 中使用 AWS SDK for SAP ABAP仓库示例结构、运行方式与 S3/DynamoDB 实战 导读 本文以 sap abap/示例工程教程后端使用 AWS SDK for JavaScript (v3) 与 Amazon Pinpoint 发送邮件和短信使用 AWS SDK for JavaScript v3 与 Amazon Pinpoint 发送邮件和短信 本文以 aws doc sdk examples示例工程教程后端使用 AWS SDK for .NET 调用 Amazon Pinpoint 发送邮件与短信dotnetv3/Pinpoint 示例详解使用 AWS SDK for .NET 调用 Amazon Pinpoint 发送邮件与短信dotnetv3/Pinpoint 示例详解 导读 本文以 aws示例工程教程后端上一篇ToolBench终极指南打造智能工具调用大模型的完整教程下一篇Builder.IO无头CMS的终极革命与现代化Web开发新范式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表