目次
AWS End User Messaging 完全ガイド v2.0
Tier 2 SMS・Voice・Push・MMS・WhatsApp 統一メッセージングプラットフォーム
ドキュメントの目的
本ガイドは以下を対象としています。
- 初心者向け: AWS End User Messaging とは何か、SMS・Voice・Push の基本を学びたい方
- 開発者向け: SMS/Voice API・Phone Pool・10DLC を実装したい方
- SRE・運用向け: Origination Identity・Two-way SMS・スケーリングを設計したい方
- 意思決定者向け: Twilio・Sinch・Vonage との比較・投資判断
2025-2026 年の AWS End User Messaging 最新動向
AWS End User Messaging は 2024年7月から Amazon Pinpoint の SMS/Voice チャネルを統合・分離した新サービスです。
- Pinpoint との統合分離: SMS・Voice は EUM へ、Campaign・Journey は廃止予定(Connect 推奨)
- Push Notification 対応: FCM・APNs・Web Push を統一
- 2-way SMS 強化: Reply handling・Customer conversation
- Phone Pool & Short Code 管理: DLT / 10DLC / Toll-free / Long code
- Global SMS Reach: 249 country で SMS delivery
- Pinpoint Endpoint Migration: Seamless migration tool 提供
目次
- 本質・定義
- EUM が解決する課題
- 主な特徴
- アーキテクチャ
- コアコンポーネント
- 主要ユースケース(10+)
- 設定・操作の具体例
- 類似サービス比較表
- ベストプラクティス
- トラブルシューティング
- 2025-2026 最新動向
- 学習リソース・参考文献
- 実装例・チェックリスト
- まとめ
本質・定義
AWS End User Messaging(EUM)は マルチチャネル一括メッセージングプラットフォーム。以下を提供します:
- SMS / MMS: SMS Gateway・キャリア統合・Global reach(249 countries)
- Voice: Text-to-speech・Voice calling・DTMF handling
- Push Notification: FCM・APNs・Web Push 統一
- Phone Pool Management: Short code・Long code・Toll-free・10DLC
- Origination Identity: Sender ID・Phone number・Brand registry
- Two-way SMS: Customer reply handling・Conversation management
- Compliance: DLT registration・GDPR・CCPA・SMS opt-in tracking
Pinpoint の SMS/Voice コンポーネント + Push を統合したシンプル API ベースサービス
EUM が解決する課題
1. マルチキャリア対応の複雑さ
複数の SMS キャリア・地域規制・10DLC / DLT 要件を自動処理。
2. Phone Number 管理
Short code・Long code・Toll-free・International numbers を一元管理。
3. SMS Compliance
DLT(Distributed Ledger Technology)登録・Campaign classification・Opt-in tracking。
4. Voice Messaging
Text-to-speech・IVR・DTMF・自動応答を簡単統合。
5. リアルタイム配信
Low latency・高スループット・失敗時の自動リトライ。
主な特徴
| 機能 | 説明 |
|---|---|
| SMS / MMS | 249 countries 対応・Unicode・長文対応(自動分割) |
| Voice Messaging | Text-to-speech・IVR・DTMF・Recording |
| Push Notification | FCM・APNs・Web Push・Scheduled delivery |
| 2-way SMS | Customer reply handling・Conversation mode |
| Origination Identity | Short code・Long code・Toll-free・Alphanumeric |
| Phone Pool | Phone number 共有・スケーリング・Cost optimization |
| DLT / 10DLC | Campaign 自動分類・Compliance tracking |
| Opt-in Management | Two-way opt-in confirmation・Opt-out list |
| Rate Limiting | Per-destination rate limits・Throttling |
| Detailed Metrics | Delivery rate・Bounce・Failure reasons |
アーキテクチャ
graph TB
A["Client Application<br/>(Web, Mobile, Server)"] -->|Send SMS/Voice/Push| B["EUM API<br/>(SMS, Voice, Push endpoints)"]
B -->|Route by Channel| C{Channel Router}
C -->|SMS| D["SMS Gateway<br/>(Carrier integration)"]
C -->|Voice| E["Voice Service<br/>(TTS + Call handling)"]
C -->|Push| F["Push Service<br/>(FCM/APNs/Web)"]
D -->|Origination ID Lookup| G["Phone Pool<br/>(Short code, Long code, etc)"]
G -->|10DLC/DLT Check| H["Compliance Engine<br/>(DLT registry, Campaign class)"]
H -->|Approve/Reject| I{Delivery Decision}
I -->|✓ Approved| J["Carrier Network<br/>(Telcos)"]
I -->|✗ Rejected| K["Failure Handling<br/>(Bounce, Reject)"]
E -->|Voice Call| J
F -->|Push Token| L["Device Services<br/>(FCM/APNs/Web)"]
J -->|Deliver| M["End User Device"]
L -->|Deliver| M
M -->|Response Event| N["Event Handler<br/>(SNS/SQS/Webhook)"]
N -->|Store| O["DynamoDB<br/>(Message log, metrics)"]
O -->|Analytics| P["CloudWatch<br/>(Delivery rate, cost)"]
2-way SMS Flow
graph LR
A["Application<br/>sends SMS"] -->|SendTextMessage| B["EUM API"]
B -->|Route| C["Carrier Network"]
C -->|Deliver| D["User Phone<br/>(receives SMS)"]
D -->|User replies| C
C -->|Webhook| E["Application"]
E -->|Handle Reply<br/>(process keyword, update DB)"] F["Database<br/>(conversation state)"]
F -->|SendTextMessage| B
B -->|Route Reply| C
C -->|Deliver| D
コアコンポーネント
1. Phone Pool(フォンプール)
送信元電話番号の管理・共有。
Phone Number Types:
- Short Code(4-6 digits, US only):High throughput、High cost
- Long Code(10 digits, US only):Lower cost、Rate limited(100 msg/24h)
- Toll-free(+1-800/888/etc):Medium cost、Medium throughput
- Alphanumeric Sender ID(Text-based ID):International、Variable support per carrier
Example Phone Pool:
{
"PhoneNumbers": [
{
"PhoneNumber": "+1-212-555-0100",
"Country": "US",
"Type": "TollFree",
"Capability": "SMS,Voice",
"Status": "Active"
},
{
"PhoneNumber": "54321",
"Country": "US",
"Type": "ShortCode",
"Capability": "SMS",
"Status": "Active",
"Throughput": 100 // msg/second
}
]
}
2. Origination Identity(オリジネーション・アイデンティティ)
メッセージの送信元・認証情報。
Identity Types:
- Sender ID - Alphanumeric(例:“CompanyName”)
- Phone Number - +1 から始まる電話番号
- Brand Identity - Campaign Registry 登録済みブランド
Key Attributes:
{
"OriginationIdentityArn": "arn:aws:sms-voice:us-east-1:ACCOUNT:phone-number/+1212555...",
"OriginationIdentityProperties": {
"IsoCountryCode": "US",
"DisplayName": "MyCompany",
"CreatedTimestamp": "2026-04-01T00:00:00Z"
}
}
3. DLT & Campaign Classification
SMS compliance・キャリア規制対応。
DLT (Distributed Ledger Technology):
- Purpose: 送信キャンペーンの分類・トラッキング
- Required Fields:
- Campaign ID
- Campaign Category(Marketing, Alert, Account Update, etc)
- Opt-in status per recipient
- Sender identity
10DLC (10-Digit Long Code):
- Throughput: ~100 msg/24h per number(shared usage)
- Requirement: Brand registration + Campaign registration
- Cost: $0.0075/SMS(1-way Long Code)
Short Code:
- Throughput: 100+ msg/second
- Requirement: DLT + Campaign registration
- Cost: Higher($500-1000/month lease)
4. Two-way SMS & Conversation
Customer reply handling・Conversation state management。
Reply Routing Options:
- SNS Topic - reply を SNS で発行
- SQS Queue - reply を queue でバッファ
- Lambda - direct Lambda invocation
- Webhook - HTTP POST to custom endpoint
Example Reply Event:
{
"EventType": "TextMessageEvent",
"EventSubType": "Inbound",
"PhoneNumber": "+15551234567",
"Message": "Yes, confirm my order",
"MessageId": "msg-abc123",
"Timestamp": "2026-04-28T10:30:00Z",
"OriginationIdentity": "+1-212-555-0100"
}
5. Push Notification(プッシュ通知)
FCM・APNs・Web Push 統一。
Platforms Supported:
- FCM (Firebase Cloud Messaging) - Android
- APNs (Apple Push Notification Service) - iOS
- Web Push - Browser push (Safari, Chrome, Firefox)
Message Types:
- Notification - User visible alert
- Data - Silent background data(Silent push)
- Mixed - Both notification + data payload
Example Push Message:
{
"TargetPhoneNumber": "+15551234567",
"Channel": "PUSH",
"MessageContent": {
"Title": "Order Shipped",
"Body": "Your order #12345 is on the way",
"ImageUrl": "https://example.com/tracking.png"
},
"DeliverySchedule": {
"Immediate": true
}
}
6. Voice Message(音声メッセージ)
Text-to-speech・IVR・DTMF handling。
Voice Types:
- Promotional Voice - Recorded message + DTMF
- Transactional Voice - Alert / Confirmation
- Two-way Voice - IVR + DTMF input
Example Voice Message:
{
"DestinationPhoneNumber": "+15551234567",
"OriginationIdentity": "+1-212-555-0100",
"VoiceMessage": {
"TextToSpeechMessage": "Hello, your order is ready for pickup",
"SSMLMessage": "<speak>Your balance is <prosody pitch='high'>$100</prosody></speak>",
"Audio": "s3://bucket/voice-message.wav"
},
"DurationSeconds": 120
}
主要ユースケース(10+)
1. Two-factor Authentication(2FA / OTP)
Scenario: ユーザーログイン時の OTP 送信
─────────────────────────────────
1. ユーザーが email/password 入力 → Submit
2. Application → SendTextMessage API
- Recipient: +1 555 123 4567
- Message: "Your verification code: 123456 (valid 10 min)"
- Channel: SMS (Fast, Reliable)
3. Carrier delivers SMS < 5 seconds
4. User enters code → Verify
5. Success / Failure log to CloudWatch
2. Appointment Reminders(診療予約リマインダー)
Scenario: 医療機関からの予約確認・リマインダー
──────────────────────────────────────
Day 7 before: Reminder SMS sent
- "Your appointment: April 28, 2:00 PM at Medical Center. Reply CONFIRM"
User replies: "CONFIRM" → Application processes → Database update
→ Send confirmation email + calendar link
Day 1 before: Final reminder
- "Tomorrow, 2:00 PM. Questions? Call 212-555-CLINIC"
Post-appointment: Follow-up survey
- "How was your visit? Reply Y/N"
3. Delivery Notifications(配送通知)
Scenario: e-commerce 配送通知
───────────────────────────
1. Order placed → SMS confirmation
"Order #12345 confirmed. Total: $99.99"
2. Order shipped → Tracking notification
"Your package shipped! Track: https://tracking.example.com/xyz"
3. Out for delivery → Real-time update
"Delivery: Driver is 10 mins away"
4. Delivered → Confirmation
"Package delivered. Rate your delivery: https://feedback.example.com"
5. Return window → Follow-up
"Return deadline in 3 days. Issue? Reply RETURN"
4. Account Notifications(アカウント通知)
Scenario: Bank transaction alerts
──────────────────────────────
Transaction > $1000 → Instant SMS alert
"Alert: $5,000 withdrawal from ATM on 04/28 12:34. Call 800-BANK if not you."
User replies: "This is me" or "This is fraud"
→ Application updates fraud score → Potential blocking
5. Marketing Campaign / Flash Sale
Scenario: Flash sale 告知
──────────────────────
1. Segment: "VIP customers + opt-in"
2. Schedule: 10 AM ET on April 28
3. Message: "FLASH SALE: 50% off shoes. Ends in 2 hours. https://shop.example.com"
4. Origination: Short code (fast delivery)
5. Metrics:
- Sent: 50,000
- Delivered: 49,500
- Clicked: 12,300 (24.8%)
- Converted: 2,100 ($250,000 revenue)
6. Two-way Customer Service(顧客サービス)
Scenario: Customer support chat via SMS
────────────────────────────────────
Customer SMS: "How do I track my order?"
→ Lambda handler processes intent (extract order ID)
→ Lookup order in DynamoDB
→ Send SMS: "Your order #ABC is in Transit. ETA April 29. Track: [link]"
Customer SMS: "Can I change delivery address?"
→ System response: "Sure! What's the new address?"
→ Customer provides address
→ System updates order → Confirmation SMS sent
7. Subscription Management
Scenario: Subscription renewal reminder
──────────────────────────────
Day 30 before expiry: Reminder
"Your premium subscription expires in 30 days. Renew now for 20% off. https://..."
User replies: "RENEW" or "CANCEL"
→ Process reply → Update subscription database
Day 1 before: Final reminder
"Your premium subscription expires tomorrow. Renew to keep benefits."
8. Authentication Code (Email 補強)
Scenario: Email verification code delivery
────────────────────────────────────────
Sign-up → Send SMS + Email verification code
"Your verification code: 987654"
SMS は email より確実(Email は spam folder のリスク)
→ Faster account verification
9. Transactional Alerts(取引アラート)
Scenario: Payment processor notification
──────────────────────────────────────
1. Payment failed → SMS alert
"Payment failed for order #ABC. Retry: https://..."
2. High-risk transaction → SMS confirmation
"New $10,000 charge detected. Approve? Y/N"
3. Refund initiated → SMS confirmation
"Refund of $99.99 initiated. Expect 3-5 business days."
10. Opt-in / Preference Management(同意管理)
Scenario: SMS marketing campaign opt-in
──────────────────────────────────────
User receives SMS with opt-in request:
"Get exclusive deals! Text SIGNUP to opt-in. Msg & data rates apply."
User replies: "SIGNUP"
→ Two-way opt-in confirmation logged
→ Application marks user as opted-in
→ Now eligible for future marketing campaigns
User opts out later: "STOP"
→ Automatic opt-out processing
→ No more promotional SMS (transactional only permitted)
11. Voice IVR(音声 IVR)
Scenario: Bank balance inquiry via voice call
──────────────────────────────────────────
1. User calls customer service number
2. IVR: "Welcome to MyBank. Press 1 for balance, 2 for recent transactions"
3. User presses 1
4. IVR: "Your balance is $15,230.45. Press 1 to repeat"
5. User hangs up
Alternative: Text "BALANCE" → Voice callback "Your balance is..."
12. Alert Escalation(エスカレーション)
Scenario: Critical system alert escalation
─────────────────────────────────────────
Monitoring detects: Database down
1. SMS Alert: "DB-PROD down. Response team notified"
2. No ACK within 5 min → Voice call to on-call engineer
3. Voice: "Critical alert: Database down. Press 1 to acknowledge"
4. Engineer presses 1 → Escalates to manager + on-call team
設定・操作の具体例
AWS Console - SMS 送信設定
1. Origination Identity 登録
1. EUM Console → Phone Numbers
2. Register Phone Number
3. Phone: +1-212-555-0100
4. Type: Long Code / Toll-free / Short Code
5. Country: US
6. Capabilities: SMS, Voice
7. Register → Approval process (~24h for validation)
2. Campaign Registration(10DLC)
1. EUM Console → Campaigns
2. Create Campaign
3. Campaign Name: "Monthly Newsletter"
4. Campaign Category: Marketing
5. Sender Identity: +1-212-555-0100
6. Expected Volume: 100,000 msg/day
7. Message Sample: "Check out our latest deals..."
8. Submit for approval (~24h)
3. SMS 送信
1. EUM Console → Send SMS
2. Recipient Phone: +1-555-123-4567
3. Message: "Your order #ABC123 is ready for pickup"
4. Origination: +1-212-555-0100
5. Schedule: Immediate / Scheduled
6. Send → MessageId returned
AWS CLI - SMS & Voice 送信
# SMS 送信(Simple API)
aws sms-voice send-text-message \
--destination-phone-number "+15551234567" \
--origination-identity "+1-212-555-0100" \
--message-body "Your verification code: 123456" \
--region us-east-1
# Response
{
"MessageId": "msg-abc123",
"MessageStatus": "Sent"
}
# Voice Message 送信
aws sms-voice send-voice-message \
--destination-phone-number "+15551234567" \
--origination-identity "+1-212-555-0100" \
--voice-message '{
"TextToSpeechMessage": "Hello, your order is ready for pickup"
}' \
--region us-east-1
# Push Notification 送信
aws sms-voice send-notification \
--destination-phone-number "+15551234567" \
--channel PUSH \
--notification '{
"Title": "Order Update",
"Body": "Your order has shipped"
}' \
--region us-east-1
# Delivery status 確認
aws sms-voice get-message-status-summary \
--message-id "msg-abc123" \
--region us-east-1
# Account-level metrics 取得
aws cloudwatch get-metric-statistics \
--namespace AWS/SMSV2 \
--metric-name SMSSuccessfulDeliveries \
--start-time 2026-04-01T00:00:00Z \
--end-time 2026-04-28T23:59:59Z \
--period 86400 \
--statistics Sum \
--region us-east-1
Python SDK - SMS & Voice & Push
import boto3
import json
from datetime import datetime
sms_voice_client = boto3.client('sms-voice', region_name='us-east-1')
sns_client = boto3.client('sns', region_name='us-east-1')
class EndUserMessagingService:
def __init__(self):
self.client = sms_voice_client
def send_sms(self, phone_number, message, origination_id):
"""Send SMS message"""
response = self.client.send_text_message(
DestinationPhoneNumber=phone_number,
OriginationIdentity=origination_id,
MessageBody=message,
MessageType='TRANSACTIONAL',
DryRun=False
)
return response
def send_2fa_code(self, phone_number, code, origination_id):
"""Send OTP / 2FA code"""
message = f"Your verification code: {code}. Valid for 10 minutes."
return self.send_sms(phone_number, message, origination_id)
def send_voice_message(self, phone_number, text, origination_id):
"""Send voice message"""
response = self.client.send_voice_message(
DestinationPhoneNumber=phone_number,
OriginationIdentity=origination_id,
VoiceMessage={
'TextToSpeechMessage': text,
'LanguageCode': 'en-US'
}
)
return response
def send_voice_alert(self, phone_number, alert_message):
"""Send critical alert via voice"""
response = self.send_voice_message(
phone_number,
f"Alert: {alert_message}. Press 1 to acknowledge.",
origination_id="+1-212-555-ALERT"
)
return response
def send_push_notification(self, phone_number, title, body):
"""Send push notification"""
response = self.client.send_notification(
DestinationPhoneNumber=phone_number,
Channel='PUSH',
NotificationContent={
'Title': title,
'Body': body
}
)
return response
def setup_two_way_sms(self, sns_topic_arn):
"""Setup 2-way SMS replies to SNS topic"""
response = self.client.create_event_destination(
EventDestinationName='InboundSMSEvents',
EventDestination={
'Enabled': True,
'MatchingEventTypes': ['TEXT_SUCCESS', 'TEXT_FAILURE'],
'CloudWatchLogsEventDestination': {
'IamRoleArn': 'arn:aws:iam::ACCOUNT:role/EUM-CloudWatch',
'LogGroupName': '/aws/sms-voice/inbound'
},
'SnsDestination': {
'TopicArn': sns_topic_arn
}
}
)
return response
def get_account_metrics(self):
"""Get account-level metrics from CloudWatch"""
cw = boto3.client('cloudwatch', region_name='us-east-1')
response = cw.get_metric_statistics(
Namespace='AWS/SMSV2',
MetricName='SMSSuccessfulDeliveries',
StartTime=datetime(2026, 4, 1),
EndTime=datetime(2026, 4, 28),
Period=86400,
Statistics=['Sum']
)
return response
# Usage
service = EndUserMessagingService()
# Send OTP
response = service.send_2fa_code(
phone_number="+15551234567",
code="123456",
origination_id="+1-212-555-0100"
)
print(f"OTP sent: {response['MessageId']}")
# Send voice alert
response = service.send_voice_alert(
phone_number="+15551234567",
alert_message="Database is down"
)
print(f"Voice alert: {response['MessageId']}")
# Send push
response = service.send_push_notification(
phone_number="+15551234567",
title="Order Update",
body="Your order has shipped"
)
print(f"Push sent: {response['MessageId']}")
Terraform IaC - EUM Infrastructure
# SNS topic for 2-way SMS replies
resource "aws_sns_topic" "inbound_sms" {
name = "eum-inbound-sms-replies"
tags = {
Application = "EndUserMessaging"
Environment = "production"
}
}
# SQS queue for batch processing
resource "aws_sqs_queue" "sms_replies" {
name = "eum-sms-replies-queue"
message_retention_seconds = 86400 # 24 hours
visibility_timeout_seconds = 300
tags = {
Application = "EndUserMessaging"
}
}
# SNS subscription to SQS
resource "aws_sns_topic_subscription" "inbound_sms_to_sqs" {
topic_arn = aws_sns_topic.inbound_sms.arn
protocol = "sqs"
endpoint = aws_sqs_queue.sms_replies.arn
}
# Lambda for processing 2-way SMS replies
resource "aws_lambda_function" "sms_reply_processor" {
filename = "lambda_sms_processor.zip"
function_name = "eum-sms-reply-processor"
role = aws_iam_role.lambda_role.arn
handler = "index.handler"
runtime = "python3.11"
timeout = 60
environment {
variables = {
SQS_QUEUE_URL = aws_sqs_queue.sms_replies.url
DYNAMODB_TABLE = aws_dynamodb_table.conversations.name
}
}
}
# DynamoDB for conversation state
resource "aws_dynamodb_table" "conversations" {
name = "eum-conversations"
billing_mode = "PAY_PER_REQUEST"
hash_key = "ConversationId"
range_key = "Timestamp"
attribute {
name = "ConversationId"
type = "S"
}
attribute {
name = "Timestamp"
type = "S"
}
ttl {
attribute_name = "ExpirationTime"
enabled = true
}
tags = {
Application = "EndUserMessaging"
}
}
# CloudWatch log group
resource "aws_cloudwatch_log_group" "eum_logs" {
name = "/aws/sms-voice/application"
retention_in_days = 30
tags = {
Application = "EndUserMessaging"
}
}
# CloudWatch alarm for high delivery failure rate
resource "aws_cloudwatch_metric_alarm" "high_failure_rate" {
alarm_name = "eum-high-sms-failure-rate"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
metric_name = "SMSDeliveryFailures"
namespace = "AWS/SMSV2"
period = 300
statistic = "Sum"
threshold = 100
alarm_actions = [aws_sns_topic.alerts.arn]
}
output "sns_inbound_topic_arn" {
value = aws_sns_topic.inbound_sms.arn
}
output "sqs_queue_url" {
value = aws_sqs_queue.sms_replies.url
}
類似サービス比較表
| 機能 | AWS EUM | Twilio | Sinch | Vonage | MessageBird | Plivo |
|---|---|---|---|---|---|---|
| SMS | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 |
| MMS | 〇 | 〇 | 〇 | 〇 | △ | 〇 |
| Voice | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 |
| △ | 〇 | 〇 | 〇 | 〇 | ✕ | |
| Push Notification | 〇 | ✕ | △ | △ | △ | ✕ |
| 2-way SMS | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 |
| Short Code | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 |
| 10DLC / DLT | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 |
| Global Reach | 249 countries | 180+ | 190+ | 190+ | 150+ | 150+ |
| AWS Native | 〇 | ✕ | ✕ | ✕ | ✕ | ✕ |
| Price (per SMS) | $0.0075-0.05 | $0.0075 | $0.01-0.05 | $0.01-0.08 | $0.01-0.10 | $0.005-0.10 |
| API Simplicity | ★★★★★ | ★★★★ | ★★★★ | ★★★ | ★★★ | ★★★ |
| Enterprise Support | 〇 | 〇 | 〇 | 〇 | 〇 | △ |
ベストプラクティス
✅ 推奨事項
1. Phone Number Strategy
- Short Code: High volume(100+ msg/sec)・Time-sensitive alerts
- Long Code: Standard volume(~100 msg/24h)・Cost-effective
- Toll-free: Premium experience・Customer service
- Alphanumeric: International・Brand recognition
2. SMS Compliance
- DLT Registration: 全 SMS キャンペーン登録・Carrier compliance
- Opt-in Confirmation: Two-way opt-in recorded・Audit trail
- GDPR/CCPA: Consent management・Retention policy
- Rate Limiting: Per-destination rate limits・Carrier throttle対応
3. Message Design
- Clear & Concise: 160 characters(最初のセグメント)推奨
- CTA 明確: Link・Phone number・Reply keyword
- Brand Consistency: Sender ID・Tone・Frequency
- Localization: Language・Timezone・Cultural sensitivity
4. Two-way SMS
- Auto-reply を避ける: User frustration・Carrier penalties
- Intent Detection: Keyword matching・NLP for understanding
- Response SLA: 2-5分以内の応答目標
- Conversation Memory: DynamoDB で会話履歴保持
5. Monitoring & Analytics
- Delivery Metrics: Sent・Delivered・Failed・Bounce reasons
- Cost Tracking: SMS count・Volume trends・Regional breakdown
- Quality Monitoring: Network latency・Carrier performance
- User Metrics: Opt-in rate・Reply rate・Conversion
❌ 避けるべき事項
| ❌ アンチパターン | ✅ 改善案 |
|---|---|
| SMS spam・excessive frequency | SMS opt-in list・frequency cap(1/day) |
| Unsolicited marketing SMS | Explicit opt-in confirmation + STOP keyword |
| Personal phone numbers | Dedicated phone pool・Short code |
| Unencrypted message content | HTTPS・OAuth2・Message encryption |
| No error handling | Retry logic・DLQ for failed messages |
| Ignoring carrier rate limits | Rate limiting・Backoff strategy |
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| “Invalid phone number” | Format 不正(+1 prefix missing) | E.164 format 確認(+1 555 123 4567) |
| “Campaign not approved” | DLT registration missing | Campaign registry で DLT 登録 |
| “High bounce rate” | Invalid / Inactive numbers | Phone list cleansing・validation API |
| “SMS delivery slow (5+ min)” | Carrier network delay | Region-specific issue か確認・別キャリア試行 |
| “STOP keyword auto-reply failing” | Carrier opt-out list未同期 | SNS suppression list update |
| “Two-way SMS replies missing” | SNS/SQS subscription unconfigured | Event destination setup 確認 |
| “Voice call no audio” | Network / Codec incompatibility | TLS endpoint 確認・再試行 |
| “Push token expired” | Device token stale(6+ months) | Token refresh logic 実装・FCM/APNs rotation |
2025-2026 最新動向
1. Pinpoint からの移行加速
- Pinpoint SMS/Voice は EUM へ統合
- Campaign・Journey は Amazon Connect へ推奨
- Email は SES / Mail Manager へ推奨
- 2026年10月30日: Pinpoint end-of-support
2. WhatsApp・RCS・MMS 拡大
- WhatsApp Business API 統合(preview)
- RCS(Rich Communication Service)対応予定
- MMS quality 改善(video・rich media)
3. Generative AI 統合
- AI-powered SMS template generation
- Sentiment-based routing
- Predictive best-time-to-send
4. Enhanced Compliance
- GDPR・CCPA・SMS regulation evolution
- Automated consent tracking・audit logs
- Real-time compliance checking
5. Cost Optimization
- Pay-per-delivery pricing model拡大
- Volume discount tier 改善
- Unused resource cleanup automation
学習リソース・参考文献
公式ドキュメント・ガイド(8+)
- What is AWS End User Messaging SMS?
- AWS End User Messaging User Guide
- AWS End User Messaging API Reference
- Pinpoint to AWS End User Messaging Migration Guide
- Phone Pool & Origination Identity Management
- SMS Compliance & DLT Registration
- AWS End User Messaging Pricing
- AWS End User Messaging FAQs
ベンダー・OSS リソース(5+)
- Twilio SMS Documentation
- Twilio Voice Documentation
- Vonage SMS API
- Sinch SMS API
- MessageBird Documentation
AWS Blog・ホワイトペーパー(5+)
- AWS Messaging & Targeting Blog
- AWS End User Messaging Migration Guide
- SMS Best Practices & Compliance Whitepaper
- AWS Well-Architected Framework - Security Pillar
- Customer Communication Architecture on AWS
実装例・チェックリスト
実装例 1: Multi-channel Alert System
class AlertService:
def send_critical_alert(self, alert_message, recipients):
"""Send critical alert via SMS + Voice"""
for recipient in recipients:
# SMS (fast, silent)
sms_response = sms_client.send_text_message(
DestinationPhoneNumber=recipient['phone'],
OriginationIdentity="+1-212-555-ALERT",
MessageBody=f"CRITICAL: {alert_message}. Acknowledge: https://..."
)
# Voice (immediate escalation if no SMS ack in 5 min)
if not self.check_ack_within_5min(sms_response['MessageId']):
voice_response = sms_client.send_voice_message(
DestinationPhoneNumber=recipient['phone'],
OriginationIdentity="+1-212-555-ALERT",
VoiceMessage={'TextToSpeechMessage': alert_message}
)
チェックリスト - EUM 導入前
- [ ] SMS use case・volume estimate
- [ ] Compliance requirements (DLT, 10DLC, GDPR/CCPA)
- [ ] Phone number strategy (Short code vs Long code vs Toll-free)
- [ ] Two-way SMS requirements・Reply handling
- [ ] Push notification requirement (FCM/APNs/Web)
- [ ] Cost estimation (volume breakdown by channel)
- [ ] Monitoring・analytics strategy (CloudWatch)
- [ ] Failover・DR plan
チェックリスト - EUM 運用
- [ ] 日次:Delivery rate・bounce rate 監視
- [ ] 日次:Critical alert ack time SLA 確認
- [ ] 週次:Cost tracking・volume trend分析
- [ ] 月次:DLT compliance・opt-in list audit
- [ ] 月次:Two-way reply processing・lag time
- [ ] 四半期:Carrier performance比較・region optimization
- [ ] 年次:Budget review・growth plan・vendor evaluation
まとめ
AWS End User Messaging は Tier 2 SMS・Voice・Push 統一メッセージングプラットフォーム。Pinpoint からの統合分離で、API ベースのシンプル・高スケール・低コスト実装を実現します。
Key Takeaways
- Pinpoint からの統合分離で SMS/Voice/Push API をシンプル化
- DLT/10DLC/Compliance をネイティブサポート
- Two-way SMS・Phone Pool で顧客エンゲージメント強化
- Global reach(249 countries) + AWS native integration
- Pay-per-SMS pricing で cost-effective
推奨される使用シーン
✅ 2FA / OTP
✅ Transactional alerts
✅ Two-way customer support
✅ Pinpoint migration
非推奨シーン
❌ Email-primary campaign(SES推奨)
❌ Advanced segmentation・journey(Connect推奨)
❌ High-volume WhatsApp(native WhatsApp API推奨)
最終更新:2026-04-27
バージョン:v2.0