FrancodesystemsFran<code>systems
CommunicationCustom integration

Holded Microsoft Teams integration

Holded notifications in Teams: invoices, payments, alerts and commands.

HoldedHolded
Microsoft TeamsMicrosoft Teams

Implementation time · 6-12 días laborables

Diagnosis

The problem

Companies on M365 live in Teams, but Holded lives apart. The result: unpaid invoices are spotted late, signed quotes don't reach the responsible rep, and critical alerts get lost in email. Finance and management teams only go into Holded if someone forces them, so information doesn't flow.

Proposal

The solution

If your company lives in Microsoft Teams, Holded should speak Teams. Important Holded events (unpaid invoice, new order, signed quote, expense pending approval) arrive as messages in specific Teams channels. Interactive bot for quick queries: 'how much did I invoice this month', 'client with the most overdue payments'.

Scope

What we automate

  • Invoice unpaid > 30 days, message to the #collections channel with client data and a CTA
  • New Holded order, message to the responsible sales team's channel
  • Quote signed by the client, notification to the rep plus opportunity created
  • Expense over threshold pending approval, message to the approver with Approve/Reject buttons
  • @holded bot for queries: '@holded how much did I invoice this month', '@holded clients overdue > 30d'
  • Quarterly tax close approaching, reminder to the team with a checklist
Architecture

How we build it

Microsoft Graph API plus the Teams Bot Framework for interactive messages and commands. Holded API v2 for the data. The bot is deployed as an Azure Bot Service or a Teams app with its own manifest. Minimal OAuth permissions to avoid opening more surface than needed. Holded webhooks trigger the messages in real time.

flow.ts
webhook microsoft teams.event
queue.enqueue(jobId)
worker.handle() // idempotent
holded.api.call() // retries with backoff
log.emit({ status: 'ok' })
FAQ

Frequently asked questions

Do I need an additional Teams license?

Not for the integration. The M365 Business licenses you already have include Teams. We only need a service account with permission to send messages in the channels you choose and, optionally, to register the bot in Azure (free for standard volume).

Do the Approve/Reject button approvals really work?

Yes, we use Teams Adaptive Cards. The user approves with one click and the change runs in Holded via API within seconds. Who approved what and when is logged for auditing.

Multi-tenant if we work for several clients?

Yes. If you're an accounting firm or consultancy with several clients on Holded, we can deploy the app as multi-tenant. Each client connects their own Holded and sees their own messages.

What about calls and meetings?

We don't touch Teams calls from Holded, that would be a different use case (linking call recordings to contacts). If you're interested, we can scope it as a separate project.

Shall we talk about your Microsoft Teams integration?

A 30-minute call, no strings. You leave with scope and a price.