--- title: "Human-in-the-loop approvals: Slack, Teams or Google Chat?" description: "Human-in-the-loop approvals in Slack, Teams and Google Chat: buttons, threads, deadlines and escalation. Choose by permissions and process, with official sources." author: "Kiia" published: 2026-11-13 updated: 2026-11-13 verified: 2026-11-13 language: en human_url: "https://kiia.cloud/blog/human-in-the-loop-approvals-slack-teams-google-chat/" --- > In 60 seconds: request approval where the responsible person already reviews exceptions. Slack supports building an interaction with buttons; Teams offers Approvals and can connect it to a flow; Google Chat supports interactive cards. In all three, bind every decision to a versioned proposal, an authorized approver and an expiry. MCP can provide tools and context, but you do not need it to request approval. If your ERP already has an approval process that meets your requirements, keep the decision there. ## Verdict by profile - If operations works in Slack and someone can maintain an application, use its [interactions](https://docs.slack.dev/interactivity/handling-user-interaction/) to collect the decision and return the status to the same thread. - If your team administers Microsoft 365 and needs requests with assigned approvers, start with [Approvals in Teams](https://learn.microsoft.com/en-us/power-automate/teams/create-approval-from-chat). To automate the steps before and after approval, Microsoft directs you to create a [Power Automate flow](https://learn.microsoft.com/en-us/power-automate/teams/customize-approvals). - If you already run Google Workspace, evaluate a Chat app with [cards and buttons](https://developers.google.com/workspace/chat/design-interactive-card-dialog). You can design approval without depending on its Developer Preview MCP. - If nobody owns expired requests, assign that role before choosing a channel. The scope is an internal B2B approval: an agent prepares a commercial exception and a person decides before the business system changes. These are design recommendations, with no universal winner. To compare the agent environment beyond approval, see [Slack vs Teams](/blog/slack-vs-teams-ai-agents/). ## Comparison at the same scope **Verified on November 13, 2026.** Each row links to official sources consulted that day. Prices are USD references from US pages, excluding promotions; they are not LATAM quotes and do not include an equivalent agent. “Not published / verify” identifies a condition you must confirm for your configuration. | Criterion | Slack | Teams | Google Chat | | --- | --- | --- | --- | | Verified entry price | Free: USD 0. Pro: USD 7.25 per user/month with annual billing; USD 8.75 with monthly billing. Local taxes: verify. [Plans](https://slack.com/pricing) | Essentials: USD 4 per user/month, paid yearly, automatically renewing. Channel price only; it does not establish workflow rights. Local taxes: verify. [Plans](https://www.microsoft.com/en-us/microsoft-teams/compare-microsoft-teams-business-options) | Workspace Starter: USD 7 per user/month with an annual commitment, billed monthly, excluding tax. App and agent costs are separate. [Plans](https://workspace.google.com/pricing.html) | | Where processing and data live | Cloud; choosing a region for certain data at rest requires Business+ or above. Review agent hosting and retention separately. [Residency](https://slack.com/help/articles/360035633934-Data-residency-for-Slack) | App approvals are stored in the default Dataverse environment; also review tenant region, retention and agent copies. [Approvals](https://learn.microsoft.com/en-us/microsoftteams/approval-admin), [Teams location](https://learn.microsoft.com/en-us/microsoftteams/privacy/location-of-data-in-teams) | Cloud Chat; Data Regions covers messages and attachments according to edition and processing type. That coverage does not extend to your external agent. Solution region and retention: verify. [Coverage](https://knowledge.workspace.google.com/admin/compliance/data-covered-by-data-regions) | | MCP status | Official server in GA. [Announcement](https://slack.com/blog/news/mcp-real-time-search-api-now-available) | Teams-specific MCP is in preview for compatibility and testing; Microsoft says not to use it in production or new projects. It recommends Work IQ, GA in Copilot Studio with some workloads still in preview. [Teams MCP](https://learn.microsoft.com/en-us/microsoft-copilot-studio/mcp-teams-tools), [Work IQ](https://learn.microsoft.com/en-us/microsoft-copilot-studio/agents-experience/add-work-iq) | Official server in Developer Preview; program membership required. Do not describe it as GA. [MCP setup](https://developers.google.com/workspace/chat/api/guides/configure-mcp-server) | | Authentication | MCP: confidential OAuth and a user token, with tool-specific scopes such as `chat:write`. A button app has its own configuration. [MCP OAuth](https://docs.slack.dev/ai/slack-mcp-server/) | With Copilot Studio, configure each tool connection and Entra ID SSO for Teams. Do not confuse the chat session with the ERP connection. [Authentication](https://learn.microsoft.com/en-us/microsoft-copilot-studio/configure-enduser-authentication) | MCP uses delegated OAuth 2.0. For a Chat app using the API, distinguish user and app authentication; supported methods and scopes differ. [MCP](https://developers.google.com/workspace/chat/api/guides/configure-mcp-server), [API](https://developers.google.com/workspace/chat/authenticate-authorize) | | Respects user permissions | Official MCP respects the user's Slack permissions. That does not grant authority to approve in the ERP. [Access model](https://slack.com/blog/news/mcp-real-time-search-api-now-available) | A Copilot Studio tool can use author or user credentials. Choose a user connection when access must be restricted per person. [Connections](https://learn.microsoft.com/en-us/microsoft-copilot-studio/configure-enduser-authentication) | Google documents that its MCP inherits user permissions and governance. Do not assume the same for your app's service account. [MCP](https://developers.google.com/workspace/chat/api/guides/configure-mcp-server), [API identities](https://developers.google.com/workspace/chat/authenticate-authorize) | | Integrations | Buttons and responses through an app; connecting the decision to the CRM or ERP requires implementing the workflow. [Interactivity](https://docs.slack.dev/interactivity/handling-user-interaction/) | Approvals collects decisions; Power Automate automates actions before and after. ERP licensing and connectors: verify. [Customization](https://learn.microsoft.com/en-us/power-automate/teams/customize-approvals) | Card buttons run app functions; business integration depends on that function. [Cards](https://developers.google.com/workspace/chat/design-interactive-card-dialog) | | Limits | Free shows 90 days of history and supports up to 10 apps; MCP allows only internal or Marketplace apps, with tool-specific limits. [Plan](https://slack.com/pricing), [MCP](https://docs.slack.dev/ai/slack-mcp-server/) | A cloud flow run lasts at most 30 days, including pending approvals. This is separate from your operational deadline. [Limits](https://learn.microsoft.com/en-us/power-automate/limits-and-config) | The API applies project, space and user quotas. Account for notifications, responses and retries. [Quotas](https://developers.google.com/workspace/chat/limits) | | LATAM support | Country, billing, language, hours and SLA for the complete workflow: not published / verify with provider and integrator. [Plans](https://slack.com/pricing) | Essentials advertises phone and web support; language, local billing and integration SLA: not published / verify. [Plans](https://www.microsoft.com/en-us/microsoft-teams/compare-microsoft-teams-business-options) | Conditions vary by edition; country, language, hours, billing and your app's SLA: not published / verify. [Plans](https://workspace.google.com/pricing.html) | Budget separately for the channel, model, execution, connectors and maintenance. In Teams, confirm [Approvals and Power Automate requirements](https://learn.microsoft.com/en-us/microsoftteams/approval-admin); buying Essentials alone does not establish coverage for the entire route. The full price of the proposed workflow in any of the three: **not published / verify**. ## Approval patterns: buttons, threads, deadlines and escalation The following example is fictional. An agent prepares a discount exception for a quote. The card shows the request ID, quote version, proposed discount, reason, owner and deadline with a time zone. Include “Approve,” “Reject” and a way to “Request changes.” Sensitive commercial details stay behind an authenticated link. ### A button decides on a specific version Store the proposal before sending the card. On response, validate the event's origin, the person's identity, their current authorization and whether the request is still pending and within its deadline. Slack documents [request signature verification](https://docs.slack.dev/authentication/verifying-requests-from-slack/); each integration must validate its own entry mechanism. If the amount, recipient or terms change, invalidate the old proposal and request approval again. A reaction or a free-text “OK” in the thread is ambiguous; use a response associated with the request. Disabling a button helps communicate status, but the server must also reject duplicate or late clicks. ### The thread keeps context and shows the outcome Use one request per identifiable thread or conversation. Record questions and post the outcome alongside the card: pending, rejected, expired, approved awaiting execution, executed or execution failed. These are recommended workflow states, rather than capabilities all three products deliver automatically. Keep durable evidence outside the message: approved proposal, actor, timestamp, decision and execution reference. Slack Free's visible history window makes it particularly important to avoid relying on the thread as the only record. Reduce what you publish when guests or people without case access are present. ### Define the deadline and backup before enabling the agent Agree on an expiry that fits the process and the team's working hours. For example, test a reminder before the cutoff and escalation to a backup on expiry; these are pilot settings, not vendor limits or response promises. Store deadlines in UTC and display the local date, time and zone, especially across Mexico, Colombia and Peru. Block execution on expiry. Escalation must preserve version control and check the backup's permissions. If two approvers are required, define whether both must decide and how to invalidate their decisions when the proposal changes. Never turn silence into approval. ### Approval and execution have different outcomes The application should reserve execution atomically and use an idempotency key when the destination supports it. This aims to prevent two clicks or a retry from creating two operations. If the ERP offers no such guarantee, add reconciliation and a check before retrying. On an uncertain response, inspect the destination record before writing again. The card must distinguish “approved” from “executed.” If the write fails, notify the owner and preserve the original authorization for investigation; do not report a completed operation you have not confirmed. ## Decision criteria Test the same fictional case in the channels your team already uses. Check whether the approver can read the full proposal on mobile, decide without searching for context and retrieve the evidence later. Also review who can see the card and who administers the connection when its owner changes roles. Before accepting the pilot, check these cases: 1. An authorized person approves the current version and exactly one operation is recorded. 2. A channel member without authorization tries to approve and the workflow blocks them. 3. The quote changes or expires; the old card can no longer authorize execution. 4. Two responses or a retry arrive; no second operation appears. 5. The owner does not respond and the backup receives the request without gaining extra permissions. 6. The ERP fails or returns an uncertain response; the card reflects the status and supports reconciliation. If an option fails on permissions or traceability, resolve that before comparing convenience or cost. Keep existing licenses when they cover the process; another channel also adds accounts, policies and support. ## When to choose neither Keep approval in the ERP or an authenticated queue if you must prevent context from entering chat, meet residency requirements your configuration cannot demonstrate, or require a formal signature and separation of duties that the pilot has not validated. You can send only a notification with a link and keep the decision in the authorized system. If there is no approval policy, exception owner or reliable execution record, start with proposals that have no write permission. Define those controls with the process owner before automating. ## Next step Choose one commercial exception and write down who proposes, who approves, when it expires and what evidence confirms execution. Use [Copilot or autopilot](/blog/copilot-or-autopilot-ai-agent-autonomy/) to define autonomy. Then compare the options in the [comparisons hub](/blog/comparisons/) against that brief and their full costs. [Browse all AI comparisons](/blog/comparisons/) ## Frequently asked questions ### Does paying for the channel include an agent approval workflow? The channel price is not the workflow budget. Add the model, hosting, integration and maintenance. In Teams, check Power Automate rights and the connectors your process uses; in Slack and Google Chat, budget for the application that validates and executes the decision. The full cost depends on the configuration: not published / verify. ### Does channel access authorize someone to approve an ERP action? No. Check the approver's identity and their authorization for that action and record in the business system. Chat access, the agent's permission to retrieve data and permission to execute the action are separate controls. Publish only context that every recipient is allowed to read. ### Do I need MCP, and what happens if nobody responds? You do not need MCP to display approval buttons. Use a Slack app, Approvals and a flow in Teams, or an interactive Google Chat app. Define an expiry and an authorized backup; on expiry, block execution and record the escalation. Silence must not become approval.