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에서 데이터를 검색합니다.
- 흐름은 에이전트 워크스페이스에 사전 채워진 데이터가 포함된 **양식(View)**을 표시합니다.
- 에이전트는 정보를 검토/편집하고 보내기를 클릭합니다.
- 두 번째 Lambda(
send_whatsapp_message)가 AWS End User Messaging Social을 통해 템플릿 메시지를 전송합니다.
사전 요구 사항
| 요구 사항 | 상세 |
|---|---|
| WhatsApp Business 계정 (WABA) | 새 계정을 만들거나 기존 계정을 AWS로 마이그레이션합니다. 단계는 여기에서 확인하세요. |
| Meta Business | AWS End User Messaging Social에 계정을 연결하려면 필요합니다. |
| 전화번호 | SMS/음성 인증을 받을 수 있어야 하며 WhatsApp에 추가되어 있어야 합니다. ⚠️ 개인 번호를 사용하지 마세요. |
| Amazon Connect 인스턴스 | 없으시면 공식 가이드를 따라 생성하세요. |
| INSTANCE_ID | 콘솔이나 ARN에서 찾을 수 있습니다: arn:aws:connect:::instance/INSTANCE_ID. |
| WhatsApp 메시지 템플릿 | End User Messaging에서 생성 (번호와 동일한 리전). |
| AWS CDK | 인프라를 배포하기 위해 사용합니다. |
| AWS Systems Manager Parameter Store | 템플릿 구성을 저장하기 위해 사용합니다. |
초기 설정
-
config.py를 편집하고INSTANCE_ID를 입력하세요INSTANCE_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 로 설정되어 있습니다 (연락처 속성을 통해서도 가져올 수 있습니다).
Contact Flow
- 플로우
SendWhatsAppGuideFlow007로 이동합니다.
a) 첫 번째 블록 Invoke AWS Lambda function
-
GetCustomerData를 포함하는 Lambda를 선택합니다. -
모의 함수 예시 (실제 로직으로 교체하세요):
def lambda_handler(event, context): return { "fullName": "Juan Pérez", "phoneNumber": "+XXXXXXXX", "input4": "Entregado", "input3": "Puzzle 1000 piezas", "input2": "P12345", "input1": "Juan", } -
이 모의를 데이터 소스 (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️⃣ 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 -
Confirm 를 클릭합니다.
최종 단계별 안내
- CDK를 사용하여 인프라를 배포합니다.
- SSM 파라미터를 템플릿 설정으로 업데이트합니다.
- Amazon Connect에서 뷰
enviarWhatsAppForm007를 구성합니다. - 비즈니스 로직에 맞게 Lambda (
GetCustomerData및SendWhatsappMessage)를 수정합니다. - Contact Flow
SendWhatsAppGuideFlow007의 해당 블록에 Lambda를 연결합니다. - 테스트: Agent Workspace를 열고, 연락을 시작한 뒤, 양식이 사전 채워지는지와 클릭 한 번으로 메시지가 전송되는지 확인합니다.
유용한 리소스
- GitHub 리포지토리
- AWS End User Messaging Social 문서
- WhatsApp 템플릿 생성 가이드 (EUMS 콘솔에서)
- AWS CDK – Getting Started
Lambda 코드
def da_handler(event, context):
# SSM Parameter Store에서 템플릿 구성을 로드합니다.
config = get_ssm_parameter(CONFIG_PARAM_NAME)
message_payload = config["message"]
# 연락처 속성에서 양식 값을 추출합니다.
attributes = event["Details"]["ContactData"]["Attributes"]
phone_number = attributes.get("phoneNumber")
# input1..input4에서 템플릿 매개변수를 구성합니다.
template_params = build_template_parameters(
attributes, ["input1", "input2", "input3", "input4"]
)
# 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 구성 요소를 끌어다 놓기.
- 배포된 연락 흐름 SendWhatsAppGuideFlow007 로
contactFlowId를 설정합니다.
- 배포된 연락 흐름 SendWhatsAppGuideFlow007 로
-
보기에 이름을 지정하고 Publish 를 클릭.
워크스페이스 생성
-
Amazon Connect 워크스페이스로 이동
https://.my.connect.aws/workspaces -
‘Add new workspace’를 클릭하고 다음을 입력
- 이름
- 설명
- 제목
-
필요한 사용자 또는 라우팅 프로필에 이 워크스페이스를 할당합니다.
-
새 페이지 추가
- Set page with custom page slug 사용
- 이전 단계에서 만든 보기(‘Connect Application’ 컴포넌트가 포함된)를 선택
- 예시와 같이 사용자 정의 슬러그 사용:
/page/send_whatsapp -
페이지를 저장합니다.
-
Agent Workspace 상단 탐색 바에서 사용자 지정 워크스페이스를 선택합니다.
이제 에이전트는 사용자 지정 페이지로 이동하여 WhatsApp 템플릿 메시지를 고객에게 보내는 가이드를 사용할 수 있습니다.
에이전트 작업 흐름
- 맞춤 페이지를 열면 Connect Application이 표시되어 연락 흐름을 실행합니다.
- 흐름은 고객 데이터 Lambda에서 미리 로드된 값이 포함된 양식을 보여줍니다.
- 에이전트가 양식을 검토하고 수정한 뒤 전송합니다.
- 전송 시 WhatsApp 전송 Lambda가 양식의 모든 매개변수와 함께 호출되어 최종 메시지를 전달합니다.
솔루션 확장을 위한 아이디어
- 고객 데이터 Lambda를 Amazon Connect Customer Profiles 또는 DynamoDB에 연결합니다.
- 양식에 추가 검증을 추가합니다.
- 에이전트가 선택할 수 있는 여러 WhatsApp 템플릿을 지원합니다.
- 템플릿의 변수 수에 따라 입력 필드 수를 동적으로 포함합니다.
추가 자료
- [프로젝트 저장소]
- [템플릿 생성 가이드]
- [전제 조건 가이드]
- [CDK 배포 가이드]