# WhatsApp／SMS Business Messaging × Agent

CURRENT_STATUS: CURRENT
OBSERVATION: SPEC_ONLY
FRESHNESS: CURRENT
PAGE_TYPE: reference
CANONICAL_URL: /tools/ea-229-whatsapp-sms-business-messaging-agent
CLAIM_IDS: none
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
OPS_IDS: none

## Summary
「エージェントはWhatsApp/SMS送信を実行できるが、送信APIの成功は配送・閲覧・業務成果を保証しない。会話window、template eligibility、同意・停止、重複防止、provider-side identifier、非同期status、reconciliationを独立した制御として実装し、チャネル・契約・地域固有の条件を実環境で確認する。」

## Current judgment
「エージェントはWhatsApp/SMS送信を実行できるが、送信APIの成功は配送・閲覧・業務成果を保証しない。会話window、template eligibility、同意・停止、重複防止、provider-side identifier、非同期status、reconciliationを独立した制御として実装し、チャネル・契約・地域固有の条件を実環境で確認する。」

## Scope
WhatsApp／SMS Business Messaging × Agent

## Confirmed

## UNKNOWN
- EA-229-UNKNOWN-01: 特定企業・国・番号種別で必要となる法的同意要件、sender registration、quiet hours、carrier filtering、料金、throughput、retentionは本candidateでは確定しない。Meta直結APIとTwilio経由の全状態遷移差分、全地域のDLR品質、read receiptの実利用率、特定tenantでのretry/dedup挙動も未検証である。これらは導入対象provider/account/regionの契約・仕様・実測で確認する必要がある。

## Evidence
- EVD-EA-229-URL-C47447C69E67 (RESEARCH): Twilio, “Overview of the WhatsApp Business Platform with Twilio” — — https://www.twilio.com/docs/whatsapp/api
- EVD-EA-229-URL-47B18771B865 (RESEARCH): Twilio, “63016: Outside messaging window. For WhatsApp, use a Message Template instead” — — https://www.twilio.com/docs/api/errors/63016
- EVD-EA-229-URL-D548625AEBD2 (RESEARCH): Twilio, “Outbound Message Status in Status Callbacks” — — https://www.twilio.com/docs/messaging/guides/outbound-message-status-in-status-callbacks
- EVD-EA-229-URL-03F6BC128AE9 (RESEARCH): Twilio, “Track the Message Status of Outbound Messages” — — https://www.twilio.com/docs/messaging/guides/track-outbound-message-status
- EVD-EA-229-URL-6A8348145CE0 (RESEARCH): Twilio, “Best Practices for Messaging Delivery Status Logging” — — https://www.twilio.com/docs/messaging/guides/outbound-message-logging
- EA-229-CURRENT-APPROVAL (RESEARCH): 現行本文の監査・revision対応
- EA-229-CURRENT-BODY-READBACK (IMPL): 現行本文の収録照合

## Failure / limits
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は配送経路の観測であり、業務成果そのものではない。
## Failure / limits
read statusが存在するチャネルでも、利用者側のread receipts設定等に依存するため、readイベントは完全な閲覧証明ではない。status callbackは有用だが、Twilio自身が未着時のpollingと定期reconciliationを推奨しており、Webhookだけで完全性を保証する設計は不適切である。WhatsAppの24時間windowとtemplate要件は現行Twilio仕様として確認できるが、Meta側ポリシーやTwilio製品仕様は変更され得るため、固定不変の一般則としてコードへ焼き込まない。
## 要点と前提
CANDIDATE_ID: ORPHAN-RESCUE-EA229-20261019-C1

## 要旨
企業がAIエージェントからWhatsAppやSMSを送る場合、LLMが文章を生成できることと、メッセージ送信が業務上成立することは別問題である。実運用では、チャネルごとの送信資格、会話ウィンドウやテンプレート制約、同意・オプトアウト、宛先と顧客IDの対応、重複送信防止、配送状態の非同期追跡、失敗時の再試行と照合、監査ログを、エージェントの推論から分離した制御面として持つ必要がある。エージェントには「送信を決める」権限と「任意の宛先へ自由に送る」能力を同一視させない。

## 主要claim
Twilio Programmable Messagingでは、APIがメッセージを受理した時点の状態と、その後のsent / delivered / undelivered / read等の状態は区別される。WhatsAppやRCSではread receiptが利用できる場合があるが、readは端末側設定やチャネル対応に依存する。したがって、API呼び出し成功を「相手に届いた」「相手が読んだ」と扱ってはならない。送信時にMessage SID等のprovider-side identifierを保存し、status callbackと後続照合を使って状態を追跡する設計が必要である。


WhatsAppでは、直近の利用者メッセージから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として適用すべきである。


status callbackは非同期Webhookであり、ネットワーク条件によって到着順が送信順と一致する保証がない。callbackのparameter setもchannel/eventにより異なり、追加され得る。よって状態機械はcallback arrival orderだけに依存せず、Message SIDを主キーに、状態遷移の単調性・timestamp・provider fetchによるreconciliationを考慮する必要がある。Twilio自身も、一定時間statusが更新されない場合のpollingと、少なくとも日次のreconciliationを推奨している。

## Agent運用上のcontrol / implementation implication
1. 送信前に、tenant、sender、recipient、channel、consent/opt-out、conversation window、template eligibility、目的・分類、送信上限をpolicy engineで判定する。LLM出力だけで送信可否を決めない。
2. send intentに内部idempotency keyまたは業務操作IDを割り当て、provider Message SIDと対応付ける。timeoutや曖昧応答時に「失敗したはず」と推測して即時再送せず、provider-side recordを照合してから再試行する。
3. accepted/queued/sent/delivered/read/failed/undeliveredを別状態として保持し、業務フローが要求する到達条件を明示する。例えば「API accepted」を顧客通知完了の証拠にしない。
4. callback endpointではTwilio署名検証をSDK等の推奨手段で行い、未知parameterを拒絶する硬直schemaではなく、既知必須項目を検証しつつ拡張に耐える実装とする。
5. callback欠落や順序逆転を前提に、polling/reconciliation jobを持つ。監査ログには内部send intent、provider SID、宛先の安全な参照、template/content version、policy decision、各status event、error code、reconciliation結果を残す。
6. opt-outや配信停止、宛先誤り、番号再割当て、地域・契約・carrier/provider制約はLLMでは解決できないため、送信基盤側のhard gateとして扱う。

## Failure envelope
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は配送経路の観測であり、業務成果そのものではない。

## 適用境界
本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ごとの差分は導入時に再確認する。

## Counterevidence / limitations
read statusが存在するチャネルでも、利用者側のread receipts設定等に依存するため、readイベントは完全な閲覧証明ではない。status callbackは有用だが、Twilio自身が未着時のpollingと定期reconciliationを推奨しており、Webhookだけで完全性を保証する設計は不適切である。WhatsAppの24時間windowとtemplate要件は現行Twilio仕様として確認できるが、Meta側ポリシーやTwilio製品仕様は変更され得るため、固定不変の一般則としてコードへ焼き込まない。

## OPEN_UNKNOWN
特定企業・国・番号種別で必要となる法的同意要件、sender registration、quiet hours、carrier filtering、料金、throughput、retentionは本candidateでは確定しない。Meta直結APIとTwilio経由の全状態遷移差分、全地域のDLR品質、read receiptの実利用率、特定tenantでのretry/dedup挙動も未検証である。これらは導入対象provider/account/regionの契約・仕様・実測で確認する必要がある。

## SAFE_WORDING
「エージェントはWhatsApp/SMS送信を実行できるが、送信APIの成功は配送・閲覧・業務成果を保証しない。会話window、template eligibility、同意・停止、重複防止、provider-side identifier、非同期status、reconciliationを独立した制御として実装し、チャネル・契約・地域固有の条件を実環境で確認する。」

## Source / provenance locator
- Canonical EA identity: Enterprise AI運用辞典_発展拡張_統合管理台帳_EA001-1004 / EA_MASTER / EA-229; exact topic「WhatsApp／SMS Business Messaging × Agent」.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.


AUDIT_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.

NEXT: /agent/start.json
STOP: This is a knowledge projection, not an execution order.