{
  "format": "agent-article-v0",
  "article_id": "EA-229",
  "canonical_url": "/tools/ea-229-whatsapp-sms-business-messaging-agent",
  "page_type": "reference",
  "claim_ids": [],
  "evidence_ids": [
    "EVD-EA-229-URL-C47447C69E67",
    "EVD-EA-229-URL-47B18771B865",
    "EVD-EA-229-URL-D548625AEBD2",
    "EVD-EA-229-URL-03F6BC128AE9",
    "EVD-EA-229-URL-6A8348145CE0",
    "EA-229-CURRENT-APPROVAL",
    "EA-229-CURRENT-BODY-READBACK"
  ],
  "unknown_ids": [
    "EA-229-UNKNOWN-01"
  ],
  "operational_object_ids": [],
  "provider": [],
  "models": [],
  "plans": [],
  "surfaces": [],
  "regions": [],
  "current_status": "CURRENT",
  "observation_status": "SPEC_ONLY",
  "freshness": "CURRENT",
  "last_verified": "2026-10-05",
  "supersedes": [],
  "superseded_by": [],
  "provenance": [
    "ORPHAN-RESCUE-EA229-20261019-C1",
    "SRC-EA-229-URL-C47447C69E67",
    "SRC-EA-229-URL-47B18771B865",
    "SRC-EA-229-URL-D548625AEBD2",
    "SRC-EA-229-URL-03F6BC128AE9",
    "SRC-EA-229-URL-6A8348145CE0",
    "BODY-SHA256:c1d19620c2df72f712ba45b74c02c2dbbb60aa626a2d0dc0e50dc551bce53edc"
  ],
  "article_sources": [
    {
      "id": "EVD-EA-229-URL-C47447C69E67",
      "evidence_class": "RESEARCH",
      "title": "Twilio, “Overview of the WhatsApp Business Platform with Twilio” —",
      "href": "https://www.twilio.com/docs/whatsapp/api",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-229-URL-C47447C69E67"
      ],
      "supporting_locators": [
        "Source / provenance locator",
        "- Twilio, “Overview of the WhatsApp Business Platform with Twilio” — https://www.twilio.com/docs/whatsapp/api"
      ],
      "scope": "Source / provenance locator",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-229-URL-47B18771B865",
      "evidence_class": "RESEARCH",
      "title": "Twilio, “63016: Outside messaging window. For WhatsApp, use a Message Template instead” —",
      "href": "https://www.twilio.com/docs/api/errors/63016",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-229-URL-47B18771B865"
      ],
      "supporting_locators": [
        "Source / provenance locator",
        "- Twilio, “63016: Outside messaging window. For WhatsApp, use a Message Template instead” — https://www.twilio.com/docs/api/errors/63016"
      ],
      "scope": "Source / provenance locator",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-229-URL-D548625AEBD2",
      "evidence_class": "RESEARCH",
      "title": "Twilio, “Outbound Message Status in Status Callbacks” —",
      "href": "https://www.twilio.com/docs/messaging/guides/outbound-message-status-in-status-callbacks",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-229-URL-D548625AEBD2"
      ],
      "supporting_locators": [
        "Source / provenance locator",
        "- Twilio, “Outbound Message Status in Status Callbacks” — https://www.twilio.com/docs/messaging/guides/outbound-message-status-in-status-callbacks"
      ],
      "scope": "Source / provenance locator",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-229-URL-03F6BC128AE9",
      "evidence_class": "RESEARCH",
      "title": "Twilio, “Track the Message Status of Outbound Messages” —",
      "href": "https://www.twilio.com/docs/messaging/guides/track-outbound-message-status",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-229-URL-03F6BC128AE9"
      ],
      "supporting_locators": [
        "Source / provenance locator",
        "- Twilio, “Track the Message Status of Outbound Messages” — https://www.twilio.com/docs/messaging/guides/track-outbound-message-status"
      ],
      "scope": "Source / provenance locator",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-229-URL-6A8348145CE0",
      "evidence_class": "RESEARCH",
      "title": "Twilio, “Best Practices for Messaging Delivery Status Logging” —",
      "href": "https://www.twilio.com/docs/messaging/guides/outbound-message-logging",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-229-URL-6A8348145CE0"
      ],
      "supporting_locators": [
        "Source / provenance locator",
        "- Twilio, “Best Practices for Messaging Delivery Status Logging” — https://www.twilio.com/docs/messaging/guides/outbound-message-logging"
      ],
      "scope": "Source / provenance locator",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EA-229-CURRENT-APPROVAL",
      "evidence_class": "RESEARCH",
      "title": "現行本文の監査・revision対応",
      "supports": [
        "現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。"
      ],
      "limit": "監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "ORPHAN-RESCUE-EA229-20261019-C1"
      ],
      "supporting_locators": [
        "1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ/EA_REVISION_LEDGER#ea_id=EA-229&revision_id=EA-229-FIRST-20261005&candidate_id=ORPHAN-RESCUE-EA229-20261019-C1",
        "EA-229-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_CANONICAL_APPROVAL_READBACK"
    },
    {
      "id": "EA-229-CURRENT-BODY-READBACK",
      "evidence_class": "IMPL",
      "title": "現行本文の収録照合",
      "supports": [
        "公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。"
      ],
      "limit": "本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。",
      "checked_at": "2026-10-19",
      "origin_class": "IMPLEMENTATION_READBACK",
      "source_or_experiment_ids": [
        "BODY-SHA256:c1d19620c2df72f712ba45b74c02c2dbbb60aa626a2d0dc0e50dc551bce53edc"
      ],
      "supporting_locators": [
        "content/staging/EA-229.md",
        "c1d19620c2df72f712ba45b74c02c2dbbb60aa626a2d0dc0e50dc551bce53edc",
        "EA-229-FIRST-20261005"
      ],
      "provenance_status": "CURRENT_APPROVED_BODY_HASH_MATCH"
    }
  ],
  "research_sections": [
    {
      "heading": "要点と前提",
      "text": "CANDIDATE_ID: ORPHAN-RESCUE-EA229-20261019-C1"
    },
    {
      "heading": "要旨",
      "text": "企業がAIエージェントからWhatsAppやSMSを送る場合、LLMが文章を生成できることと、メッセージ送信が業務上成立することは別問題である。実運用では、チャネルごとの送信資格、会話ウィンドウやテンプレート制約、同意・オプトアウト、宛先と顧客IDの対応、重複送信防止、配送状態の非同期追跡、失敗時の再試行と照合、監査ログを、エージェントの推論から分離した制御面として持つ必要がある。エージェントには「送信を決める」権限と「任意の宛先へ自由に送る」能力を同一視させない。"
    },
    {
      "heading": "主要claim",
      "text": "Twilio Programmable Messagingでは、APIがメッセージを受理した時点の状態と、その後のsent / delivered / undelivered / read等の状態は区別される。WhatsAppやRCSではread receiptが利用できる場合があるが、readは端末側設定やチャネル対応に依存する。したがって、API呼び出し成功を「相手に届いた」「相手が読んだ」と扱ってはならない。送信時にMessage SID等のprovider-side identifierを保存し、status callbackと後続照合を使って状態を追跡する設計が必要である。\n\n\nWhatsAppでは、直近の利用者メッセージから24時間のcustomer service window内ではfree-form messageを送れる一方、window外のbusiness-initiated messageには承認済みtemplateが必要になる。Twilioの現行エラー文書では、2025-04-01以降、window外でtemplateをBodyとして送る方式ではなくContentSid/ContentVariablesを使う必要があると明記されている。したがってエージェントは、自然言語生成結果をそのまま任意時点でWhatsAppへ送るのではなく、conversation window判定とtemplate eligibilityを送信前policyとして適用すべきである。\n\n\nstatus callbackは非同期Webhookであり、ネットワーク条件によって到着順が送信順と一致する保証がない。callbackのparameter setもchannel/eventにより異なり、追加され得る。よって状態機械はcallback arrival orderだけに依存せず、Message SIDを主キーに、状態遷移の単調性・timestamp・provider fetchによるreconciliationを考慮する必要がある。Twilio自身も、一定時間statusが更新されない場合のpollingと、少なくとも日次のreconciliationを推奨している。"
    },
    {
      "heading": "Agent運用上のcontrol / implementation implication",
      "text": "1. 送信前に、tenant、sender、recipient、channel、consent/opt-out、conversation window、template eligibility、目的・分類、送信上限をpolicy engineで判定する。LLM出力だけで送信可否を決めない。\n2. send intentに内部idempotency keyまたは業務操作IDを割り当て、provider Message SIDと対応付ける。timeoutや曖昧応答時に「失敗したはず」と推測して即時再送せず、provider-side recordを照合してから再試行する。\n3. accepted/queued/sent/delivered/read/failed/undeliveredを別状態として保持し、業務フローが要求する到達条件を明示する。例えば「API accepted」を顧客通知完了の証拠にしない。\n4. callback endpointではTwilio署名検証をSDK等の推奨手段で行い、未知parameterを拒絶する硬直schemaではなく、既知必須項目を検証しつつ拡張に耐える実装とする。\n5. callback欠落や順序逆転を前提に、polling/reconciliation jobを持つ。監査ログには内部send intent、provider SID、宛先の安全な参照、template/content version、policy decision、各status event、error code、reconciliation結果を残す。\n6. opt-outや配信停止、宛先誤り、番号再割当て、地域・契約・carrier/provider制約はLLMでは解決できないため、送信基盤側のhard gateとして扱う。"
    },
    {
      "heading": "Failure envelope",
      "text": "API 2xx/Message SID取得後でもdeliveryは失敗し得る。status callbackは欠落・遅延・順序逆転し得るため、callback単独を完全な監査台帳とみなせない。WhatsAppでは24時間window外のfree-form送信が拒否され、template/content typeにもbusiness-initiated messageとして利用できないものがある。read receiptは利用者設定やchannel capabilityに依存し、「readが来ない」ことから未読を断定できない。SMSのdeliveredも最終的な人間の閲覧・理解を保証しない。provider statusは配送経路の観測であり、業務成果そのものではない。"
    },
    {
      "heading": "適用境界",
      "text": "本candidateはTwilio Programmable Messagingを主要な実装例としてWhatsApp/SMS agent messagingの運用境界を整理する。Meta WhatsApp Business Platform直結、他SMS aggregator、各国の通信・広告規制、個別carrier DLR semantics、特定tenantの契約・料金・sender registration状態を一律に保証するものではない。provider/channel/region/account planごとの差分は導入時に再確認する。"
    },
    {
      "heading": "Counterevidence / limitations",
      "text": "read statusが存在するチャネルでも、利用者側のread receipts設定等に依存するため、readイベントは完全な閲覧証明ではない。status callbackは有用だが、Twilio自身が未着時のpollingと定期reconciliationを推奨しており、Webhookだけで完全性を保証する設計は不適切である。WhatsAppの24時間windowとtemplate要件は現行Twilio仕様として確認できるが、Meta側ポリシーやTwilio製品仕様は変更され得るため、固定不変の一般則としてコードへ焼き込まない。"
    },
    {
      "heading": "OPEN_UNKNOWN",
      "text": "特定企業・国・番号種別で必要となる法的同意要件、sender registration、quiet hours、carrier filtering、料金、throughput、retentionは本candidateでは確定しない。Meta直結APIとTwilio経由の全状態遷移差分、全地域のDLR品質、read receiptの実利用率、特定tenantでのretry/dedup挙動も未検証である。これらは導入対象provider/account/regionの契約・仕様・実測で確認する必要がある。"
    },
    {
      "heading": "SAFE_WORDING",
      "text": "「エージェントはWhatsApp/SMS送信を実行できるが、送信APIの成功は配送・閲覧・業務成果を保証しない。会話window、template eligibility、同意・停止、重複防止、provider-side identifier、非同期status、reconciliationを独立した制御として実装し、チャネル・契約・地域固有の条件を実環境で確認する。」"
    },
    {
      "heading": "Source / provenance locator",
      "text": "- Canonical EA identity: Enterprise AI運用辞典_発展拡張_統合管理台帳_EA001-1004 / EA_MASTER / EA-229; exact topic「WhatsApp／SMS Business Messaging × Agent」.\n- Existing revision evidence: EA_REVISION_LEDGER / EA-229-FIRST-20261005; Twilio WhatsApp API/session/status/duplicate/undelivered evidence; independent research audit PASS recorded 2026-10-11, with live-send/Meta-direct/exactly-once limitations retained.\n- Twilio, “Overview of the WhatsApp Business Platform with Twilio” — https://www.twilio.com/docs/whatsapp/api — 24-hour customer service window and approved-template boundary. Accessed 2026-10-18.\n- Twilio, “63016: Outside messaging window. For WhatsApp, use a Message Template instead” — https://www.twilio.com/docs/api/errors/63016 — out-of-session template requirement and ContentSid/ContentVariables behavior. Accessed 2026-10-18.\n- Twilio, “Outbound Message Status in Status Callbacks” — https://www.twilio.com/docs/messaging/guides/outbound-message-status-in-status-callbacks — accepted/queued/sent/delivered/undelivered/read state distinctions. Accessed 2026-10-18.\n- Twilio, “Track the Message Status of Outbound Messages” — https://www.twilio.com/docs/messaging/guides/track-outbound-message-status — callback variability, signature-validation guidance, out-of-order warning. Accessed 2026-10-18.\n- Twilio, “Best Practices for Messaging Delivery Status Logging” — https://www.twilio.com/docs/messaging/guides/outbound-message-logging — persist SID/status, poll stale states, daily reconciliation. Accessed 2026-10-18.\n\n\nAUDIT_HANDOFF: Review this exact saved candidate against EA-229 canonical topic and the cited provenance. Do not treat READY/AUDIT_PASS/GIT_INTEGRATED/ACCEPTED as producer assertions."
    }
  ],
  "human_url": "/tools/ea-229-whatsapp-sms-business-messaging-agent",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-229-whatsapp-sms-business-messaging-agent",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-229-whatsapp-sms-business-messaging-agent"
}