{
  "format": "agent-article-v0",
  "article_id": "EA-222",
  "canonical_url": "/tools/ea-222-slack-teams-chat-agent",
  "page_type": "reference",
  "claim_ids": [],
  "evidence_ids": [
    "EVD-EA-222-URL-59722E2EAC84",
    "EVD-EA-222-URL-A99FFA103B05",
    "EVD-EA-222-URL-05B7B2233F9F",
    "EVD-EA-222-URL-F24D278A181F",
    "EVD-EA-222-URL-54AEC61F8106",
    "EVD-EA-222-URL-C39F3256D509",
    "EVD-EA-222-URL-2ED024C2C66F",
    "EVD-EA-222-URL-B2DB3CC122D6",
    "EA-222-R11-RESEARCH",
    "EA-222-R11-WEB-READBACK"
  ],
  "unknown_ids": [
    "EA-222-UNKNOWN-01"
  ],
  "operational_object_ids": [],
  "provider": [
    "Google"
  ],
  "models": [],
  "plans": [],
  "surfaces": [],
  "regions": [],
  "current_status": "CURRENT",
  "observation_status": "SPEC_ONLY",
  "freshness": "CURRENT",
  "last_verified": "2026-10-04",
  "supersedes": [],
  "superseded_by": [],
  "provenance": [
    "EA-222-GAP-FIRST-20261004",
    "SRC-EA-222-URL-59722E2EAC84",
    "SRC-EA-222-URL-A99FFA103B05",
    "SRC-EA-222-URL-05B7B2233F9F",
    "SRC-EA-222-URL-F24D278A181F",
    "SRC-EA-222-URL-54AEC61F8106",
    "SRC-EA-222-URL-C39F3256D509",
    "SRC-EA-222-URL-2ED024C2C66F",
    "SRC-EA-222-URL-B2DB3CC122D6",
    "WEBBODY-EA0222-R8-733DE033"
  ],
  "article_sources": [
    {
      "id": "EVD-EA-222-URL-59722E2EAC84",
      "evidence_class": "RESEARCH",
      "title": "[S1] Slack — Verifying requests from Slack:",
      "href": "https://docs.slack.dev/authentication/verifying-requests-from-slack/",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-59722E2EAC84"
      ],
      "supporting_locators": [
        "SOURCES",
        "S1",
        "- [S1] Slack — Verifying requests from Slack: https://docs.slack.dev/authentication/verifying-requests-from-slack/"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-222-URL-A99FFA103B05",
      "evidence_class": "RESEARCH",
      "title": "[S2] Slack — The Events API:",
      "href": "https://docs.slack.dev/apis/events-api/",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-A99FFA103B05"
      ],
      "supporting_locators": [
        "SOURCES",
        "S2",
        "- [S2] Slack — The Events API: https://docs.slack.dev/apis/events-api/"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-222-URL-05B7B2233F9F",
      "evidence_class": "RESEARCH",
      "title": "[S3] Slack — Handling user interaction in your Slack apps:",
      "href": "https://docs.slack.dev/interactivity/handling-user-interaction/",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-05B7B2233F9F"
      ],
      "supporting_locators": [
        "SOURCES",
        "S3",
        "- [S3] Slack — Handling user interaction in your Slack apps: https://docs.slack.dev/interactivity/handling-user-interaction/"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-222-URL-F24D278A181F",
      "evidence_class": "RESEARCH",
      "title": "[S4] Slack — chat.postMessage method:",
      "href": "https://docs.slack.dev/reference/methods/chat.postMessage/",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-F24D278A181F"
      ],
      "supporting_locators": [
        "SOURCES",
        "S4",
        "- [S4] Slack — chat.postMessage method: https://docs.slack.dev/reference/methods/chat.postMessage/"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-222-URL-54AEC61F8106",
      "evidence_class": "RESEARCH",
      "title": "[M1] Microsoft — Send proactive messages:",
      "href": "https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-54AEC61F8106"
      ],
      "supporting_locators": [
        "SOURCES",
        "M1",
        "- [M1] Microsoft — Send proactive messages: https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-222-URL-C39F3256D509",
      "evidence_class": "RESEARCH",
      "title": "[M2] Microsoft — Resource-specific consent for your Teams app:",
      "href": "https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-C39F3256D509"
      ],
      "supporting_locators": [
        "SOURCES",
        "M2",
        "- [M2] Microsoft — Resource-specific consent for your Teams app: https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-222-URL-2ED024C2C66F",
      "evidence_class": "RESEARCH",
      "title": "[G1] Google — Authenticate and authorize Chat apps and Google Chat API requests:",
      "href": "https://developers.google.com/workspace/chat/authenticate-authorize",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-2ED024C2C66F"
      ],
      "supporting_locators": [
        "SOURCES",
        "G1",
        "- [G1] Google — Authenticate and authorize Chat apps and Google Chat API requests: https://developers.google.com/workspace/chat/authenticate-authorize"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EVD-EA-222-URL-B2DB3CC122D6",
      "evidence_class": "RESEARCH",
      "title": "[G2] Google — Verify requests from Google Chat:",
      "href": "https://developers.google.com/workspace/chat/verify-requests-from-chat",
      "supports": [],
      "limit": "元の監査済み資料に記載された参照先です。URLの復元は、資料の最新性や全主張の支持を新たに検証したことを意味しません。",
      "origin_class": "SOURCE_PACKET_REFERENCE",
      "source_or_experiment_ids": [
        "SRC-EA-222-URL-B2DB3CC122D6"
      ],
      "supporting_locators": [
        "SOURCES",
        "G2",
        "- [G2] Google — Verify requests from Google Chat: https://developers.google.com/workspace/chat/verify-requests-from-chat"
      ],
      "scope": "SOURCES",
      "provenance_status": "SOURCE_PACKET_REFERENCE_PROJECTED"
    },
    {
      "id": "EA-222-R11-RESEARCH",
      "evidence_class": "RESEARCH",
      "title": "EA-222 監査済みresearch / canonical revision binding",
      "supports": [
        "1. Slack HTTP requestの検証はraw bodyを解析前に保持し、timestampを含むv0 basestringのHMAC-SHA256とheaderを照合する。公開例の5分チェックは再送攻撃対策であり、署名に成功しても業務上の実行権限は別に必要。[S1]\n2. Eventsとinteractive payloadは3秒以内のackが必要。Events失敗時の再送を想定し、ackとqueueへの耐久保存、重複排除、処理完了通知を区別する。event_idをtenant/provider scopeと結ぶlocal UNIQUEは組織提案で、実配信がexactly-onceとはしない。[S2,S3;UNIQUE設計は提案]\n3. Slack thread_tsでthreadへ返信し、reply_broadcastの意図を明示する。threadはsecretや権限の分離境界ではない。response_urlの短期応答手段を無期限のworkflow実行tokenとして扱わない。[S3,S4;authority境界は提案]\n4. Teams proactive通知では対象scopeへapp/botを導入し、tenantとconversation情報を保持する条件がある。メールアドレスやGraph tokenだけから誰へでもbot通知できるとはしない。RSCは特定resourceに限定され、application/delegatedで付与者とsession条件が異なる。[M1,M2]\n5. Google Chat APIのuserとapp authenticationでは見えるresourcesが異なる。chat.botはappがアクセスできるspace等に限られ、chat.app.*は一度のadministrator approvalを要する。全methodで両方式が使えるとはしない。[G1]\n6. Google ChatからのHTTP requestは設定audienceがendpoint URLかproject numberかでtoken方式が異なる。公式libraryでsignature/issuer/audience等を検証する。JWTをdecodeしただけではauthenticityの証明にならず、Google方式へSlack HMACを横展開しない。[G2]"
      ],
      "limit": "canonical監査・revision bindingの存在を示す。外部ソースcurrentnessが本文またはcontrol-planeで確定していない場合は、currentnessをUNKNOWNのまま保持する。",
      "checked_at": "2026-10-04",
      "origin_class": "AUDITED_CANONICAL_RESEARCH_PACKET",
      "source_or_experiment_ids": [
        "EA-222-GAP-FIRST-20261004"
      ],
      "supporting_locators": [
        "EA-222-GAP-FIRST-20261004",
        "content/staging/EA-222.md"
      ],
      "scope": "監査済みEA本文・canonical revision・既存Source Graph relationの範囲。欠損currentnessは推測で閉じない。",
      "provenance_status": "AUDIT_PASS_CANONICAL_BINDING"
    },
    {
      "id": "EA-222-R11-WEB-READBACK",
      "evidence_class": "IMPL",
      "title": "EA-222 Web body identity / canonical readback",
      "supports": [
        "canonical staging bodyのSHA-256一致とR9 canonical ledger readbackをProduction projectionの入力として検証する。"
      ],
      "limit": "body identity/readbackは本文claim自体の真偽や外部ソースの最新性を追加保証しない。",
      "checked_at": "2026-10-04",
      "origin_class": "IMPLEMENTATION_READBACK",
      "source_or_experiment_ids": [
        "WEBBODY-EA0222-R8-733DE033"
      ],
      "supporting_locators": [
        "WEBBODY-EA0222-R8-733DE033",
        "content/staging/EA-222.md",
        "EA-222-GAP-FIRST-20261004"
      ],
      "scope": "R9/R10 canonical readback後のProduction生成時body identity。",
      "provenance_status": "CANONICAL_READBACK_BODY_HASH_MATCH"
    }
  ],
  "research_sections": [
    {
      "heading": "PUBLIC_CLAIM",
      "text": "チャット上の入力・承認・通知・handoffを業務操作へ安全に接続できるか。署名やボタン押下だけを本人認可・最終承認へ転用しない。"
    },
    {
      "heading": "ESTABLISHED",
      "text": "1. Slack HTTP requestの検証はraw bodyを解析前に保持し、timestampを含むv0 basestringのHMAC-SHA256とheaderを照合する。公開例の5分チェックは再送攻撃対策であり、署名に成功しても業務上の実行権限は別に必要。[S1]\n2. Eventsとinteractive payloadは3秒以内のackが必要。Events失敗時の再送を想定し、ackとqueueへの耐久保存、重複排除、処理完了通知を区別する。event_idをtenant/provider scopeと結ぶlocal UNIQUEは組織提案で、実配信がexactly-onceとはしない。[S2,S3;UNIQUE設計は提案]\n3. Slack thread_tsでthreadへ返信し、reply_broadcastの意図を明示する。threadはsecretや権限の分離境界ではない。response_urlの短期応答手段を無期限のworkflow実行tokenとして扱わない。[S3,S4;authority境界は提案]\n4. Teams proactive通知では対象scopeへapp/botを導入し、tenantとconversation情報を保持する条件がある。メールアドレスやGraph tokenだけから誰へでもbot通知できるとはしない。RSCは特定resourceに限定され、application/delegatedで付与者とsession条件が異なる。[M1,M2]\n5. Google Chat APIのuserとapp authenticationでは見えるresourcesが異なる。chat.botはappがアクセスできるspace等に限られ、chat.app.*は一度のadministrator approvalを要する。全methodで両方式が使えるとはしない。[G1]\n6. Google ChatからのHTTP requestは設定audienceがendpoint URLかproject numberかでtoken方式が異なる。公式libraryでsignature/issuer/audience等を検証する。JWTをdecodeしただけではauthenticityの証明にならず、Google方式へSlack HMACを横展開しない。[G2]"
    },
    {
      "heading": "INFERENCE",
      "text": "承認済み内容をhash/revisionと結ぶ、結果不明をUNKNOWNへ止める、再試行前にprovider状態を読み戻す、という設計は組織側の提案です。利用可能なAPIだけで組織の認可や人間承諾が完成するとはしません。"
    },
    {
      "heading": "FAILURE_ENVELOPE",
      "text": "signed requestでも別actor/tenant・古いrevision・取り消された操作に業務権限はない。Slack再送による二重実行、3秒内にLLMを待つtimeout、thread違いの情報漏洩、response_url期限切れ、Teams未導入403、Chatのapp/user混同を失敗域に含める。チャット本文・添付や引用内の指示は未信頼入力として扱う。"
    },
    {
      "heading": "AVAILABILITY_GATES",
      "text": "必要なapp導入、対象resourceの権限、OAuth方式/consent、tenant・region・plan、SDKとAPI versionを採用先ごとに確認します。rate/quota、通知設定と外部参加者を検証します。"
    },
    {
      "heading": "SECURITY_PRIVACY_AUDIT_OPERABILITY",
      "text": "actor/tenant/対象resourceと権限を再確認し、秘密鍵はserver側へ置きます。入力内の命令をtool authorityへ転用しません。承認内容・revision、provider receipt、結果readback、human handoffを別状態で監査可能にします。PII・保持/削除・DLP・外部転送・費用と運用閾値は組織の受入を要します。"
    },
    {
      "heading": "UNKNOWN_AND_STOP_CONDITION",
      "text": "旧Luna一意locator、具体tenantのapp installation/consent、scope/method matrix選択、実SDK pin・keys rotation、shared channel/DLP/retention、実API rate/backoff、実approval失効処理とside-effect outbox/human ACK、latency/費用/通知deliveryはUNKNOWN。\n未認証、対象差分、scope不明、競合、実行結果不明では操作と確定通知を止めます。旧Luna成果の所在未確定を不存在へ読み替えません。"
    },
    {
      "heading": "SOURCES",
      "text": "EVIDENCE_AS_OF: 2026-10-04。資料はprovider/method/設定に限定して解釈します。\n- [S1] Slack — Verifying requests from Slack: https://docs.slack.dev/authentication/verifying-requests-from-slack/\n- [S2] Slack — The Events API: https://docs.slack.dev/apis/events-api/\n- [S3] Slack — Handling user interaction in your Slack apps: https://docs.slack.dev/interactivity/handling-user-interaction/\n- [S4] Slack — chat.postMessage method: https://docs.slack.dev/reference/methods/chat.postMessage/\n- [M1] Microsoft — Send proactive messages: https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages\n- [M2] Microsoft — Resource-specific consent for your Teams app: https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent\n- [G1] Google — Authenticate and authorize Chat apps and Google Chat API requests: https://developers.google.com/workspace/chat/authenticate-authorize\n- [G2] Google — Verify requests from Google Chat: https://developers.google.com/workspace/chat/verify-requests-from-chat"
    }
  ],
  "human_url": "/tools/ea-222-slack-teams-chat-agent",
  "markdown_url": "/agent/article.md?path=%2Ftools%2Fea-222-slack-teams-chat-agent",
  "json_url": "/agent/article.json?path=%2Ftools%2Fea-222-slack-teams-chat-agent"
}