Mensajes de WhatsApp iniciados por el agente desde Amazon Connect
Source: Dev.to
Aprende a permitir que los agentes de atención al cliente envíen mensajes de plantilla de WhatsApp con un solo clic desde el Agent Workspace. Ideal para equipos que buscan automatizar y simplificar la comunicación saliente por WhatsApp sin salir de la consola de Amazon Connect.
¿Por qué hacerlo?
- Proactividad: los agentes pueden contactar al cliente directamente desde su escritorio.
- Sin errores: elimina la necesidad de copiar‑pegar números o usar plantillas manuales.
- Integración completa: todo orquestado por Contact Flows, funciones Lambda y un formulario (Connect View).
Flujo general
- Contact Flow invoca la Lambda
get_customer_datapara obtener la información del cliente (nombre, teléfono, etc.).- Opcional: usar el bloque Customer Profile para buscar datos en Customer Profiles.
- El flujo muestra un formulario (View) en el Agent Workspace con los datos pre‑llenados.
- El agente revisa/edita la información y pulsa Enviar.
- Una segunda Lambda (
send_whatsapp_message) envía el mensaje de plantilla a través de AWS End User Messaging Social.
Requisitos previos
| Requisito | Detalle |
|---|---|
| Cuenta WhatsApp Business (WABA) | Crear una nueva o migrar una existente a AWS. Ver los pasos aquí. |
| Meta Business | Necesario para vincular la cuenta a AWS End User Messaging Social. |
| Número de teléfono | Debe poder recibir verificación por SMS/voz y estar agregado a WhatsApp. ⚠️ No uses tu número personal. |
| Instancia Amazon Connect | Si no tienes una, sigue la guía oficial para crearla. |
| INSTANCE_ID | Lo encuentras en la consola o en el ARN: arn:aws:connect:::instance/INSTANCE_ID. |
| Plantilla de mensaje WhatsApp | Creada en End User Messaging (misma región que tus números). |
| AWS CDK | Para desplegar la infraestructura. |
| AWS Systems Manager Parameter Store | Para almacenar la configuración de la plantilla. |
Configuración inicial
-
Edita
config.pyy coloca tuINSTANCE_IDINSTANCE_ID = "" -
Clona el repositorio
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 -
Despliega con CDK
Sigue la Guía de despliegue CDK incluida en el repositorio.
Parámetros en AWS Systems Manager (SSM)
Actualiza el parámetro /whatsapp_template/config con tu configuración:
{
"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": ""
}
Descripción de los campos
| Parámetro | Descripción |
|---|---|
template.name | Nombre de la plantilla de WhatsApp creada en End User Messaging. |
template.language.code | Código de idioma (ej.: en_US). |
ORIGINATION_PHONE_NUMBER_ID | ID del número de teléfono en AWS End User Messaging Social. |
META_API_VERSION | Versión de la API de Meta (por defecto v23.0). |
Configuración en Amazon Connect
Vista (Form)
Accede a: https://.my.connect.aws/views
- Busca la vista
enviarWhatsAppForm007. - Es el formulario que los agentes usarán para revisar los datos y enviar el mensaje.
- El campo de WhatsApp está configurado como password para ocultar el número (puede también obtenerse vía atributos de contacto).
Contact Flow
- Navega al flujo
SendWhatsAppGuideFlow007.
a) Primer bloque Invoke AWS Lambda function
-
Selecciona la Lambda que contiene
GetCustomerData. -
Ejemplo de función mock (reemplázala con tu lógica real):
def lambda_handler(event, context): return { "fullName": "Juan Pérez", "phoneNumber": "+XXXXXXXX", "input4": "Entregado", "input3": "Puzzle 1000 piezas", "input2": "P12345", "input1": "Juan", } -
Reemplaza este mock por tu fuente de datos (Customer Profiles, DynamoDB, API externa, etc.).
-
Pulsa Confirm.
b) Bloque Show view
-
Selecciona la vista
enviarWhatsAppForm007. -
Mapeo de valores (de la Lambda a los campos del formulario):
Campo del formulario Mapeo JSON fullName$.External.fullNamewhatsappNumber$.External.phoneNumberinput1…input4$.External.input1…$.External.input4 -
Pulsa Confirm.
c) Segundo bloque Invoke AWS Lambda function
-
Selecciona la Lambda que contiene
SendWhatsappMessage(usa el ARN). -
Esta Lambda lee la configuración del parámetro SSM, extrae los valores del formulario y envía el mensaje:
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️⃣ Obtener configuración de la plantilla desde SSM param = ssm.get_parameter(Name='/whatsapp_template/config') config = json.loads(param['Parameter']['Value']) # 2️⃣ Extraer datos del contacto (atributos) contact_attrs = event['Details']['ContactData']['Attributes'] config['message']['to'] = contact_attrs.get('whatsappNumber') # rellenar parámetros del cuerpo si los hay # ... # 3️⃣ Enviar mensaje vía EUMS response = eums.send_message(**config['message']) return response -
Pulsa Confirm.
Paso a paso final
- Despliega la infraestructura con CDK.
- Actualiza el parámetro SSM con la configuración de tu plantilla.
- Configura la vista
enviarWhatsAppForm007en Amazon Connect. - Modifica las Lambdas (
GetCustomerDataySendWhatsappMessage) según tu lógica de negocio. - Asocia las Lambdas a los bloques correspondientes del Contact Flow
SendWhatsAppGuideFlow007. - Prueba: abre el Agent Workspace, inicia un contacto y verifica que el formulario se pre‑llene y que el mensaje se envíe con un clic.
Recursos útiles
- Repositorio GitHub
- Documentación AWS End User Messaging Social
- Guía de creación de plantillas de WhatsApp (en la consola de EUMS)
- AWS CDK – Getting Started
Código 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", "")}
Nota: Presiona Confirm para guardar. Luego Save y Publish el flujo de contacto.
Configuración de la vista en Amazon Connect
-
Navega a las vistas de Amazon Connect
https://.my.connect.aws/views -
Crea una nueva vista de tipo Guide.
-
Arrastra un componente Connect Application al canvas.
- Establece el
contactFlowIdcon el flujo de contacto desplegado SendWhatsAppGuideFlow007.
- Establece el
-
Dale un nombre a la vista y haz clic en Publish.
Creación del Workspace
-
Navega a los workspaces de Amazon Connect
https://.my.connect.aws/workspaces -
Haz clic en Add new workspace y completa:
- Nombre
- Descripción
- Título
-
Asigna este workspace a los usuarios o perfiles de enrutamiento que necesites.
-
Agrega una nueva página
- Usa Set page with custom page slug
- Selecciona la vista creada en el paso anterior (la que tiene el componente Connect Application).
- Usa un slug personalizado, por ejemplo:
/page/send_whatsapp -
Guarda la página.
-
Selecciona tu workspace personalizado desde la barra de navegación superior en el Agent Workspace.
Ahora el agente puede navegar a la página personalizada y usar la guía para enviar mensajes de plantilla de WhatsApp a los clientes.
Flujo de trabajo del agente
- Al abrir la página personalizada, se muestra un Connect Application que ejecuta el flujo de contacto.
- El flujo muestra un formulario con los valores pre‑cargados desde la Lambda de datos del cliente.
- El agente revisa, modifica y envía el formulario.
- Al enviarlo, la Lambda de envío de WhatsApp se invoca con todos los parámetros del formulario para entregar el mensaje final.
Ideas para extender la solución
- Conectar la Lambda de datos del cliente a Amazon Connect Customer Profiles o DynamoDB.
- Agregar validaciones adicionales en el formulario.
- Soportar múltiples plantillas de WhatsApp seleccionables por el agente.
- Incorporar dinámicamente la cantidad de inputs, dependiendo del número de variables en la plantilla.
Recursos adicionales
- [Repositorio del proyecto]
- [Guía de creación de plantillas]
- [Guía de prerrequisitos]
- [Guía de despliegue CDK]