PowerShell module that generates interactive D3.js flow diagrams of Microsoft Teams Voice Auto Attendants and Call Queues.
TeamsVoiceVisualizer connects to Microsoft Teams, retrieves all Auto Attendants (AAs) and Call Queues (CQs), resolves every call target to a human-readable name, and generates a single-page interactive HTML report with zoomable D3.js directed graphs for each voice flow.
No server, no database, no external runtime — just PowerShell, the MicrosoftTeams module, and an HTML file.
| Area | Capabilities |
|---|---|
| Auto Attendants | Full call flow visualization: greeting → menu → DTMF options → targets (User, Resource Account, External PSTN, Operator, Disconnect, Announcement). Business hours, after-hours with schedule, and holiday flows. |
| Call Queues | Complete flow: greeting → music-on-hold → routing method → agent group (individuals, DLs, Teams channel) → overflow/timeout/no-agents exception paths. Conference mode, presence-based routing, OBO caller ID. |
| Layout | Each flow is laid out as a layered directed graph (dagre), so a target referenced from two places stays a single node and back-edges (e.g. AA → Queue → same AA) are preserved rather than cut. |
| Interactivity | Zoom & pan with a per-diagram Reset view button. Drag any node to reposition it; connected edges follow. Hover tooltips show node details (full greeting text, per-DTMF menu map, agent lists, AA settings). Collapsible sections. Sticky navigation with smooth scroll. |
| Image export | Export any diagram as PNG (2× raster) or SVG (vector) from the per-diagram toolbar — for tickets, runbooks, or documentation. |
| Cross-flow linking | Transfer targets that point to a resource account fronting another AA or Call Queue become clickable jumps — click to scroll to and highlight the destination diagram, so you can follow the end-to-end caller journey. |
| Global search | Search box filters and highlights nodes across every diagram (by user, queue, phone number, or greeting text), auto-expanding and jumping to the first match. |
| Dark Theme | GitHub-dark inspired color scheme. Color-coded node types for instant recognition. |
| Self-Contained | Single HTML file with D3.js and dagre loaded from CDN. No build step, no dependencies beyond a browser. |
- PowerShell 7.2+
- MicrosoftTeams module >= 6.0.0 (with an active connection to your Teams tenant)
- Internet connection (D3.js is loaded from CDN when viewing the report)
# Clone the repository
git clone https://github.com/RobinpZA/TeamsVoiceVisualizer.git
# Import the module
Import-Module .\TeamsVoiceVisualizer\TeamsVoiceVisualizer.psd1# Connect to Teams first (or the module will prompt you)
Connect-MicrosoftTeams
# Generate and open the interactive report
Show-TeamsVoiceFlowReportExport-TeamsVoiceFlowReport -OutputPath 'C:\Reports\voice-flow.html'$data = Get-TeamsVoiceFlowData
$data.AutoAttendants | ConvertTo-Json -Depth 5 | Out-File 'aa-data.json'
$data.CallQueues | ConvertTo-Json -Depth 5 | Out-File 'cq-data.json'| Command | Description |
|---|---|
Get-TeamsVoiceFlowData |
Retrieves all AA and CQ data as structured objects. Returns PSCustomObject with AutoAttendants, CallQueues, TenantDisplayName, and GeneratedAt. |
Show-TeamsVoiceFlowReport |
Fetches data, generates the interactive D3.js HTML report, saves to a temp file, and opens it in the default browser. Use -OutputPath to specify a custom location. |
Export-TeamsVoiceFlowReport |
Same as Show-* but does not open the browser. Requires -OutputPath. Supports -WhatIf/-Confirm. |
TeamsVoiceVisualizer/
├── Private/
│ ├── Helpers/
│ │ ├── Connect-TeamsVoiceSession.ps1 # Auth + connection
│ │ └── Resolve-VoiceTargetName.ps1 # GUID/phone → display name resolution
│ ├── Data/
│ │ ├── Get-VoiceAutoAttendantData.ps1 # Fetch + enrich AA data
│ │ └── Get-VoiceCallQueueData.ps1 # Fetch + enrich CQ data
│ └── Visualization/
│ ├── New-AAGraphData.ps1 # AA → D3 nodes/links
│ ├── New-CQGraphData.ps1 # CQ → D3 nodes/links
│ └── New-VoiceFlowReport.ps1 # Assemble full HTML report
├── Public/
│ ├── Get-TeamsVoiceFlowData.ps1
│ ├── Show-TeamsVoiceFlowReport.ps1
│ └── Export-TeamsVoiceFlowReport.ps1
├── Tests/
│ └── TeamsVoiceVisualizer.Tests.ps1
├── TeamsVoiceVisualizer.psd1 # Module manifest
├── TeamsVoiceVisualizer.psm1 # Module loader
├── build.ps1 # Analyze / Test / Build
├── PSScriptAnalyzerSettings.psd1
└── README.md
| Color | Node Type | Description |
|---|---|---|
| 🔵 Blue | Auto Attendant | The AA itself and operator targets |
| 🟢 Green | Call Queue / Agent Group | CQs and agent collections |
| 🟣 Purple | Menu / Music on Hold | Menu prompts and queue hold music |
| 🩶 Gray | Greeting / Endpoint | Greeting nodes and flow endpoints |
| 🔵 Cyan | User / Agent | Individual user targets |
| 🩷 Pink | Resource Account | Application endpoints and OBO RAs |
| 🟠 Orange | External PSTN / Exception | Phone numbers and exception flows |
| 🔴 Red | Disconnect | Call termination |
- Run
.\build.ps1 -Task Analyzeto check code quality. - Run
.\build.ps1 -Task Testto execute Pester tests. - Run
.\build.ps1 -Task Allfor the full validation pipeline.
MIT — see LICENSE for details.