@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
@mentionin 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
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.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
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
3
Run the bot
curl http://localhost:3978/health.4
Expose with ngrok (local dev only)
/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 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:
deployment/ folder with manifest.json (set botId to TEAMS_APP_ID), color.png (192x192), and outline.png (32x32). Zip them:Configuration
Top env vars. See the repo.env.example for the full set.
Commands
Deployment
Docker
Azure Web App (native)
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.Troubleshooting
Test the Vaquill API directly to isolate bot issues:
Related
Slack
Slack workspace equivalent.
Discord
Same engine, no Azure required.
Chatbots overview
Compare all six platforms.
Authentication
How Vaquill API keys work.

