Skip to content

How to Connect Microsoft Teams to Odoo for Notifications and Collaboration

DeployMonkey Team · March 23, 2026 10 min read

Why Connect Microsoft Teams to Odoo?

Teams with Microsoft 365 spend their day in Microsoft Teams. Important Odoo events — new sales orders, support tickets, low inventory alerts, CRM stage changes — get buried in email notifications or missed entirely. Pushing these notifications to Teams channels puts them where your team already has their attention, enabling faster response times and better cross-department visibility.

Integration Options

MethodDifficultyReal-timeTwo-way
Incoming WebhooksEasyYesNo (Odoo → Teams only)
Power AutomateMediumYesYes
ZapierEasyNear real-timeYes
Custom BotHardYesYes

Method 1: Incoming Webhooks (Easiest)

Step 1: Create a Teams Webhook

  1. Open Microsoft Teams and go to the channel where you want notifications
  2. Click the ... menu on the channel → Manage channel
  3. Go to Connectors (or Workflows in newer Teams versions)
  4. Find Incoming Webhook and click Configure
  5. Name it "Odoo Notifications" and optionally upload an icon
  6. Copy the Webhook URL

Step 2: Create Odoo Automated Actions

Set up automated actions in Odoo that send HTTP requests to the Teams webhook:

  1. Go to Settings → Technical → Automation → Automated Actions
  2. Create a new action:
# New Sale Order Notification
Model: sale.order
Trigger: On Creation
Action: Execute Python Code

import json
import requests

webhook_url = env['ir.config_parameter'].sudo().get_param('teams_webhook_url')

card = {
    "@type": "MessageCard",
    "@context": "http://schema.org/extensions",
    "themeColor": "0076D7",
    "summary": f"New Order: {record.name}",
    "sections": [{
        "activityTitle": f"New Sale Order: {record.name}",
        "facts": [
            {"name": "Customer", "value": record.partner_id.name},
            {"name": "Amount", "value": f"{record.amount_total} {record.currency_id.symbol}"},
            {"name": "Salesperson", "value": record.user_id.name or 'Unassigned'}
        ],
        "markdown": True
    }]
}

requests.post(webhook_url, json=card, timeout=10)

Step 3: Store the Webhook URL

  1. In Odoo, go to Settings → Technical → Parameters → System Parameters
  2. Create a parameter: key = teams_webhook_url, value = your webhook URL
  3. This keeps the URL out of the automation code and makes it easy to update

Notification Templates

Create different card formats for different events:

Support Ticket Alert

card = {
    "@type": "MessageCard",
    "themeColor": "FF0000",
    "summary": f"New Ticket: {record.name}",
    "sections": [{
        "activityTitle": f"Support Ticket: {record.name}",
        "facts": [
            {"name": "Customer", "value": record.partner_id.name},
            {"name": "Priority", "value": dict(record._fields['priority'].selection).get(record.priority, 'Normal')},
            {"name": "Description", "value": record.description[:200] if record.description else 'No description'}
        ]
    }]
}

Low Stock Alert

# Run via scheduled action (cron)
low_stock = env['product.product'].search([
    ('qty_available', '<', 10),
    ('type', '=', 'product')
])

if low_stock:
    items = "\n".join([f"- {p.name}: {p.qty_available} units" for p in low_stock[:10]])
    card = {
        "@type": "MessageCard",
        "themeColor": "FFA500",
        "summary": "Low Stock Alert",
        "sections": [{
            "activityTitle": f"Low Stock Alert: {len(low_stock)} products below threshold",
            "text": items
        }]
    }

Method 2: Power Automate (Microsoft Flow)

Power Automate provides a visual workflow builder that connects Odoo to Teams:

  1. Create a new Automated Cloud Flow in Power Automate
  2. Trigger: When an HTTP request is received (create a webhook URL)
  3. Action: Post a message in a chat or channel (Teams)
  4. In Odoo, send webhook POST requests to the Power Automate trigger URL

Power Automate also supports two-way integration — you can create Odoo records from Teams messages using adaptive cards with input fields.

Method 3: Zapier Bridge

Zapier connects Odoo and Teams without custom code:

  1. Trigger: Odoo → New Record (sale order, lead, ticket)
  2. Action: Microsoft Teams → Send Channel Message
  3. Map Odoo fields to the message body

Troubleshooting

Webhook Returns 400 Error

The message card JSON must follow Microsoft's MessageCard schema exactly. Common issues: missing @type field, invalid themeColor (must be 6-character hex without #), or text exceeding the 28KB limit. Validate your JSON at messagecardplayground.azurewebsites.net.

Notifications Not Appearing in Channel

Verify the webhook URL is for the correct channel. Webhooks are channel-specific — if you recreate the channel or rename it, the webhook URL may become invalid. Also check that the Incoming Webhook connector is still enabled on the channel.

Rate Limiting

Microsoft limits incoming webhook messages to approximately 4 messages per second per connector. For high-volume events, batch notifications or filter to only send critical alerts. Consider summarizing multiple events into a single daily digest card.

DeployMonkey Teams Integration

DeployMonkey's AI agent can generate Teams notification code for any Odoo event, create card templates that match your brand, and troubleshoot webhook connectivity — all through a conversational interface in your dashboard.