目次

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 提供

目次

  1. 本質・定義
  2. EUM が解決する課題
  3. 主な特徴
  4. アーキテクチャ
  5. コアコンポーネント
  6. 主要ユースケース(10+)
  7. 設定・操作の具体例
  8. 類似サービス比較表
  9. ベストプラクティス
  10. トラブルシューティング
  11. 2025-2026 最新動向
  12. 学習リソース・参考文献
  13. 実装例・チェックリスト
  14. まとめ

本質・定義

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:

  1. SNS Topic - reply を SNS で発行
  2. SQS Queue - reply を queue でバッファ
  3. Lambda - direct Lambda invocation
  4. 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
WhatsApp
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+)

  1. What is AWS End User Messaging SMS?
  2. AWS End User Messaging User Guide
  3. AWS End User Messaging API Reference
  4. Pinpoint to AWS End User Messaging Migration Guide
  5. Phone Pool & Origination Identity Management
  6. SMS Compliance & DLT Registration
  7. AWS End User Messaging Pricing
  8. AWS End User Messaging FAQs

ベンダー・OSS リソース(5+)

  1. Twilio SMS Documentation
  2. Twilio Voice Documentation
  3. Vonage SMS API
  4. Sinch SMS API
  5. MessageBird Documentation

AWS Blog・ホワイトペーパー(5+)

  1. AWS Messaging & Targeting Blog
  2. AWS End User Messaging Migration Guide
  3. SMS Best Practices & Compliance Whitepaper
  4. AWS Well-Architected Framework - Security Pillar
  5. 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

  1. Pinpoint からの統合分離で SMS/Voice/Push API をシンプル化
  2. DLT/10DLC/Compliance をネイティブサポート
  3. Two-way SMS・Phone Pool で顧客エンゲージメント強化
  4. Global reach(249 countries) + AWS native integration
  5. 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