What Is Contact Center DNIS (Dialed Number Identification Service)?
A telephony signal identifying which inbound number a caller dialed, used as a routing and reporting key in contact centers.
What Is Contact Center DNIS (Dialed Number Identification Service)?
Contact center DNIS (Dialed Number Identification Service) is a telephony routing signal that identifies which inbound number a caller dialed. In multi-line contact centers, many toll-free numbers and DIDs can land on the same SIP trunk; DNIS lets routing, reporting, and AI voice agents separate those calls by campaign. In production LLM systems, DNIS selects the right prompt, language, knowledge base, and guardrails before the conversation starts. FutureAGI treats DNIS as a trace attribute and eval cohort key so campaign-specific regressions do not hide in aggregate metrics.
Why It Matters in Production LLM and Agent Systems
DNIS-driven prompt selection is brittle in practice. A campaign team launches a new toll-free number for a Spanish-language support line; ops adds it to the carrier config; the LLM agent’s prompt-routing table is updated by a different team a week later. In that gap, Spanish callers hit the English-language default prompt and the bot stumbles for seven days before anyone notices.
The pain is felt across roles. A voice engineer chases reports of bots speaking the wrong language and finds the routing table is stale. A QA lead sees ConversationResolution regressions concentrated in one DNIS but cannot prove the cause without per-DNIS eval slicing. A compliance officer is asked whether the consent disclosure played correctly on a regulated DNIS — the disclosure was conditional on the prompt template, and the template version per DNIS was never tracked. Customers experience it as the bot “answering as if I called the wrong company.”
In 2026 voice stacks on LiveKit, Pipecat, Twilio, and Telnyx all surface DNIS in the SIP INVITE as call metadata. Few teams capture it on the LLM trace, so the link between DNIS and bot behaviour is invisible to the eval layer. Step-level evals tied to a voice.dnis attribute are the durable fix.
Unlike Twilio Studio call logs, which can prove the number a caller dialed, an LLM eval run needs DNIS on the trace to explain why a specific campaign failed.
How FutureAGI Handles DNIS
FutureAGI’s approach is to ingest DNIS as a span attribute on every voice trace and treat it as a cohort key for evaluation. The livekit and pipecat traceAI integrations capture voice.dnis (the dialed number), voice.ani (the caller’s number, with PII handling), and the resolved campaign_id. Evaluators — ConversationResolution, ASRAccuracy, Groundedness — write per-trace scores; the FutureAGI dashboard renders eval-fail-rate-by-DNIS so any campaign drifting from baseline pages an engineer. Agent Command Center can also branch its routing-policy on DNIS — choosing different LLMs, prompt templates, or pre-guardrails per campaign without code changes.
A concrete example: a regional bank operates 47 toll-free numbers across retail support, mortgage, business banking, and fraud. They route them to one LLM voice agent that conditions on DNIS for prompt and knowledge base. After a model upgrade, FutureAGI’s eval-fail-rate-by-DNIS dashboard flags the fraud-line DNIS specifically: resolution dropped from 0.84 to 0.61 because the new model’s tone was too casual for fraud-victim conversations. The team uses Agent Command Center to pin the fraud DNIS to the previous model while the new one is tone-tuned, leaving other DNIS routes on the upgrade. Without DNIS-keyed evaluation, the regression would have looked like a 4-point global drop and been attributed to noise.
How to Measure or Detect It
DNIS-driven AI evaluation needs a small set of targeted signals:
ConversationResolutionbyvoice.dnis: surfaces per-campaign regressions.ASRAccuracyby DNIS: language- or region-specific DNIS may need ASR tuning.- Prompt-template version per DNIS: stale or missing version is a routing bug.
- Cohort drift alarms: alert when a DNIS’s eval-fail-rate diverges 2+ standard deviations from peers.
- DNIS-to-campaign mapping freshness: timestamp the mapping; alert if older than SLA.
Minimal Python:
from fi.evals import ConversationResolution
evaluator = ConversationResolution()
result = evaluator.evaluate(
input="Inbound call on DNIS 1-800-555-0181, mortgage campaign",
output=conversation_transcript,
)
print(result.score, result.reason)
Common Mistakes
- Single LLM prompt across all DNIS routes. Different campaigns need different prompts and knowledge bases.
- No
voice.dnisspan attribute. You cannot slice eval-fail-rate by campaign without it. - DNIS-to-prompt mapping outside version control. Spreadsheet-managed tables drift.
- Ignoring DNIS in regression evals. A new model can regress on one DNIS while passing global thresholds.
- DNIS confused with ANI. Mixing the two in routing logic produces bizarre branches.
Frequently Asked Questions
What is DNIS?
Dialed Number Identification Service is the telephony signal that tells a contact center which number a caller dialed, so calls placed to different toll-free or DID numbers route and report separately even when they share a trunk.
How is DNIS different from ANI?
DNIS identifies the number the caller dialed; ANI (Automatic Number Identification) identifies the number the caller dialed from. Both are passed in the SIP/SS7 signaling and become routing inputs for the LLM voice agent.
How do you evaluate DNIS-driven AI calls?
FutureAGI tags every voice trace with the DNIS as a span attribute and runs ConversationResolution and ASRAccuracy sliced by DNIS, so a regression on one campaign number surfaces immediately.