Integrations · platforms, trunks, pipelines
If it answers a phone, Earshot can test it.
Platform-agnostic by construction. Earshot needs a phone number, not an API key. The integrations on this page add context on top of the call — the contact record, the event stream, the script trace — and they are never a prerequisite for a test.
The test happens on the phone line — the one interface every platform has in common.
Earshot has been proven against NICE CXone and works the same way against Avaya, Genesys, Five9, Amazon Connect, Cisco, Twilio, Asterisk and FreePBX, and hosted PBX voicemail. That is the floor. The ceiling is joining what Earshot heard to what the platform says it did.
- NICE CXoneSupportedcall-level testing · contact correlation · Data Streaming capture · Studio trace alignment · call-simulator block
- Avaya Aura · AAEP · Communication Manager
- Genesys Cloud
- Amazon Connect
- Cisco
- Five9
- Twilio
- Asterisk / FreePBX
- Anything that answers a call
NICE CXone is the platform Earshot was built and proven on, and the one with the deepest integration. Every other platform is supported at call level today, and the correlation plug-in shape is the same for all of them.
Correlation panels are illustrative. The call-evidence panel is the canonical example run used across the site.
What Earshot heard, next to what CXone did, on one clock.
Contact correlation
You give Earshot an OAuth client key and secret for the CXone Admin and Reporting APIs. For each test call, Earshot fetches the matching contact record by ANI, DNIS and start time, and joins it to the audio evidence: contact ID, skill, scripts run, disposition, agent, transfer chain, callback state.
The result is a line in the report that neither side could produce alone:
Earshot heard the callback offer at 222 s; CXone shows contact 1234 in skill 35607796 via System_Prequeue.
That is the difference between "the offer did not play" and "the offer did not play because the contact never entered the skill that offers it".
Data Streaming capture
CXone Data Streaming is a Kafka-based feed of real-time contact and agent events. Earshot runs a local consumer and lands those events on the run timeline, next to the utterances and the DTMF, on the same clock. You see the queue entry, the skill assignment and the agent state change interleaved with what the caller was hearing at that second.
The consumer runs on your machine with your credentials. No events are relayed anywhere else.
Trace alignment
Pull the Studio .TRC for the contact, or drop it on the run, and every script action is aligned to the audio timestamps: which action played which prompt, which API dip returned what, and where the branch went the other way.
simulator: block
A first-class block for the CXone call simulator — dial, ANI entry, DNIS entry — so a queue-treatment test reads as the test and not as three presses of setup. The same shape covers other platforms' test entry points.
Agent-side verification
A headless test agent goes Available, answers the test call, and verifies skill, whisper, screenpop URL and contact variables. It closes the loop on the "no screenpop" class of bug that call-level evidence can only infer from silence.
Same join key, same report line.
The correlation plug-in has one shape: match a test call to the platform's record by ANI, DNIS and start time, then put the record next to the audio.
Analytics API and notifications
Conversation ID, queue, flow, wrap-up and participants from the analytics API. Notification streams land on the run timeline the way CXone Data Streaming does.
Contact search and Kinesis
Contact ID, queue, flow, initiation method and disconnect reason from contact search. Kinesis contact-event streams on the timeline.
Call-level, which is the point
Legacy trees are tested the way a customer experiences them: dial the VDN or the DID, walk the tree, assert the prompts and the timing. For a migration the legacy side is the baseline you are moving away from. Discover mode maps it from the outside, and a baseline you can call is a baseline you can diff.
Callback verification
Opt in to a callback, then wait for it on a second trunk or number and verify the callback experience — who it announces, what it asks, whether it lands in the skill the offer promised.
Transfer verification
Detect the second leg — ringback, SIP headers — verify the target number, and assert the post-transfer prompts. External transfers stop being "it went somewhere".
Your trunk in, JUnit out.
SIP trunks. voip.ms, Twilio, Telnyx, Bandwidth, or any provider that registers a plain SIP user agent. Earshot never routes your audio through anyone else's infrastructure, and the minutes are billed by your provider — typically around a cent a minute on US routes. Multiple trunks can be configured with per-trunk rate limits and spend caps. SIP trunk setup →
CI systems. earshot run --tag billing --junit out.xml from GitHub Actions, Jenkins or Azure DevOps. Exit codes 0 / 1 / 2, JUnit and JSON output, and a failure message that carries the transcript and the audio path. CLI and CI →
Alerts. Scheduled runs against production IVRs post to Slack, Teams, a webhook, PagerDuty or email on a failure or on timing drift.
Spreadsheets. Import a customer's UAT test-case or bug sheet (CSV or XLSX) as scenarios; export status and evidence links back into their columns. Import a migration DNIS sheet as an ANI/DNIS matrix.
name: ivr-nightly
on:
schedule: [{ cron: "0 6 * * *" }]
jobs:
queue:
runs-on: [self-hosted, earshot]
steps:
- run: earshot run --tag queue --junit out/queue.xml --html out/queue.html
- uses: actions/upload-artifact@v4
if: always()
with: { name: earshot-evidence, path: out/ }Running on a platform that is not here?
If it answers a call, the scenario works today. Tell us which platform and we will show you the correlation plug-in shape against it.