Installation
Before You Start
Section titled “Before You Start”- Ensure your Microsoft Entra ID application has the required Microsoft Graph application permissions.
- Download the v1 binary (
ms-teams-agent.binon Linux,ms-teams-agent.exeon Windows) and the template config (conf/template_config.yaml). - Obtain your license file and note its absolute path for
collection_config.license_file.
Prerequisites
Section titled “Prerequisites”Host requirements
- Outbound access to:
graph.microsoft.comlogin.microsoftonline.com- your backend endpoint (Dynatrace or Splunk)
- No Python runtime required (the binary is self-contained)
Microsoft Entra ID / Microsoft Graph permissions
CallRecords.Read.AllServiceHealth.Read.All(required ifms_teams_issues_collectionis enabled)Reports.Read.All(used for license validation)
VAAC features (ms_teams_autoattendant_collection, ms_teams_callqueue_collection)
- Set
microsoft_usernameandmicrosoft_password - Use an account authorized on the Teams Voice Analytics API
License file
A valid license file is required. At startup, the agent validates:
- license signature
- tenant match
- validity period
- user count (standard license)
Build config.yaml
Section titled “Build config.yaml”Start from conf/template_config.yaml and set at least:
microsoft_authentication: microsoft_tenant_id: "<tenant_id>" microsoft_client_id: "<client_id>" microsoft_client_secret: "<client_secret>" microsoft_scope: "https://graph.microsoft.com/.default" microsoft_grant_type: "client_credentials"
output: dynatrace: enabled: false splunk: enabled: false console: enabled: true
collection_config: microsoft_max_call_duration_hours: 5 interval_collection_minutes: 1 logfile_log_level: "INFO" license_file: "<path/to/license.lic>" features: ms_teams_calls_collection: enabled: true ms_teams_issues_collection: enabled: false ms_teams_pstn_calls_collection: enabled: false ms_teams_direct_routing_calls_collection: enabled: false ms_teams_site_definition: enabled: false ms_teams_autoattendant_collection: enabled: false ms_teams_callqueue_collection: enabled: falseFull settings reference: Configuration Reference
Start the Collector
Section titled “Start the Collector”./ms-teams-agent.bin --config ./conf/config.yaml.\ms-teams-agent.exe --config .\conf\config.yamlThe collector runs in a continuous loop: collect, wait interval_collection_minutes, repeat.
First-Run Checks
Section titled “First-Run Checks”-
Confirm the binary is available.
Terminal window ./ms-teams-agent.bin --versionTerminal window .\ms-teams-agent.exe --version -
Run one cycle without reading previous state.
Terminal window ./ms-teams-agent.bin --config ./conf/config.yaml --ignore_stateTerminal window .\ms-teams-agent.exe --config .\conf\config.yaml --ignore_state -
(Optional) Debug one call ID.
Terminal window ./ms-teams-agent.bin --config ./conf/config.yaml --call_id "<CALL_ID>"Terminal window .\ms-teams-agent.exe --config .\conf\config.yaml --call_id "<CALL_ID>"
Verify Ingestion
Section titled “Verify Ingestion”The collector creates these paths next to the binary:
logs/pheniAgent_<tenant_id>.log(daily rotation, 7 files retained)state/state_<tenant_id>.json(processed call IDs)
Follow logs in real time:
tail -f logs/pheniAgent_<tenant_id>.logGet-Content .\logs\pheniAgent_<tenant_id>.log -WaitThen confirm events appear in your backend (Dynatrace or Splunk).