[{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/auto-attendants/","section":"Tags","summary":"","title":"Auto Attendants","type":"tags"},{"content":" Built during the preview. I built and tested this in September 2026, during the Frontier public preview, using MicrosoftTeams PowerShell module 8.0.0. Teams Phone Agent became generally available on 30 September 2026, and I\u0026rsquo;ve noted where GA changed things. Part of the Building a council phone line with Teams Phone Agent series. This is the main build, the wizard that turns a resource account into the Kestrel Vale phone line. Most of it is a normal auto attendant. The parts that matter are the menu, which works differently from the one you\u0026rsquo;re used to, and one text box that the wizard insists on and never plays. Get either wrong and the first thing a caller hears after the greeting is silence.\nIf you want the background on what a Teams Phone Agent is and how it splits from Copilot Studio, that\u0026rsquo;s in post 1. The resource account it needs is in post 2.\nGetting to the wizard # In preview it was Voice \u0026gt; Auto attendants \u0026gt; Add, then the advanced setup, where a Teams Phone Agent toggle had to be switched on. It showed a notice first, then Enable. Quick setup couldn\u0026rsquo;t create one.\nAt GA, per Microsoft\u0026rsquo;s setup page, it\u0026rsquo;s Voice \u0026gt; Auto attendants \u0026gt; Add \u0026gt; Teams Phone Agent. The switch is on by default, and turning it off drops you back to a standard auto attendant. I built mine in preview, so I haven\u0026rsquo;t clicked through the GA route myself.\nStep 1, general info # Setting Kestrel Vale value Name Kestrel Vale Council - Main How callers reach it Through a resource account, the Teams Phone Agent type Language English (United Kingdom) Voice Ava at first, now Andrew Operator Voice app: KVC Customer Services, a call queue \u0026ldquo;Through a voice app\u0026rdquo; isn\u0026rsquo;t available for a Teams Phone Agent, so the resource account is the only way in. The language setting controls the disclaimer and the fallback language, not the accent. Post 2 covers the voices.\nStep 2, hours # Time zone London, Monday to Friday 08:30 to 17:00, weekends closed.\nStep 3, the business hours call flow # The greeting is \u0026ldquo;Thank you for calling Kestrel Vale Council.\u0026rdquo; The AI disclaimer is customised, and after a couple of rounds it ended up as \u0026ldquo;I\u0026rsquo;m the council\u0026rsquo;s virtual assistant. You can ask for a person at any time. How can I help you today?\u0026rdquo; Microsoft\u0026rsquo;s caution is that if you turn the disclaimer off, you\u0026rsquo;re responsible for telling callers they\u0026rsquo;re talking to an AI.\nFor call routing I chose Play menu options. The maximum call length is 10 minutes. The default is 4, which is too short for a housing repair report followed by a transfer. Post 5 covers the message callers hear when the limit hits.\nForce listen isn\u0026rsquo;t supported with a Teams Phone Agent, and neither are audio file greetings or announcements. Everything is text read out by the voice.\nThe menu greeting that never plays # A Teams Phone Agent call flow has three text boxes. Greeting, AI disclaimer, and Menu greeting message. The wizard won\u0026rsquo;t let you continue without a menu greeting of at least 10 characters, because the menu setup is shared with classic auto attendants. On my calls it was never played.\nWhat the caller heard was the greeting, then the disclaimer, then silence while the agent waited for them to speak. My first disclaimer didn\u0026rsquo;t end in a question, so callers got dead air and no clue they were supposed to say something. Microsoft\u0026rsquo;s own default disclaimer is \u0026ldquo;I\u0026rsquo;m a virtual assistant. How can I help you today?\u0026rdquo;, which I think is a hint.\nThe fix is to end the disclaimer with the question. Do it in the after-hours flow too, and in any holiday flows you add, because each has its own disclaimer field.\nDon\u0026rsquo;t list the menu options in any of these boxes. The agent routes from what the caller says. Microsoft could start playing the menu greeting in a later update, and if yours repeats the question, callers will hear it twice. Something that can follow the disclaimer, such as \u0026ldquo;Please tell me what you\u0026rsquo;re calling about.\u0026rdquo;, is safer. I haven\u0026rsquo;t re-tested this at GA.\nThe menu is a set of prompts # Each option has a key, a voice command, a description and a destination. The agent decides where to send a caller by matching what they said against the voice command and description. So the description is effectively the prompt. List the words callers actually use, not the department\u0026rsquo;s name for the service.\nKey Voice command Description Destination 1 Council tax Council tax bills, bands, how much, discounts, single person discount, Direct Debit, paying, moving home Tools: council tax Q\u0026amp;A tool 2 Bins and recycling Missed bin, bin not collected, recycling, garden waste, bulky waste, bin day Agents \u0026amp; queues: KVC Council Services, tag template KVC-Tags 3 Housing repairs Council tenant repairs, leak, damp, mould, heating, boiler, broken door or window, emergency repair, report status Agents \u0026amp; queues: KVC Council Services, tag template KVC-Tags 4 Register a birth or death Registrar, register a birth, register a death, register office appointment Voice app: KVC Customer Services 5 Worried about someone Concern about an adult or child at risk, abuse, neglect, safeguarding, someone not safe Voice app: KVC Adult Social Care Duty Desk 6 General information Opening hours, address, contact details, parking permits Tools: general Q\u0026amp;A tool 0 Operator Wants a person, anything else Operator A few things about that table.\nKeys 2 and 3 share an agent. Both point at the same Copilot Studio agent, and the tag template has to be linked on each option that uses it. Without it, the agent\u0026rsquo;s transfers back to people have nowhere to go. The tags are created in PowerShell, and post 8 covers them.\nKey 4 started as a stopgap. Registrar calls went to the Customer Services queue while I sorted out Bookings. Since GA it points at a Microsoft Bookings appointment tool, which post 9 covers.\nKey 5 goes to a person. It goes straight to the duty desk, not through the Copilot Studio agent. That\u0026rsquo;s my view and not a Microsoft rule, but I don\u0026rsquo;t think safeguarding should depend on an AI conversation. A person should pick that call up.\nTools can be picked early. The admin centre let me choose a Q\u0026amp;A tool that was still processing, as post 3 found. Check it\u0026rsquo;s Ready first.\nStep 4, the after-hours call flow # The greeting is \u0026ldquo;Thank you for calling Kestrel Vale Council. Our offices are closed. We open at 8:30am on weekdays.\u0026rdquo; The disclaimer has its own wording out of hours, \u0026ldquo;I\u0026rsquo;m the council\u0026rsquo;s out of hours virtual assistant. Let me know what you would like assistance with and I will see if I can help.\u0026rdquo; It still ends by inviting the caller to speak, for the same reason as in hours. The 10-minute limit is the same. The menu is a different design, not a copy.\nKey Voice command Description Destination 1 Emergency repair Water leak, flooding, no heating, electrical danger, unsafe home Agents \u0026amp; queues: KVC Council Services with KVC-Tags 2 Homeless tonight Nowhere to sleep tonight, homeless, evicted today External number, out-of-hours housing 3 Dangerous building Dangerous structure, collapsed wall, building unsafe External number, building control 5 Worried about someone Adult or child at risk, abuse, safeguarding External number, emergency duty team 9 Everything else Any other enquiry, leave a message Shared voicemail, transcription on In the lab the external numbers go to a test mobile. External transfers need the resource account to have a voice routing policy for Direct Routing and the right outbound licensing, and Microsoft\u0026rsquo;s licensing prerequisites page is the place to check that, not this post.\nThe AI is still in the call out of hours. Routing and spam detection both work once the caller makes a request, so don\u0026rsquo;t build the after-hours flow as if it\u0026rsquo;s a dumb menu.\nThe remaining steps # Authorised users. Not supported for a Teams Phone Agent. Microsoft\u0026rsquo;s known issues list it as \u0026ldquo;Authorized Users: Not supported\u0026rdquo;.\nTemplates. At GA you can pick an automatic recording template here. The GA known issue says assigning it while creating the Teams Phone Agent fails, so save first and then edit. Spam detection is still PowerShell only. In preview, saving in the admin centre cleared the templates I\u0026rsquo;d set in PowerShell. I re-tested at GA and a save kept both, so that looks fixed. Post 5 covers both.\nOn a customer project # Write the menu descriptions in your callers\u0026rsquo; words and treat them like prompts. Test with how real people phrase things, because they won\u0026rsquo;t use your service names. End the disclaimer with the question, in every call flow. Send anything sensitive, safeguarding in my case, straight to people. Set the maximum call length from your longest real journey, including the transfer. Design after-hours as its own flow. Ask what a caller at 11pm can actually be helped with and by whom. Next up is post 5, spam, recording and call length templates.\n","date":"6 October 2026","externalUrl":null,"permalink":"/posts/teams-phone-agent-admin-centre-build/","section":"Posts","summary":"The admin centre wizard for a Teams Phone Agent, step by step, including the text box that is required but never played.","title":"Building the Teams Phone Agent in the admin centre","type":"posts"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/copilot-studio/","section":"Tags","summary":"","title":"Copilot Studio","type":"tags"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/","section":"Kieran Lloyd","summary":"","title":"Kieran Lloyd","type":"page"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/teams-phone/","section":"Tags","summary":"","title":"Teams Phone","type":"tags"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/categories/teams-phone-agent/","section":"Categories","summary":"","title":"Teams Phone Agent","type":"categories"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/series/teams-phone-agent/","section":"Series","summary":"","title":"Teams Phone Agent","type":"series"},{"content":"","date":"6 October 2026","externalUrl":null,"permalink":"/tags/teams-phone-agent/","section":"Tags","summary":"","title":"Teams Phone Agent","type":"tags"},{"content":"","date":"5 October 2026","externalUrl":null,"permalink":"/tags/power-pages/","section":"Tags","summary":"","title":"Power Pages","type":"tags"},{"content":"","date":"5 October 2026","externalUrl":null,"permalink":"/tags/questions-and-answers/","section":"Tags","summary":"","title":"Questions and Answers","type":"tags"},{"content":" Built during the preview. I built and tested this in September 2026, during the Frontier public preview, using MicrosoftTeams PowerShell module 8.0.0. Teams Phone Agent became generally available on 30 September 2026, and I\u0026rsquo;ve noted where GA changed things. Part of the Building a council phone line with Teams Phone Agent series. A Q\u0026amp;A tool is the easiest thing to add to a Teams Phone Agent. Getting my content into one took longer than I expected. My web pages never got read, and my Word documents sat in progress for days with no error. This post covers how the tools work, what blocked me and what fixed it.\nWhat a Q\u0026amp;A tool is # A Questions and Answers tool is the Teams Phone Agent\u0026rsquo;s knowledge base. You create it in the Teams admin centre under Voice \u0026gt; Templates and resources \u0026gt; Tools. Select Add, choose Questions and Answers, then pick Knowledge - Document or Knowledge - URL. There\u0026rsquo;s a PowerShell route too, New-CsMainlineAttendantQuestionAnswerFlow, but I used the admin centre.\nThe limits, from Microsoft\u0026rsquo;s planning and setup pages:\nDocuments URLs What DOC/DOCX, JSON, HTML, XML, PDF, PPTX, TXT, CSV, XLS/XLSX, ZIP Public pages only Limit 10 files, 5 MB in total per tool The exact page only. No crawling, links aren\u0026rsquo;t followed Not allowed Sensitivity labels or password protection Authenticated or intranet pages At GA, URLs are rescanned once a day. The docs also ask for single-language content, defined acronyms, no complex or nested tables, no images or macros, no conflicting information between articles, and no workflow instructions. They say each tool should only hold answers for the questions callers ask on that number, because a generic tool gives generic answers. Teams Phone Agent doesn\u0026rsquo;t keep a copy of your articles, only an abstract representation. Both pages list known issues as \u0026ldquo;None\u0026rdquo;.\nHow Kestrel Vale uses them # I ended up with two tools. Kestrel Vale Council Tax covers bands, charges, discounts and how to pay, from three source documents. Kestrel Vale General covers contact details, opening hours and parking permits, also from three.\nOn the menu, key 1 points at the council tax tool and key 6 at the general one. The Teams Phone Agent decides where to send a caller from what they say, using each option\u0026rsquo;s voice command and description, so the greeting doesn\u0026rsquo;t read out a list. Post 4 covers the menu.\nAttempt one: URLs # I built the council\u0026rsquo;s public website on Power Pages, on a trial site, and pointed the tools at pages like https://kestrelvale.contoso.com/council-tax/, /council-tax/discounts/, /council-tax/pay/, /contact-us/, /opening-hours/ and /parking-permits/. It didn\u0026rsquo;t work, in two stages.\nFirst the tool said it couldn\u0026rsquo;t locate the URL. I\u0026rsquo;d entered the pages without a trailing slash, and the site answered with a 301 redirect to the slashed version. It looks like the tool doesn\u0026rsquo;t follow redirects. Entering the exact URL that returns a 200 got me past that.\nThen I got a 403. The trial site\u0026rsquo;s robots.txt was User-agent: * and Disallow: /. In my own testing the site returned a 200 to a normal browser and a 502 to an AI crawler user agent, GPTBot. I can\u0026rsquo;t see inside Microsoft\u0026rsquo;s reader, so that\u0026rsquo;s the likely cause and not a proven one.\nI gave up on URLs for the demo. That\u0026rsquo;s not a verdict on URL knowledge, only on a Power Pages trial site with its defaults. If you try it, check that the site visibility is public, use the exact final URL with no redirect, read the robots.txt, and on a production site look at the bot rules in the Power Pages Web Application Firewall. I haven\u0026rsquo;t re-tested URL knowledge since GA.\nAttempt two: Word documents # So I uploaded documents. Six Word files, three per tool. All six sat at InProgress for at least three days, and the error field stayed null. No failure and no message, which is worse than an error because there\u0026rsquo;s nothing to search for.\nThe admin centre only shows the tool as In progress. PowerShell shows each document.\nGet-CsMainlineAttendantQuestionAnswerFlow | Format-List * The KnowledgeBase field holds a JSON entry per document with a status and an error. Here\u0026rsquo;s a sanitised version of my first council tax tool while it was stuck.\nName : KVC-CouncilTax Type : QuestionAnswer Description : Kestrel Vale council tax: bands, charges, discounts, payment KnowledgeBase : [{\u0026#34;document_name\u0026#34;:\u0026#34;KVC Council tax.docx\u0026#34;,\u0026#34;description\u0026#34;:\u0026#34;...\u0026#34;,\u0026#34;status\u0026#34;:\u0026#34;InProgress\u0026#34;,\u0026#34;error\u0026#34;:null}, ...] For a single tool, this is quicker.\n(Get-CsMainlineAttendantQuestionAnswerFlow -NameFilter \u0026#34;Kestrel Vale Council Tax\u0026#34;).KnowledgeBase The same content saved as .txt reached Ready quickly, and that\u0026rsquo;s what the demo uses now.\nI can\u0026rsquo;t say for certain why the Word files stuck, but I have a good suspect. I wrote them on my work laptop, where Word has sensitivity labels, and uploaded them to the lab tenant. Microsoft\u0026rsquo;s docs say Q\u0026amp;A documents must not carry sensitivity labels. After GA I created a new Word document inside the lab tenant and uploaded it to a test tool, and it went to Ready almost straight away. So Word documents do work. The test was after GA, so I can\u0026rsquo;t rule out a fix on Microsoft\u0026rsquo;s side, but my money is on where the files were written.\nIt\u0026rsquo;s an easy one to fall into on a real project. Content often gets drafted on one tenant\u0026rsquo;s machine and uploaded to another, and the label travels with the file.\nOne more thing to watch. The admin centre let me pick the council tax tool on a menu option while its documents were still In progress. Being selectable doesn\u0026rsquo;t mean it\u0026rsquo;s ready.\nOn a customer project # Check every document is Ready in PowerShell before you wire a tool to the menu. Don\u0026rsquo;t trust that it\u0026rsquo;s selectable in the admin centre. Start with plain text or simple documents. Clean, single language, no complex tables. Check documents for a sensitivity label before you upload them, especially if they were written in a different tenant. Better still, create them in the tenant that will use them. Keep tools narrow, as Microsoft suggests. Kestrel Vale splits council tax from general information. If you use URLs, check them as an anonymous client and with a bot user agent, use the exact final URL, and remember that since GA a website change reaches the phone within a day. Decide who owns the content. When council tax changes in April, somebody has to update the tool. Next up is building the Teams Phone Agent in the admin centre, including the menu that sends callers to these tools.\n","date":"5 October 2026","externalUrl":null,"permalink":"/posts/teams-phone-agent-qa-tools/","section":"Posts","summary":"Q\u0026A tools are simple until your content won’t load. Web pages that never got read, Word files stuck in progress, and what fixed it.","title":"Teams Phone Agent Q\u0026A tools: getting your content in","type":"posts"},{"content":"","date":"4 October 2026","externalUrl":null,"permalink":"/tags/direct-routing/","section":"Tags","summary":"","title":"Direct Routing","type":"tags"},{"content":"","date":"4 October 2026","externalUrl":null,"permalink":"/tags/resource-accounts/","section":"Tags","summary":"","title":"Resource Accounts","type":"tags"},{"content":" Built during the preview. I built and tested this in September 2026, during the Frontier public preview, using MicrosoftTeams PowerShell module 8.0.0. Teams Phone Agent became generally available on 30 September 2026, and I\u0026rsquo;ve noted where GA changed things. Part of the Building a council phone line with Teams Phone Agent series. None of this is the interesting part of Teams Phone Agent. It\u0026rsquo;s the part that decides whether your first test call gets answered, and whether it sounds like it belongs to a UK council or a US software company. If you\u0026rsquo;ve done Teams voice for a while, most of it will feel familiar, with a couple of surprises.\nResource accounts # A Teams Phone Agent needs its own resource account, and since GA that\u0026rsquo;s the only way in. The admin centre option to reach one \u0026ldquo;through a voice app\u0026rdquo; without a resource account isn\u0026rsquo;t available for Teams Phone Agent. The resource account holds the phone number and needs a Teams Phone Resource Account licence. Those licences are free, but you only get a set number of them based on your Teams Phone licences, and I had to free one up in my lab before I could carry on.\nA new resource account type # Teams Phone Agent has its own resource account type, so the main Kestrel Vale line uses a Teams Phone Agent resource account rather than an auto attendant one. In the admin centre it\u0026rsquo;s just another option in the resource account type list. In PowerShell it\u0026rsquo;s another application ID:\nType Application ID Teams Phone Agent 7d563055-b6cc-4d7a-93c1-38aa762b34ae Auto attendant ce933385-9390-45d1-9512-c8d228074e07 Call queue 11cd3e2e-fccb-42ad-ad00-878b93575e07 New-CsOnlineApplicationInstance -UserPrincipalName ra-main@contoso.com -ApplicationId 7d563055-b6cc-4d7a-93c1-38aa762b34ae -DisplayName \u0026#34;Main line\u0026#34; If you copy the ID from Microsoft\u0026rsquo;s docs, take it from the resource accounts article. At the time of writing, the New-CsOnlineApplicationInstance and Set-CsOnlineApplicationInstance reference pages list it with the last character missing, which isn\u0026rsquo;t a valid GUID.\nYou can check which type your existing resource accounts are with:\nGet-CsOnlineApplicationInstance | Select-Object DisplayName, UserPrincipalName, ApplicationId Do the queues behind it need resource accounts? # Microsoft\u0026rsquo;s nesting guidance says a call queue sitting behind a voice app that has already answered the call doesn\u0026rsquo;t need its own resource account. Only the first voice app to answer does. So strictly, Customer Services and Housing Repairs don\u0026rsquo;t need one.\nTransfers back from Copilot Studio don\u0026rsquo;t need them either. My tag template sends each tag straight to the queue as a voice app, so the queue\u0026rsquo;s resource account never comes into it.\nI kept them anyway, for two reasons:\nThe Queues app. Authorised users can\u0026rsquo;t change the settings of a queue that\u0026rsquo;s nested without a resource account. That rules out a supervisor changing queue settings from Teams, which is a nice demo moment. What staff see. How a call reaches a queue changes historical reporting and the name on the incoming call pop-up. Transfers into a Teams Phone Agent, from an auto attendant, a call queue or another Teams Phone Agent, need to go to its resource account. Microsoft currently lists voice app transfers for those as a known issue, so they may be fixed later. Watch out though, because the same article\u0026rsquo;s menu options still list a Teams Phone Agent as a voice app destination, so it\u0026rsquo;s an easy one to set up by mistake. This matters once you start chaining agents together, which post 9 does.\nAI Agent resource accounts # There\u0026rsquo;s another option on the horizon. New-CsAgent creates an AI Agent that you associate with a resource account, so a Copilot Studio agent can answer its own number with no Teams Phone Agent in front of it. Microsoft lists it as a private preview, I haven\u0026rsquo;t tested it, and it\u0026rsquo;s out of scope for this series for now.\nDirect Routing # The good news for anyone running their own SBCs is that Teams Phone Agent is invisible to them. My SBC sends an INVITE to the resource account\u0026rsquo;s number, exactly as it would for an auto attendant, and Teams answers it. There\u0026rsquo;s nothing Teams Phone Agent specific to configure on the SBC side.\nOn the Teams side, assigning the number is the same as any other resource account:\n$ra = \u0026#34;ra-kvc-main@contoso.com\u0026#34; Set-CsPhoneNumberAssignment -Identity $ra -PhoneNumber \u0026#34;+44XXXXXXXXXX\u0026#34; -PhoneNumberType DirectRouting Two things to sort out at the same time:\nUsage location. Set it on the resource account before you assign the licence, and make sure it matches the number. Mine are all GB. Outbound calls. If the Teams Phone Agent will ever transfer to an external number, the resource account needs an online voice routing policy that can reach it. Also read Microsoft\u0026rsquo;s note on the licensing changes for auto attendant and call queue outbound PSTN calling from November 2025, because it applies here too. For testing, I registered a SIP softphone directly on my SBC so I could ring the line as different residents with different caller IDs. That gets its own post later in the series, because it changed how quickly I could test everything else.\nVoices # This is the one that caught me out. On a Kestrel Vale call your caller hears two voices, and you set them in two different places.\nThe Teams Phone Agent voice is set on the Teams Phone Agent itself. It\u0026rsquo;s a short list:\nVoice Optimised for Aarti English (India) Andrew English (US) Ava, the default English (US) Diya, Meera Hindi Florian German Xiaoxiao, Yunxiao Chinese (Simplified) Ximena Spanish (Spain) Every voice can speak every supported language, but there\u0026rsquo;s nothing optimised for British English, even at GA. Setting the Teams Phone Agent\u0026rsquo;s language to English (United Kingdom) controls the language of the disclaimer and the fallback language, not the accent. My first test call was greeted in an American accent, which isn\u0026rsquo;t what you want on a UK council line. I started on Ava and have since moved to Andrew.\nThe Copilot Studio agent voice comes from the agent, and it speaks British English. So when Teams Phone Agent hands a call to the Council Services agent, the caller goes from an American voice to a British one mid-call.\nWhich British voice is another matter. Copilot Studio\u0026rsquo;s voice settings let me pick from a list of British English voices, and I tried Olivia, Hollie and Libby. Every one of them came out as en-GB-RyanNeural, in the test panel and on the phone, even after publishing. A solution export showed my choice was saved. Microsoft\u0026rsquo;s docs only describe choosing a voice for real-time voice agents, and Kestrel Vale is a basic voice agent using classic orchestration. As far as I can tell, a basic voice agent speaks with the default voice for its language, whatever the settings page says. You can see the voice actually used in the speak field of the conversation transcript, so check there rather than trusting the setting.\nFor a customer project, I\u0026rsquo;d do three things:\nplan the voices for both halves together, and remember that on a basic voice agent you get the default voice for the language tell the customer up front that there\u0026rsquo;s no British English voice for the Teams Phone Agent yet keep the greeting and disclaimer short, because that\u0026rsquo;s the part spoken in the less local voice Tooling # A quick note on PowerShell, since a lot of this series uses it. I\u0026rsquo;ve been on MicrosoftTeams module 8.0.0. The docs say 7.9.1-preview or later for the newer Teams Phone Agent cmdlets. On 8.0.0, New-CsAutoRecordingTemplate makes -AgentViewPermission mandatory even though the docs show it as optional, so expect the odd mismatch between the docs and the module. You\u0026rsquo;ll also want the Microsoft Graph module for licensing resource accounts.\nWhat I\u0026rsquo;d do differently # Name everything from day one. I used ra-\u0026lt;org\u0026gt;-\u0026lt;purpose\u0026gt;, so ra-kvc-main, ra-kvc-cs and so on. I\u0026rsquo;m planning to build other demo organisations in the same tenant, and the org prefix will keep their resource accounts apart. On a customer tenant the same idea works per site or per department. Decide up front which queues get resource accounts, based on whether supervisors will manage them from the Queues app.\nNext up is Q\u0026amp;A tools: getting your content in.\n","date":"4 October 2026","externalUrl":null,"permalink":"/posts/teams-phone-agent-foundations/","section":"Posts","summary":"Resource accounts, Direct Routing and voices. The unglamorous bits that decide whether your first Teams Phone Agent call works and sounds right.","title":"Teams Phone Agent foundations: resource accounts, Direct Routing and voices","type":"posts"},{"content":"","date":"4 October 2026","externalUrl":null,"permalink":"/tags/auto-attendant/","section":"Tags","summary":"","title":"Auto Attendant","type":"tags"},{"content":" Built during the preview. I built and tested this in September 2026, during the Frontier public preview, using MicrosoftTeams PowerShell module 8.0.0. Teams Phone Agent became generally available on 30 September 2026, and I\u0026rsquo;ve updated this post where GA changed things. Part of the Building a council phone line with Teams Phone Agent series. The first thing I had to get straight before building anything was where Teams Phone Agent stops and Copilot Studio starts. They overlap, the naming doesn\u0026rsquo;t help, and if you get the split wrong you end up trying to make one of them do a job it isn\u0026rsquo;t built for.\nThis is how I think about it now, after a couple of weeks of building and a lot of test calls.\nIt\u0026rsquo;s an auto attendant underneath # Teams Phone Agent isn\u0026rsquo;t a separate product sitting next to auto attendants. It is an auto attendant with an AI front end switched on. You create it in the Teams admin centre under Voice \u0026gt; Auto attendants. Since GA, the Add button has a Teams Phone Agent option. In preview you added an auto attendant and switched the Teams Phone Agent toggle on. In PowerShell it\u0026rsquo;s still Get-CsAutoAttendant, and a lot of the cmdlets still carry the old preview name, Mainline Attendant.\nThat\u0026rsquo;s good news if you\u0026rsquo;ve built auto attendants before, because most of what you know carries over. Resource accounts, business hours, holidays, the operator and dial by name all work the same way.\nWhat the AI adds # A standard auto attendant gives callers a menu and waits for a key press or a keyword. Teams Phone Agent greets the caller, plays an AI disclosure, asks how it can help and works out where the call should go from what they say.\nEach menu option still has a key and a voice command, but it also gets a description and a destination. The description is what the AI reads when it decides where to send the call. I\u0026rsquo;ve found it helps to write those like you\u0026rsquo;re briefing a new starter on the switchboard: what this option is for, and the words a caller might actually use.\nThe destinations go well beyond what an auto attendant can do:\nTools. Q\u0026amp;A tools answer questions from documents you upload. Appointment tools book, change and cancel appointments, either through Microsoft Bookings or your own booking API. Agents \u0026amp; queues. Copilot Studio agents and third-party IVRs. The usual auto attendant targets. The operator, people, voice apps, resource accounts, shared voicemail and external numbers. On top of that there are templates for spam detection and automatic call recording, and a maximum call length, which defaults to four minutes.\nThe Q\u0026amp;A tools are the easiest win. The fiddly part is getting your content into them, which post 3 covers.\nWhere Copilot Studio comes in # Teams Phone Agent is good at understanding a caller, answering questions and routing. It doesn\u0026rsquo;t do multi-step work against your own data. It can\u0026rsquo;t look up a resident, ask which bin was missed, create a case and read back a reference number.\nThat\u0026rsquo;s what the Copilot Studio voice agent is for. In Kestrel Vale it handles missed bins, housing repairs, emergency repairs and case status checks, using topics, Power Automate flows and Dataverse. Teams Phone Agent hands the call over through an Agents \u0026amp; queues destination, and when the agent needs a person it hands the call back with a tag that routes it to the right Teams call queue.\nOne thing to know early. When Teams Phone Agent hands a call to Copilot Studio, the caller\u0026rsquo;s number doesn\u0026rsquo;t come with it, or at least it didn\u0026rsquo;t in any of my testing. I\u0026rsquo;d planned to identify residents by their phone number and ended up asking for their postcode instead. Post 6 covers that properly.\nYou can also give a Copilot Studio agent its own number through an AI Agent resource account and skip Teams Phone Agent altogether. I haven\u0026rsquo;t tested that path yet, so I\u0026rsquo;m not going to say much about it here.\nIs there still a place for a standard auto attendant? # Yes. If the call flow really is \u0026ldquo;press 1 for sales, 2 for support\u0026rdquo;, a standard auto attendant does the job and nobody has to explain AI disclosures to the legal team. I\u0026rsquo;d only reach for Teams Phone Agent when callers are asking questions, describing a problem in their own words, or getting lost in a menu tree that has grown over the years.\nDynamics 365 Contact Center is the other end of the scale, a full contact centre platform, and it\u0026rsquo;s outside this series for now. I did build the Kestrel Vale data on the standard Contact and Case tables so the same data can move into Dynamics 365 Customer Service later without a rebuild.\nHow I split Kestrel Vale # Job Where it lives Greeting, AI disclosure, working out what the caller wants Teams Phone Agent Council tax and general questions Teams Phone Agent Q\u0026amp;A tools Missed bins, housing repairs, emergency repairs, case status Copilot Studio voice agent Customer Services, Housing Repairs, Adult Social Care duty desk Teams call queues Spam screening, call recording, maximum call length Teams Phone Agent templates and settings Register office appointments Teams Phone Agent appointment tool with Microsoft Bookings Admin centre or PowerShell? # This is the part that changed most at GA, so treat it as correct as of 30 September 2026.\nYou can do these in the Teams admin centre:\ncreate the Teams Phone Agent and its menu options, including Copilot Studio agents Q\u0026amp;A tools and custom appointment tools the AI disclosure text the maximum call length and the message callers hear when it\u0026rsquo;s reached, which was PowerShell only in preview assign an automatic recording template, also PowerShell only in preview These are still PowerShell only:\nspam detection templates creating a Microsoft Bookings appointment tool. Microsoft\u0026rsquo;s docs say the whole Teams Phone Agent has to be built in PowerShell, but at GA I created the tool in PowerShell and then picked it on a menu option in the admin centre, on a Teams Phone Agent I\u0026rsquo;d built there. Post 9 covers it. The catch during preview was how the two interacted. When I edited my Teams Phone Agent in the admin centre and saved, it cleared the spam and recording templates I\u0026rsquo;d set in PowerShell, with no warning, so I re-ran a short script after every admin centre change. I re-tested it at GA, and an admin centre save kept both templates, so that looks fixed. I\u0026rsquo;d still check after a save on a customer tenant, and post 5 has the commands.\nMicrosoft also lists a GA known issue: assigning a recording template while you\u0026rsquo;re creating a Teams Phone Agent fails. Save it first, then edit it and add the template.\nBefore you start # Availability. I built this during the Frontier public preview. Teams Phone Agent went generally available on 30 September 2026, so you don\u0026rsquo;t need Frontier any more. Licensing. Read Microsoft\u0026rsquo;s Teams Phone Agent licensing page rather than relying on a blog post, and don\u0026rsquo;t assume what applied in preview still applies at GA. Voices. Even at GA there\u0026rsquo;s no voice optimised for British English. Ava is the default and is optimised for US English. My first test call came back in an American accent, which for a UK council demo isn\u0026rsquo;t ideal. Check the voice list before you promise a customer anything. PowerShell. The docs say module 7.9.1-preview or later. I\u0026rsquo;ve been on 8.0.0, where a couple of parameters are mandatory that the docs show as optional. Next up is foundations: resource accounts, Direct Routing, and a resource account type the docs don\u0026rsquo;t mention yet.\n","date":"4 October 2026","externalUrl":null,"permalink":"/posts/teams-phone-agent-which-does-what/","section":"Posts","summary":"Before building anything I had to get straight where Teams Phone Agent stops and Copilot Studio starts. Here’s how I split the work for the Kestrel Vale demo.","title":"Teams Phone Agent, auto attendants and Copilot Studio: which does what","type":"posts"},{"content":" Built during the preview. I built and tested all of this in September 2026, during the Frontier public preview, using MicrosoftTeams PowerShell module 8.0.0. Teams Phone Agent became generally available on 30 September 2026. Where GA changed something, the post says so. I\u0026rsquo;ve spent most of my recent career on Teams voice. Direct Routing, SBCs, auto attendants, call queues and plenty of migrations. Lately I\u0026rsquo;ve been doing more and more on the Microsoft AI side, mostly Copilot Studio, and Teams Phone Agent is the first product that properly sits across both.\nSo I built one. I wanted something closer to a real deployment than a hello-world, so it\u0026rsquo;s a full phone line for a fictional council called Kestrel Vale, with resident records and cases in Dataverse, transfers to real call queues, and a softphone registered to my SBC so I can ring it as different residents.\nThe full infographic covers the call route, everything the agent can handle, the safeguards and the tech behind it. Open the full infographic. What it does # A resident rings the council number. The call comes in over Direct Routing and Teams Phone Agent answers it, gives the AI disclosure and asks how it can help. From there it can:\nanswer council tax and general questions from the council\u0026rsquo;s own documents hand the call to a Copilot Studio voice agent to report a missed bin, report a housing repair or emergency repair, or check on an existing case, all of which create or read real cases in Dataverse put the caller through to Customer Services, Housing Repairs or the Adult Social Care duty desk screen out known nuisance callers, record the call to SharePoint and stop the call politely if it runs too long None of it is staged. Every step in this series is something I\u0026rsquo;ve had working on a real call, and anything I haven\u0026rsquo;t got working yet is marked as such.\nWhy a series # The Microsoft docs tell you which settings exist. They don\u0026rsquo;t tell you that the menu greeting never gets played, that saving in the admin centre quietly wiped settings I\u0026rsquo;d made in PowerShell during the preview, or that the caller\u0026rsquo;s number doesn\u0026rsquo;t reach your Copilot Studio agent. I found those out the slow way, and most of what\u0026rsquo;s useful here is in the gaps between the docs and what happens on a call.\nEach post covers one part of the build, what went wrong, and what I\u0026rsquo;d do differently on a customer project.\nThe series # Teams Phone Agent, auto attendants and Copilot Studio: which does what Foundations: resource accounts, Direct Routing and voices Q\u0026amp;A tools: getting your content in Building the Teams Phone Agent in the admin centre Spam, recording and call length templates (coming soon) Copilot Studio voice, part 1: data and identifying the caller (coming soon) Copilot Studio voice, part 2: topic patterns for the phone (coming soon) Handing calls back to people (coming soon) Bookings and chaining one Teams Phone Agent to another (coming soon) Testing like a caller: a SIP softphone on your SBC (coming soon) What I\u0026rsquo;d tell a customer (coming soon) There will also be a standalone gotchas post for anyone who just wants the list.\nBefore you start # I built Kestrel Vale while Teams Phone Agent was in Microsoft\u0026rsquo;s Frontier public preview. It went generally available on 30 September 2026, so you no longer need to be in Frontier to use it. A few settings that were PowerShell only in preview are now in the admin centre, and I\u0026rsquo;ve called that out wherever it changes a step. Anything I haven\u0026rsquo;t re-tested since GA is marked.\nKestrel Vale is made up, and so is its crest, which is AI-generated. The residents, addresses, phone numbers and case references are all test data, and I\u0026rsquo;ve left tenant IDs and SBC details out.\nI\u0026rsquo;ll put the topic YAML and PowerShell scripts on GitHub as the series goes on, and link them from each post.\nIf you\u0026rsquo;re building one and have hit something I haven\u0026rsquo;t, I\u0026rsquo;d like to hear about it.\n","date":"4 October 2026","externalUrl":null,"permalink":"/posts/building-a-council-phone-line-with-teams-phone-agent/","section":"Posts","summary":"I built a phone line for a fictional council using Teams Phone Agent, Copilot Studio and Direct Routing. This is the index for the series.","title":"Building a council phone line with Teams Phone Agent","type":"posts"},{"content":"","date":"4 October 2026","externalUrl":null,"permalink":"/tags/dataverse/","section":"Tags","summary":"","title":"Dataverse","type":"tags"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"}]