Skip to main content
Bring Vaquill into Microsoft Teams via the Bot Framework. The bot replies in personal chats, channels (with @mention), and threads with Adaptive Cards that include cited statute sections and source links. Source code at github.com/Vaquill-AI/integrations/ms-teams-bot.

Features

  • Statute search via the Vaquill API (US Code, CFR, all 50 state codes)
  • Multi-turn conversation with client-side chat history
  • Adaptive Cards with source citations (code, title, section, source link)
  • Per-user, per-channel, and per-tenant rate limits (Redis or in-memory)
  • Tenant and channel allowlists, user blocklists
  • Slash commands: /help, /clear, /status
  • Thread support with @mention in channels

Prerequisites

You need three credentials before you can run the bot: TEAMS_APP_ID, TEAMS_APP_PASSWORD, and VAQUILL_API_KEY.

Platform setup

1

Create an Azure App Registration

In the Azure Portal, search for Microsoft Entra ID > App registrations > + New registration. Use:
  • Name: vaquill-teams-bot
  • Supported account types: Single tenant (recommended) or Multi-tenant
  • Redirect URI: leave blank
Click Register. Copy the Application (client) ID - this is your TEAMS_APP_ID.
2

Create a client secret

In the registration, go to Certificates & secrets > Client secrets > + New client secret. Description: Teams Bot Secret, Expires: 24 months. Click Add and immediately copy the Value column - this is your TEAMS_APP_PASSWORD.
Copy the Value, not the Secret ID. The Value is shown only once.
3

Create the Azure Bot resource

In the Azure Portal, Create a resource > Azure Bot. Fill in:
  • Bot handle: vaquill-teams-bot
  • Pricing tier: F0 (Free)
  • Microsoft App ID: paste the ID from Step 1
Click Review + Create > Create.
4

Enable the Teams channel

Open your Azure Bot resource, go to Channels, click the Microsoft Teams icon, and click Apply.
5

Generate your Vaquill API key

Sign in to the Vaquill dashboard and generate a key. Save it as VAQUILL_API_KEY.

Quickstart

1

Clone and install

2

Configure environment

Set the minimum required values:
3

Run the bot

Expected:
Health check: curl http://localhost:3978/health.
4

Expose with ngrok (local dev only)

Copy the HTTPS URL, append /api/messages, and paste into Azure Portal > your Bot > Configuration > Messaging endpoint. Click Apply.
Free ngrok URLs change on restart. You will need to update the messaging endpoint each time.
5

Install in Teams

Create a deployment/ folder with manifest.json (set botId to TEAMS_APP_ID), color.png (192x192), and outline.png (32x32). Zip them:
In Teams: Apps > Manage your apps > Upload an app > Upload a custom app. Select the ZIP.Test by DMing the bot or mentioning it in a channel:

Configuration

Top env vars. See the repo .env.example for the full set.

Commands

Deployment

Docker

Azure Web App (native)

Set environment variables under Web App > Configuration > Application settings, then point Azure Bot Messaging endpoint at https://vaquill-teams-bot.azurewebsites.net/api/messages.

Other cloud hosts

Railway

Fork the repo, connect on railway.app, add env vars, deploy, copy the URL, update the Azure messaging endpoint.

Render

New Web Service, connect GitHub, set env vars, deploy. Use the .onrender.com URL as the messaging endpoint.
Always end the messaging endpoint with /api/messages and use HTTPS. HTTP endpoints will be rejected by the Bot Framework.

Troubleshooting

Test the Vaquill API directly to isolate bot issues:

Slack

Slack workspace equivalent.

Discord

Same engine, no Azure required.

Chatbots overview

Compare all six platforms.

Authentication

How Vaquill API keys work.