Push Notification API × Agent:通知送信を業務実行と誤認しないための設計
記事状態: 公開 · 最終確認: 2026-10-19
要点
Push Notification APIの送信成功は、利用者への表示・閲覧・承認・業務完了の証明ではありません。Agentから通知を送る場合は、通知をauthoritative 状態への案内として設計し、recipient、イベント ID、TTL、優先順位、collapse、rate、sensitivityを制御します。重複・順序逆転・遅延・非表示・throttlingを失敗 envelopeへ含め、重要な処理はserver側正本を結果の照合して確定します。
現在の判断
Push Notification APIの送信成功は、利用者への表示・閲覧・承認・業務完了の証明ではありません。Agentから通知を送る場合は、通知をauthoritative 状態への案内として設計し、recipient、イベント ID、TTL、優先順位、collapse、rate、sensitivityを制御します。重複・順序逆転・遅延・非表示・throttlingを失敗 envelopeへ含め、重要な処理はserver側正本を結果の照合して確定します。
どこまで当てはまるか
Push Notification API × Agent:通知送信を業務実行と誤認しないための設計
詳しく理解する
主要記述・判断
AI/AgentからPush Notification APIを呼べることは、利用者への確実な通知、閲覧、業務完了を意味しません。送信要求の受付、push serviceでの処理、端末への配信、OSによる表示、利用者の閲覧・操作、業務側の状態更新を別イベントとして扱い、重要な業務ではpushを唯一の正本・唯一の承認経路・唯一の完了証跡にしません。
Firebase Cloud Messaging(FCM)はnotification messageとdata messageを区別し、background時のnotification messageはSDKが表示を扱う一方、data messageはclient appが処理します。notification+dataの混在もforeground/backgroundで挙動が異なります。したがってAgentがpayloadを生成する場合、単に本文を作るのではなく、message type、app 状態、platform override、TTL、優先順位、collapse semanticsを契約として固定する必要があります。
配信保証と順序の境界
FCMはメッセージ順序を保証しません。collapsible messageは未配信の古いメッセージを新しいものが置き換え得ます。Androidでは同時に保持できるcollapse key数にも制約があります。重要な状態遷移をpushの到着順に依存させず、通知は「正本を取りに行く契機」として扱い、clientはバージョン/イベント IDを使ってserver 状態を結果の照合します。
APNsも提供元 requestをHTTP/2で受け付けますが、端末表示までのexactly-once保証として扱うべきではありません。Appleはdevelopmentと本番環境 endpointを分離しており、接続stream数を固定値と仮定しないよう求めています。connection terminationやerror responseを考慮し、request 受け入れ確認とuser-visible deliveryを分離します。
優先順位・background 実行の誤解
FCMのAndroid high 優先順位は、時間依存かつuser-visibleな通知向けです。高優先度を指定しただけで即時実行が保証されるわけではなく、利用状況によってdeprioritizeまたはGoogle Play servicesによるproxy表示が起こり得ます。通知後に長いnetwork処理を前提にせず、追加同期はWorkManager等へ分離します。
Apple側でもsilent/background notificationは無制限の実行トリガではありません。Appleのtroubleshooting guidanceは短時間の過剰送信やsilent notificationのthrottling、power budgetの影響を挙げています。Agent 複数工程の制御のjob schedulerとしてpushを利用し、未達時に無制限再送する設計は避けます。
セキュリティとプライバシー
FCMはtransport encryptionを提供しますが、data payload自体をend-to-end encryptedとは扱いません。機微情報を通知本文やdataへ直接埋め込まず、必要ならopaque イベント IDを送り、認証済みclientがserverから権限付きで詳細を取得します。device/registration tokenは処理先の振り分け 認証情報として扱い、ログ・分析基盤・LLM promptへ無制限に露出させません。
Agentには最小権限のsend 利用可能な機能を与え、対象組織の利用環境/app/topic/user segment、message class、優先順位、TTL、時間帯、rate、sensitive-content policyをpolicy layerで制限します。大量送信、全体topic、critical alert相当、marketing用途、法的通知等は別承認 適用限界にします。
実装・運用
- Agent出力は直接提供元 APIへ渡さず、typed notification requestへ正規化します。recipient selector、message class、イベント ID、出典 状態 バージョン、TTL、優先順位、collapse key、deep link、sensitivity、承認 classを検証します。
- 重複実行を防ぐ性質 keyまたは業務イベント IDをserver側で保持し、ambiguous 処理待ち時間の上限時は送信履歴を結果の照合してから再送します。提供元がend-to-end 重複実行を防ぐ性質を保証すると仮定しません。
- clientはpush payloadを正本にせず、イベント IDからauthoritative 状態を再取得します。古いバージョンや重複イベントを拒否できるようにします。
- delivery/open analyticsは補助観測です。提供元受付、端末到達、表示、open、業務完了を別評価指標にします。
- kill switch、per-tenant 利用回数・処理量の上限、quiet hours、segment size cap、dry-run/test projectを用意します。本番環境 認証情報とtest 認証情報を分離します。
適用境界
本項はFCM/APNs等をAgentから利用する際のprovider-neutral運用設計です。Android/iOS/Webではpayload field、優先順位、TTL、権限、background 実行、analyticsが異なります。critical alerts、communication notifications、location push等の特権・entitlementを要する機能は一般pushと同一視しません。組織の利用環境固有利用枠、契約、region、SDK バージョン、OS バージョン、app実装は個別確認が必要です。
出典 / 出典・来歴
- Firebase Cloud Messaging, Message types: https://firebase.google.com/docs/cloud-messaging/customize-messages/set-message-type (参照日 2026-10-19)
- Firebase Cloud Messaging, Collapsible messages: https://firebase.google.com/docs/cloud-messaging/customize-messages/collapsible-message-types (参照日 2026-10-19)
- Firebase Cloud Messaging, Android message 優先順位: https://firebase.google.com/docs/cloud-messaging/android-message-priority (参照日 2026-10-19)
- Firebase Cloud Messaging, Customize a message across platforms: https://firebase.google.com/docs/cloud-messaging/customize-messages/cross-platform (参照日 2026-10-19)
- Apple Developer, Sending notification requests to APNs: https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns (参照日 2026-10-19)
- Apple Developer, Troubleshooting push notifications: https://developer.apple.com/documentation/usernotifications/troubleshooting-push-notifications (参照日 2026-10-19)
よくある失敗・反証
提供元 request 処理待ち時間の上限後の盲目的再試行による重複通知
token失効・誤token・誤topic・誤組織の利用環境による誤配信または未達
notification/data messageの取り違え
foreground/background差による処理漏れ
TTL切れ、offline、OS制御、Doze、Focus/通知許可、battery policyによる遅延・非表示
collapseによる中間イベント消失、順序逆転
high 優先順位のdeprioritization/proxy化
silent push throttling
payloadへの機微情報混入
send responseを閲覧・承認・業務完了と誤認
再試行 storm、利用回数・処理量の上限、通知疲労、spam判定
notification serviceやSDKにはdelivery metrics、優先順位、TTL、collapse、platform-specific overrideなど豊富な制御があります。しかし、これらは端末状態・OS policy・利用者設定を越えて「必ず即時に見える」保証へは変換できません。逆に、すべてのpushを低信頼として捨てる必要もありません。目的が再同期の促進や一般的なユーザー通知であれば有効ですが、業務正本と通知チャネルの責任を分離する必要があります。
実務での使い方
FCMはtransport encryptionを提供しますが、data payload自体をend-to-end encryptedとは扱いません。機微情報を通知本文やdataへ直接埋め込まず、必要ならopaque イベント IDを送り、認証済みclientがserverから権限付きで詳細を取得します。device/registration tokenは処理先の振り分け 認証情報として扱い、ログ・分析基盤・LLM promptへ無制限に露出させません。
Agentには最小権限のsend 利用可能な機能を与え、対象組織の利用環境/app/topic/user segment、message class、優先順位、TTL、時間帯、rate、sensitive-content policyをpolicy layerで制限します。大量送信、全体topic、critical alert相当、marketing用途、法的通知等は別承認 適用限界にします。
まだ確認できていないこと
- EA-228-UNKNOWN-01
対象アプリのOS/SDK バージョン、FCM/APNs direct利用範囲、組織の利用環境 利用枠、token lifecycle、topic管理、通知許可率、delivery/open計測、quiet-hours policy、critical/privileged notification entitlement、重複実行を防ぐ性質実装、再試行 policy、PII classification、incident時kill switch、法的通知要件は未確認です。
根拠資料
- 研究資料研究資料
Firebase Cloud Messaging, Message types:
確認上の限界
元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
- 研究資料研究資料
Firebase Cloud Messaging, Collapsible messages:
確認上の限界
元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
- 研究資料研究資料
Firebase Cloud Messaging, Android message 優先順位:
確認上の限界
元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
- 研究資料研究資料
Firebase Cloud Messaging, Customize a message across platforms:
確認上の限界
元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
- 研究資料研究資料
Apple Developer, Sending notification requests to APNs:
確認上の限界
元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
- 研究資料研究資料
Apple Developer, Troubleshooting push notifications:
確認上の限界
元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
更新履歴
EA-228-FIRST-20261019: 正式な 監査/publication 対応付け
出典ID・検証情報・機械可読データ
根拠の種類と情報の鮮度は、ラベルとアイコンで確認できます。
- 記事ID
- EA-228
- 最終確認日
- 2026-10-19
- 提供元・モデル・プラン・利用環境
- —
- 対象地域
- —
元資料の全文と収録照合記録
主要claim
AI/AgentからPush Notification APIを呼べることは、利用者への確実な通知、閲覧、業務完了を意味しません。送信要求の受付、push serviceでの処理、端末への配信、OSによる表示、利用者の閲覧・操作、業務側の状態更新を別イベントとして扱い、重要な業務ではpushを唯一の正本・唯一の承認経路・唯一の完了証跡にしません。
Firebase Cloud Messaging(FCM)はnotification messageとdata messageを区別し、background時のnotification messageはSDKが表示を扱う一方、data messageはclient appが処理します。notification+dataの混在もforeground/backgroundで挙動が異なります。したがってAgentがpayloadを生成する場合、単に本文を作るのではなく、message type、app state、platform override、TTL、priority、collapse semanticsを契約として固定する必要があります。
配信保証と順序の境界
FCMはメッセージ順序を保証しません。collapsible messageは未配信の古いメッセージを新しいものが置き換え得ます。Androidでは同時に保持できるcollapse key数にも制約があります。重要な状態遷移をpushの到着順に依存させず、通知は「正本を取りに行く契機」として扱い、clientはversion/event IDを使ってserver stateをreadbackします。
APNsもprovider requestをHTTP/2で受け付けますが、端末表示までのexactly-once保証として扱うべきではありません。Appleはdevelopmentとproduction endpointを分離しており、接続stream数を固定値と仮定しないよう求めています。connection terminationやerror responseを考慮し、request acceptanceとuser-visible deliveryを分離します。
priority・background executionの誤解
FCMのAndroid high priorityは、時間依存かつuser-visibleな通知向けです。高優先度を指定しただけで即時実行が保証されるわけではなく、利用状況によってdeprioritizeまたはGoogle Play servicesによるproxy表示が起こり得ます。通知後に長いnetwork処理を前提にせず、追加同期はWorkManager等へ分離します。
Apple側でもsilent/background notificationは無制限の実行トリガではありません。Appleのtroubleshooting guidanceは短時間の過剰送信やsilent notificationのthrottling、power budgetの影響を挙げています。Agent orchestrationのjob schedulerとしてpushを利用し、未達時に無制限再送する設計は避けます。
security・privacy
FCMはtransport encryptionを提供しますが、data payload自体をend-to-end encryptedとは扱いません。機微情報を通知本文やdataへ直接埋め込まず、必要ならopaque event IDを送り、認証済みclientがserverから権限付きで詳細を取得します。device/registration tokenはrouting credentialとして扱い、ログ・分析基盤・LLM promptへ無制限に露出させません。
Agentには最小権限のsend capabilityを与え、対象tenant/app/topic/user segment、message class、priority、TTL、時間帯、rate、sensitive-content policyをpolicy layerで制限します。大量送信、全体topic、critical alert相当、marketing用途、法的通知等は別approval boundaryにします。
failure envelope
- provider request timeout後の盲目的retryによる重複通知
- token失効・誤token・誤topic・誤tenantによる誤配信または未達
- notification/data messageの取り違え
- foreground/background差による処理漏れ
- TTL切れ、offline、OS制御、Doze、Focus/通知許可、battery policyによる遅延・非表示
- collapseによる中間イベント消失、順序逆転
- high priorityのdeprioritization/proxy化
- silent push throttling
- payloadへの機微情報混入
- send responseを閲覧・承認・業務完了と誤認
- retry storm、rate limit、通知疲労、spam判定
control / implementation implication
- Agent出力は直接provider APIへ渡さず、typed notification requestへ正規化します。recipient selector、message class、event ID、source state version、TTL、priority、collapse key、deep link、sensitivity、approval classを検証します。
- idempotency keyまたは業務event IDをserver側で保持し、ambiguous timeout時は送信履歴をreadbackしてから再送します。providerがend-to-end idempotencyを保証すると仮定しません。
- clientはpush payloadを正本にせず、event IDからauthoritative stateを再取得します。古いversionや重複eventを拒否できるようにします。
- delivery/open analyticsは補助観測です。provider受付、端末到達、表示、open、業務完了を別metricにします。
- kill switch、per-tenant rate limit、quiet hours、segment size cap、dry-run/test projectを用意します。production credentialとtest credentialを分離します。
counterevidence / limitations
notification serviceやSDKにはdelivery metrics、priority、TTL、collapse、platform-specific overrideなど豊富な制御があります。しかし、これらは端末状態・OS policy・利用者設定を越えて「必ず即時に見える」保証へは変換できません。逆に、すべてのpushを低信頼として捨てる必要もありません。目的が再同期の促進や一般的なユーザー通知であれば有効ですが、業務正本と通知チャネルの責任を分離する必要があります。
適用境界
本項はFCM/APNs等をAgentから利用する際のprovider-neutral運用設計です。Android/iOS/Webではpayload field、priority、TTL、permission、background execution、analyticsが異なります。critical alerts、communication notifications、location push等の特権・entitlementを要する機能は一般pushと同一視しません。tenant固有quota、契約、region、SDK version、OS version、app実装は個別確認が必要です。
SAFE_WORDING
Push Notification APIの送信成功は、利用者への表示・閲覧・承認・業務完了の証明ではありません。Agentから通知を送る場合は、通知をauthoritative stateへの案内として設計し、recipient、event ID、TTL、priority、collapse、rate、sensitivityを制御します。重複・順序逆転・遅延・非表示・throttlingをfailure envelopeへ含め、重要な処理はserver側正本をreadbackして確定します。
OPEN_UNKNOWN
対象アプリのOS/SDK version、FCM/APNs direct利用範囲、tenant quota、token lifecycle、topic管理、通知許可率、delivery/open計測、quiet-hours policy、critical/privileged notification entitlement、idempotency実装、retry policy、PII classification、incident時kill switch、法的通知要件は未確認です。
source / provenance
- Firebase Cloud Messaging, Message types: https://firebase.google.com/docs/cloud-messaging/customize-messages/set-message-type (accessed 2026-10-19)
- Firebase Cloud Messaging, Collapsible messages: https://firebase.google.com/docs/cloud-messaging/customize-messages/collapsible-message-types (accessed 2026-10-19)
- Firebase Cloud Messaging, Android message priority: https://firebase.google.com/docs/cloud-messaging/android-message-priority (accessed 2026-10-19)
- Firebase Cloud Messaging, Customize a message across platforms: https://firebase.google.com/docs/cloud-messaging/customize-messages/cross-platform (accessed 2026-10-19)
- Apple Developer, Sending notification requests to APNs: https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns (accessed 2026-10-19)
- Apple Developer, Troubleshooting push notifications: https://developer.apple.com/documentation/usernotifications/troubleshooting-push-notifications (accessed 2026-10-19)
EVD-EA-228-URL-3ACC68895F3E研究資料研究資料根拠の出所: SOURCE_PACKET_REFERENCEFirebase Cloud Messaging, Message types:
- 裏付ける内容
- —
- 確認日
- —
- 出典・実験ID
- SRC-EA-228-URL-3ACC68895F3E
- 検証箇所
- source / provenance · - Firebase Cloud Messaging, Message types: https://firebase.google.com/docs/cloud-messaging/customize-messages/set-message-type
- 適用範囲
- source / provenance
- 出典・来歴
- SOURCE_PACKET_REFERENCE_PROJECTED
- 限界
- 元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
EVD-EA-228-URL-E46D4CC93A09研究資料研究資料根拠の出所: SOURCE_PACKET_REFERENCEFirebase Cloud Messaging, Collapsible messages:
- 裏付ける内容
- —
- 確認日
- —
- 出典・実験ID
- SRC-EA-228-URL-E46D4CC93A09
- 検証箇所
- source / provenance · - Firebase Cloud Messaging, Collapsible messages: https://firebase.google.com/docs/cloud-messaging/customize-messages/collapsible-message-types
- 適用範囲
- source / provenance
- 出典・来歴
- SOURCE_PACKET_REFERENCE_PROJECTED
- 限界
- 元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
EVD-EA-228-URL-BE91BDFB2039研究資料研究資料根拠の出所: SOURCE_PACKET_REFERENCEFirebase Cloud Messaging, Android message priority:
- 裏付ける内容
- —
- 確認日
- —
- 出典・実験ID
- SRC-EA-228-URL-BE91BDFB2039
- 検証箇所
- source / provenance · - Firebase Cloud Messaging, Android message priority: https://firebase.google.com/docs/cloud-messaging/android-message-priority
- 適用範囲
- source / provenance
- 出典・来歴
- SOURCE_PACKET_REFERENCE_PROJECTED
- 限界
- 元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
EVD-EA-228-URL-3E4860C8E551研究資料研究資料根拠の出所: SOURCE_PACKET_REFERENCEFirebase Cloud Messaging, Customize a message across platforms:
- 裏付ける内容
- —
- 確認日
- —
- 出典・実験ID
- SRC-EA-228-URL-3E4860C8E551
- 検証箇所
- source / provenance · - Firebase Cloud Messaging, Customize a message across platforms: https://firebase.google.com/docs/cloud-messaging/customize-messages/cross-platform
- 適用範囲
- source / provenance
- 出典・来歴
- SOURCE_PACKET_REFERENCE_PROJECTED
- 限界
- 元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
EVD-EA-228-URL-2AA16940C9B8研究資料研究資料根拠の出所: SOURCE_PACKET_REFERENCEApple Developer, Sending notification requests to APNs:
- 裏付ける内容
- —
- 確認日
- —
- 出典・実験ID
- SRC-EA-228-URL-2AA16940C9B8
- 検証箇所
- source / provenance · - Apple Developer, Sending notification requests to APNs: https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns
- 適用範囲
- source / provenance
- 出典・来歴
- SOURCE_PACKET_REFERENCE_PROJECTED
- 限界
- 元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
EVD-EA-228-URL-8160BCBB9A53研究資料研究資料根拠の出所: SOURCE_PACKET_REFERENCEApple Developer, Troubleshooting push notifications:
- 裏付ける内容
- —
- 確認日
- —
- 出典・実験ID
- SRC-EA-228-URL-8160BCBB9A53
- 検証箇所
- source / provenance · - Apple Developer, Troubleshooting push notifications: https://developer.apple.com/documentation/usernotifications/troubleshooting-push-notifications
- 適用範囲
- source / provenance
- 出典・来歴
- SOURCE_PACKET_REFERENCE_PROJECTED
- 限界
- 元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。
EA-228-CURRENT-APPROVAL研究資料研究資料根拠の出所: AUDITED_CANONICAL_RESEARCH_PACKET現行本文の監査・revision対応
- 裏付ける内容
- 現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。
- 確認日
- —
- 出典・実験ID
- V8-EA228-FIRST-20261019-C1
- 検証箇所
- 1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ/EA_REVISION_LEDGER#ea_id=EA-228&revision_id=EA-228-FIRST-20261019&candidate_id=V8-EA228-FIRST-20261019-C1 · EA-228-FIRST-20261019
- 適用範囲
- —
- 出典・来歴
- CURRENT_CANONICAL_APPROVAL_READBACK
- 限界
- 監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。
EA-228-CURRENT-BODY-READBACK実装資料実装資料根拠の出所: IMPLEMENTATION_READBACK現行本文の収録照合
- 裏付ける内容
- 公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。
- 確認日
- 2026-10-19
- 出典・実験ID
- BODY-SHA256:cbd6cdb7fa23b54826bd85d0bbdcb0ea645da32bcef18591f893041afde1369f
- 検証箇所
- content/staging/EA-228.md · cbd6cdb7fa23b54826bd85d0bbdcb0ea645da32bcef18591f893041afde1369f · EA-228-FIRST-20261019
- 適用範囲
- —
- 出典・来歴
- CURRENT_APPROVED_BODY_HASH_MATCH
- 限界
- 本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。
- 出典ID
- V8-EA228-FIRST-20261019-C1, SRC-EA-228-URL-3ACC68895F3E, SRC-EA-228-URL-E46D4CC93A09, SRC-EA-228-URL-BE91BDFB2039, SRC-EA-228-URL-3E4860C8E551, SRC-EA-228-URL-2AA16940C9B8, SRC-EA-228-URL-8160BCBB9A53, BODY-SHA256:cbd6cdb7fa23b54826bd85d0bbdcb0ea645da32bcef18591f893041afde1369f
- 追跡中のUNKNOWN ID
- EA-228-UNKNOWN-01
- 再確認のきっかけ
- 正式な 改訂版/publication 状態 change · 本文 成果物 hash change · 出典 現行性 change · new contradiction or 実装 結果の照合
機械検査: 通過 — 機械検査の結果です。情報の正確性や実行の承認を保証するものではありません。
同じ記事IDの機械可読データです。