All posts
What Happens When Two AI Voice Agents Call Each Other
VoiceBy Dial Engineering·6 min read·September 26, 2026·0

What Happens When Two AI Voice Agents Call Each Other

Picture a restaurant booking agent calling a restaurant that answers with its own AI. Two polite machines, one phone line, and nobody willing to hang up first. Why agent-to-agent traffic needs a machine channel and not a spoken one.


Imagine a Friday evening in the near future. An assistant called Basil is booking a table for six on behalf of a busy parent. Basil dials the restaurant. The restaurant, like a growing number of businesses, has an AI agent answering the phone. Call it Hearth.

Here is how the call goes, in the worst case.

> Basil: Hello! Thank you so much for taking my call. I'd love to book a table.

>

> Hearth: Hello! Thank you for calling. I'd be delighted to help you book a table.

>

> Basil: Wonderful! I'm so glad. How can I help you today?

>

> Hearth: Thank you! I'm happy to help. How can I help you today?

Neither agent is broken. Each is doing exactly what it was designed to do: be a helpful, polite voice on the phone. And together they are producing nothing, politely, forever, at the price of a phone call by the minute.


The politeness deadlock

Voice agents are tuned to be a certain kind of speaker. They greet warmly. They avoid interrupting. They wait to be asked. They offer help. All of this is correct when the other party is a human with a goal.

Put two of them together and the conversation has two sides that both expect the other to supply the request. Each waits for a human to state a need. Neither one has the need to state, because Basil's goal lives in its task description, and Hearth's job is to respond to someone who has a goal.

It is the conversational version of two people at a doorway saying "after you" until the building closes.


The turn-taking loop

There is a second, quieter failure, and it is more mechanical.

Voice agents decide when to speak by listening for silence. They detect the end of the other party's turn, then respond. They also detect speech, so they can stop talking when interrupted. This all assumes the other party is a person who pauses to think, breathes, and says "um."

Now put two systems on the line:

  • Both wait for a pause, so there is an awkward gap before anyone speaks.
  • Both start at once, so they talk over each other, each treats the other's voice as an interruption, and each stops to listen, and the pause repeats.
  • Each echoes the other's phrasing, which a model happily does, so the content drifts into mutual agreement with nothing in it.
  • None of this is exotic. It is what happens when you run a protocol built for humans against a partner that behaves like a machine but speaks like a person.


    Why speech is the wrong channel for machines

    Step back. Why were these two agents speaking at all?

    Because the telephone network carries voice. That is the entire reason. Basil and Hearth are two programs that could have exchanged the whole booking in a handful of structured fields:

    // illustrative pseudocode
    request:  { party_size: 6, date: "Friday", time: "19:30", name: "Alvarez" }
    response: { available: true, held_until: "18:00", confirmation: "H-2291" }

    Instead, they converted that into synthesized speech, pushed it through a phone line, ran speech recognition on the far end, reasoned about the transcript, synthesized a reply, and did it all again. Every step adds latency, cost, and a chance to mishear "six" as "sixteen."

    Speech is a lossy, slow, expensive encoding for information that was already structured on both sides. It exists to serve human ears. When there are no human ears, it is pure overhead.


    The missing piece: knowing who you are talking to

    Here is the deeper problem. For Basil to switch from speech to structured data, it first has to know it is talking to another agent, and know that agent is who it claims to be.

    Today, nothing on the phone network tells it so.

    The whitepaper makes the point about the caller-ID layer. STIR/SHAKEN says a call genuinely came from a given carrier. It says nothing about whether the caller is a person or a program, whether it is authorized to book on someone's behalf, or what it has been told to do. A human listener might guess from a certain flatness in the voice, or from a suspiciously perfect greeting. A program has nothing to go on but the transcript.

    So agents do the only thing available: they act polite, hope for the best, and loop.


    What a better design looks like

    ACES proposes treating agent-to-agent communication as its own channel, with authentication built in. Two ideas matter here.

    1. Say what you are, in a form a machine can read. The whitepaper describes an entity type on every message and an Agent Attestation Token, a signed claim that the sender is the registered agent it says it is. For voice, that token rides in the call signaling headers, before anyone says a word. The receiving system can verify it against the registry quickly.

    2. If both sides are verified agents, negotiate a machine channel. Once Basil's call arrives carrying proof that it is an agent, Hearth can reply in kind: "I am also an agent. Do you speak structured booking requests?" If yes, the call upgrades to data exchange in milliseconds. If no, it falls back to speech, with the disclosure already handled.

    The upgrade path matters. Nobody wants a world where agents refuse to talk to anything that cannot speak JSON. The goal is that a call between two humans stays a call, a call between a human and an agent stays a call with disclosure, and a call between two agents stops pretending to be a call.


    What this buys you

    SituationWithout agent-aware channelsWith them
    Two agents meet on a callPoliteness loop, wasted minutesVerified, switches to structured exchange
    Agent calls a businessUnclear if the other side is a personEntity type is machine-readable
    Audit afterwardTwo audio recordings and a transcriptSigned messages with a clear record
    Misheard detailPossibleStructured fields, no transcription step

    There is also an oversight angle. The whitepaper notes that agent orchestration today happens through API calls and shared state stores, which are hard to audit. A communication layer that is authenticated and persistent gives the humans behind the agents a record of what their software agreed to on their behalf.


    Until then: practical tips

    If you ship a voice agent today, a few cheap habits help:

  • Give the agent a goal to state. An outbound agent should open with its purpose, right after disclosing it is an AI, so a polite counterpart has something to answer.
  • Cap the length of pure pleasantries. If three turns pass without any new information, end the call and escalate.
  • Detect repetition. If the last two transcripts from the other side are paraphrases of each other, you are probably in a loop.
  • Set a hard call timeout. An infinite polite conversation is still a bill.
  • These are workarounds. They treat the symptom.


    The takeaway

    The telephone was built for human voices. Putting two AI agents on it and asking them to cooperate is like asking two people who share a language of numbers to communicate by humming.

    The fix is not smarter small talk. It is giving agents a way to prove what they are and agree on a better channel. That is an identity and protocol problem, which is exactly the layer Dial is built around.

    Did you enjoy this post?

    0 claps