aws-social-messaging

작성자: aws

AWS End User Messaging Social를 통해 WhatsApp 메시징을 관리합니다. 템플릿 관리(생성, 업데이트, 삭제, 라이브러리), 메시지 전송…

npx skills add https://github.com/aws/agent-toolkit-for-aws --skill aws-social-messaging

AWS End User Messaging Social — WhatsApp

Overview

WhatsApp messaging via AWS End User Messaging Social: template management, sending, media handling, event destinations, and delivery troubleshooting.

Recommended setup: Use the AWS MCP server for sandboxed execution, audit logging, and enterprise controls.

Without AWS MCP: This skill works with any agent that has AWS CLI access. All commands use standard AWS CLI syntax.

Common Tasks

1. Verify Dependencies

Constraints:

  • The AWS MCP server is recommended for seamless API execution but not required — all commands use standard AWS CLI syntax
  • You MUST verify the AWS CLI is installed and configured with appropriate credentials
  • You SHOULD recommend the user assume an IAM role with ephemeral credentials
  • You MUST inform the user if any required tool is missing and how to install/configure it
  • You MUST ask the user if they want to proceed despite any missing tools
  • If the aws socialmessaging subcommand is not recognized, the user must update to the latest AWS CLI version
  • Required IAM permissions (scope to specific WABA and phone number ARNs):
    • Templates: social-messaging:CreateWhatsAppMessageTemplate, social-messaging:GetWhatsAppMessageTemplate, social-messaging:ListWhatsAppMessageTemplates, social-messaging:UpdateWhatsAppMessageTemplate, social-messaging:DeleteWhatsAppMessageTemplate, social-messaging:ListWhatsAppTemplateLibrary, social-messaging:CreateWhatsAppMessageTemplateFromLibrary
    • Sending: social-messaging:SendWhatsAppMessage
    • Media: social-messaging:PostWhatsAppMessageMedia, social-messaging:CreateWhatsAppMessageTemplateMedia, social-messaging:GetWhatsAppMessageMedia, social-messaging:DeleteWhatsAppMessageMedia
    • Events: social-messaging:PutWhatsAppBusinessAccountEventDestinations
    • Diagnostics: social-messaging:GetLinkedWhatsAppBusinessAccount, social-messaging:GetLinkedWhatsAppBusinessAccountPhoneNumber, social-messaging:ListLinkedWhatsAppBusinessAccounts
    • Supporting: sns:ListSubscriptionsByTopic, iam:PassRole (for event destination role)

2. Manage Templates

Create, update, and delete message templates (utility, marketing, authentication).

  • create-whatsapp-message-template: base64-encode --template-definition (blob type)
  • create-whatsapp-message-template-from-library: use pre-approved Meta library templates
  • list-whatsapp-template-library: browse available library templates
  • get-whatsapp-message-template: retrieve template details by --id (WABA) and --meta-template-id
  • update-whatsapp-message-template: modify existing template content
  • delete-whatsapp-message-template: requires --template-name (NOT --meta-template-name); always include --delete-all-languages
  • list-whatsapp-message-templates: response fields are templateStatus and templateCategory (NOT status/category)
  • Templates with {{N}} parameters MUST include "parameter_format": "positional" (exception: AUTHENTICATION — Meta handles OTP parameters automatically) and "example"
  • Meta reviews all templates (minutes to 24h); MUST NOT send with PENDING/REJECTED
  • Choosing the wrong category causes reclassification (UTILITY → MARKETING) which changes pricing — see managing-templates.md — Choosing the Right Category for guidance on selecting UTILITY vs MARKETING vs AUTHENTICATION
  • You MUST confirm the intended category (UTILITY, MARKETING, or AUTHENTICATION) with the user before creating a template — explain the categorization criteria and reclassification risk if the choice is ambiguous

See managing-templates.md.

3. Send Messages

Template Messages (no 24h restriction)

  • Use for: transactional updates (utility), promotions (marketing), verification codes (authentication)
  • Collect: phone number ID, recipient (E.164 with +), template name, language, parameters
  • Marketing templates may include image headers
  • --message is blob type — MUST base64-encode JSON

Freeform Messages (24h window required)

  • Use for: customer service replies within 24h of customer's last inbound message
  • Supports: text, image, document, video, audio — see WhatsApp Cloud API media reference for supported format and size constraints
  • No API to check window status — user must confirm from logs or event history
  • Media URLs MUST be publicly accessible HTTPS and remain available for the full 30-day message availability window (Meta can re-fetch anytime). For sensitive content (receipts, invoices, PII), upload via post-whatsapp-message-media and reference by media ID instead — presigned URLs cannot satisfy the 30-day availability requirement

Constraints for all sends:

  • Before executing any API call, validate parameter formats:
    • Phone number IDs match phone-number-id-* pattern
    • WABA IDs match waba-* pattern
    • Recipient numbers are E.164 with + prefix (e.g., +14155551234), or Business-Scoped User ID (BSUID) via the "recipient" field
    • Template names contain only lowercase letters, numbers, and underscores
    • Language codes use Meta's locale format with underscores (e.g., en_US, pt_BR)
    • --meta-api-version is v{Major}.{Minor} format (e.g., v21.0)
  • "messaging_product" MUST be "whatsapp" in the JSON body; check Meta's Graph API changelog for the supported Meta Graph API version
  • --message is blob type — MUST base64-encode the JSON payload
  • A successful messageId means queued, not delivered
  • You MUST ask for all required parameters upfront in a single prompt
  • You MUST accept parameters as individual values, JSON objects, or file references
  • You MUST explain each step before executing
  • You SHOULD confirm all parameters with the user before executing
  • You MUST respect the user's decision to abort
  • You MUST NOT send more than 5 messages per batch without user confirmation
  • You MUST NOT create or access credentials directly

See sending-messages.md.

4. Manage Media

Upload, retrieve, and delete media for messages and template headers.

  • post-whatsapp-message-media: upload media, returns reusable media ID
  • create-whatsapp-message-template-media: upload media specifically for template headers
  • get-whatsapp-message-media: retrieve media metadata/URL by ID
  • delete-whatsapp-message-media: remove uploaded media

See managing-media.md.

5. Configure Event Destinations

Set up delivery tracking, template status notifications, and reclassification alerts.

Set up delivery tracking, template status notifications, and reclassification alerts. A WABA can only have one event destination. See configuring-event-destinations.md for prerequisites (IAM role, SNS topic with KMS encryption, HTTPS-only subscription endpoints, condition keys) and full security controls.

6. Troubleshoot Delivery

Diagnostic flow: WABA status → phone number → templates → event destinations → quotas.

  • get-linked-whatsapp-business-account: registration MUST be COMPLETE
  • get-linked-whatsapp-business-account-phone-number: verify phone number health
  • list-linked-whatsapp-business-accounts: list all WABAs
  • Template reclassified: detectable via event destinations (real-time) or by listing templates and comparing categories; delete and recreate
  • 24h window expired: use template message instead
  • Rate limiting: new WABAs have lower limits; increases with quality
  • Recipient without WhatsApp: silently dropped

See troubleshooting-delivery.md.

Quick Reference — Common Errors

  • Access denied: verify IAM permissions scoped to WABA/phone number ARNs
  • Template rejected: body must match category; include parameter_format and example
  • Template reclassified: configure event destinations to detect; delete and recreate
  • 24h window expired: use template message instead of freeform
  • Send fails: --origination-phone-number-id is the ID (not phone number); recipient E.164 with +
  • Queued but not delivered: 200 = queued; configure event destinations for status
  • Media URL inaccessible: must be publicly accessible HTTPS

Security Considerations

  • Use least-privilege IAM policies scoped to specific social-messaging: actions and WABA/phone number ARNs
  • Use ephemeral credentials (IAM roles) instead of long-lived access keys
  • Store secrets in AWS Secrets Manager or Parameter Store — never in code or environment variables
  • Enable CloudTrail for auditing all social-messaging API calls; encrypt logs with KMS CMK
  • Encrypt SNS topics for event destinations with KMS (callbacks contain recipient metadata)
  • Encrypt CloudWatch Logs with KMS if monitoring social-messaging activity
  • Avoid sensitive data in template parameters and freeform message content (they appear in CloudTrail logs)
  • Validate recipient phone numbers to prevent unauthorized messaging
  • Verify SNS subscription endpoints are authorized by your team — validate that all subscribed email addresses and systems belong to personnel/systems that should receive sensitive delivery status and recipient metadata before confirming subscriptions. Use HTTPS-only endpoints
  • Add condition keys (aws:SourceArn, aws:SourceAccount) to SNS topic policies to prevent confused deputy attacks
  • Implement rate limiting via service quotas and CloudWatch alarms on send rates

Additional Resources

aws의 다른 스킬

analyzing-release-readiness
aws
GitHub PR, GitLab MR 또는 로컬 브랜치에서 병합 전 릴리스 준비 검토를 트리거합니다. 사용자가 코드 변경 사항의 위험성, 정확성 등을 분석하려 할 때 사용합니다.
scanning-with-aws-security-agent
aws
작업 공간에서 AWS Security Agent 스캔 실행 — 소스를 AWS에 업로드하고, 관리형 Security Agent 서비스로 스캔한 후, 순위가 매겨진 검증된 결과를 반환합니다…
coordinating-multi-space-devops-agent
aws
하나의 Claude Code 세션에서 여러 AgentSpaces에 걸쳐 AWS DevOps Agent를 조정하세요 — 질문을 올바른 공간(프로덕션 vs 스테이징 vs 지식)으로 라우팅하고,…
aws-security
aws
AWS 보안 서비스 및 워크플로우를 다룹니다 — Security Hub V2 (OCSF) findings, 커넥터, 애그리게이터, 자동화 규칙, 보안 상태 요약 등…
querying-aws-sagemaker-catalog
aws
SageMaker Catalog 자산 메타데이터 테이블에서 SQL 분석을 실행하며, S3 Tables에서 Apache Iceberg로 내보낸 데이터를 대상으로 합니다. 거버넌스 쿼리, 자산 성장 추적 등을 다룹니다.
agents-connect
aws
에이전트를 Gateway를 통해 외부 API, 도구 또는 서비스에 연결하거나 Cedar 정책으로 도구 접근을 제한할 때 사용합니다. 게이트웨이 설정, 대상...
aurora-dsql
aws
Aurora DSQL 클러스터를 프로비저닝하고 관리하며, psql 또는 DSQL 커넥터를 통해 연결하고, 스키마를 관리하고, 쿼리를 실행하고, MySQL에서 마이그레이션하고, 쿼리 계획을 진단합니다.
transitgateway
aws
AWS Transit Gateway를 구성합니다: 허브를 생성하고 VPC를 연결하며, 라우팅 테이블로 트래픽을 분리하고, 허브를 통해 이그레스 및 검사를 중앙화합니다…