代理从 Amazon Connect 发起的 WhatsApp 消息
Source: Dev.to
学习如何让客服代理在 Agent Workspace 中仅需 一次点击 即可发送 WhatsApp 模板消息。非常适合希望在不离开 Amazon Connect 控制台的情况下,实现 WhatsApp 出站通信自动化和简化的团队。
为什么要这样做?
- 主动性:代理可以直接从他们的桌面联系客户。
- 无错误:消除复制‑粘贴号码或使用手动模板的需求。
- 完整集成:所有内容由 Contact Flows、Lambda 函数和一个表单(Connect View)编排。
一般流程
- Contact Flow 调用 Lambda
get_customer_data获取客户信息(姓名、电话等)。- 可选:使用 Customer Profile 块在 Customer Profiles 中查找数据。
- 流程在 Agent Workspace 中显示一个 表单 (View),并预填充数据。
- 代理审查/编辑信息并点击 发送。
- 第二个 Lambda (
send_whatsapp_message) 通过 AWS End User Messaging Social 发送模板消息。
先决条件
| 需求 | 详情 |
|---|---|
| WhatsApp Business 账户 (WABA) | 创建一个新的或将现有的迁移到 AWS。查看此处的步骤。 |
| Meta Business | 用于将账户绑定到 AWS End User Messaging Social 所必需的。 |
| 电话号码 | 必须能够接收短信/语音验证码,并已添加到 WhatsApp。⚠️ 请勿使用个人号码。 |
| Amazon Connect 实例 | 如果没有,请按照官方指南创建。 |
| INSTANCE_ID | 可在控制台或 ARN 中找到:arn:aws:connect:::instance/INSTANCE_ID。 |
| WhatsApp 消息模板 | 在 End User Messaging 中创建(与您的号码位于同一地区)。 |
| AWS CDK | 用于部署基础设施。 |
| AWS Systems Manager 参数存储 | 用于存储模板配置。 |
初始配置
-
编辑
config.py并填写你的INSTANCE_IDINSTANCE_ID = "" -
克隆仓库
git clone https://github.com/aws-samples/sample-whatsapp-end-user-messaging-connect-chat.git cd sample-whatsapp-end-user-messaging-connect-chat/agent-initiated-whatsapp -
使用 CDK 部署
请遵循仓库中包含的 CDK 部署指南。
AWS Systems Manager (SSM) 参数
使用你的配置更新参数 /whatsapp_template/config:
{
"message": {
"messaging_product": "whatsapp",
"to": "PHONE_NUMBER",
"recipient_type": "individual",
"type": "template",
"template": {
"name": "nombre_de_tu_plantilla",
"language": { "code": "en_US" },
"components": [
{
"type": "body",
"parameters": []
}
]
}
},
"META_API_VERSION": "v23.0",
"ORIGINATION_PHONE_NUMBER_ID": ""
}
字段说明
| 参数 | 描述 |
|---|---|
template.name | 在 End User Messaging 中创建的 WhatsApp 模板名称。 |
template.language.code | 语言代码(例如:en_US)。 |
ORIGINATION_PHONE_NUMBER_ID | AWS End User Messaging Social 中的电话号码 ID。 |
META_API_VERSION | Meta API 版本(默认 v23.0)。 |
在 Amazon Connect 中的配置
视图(Form)
访问: https://.my.connect.aws/views
- 查找视图
enviarWhatsAppForm007。 - 这是代理用于查看数据并发送消息的表单。
- WhatsApp 字段设置为 password 以隐藏号码(也可以通过联系属性获取)。
联系流
- 导航到流
SendWhatsAppGuideFlow007。
a) 第一个块 Invoke AWS Lambda function
-
选择包含
GetCustomerData的 Lambda。 -
示例 mock 函数(请用真实逻辑替换):
def lambda_handler(event, context): return { "fullName": "Juan Pérez", "phoneNumber": "+XXXXXXXX", "input4": "Entregado", "input3": "Puzzle 1000 piezas", "input2": "P12345", "input1": "Juan", } -
将此 mock 替换为你的数据源(Customer Profiles、DynamoDB、外部 API 等)。
-
点击 Confirm。
b) 块 Show view
-
选择视图
enviarWhatsAppForm007。 -
将 Lambda 返回的值映射到表单字段:
表单字段 JSON 映射 fullName$.External.fullNamewhatsappNumber$.External.phoneNumberinput1…input4$.External.input1…$.External.input4 -
点击 Confirm。
c) 第二个块 Invoke AWS Lambda function
-
选择包含
SendWhatsappMessage的 Lambda(使用 ARN)。 -
此 Lambda 读取 SSM 参数配置,提取表单值并发送消息:
import json import boto3 ssm = boto3.client('ssm') eums = boto3.client('eums') # End User Messaging Social client (pseudocódigo) def lambda_handler(event, context): # 1️⃣ 从 SSM 获取模板配置 param = ssm.get_parameter(Name='/whatsapp_template/config') config = json.loads(param['Parameter']['Value']) # 2️⃣ 提取联系属性中的数据 contact_attrs = event['Details']['ContactData']['Attributes'] config['message']['to'] = contact_attrs.get('whatsappNumber') # 填充正文参数(如果有) # ... # 3️⃣ 通过 EUMS 发送消息 response = eums.send_message(**config['message']) return response -
点击 Confirm。
最终步骤
- 部署基础设施 使用 CDK。
- 更新 SSM 参数 使用你的模板配置。
- 配置视图
enviarWhatsAppForm007在 Amazon Connect 中。 - 修改 Lambda(
GetCustomerData和SendWhatsappMessage)以符合你的业务逻辑。 - 将 Lambda 关联 到 Contact Flow
SendWhatsAppGuideFlow007的相应块。 - 测试:打开 Agent Workspace,启动一次联系,检查表单是否预填,以及消息是否能一键发送。
有用资源
- GitHub 仓库
- AWS End User Messaging Social 文档
- WhatsApp 模板创建指南(在 EUMS 控制台)
- AWS CDK – 入门指南
Lambda 代码
def da_handler(event, context):
# Carga la configuración de la plantilla desde SSM Parameter Store
config = get_ssm_parameter(CONFIG_PARAM_NAME)
message_payload = config["message"]
# Extrae los valores del formulario desde los atributos de contacto
attributes = event["Details"]["ContactData"]["Attributes"]
phone_number = attributes.get("phoneNumber")
# Construye los parámetros de la plantilla desde input1..input4
template_params = build_template_parameters(
attributes, ["input1", "input2", "input3", "input4"]
)
# Envía usando AWS End User Messaging Social
response = social_client.send_whatsapp_message(
originationPhoneNumberId=origination_phone_number_id,
message=bytes(json.dumps(message_payload), "utf-8"),
metaApiVersion=meta_api_version,
)
return {"result": "OK", "messageId": response.get("messageId", "")}
注意: 按 Confirm 保存。然后 Save 并 Publish 联系流。
Amazon Connect 视图配置
-
导航到 Amazon Connect 的视图
https://.my.connect.aws/views -
创建一个类型为 Guide 的新视图。
-
将 Connect Application 组件拖到画布上。
- 将
contactFlowId设置为已部署的联系流 SendWhatsAppGuideFlow007。
- 将
-
为视图命名并点击 Publish。
创建工作区
-
导航到 Amazon Connect 的工作区
https://.my.connect.aws/workspaces -
点击 Add new workspace 并填写:
- 名称
- 描述
- 标题
-
将此工作区分配给所需的用户或路由配置文件。
-
添加新页面
- 使用 Set page with custom page slug
- 选择在上一步创建的视图(包含 Connect Application 组件的那个)。
- 使用自定义 slug,例如:
/page/send_whatsapp -
保存页面。
-
在 Agent Workspace 的顶部导航栏中选择你的自定义工作区。
现在,坐席可以导航到自定义页面,并使用指南向客户发送 WhatsApp 模板消息。
代理工作流程
- 打开自定义页面时,会显示一个 Connect Application,它执行联系流。
- 流程会显示一个表单,表单的值预先从客户数据的 Lambda 中加载。
- 代理审查、修改并提交表单。
- 提交后,会调用 WhatsApp 发送的 Lambda,携带表单的所有参数以发送最终消息。
扩展解决方案的想法
- 将客户数据的 Lambda 连接到 Amazon Connect Customer Profiles 或 DynamoDB。
- 在表单中添加额外的验证。
- 支持由坐席选择的多个 WhatsApp 模板。
- 根据模板中的变量数量动态添加输入字段。
附加资源
- [项目仓库]
- [模板创建指南]
- [先决条件指南]
- [CDK 部署指南]