AI agent answering calls in Microsoft Teams through ACS or another idea you suggest
Budget: $50 – $0 AUD
We are building an AI voice agent that can answer call queues in Microsoft Teams Phone for us. We are struggling to integrate Microsoft Azure ACS, so that the agent/resource we assign in the queue in Teams admin centre for call queues can be routed through ACS. So we know in future when we add an AI brain in the routing actually is possible.
What we have tried so far:
Step 1: Confirm Federation is Active
You already have this
(EnableAcsUsers : True, AllowedAcsResources : {your ACS GUID})
That means your ACS is authorized to connect.
Step 2: Confirm Your Webhook is Reachable
Run your app:
node index.js
Start ngrok:
ngrok http 3000
You should see a URL like:
https://xxxx-203-45-11-22.ngrok.io
Keep that console open — we’ll use it for event verification.
Step 3: Register (or confirm) the ACS → Webhook Connection
Go to Azure Portal → Communication Services → acs-voice-devtest → Call Automation → Applications
(or under “Call Automation” → “Applications (Preview)” depending on your portal view).
If you don’t see it, create a new one:
Name: teamsai-agent
Callback URL:
https://xxxx-203-45-11-22.ngrok.io/api/calls
Description: “TeamsAI incoming call handler”
Click Save
This step tells ACS where to send call events.
Step 4: Test If ACS Is Receiving the Call Event
[The Administrator removed this message for encouraging communication outside Freelancer.com. which breaches our Terms and Conditions.]
Watch your terminal where index.js is running.
If everything is wired correctly, you should see:
Received event: [
{
"eventType": "IncomingCall",
"data": {
"incomingCallContext": "eyJhbGciOi..."
}
}
]
So for summary
I have my node js code, azure ACS and resources set up, Teams queue and telephone license set up
Our hashes my own phone numbers for testing.
Set up ngrok
When we call the queue teams does answer correctly but we don’t see connections to my queue from ACS or my code/ngrok
So we have not yet validated we can have an Acs resource answering the call (eventually an AI agent)
Ideal flow but open to ideas
So, For Testing Right Now
To prove the flow without assigning a number:
Create the licensed Teams AI Agent user.
Add to a test queue that has a phone number.
Create an Azure AD App with both:
Calls.AccessMedia.All, Calls.JoinGroupCall.All
Access to your ACS resource (via connection string).
Set up your webhook endpoint (/api/calls) via ngrok.
Register the webhook in Graph for that user’s call events.
When you call the queue:
The queue routes to your AI Agent user.
Graph sends a webhook to your app.
Your app can accept/join via Graph, and (optionally) spin up ACS media bridge to the AI Brain.
What we have tried so far:
Step 1: Confirm Federation is Active
You already have this
(EnableAcsUsers : True, AllowedAcsResources : {your ACS GUID})
That means your ACS is authorized to connect.
Step 2: Confirm Your Webhook is Reachable
Run your app:
node index.js
Start ngrok:
ngrok http 3000
You should see a URL like:
https://xxxx-203-45-11-22.ngrok.io
Keep that console open — we’ll use it for event verification.
Step 3: Register (or confirm) the ACS → Webhook Connection
Go to Azure Portal → Communication Services → acs-voice-devtest → Call Automation → Applications
(or under “Call Automation” → “Applications (Preview)” depending on your portal view).
If you don’t see it, create a new one:
Name: teamsai-agent
Callback URL:
https://xxxx-203-45-11-22.ngrok.io/api/calls
Description: “TeamsAI incoming call handler”
Click Save
This step tells ACS where to send call events.
Step 4: Test If ACS Is Receiving the Call Event
[The Administrator removed this message for encouraging communication outside Freelancer.com. which breaches our Terms and Conditions.]
Watch your terminal where index.js is running.
If everything is wired correctly, you should see:
Received event: [
{
"eventType": "IncomingCall",
"data": {
"incomingCallContext": "eyJhbGciOi..."
}
}
]
So for summary
I have my node js code, azure ACS and resources set up, Teams queue and telephone license set up
Our hashes my own phone numbers for testing.
Set up ngrok
When we call the queue teams does answer correctly but we don’t see connections to my queue from ACS or my code/ngrok
So we have not yet validated we can have an Acs resource answering the call (eventually an AI agent)
Ideal flow but open to ideas
So, For Testing Right Now
To prove the flow without assigning a number:
Create the licensed Teams AI Agent user.
Add to a test queue that has a phone number.
Create an Azure AD App with both:
Calls.AccessMedia.All, Calls.JoinGroupCall.All
Access to your ACS resource (via connection string).
Set up your webhook endpoint (/api/calls) via ngrok.
Register the webhook in Graph for that user’s call events.
When you call the queue:
The queue routes to your AI Agent user.
Graph sends a webhook to your app.
Your app can accept/join via Graph, and (optionally) spin up ACS media bridge to the AI Brain.