The Intercom Experiment Has Grown Up
Hello again!
For those who discovered the project through this thread, I wanted to leave a pointer to its new home and explain briefly what happened to it.
The original goal was to create reliable full-duplex audio between ESPHome devices and Home Assistant. That work is still alive, but the project has grown far beyond
a custom intercom protocol.
The current architecture is based on standard SIP, SDP and RTP, with Home Assistant acting as the centre of a local telephone system.

What can it do now?
Home Assistant is no longer only the browser endpoint used to answer an ESP intercom.
It can now:
- place and receive SIP calls;
- provide a Lovelace softphone;
- register standard SIP clients;
- route and bridge calls;
- resample audio between endpoints;
- maintain the shared phonebook;
- connect to an optional external SIP trunk.
An ESPHome device can behave like a real local telephone endpoint. Depending on its hardware, it may be full-duplex, microphone-only, speaker-only or signalling-
only.
Calls can travel between:
ESP โ ESP
ESP โ Home Assistant
ESP โ registered SIP phone
Home Assistant โ registered SIP phone
Local endpoints โ external telephone numbers

Home Assistant Assist Has A Telephone Extension
One of the most interesting additions in 2026.7.1 is the ability to expose a native Home Assistant Assist pipeline as a phonebook contact.
You select the Assist pipeline, assign an extension and then call it like another telephone destination.
Calls to Assist can originate from an ESP device, Home Assistant, a registered softphone or an external number arriving through a SIP trunk.
The assistant receives the SIP caller identity, can speak first and then keeps the same call open for a multi-turn conversation:
caller speaks
โ
configured HA speech-to-text
โ
selected conversation agent
โ
configured HA text-to-speech
โ
audio streamed back into the call
โ
listen again
It uses the normal Home Assistant pipeline, so it is not restricted to a particular STT, TTS or conversation provider.
One Phonebook, Many Kinds Of Phones
The central phonebook is now the default dial plan.
A destination may represent:
- Home Assistant;
- an ESPHome endpoint;
- a registered Zoiper or Linphone account;
- a SIP URI;
- an internal extension;
- a ring group;
- a conference room;
- a public number reached through the trunk;
- the selected Voice Assistant.
Ring groups call multiple endpoints at once and connect the first one that answers. Conference groups create rooms mixed by Home Assistant.
The ESPHome Audio Side Is Still Important
The move to SIP did not replace the full-duplex audio work.
The project now has a reusable ESPHome audio backend for:
- official ESP-IDF IยฒS drivers;
- codec and no-codec boards;
- Acoustic Echo Cancellation;
- the complete Espressif Audio Front End;
- single-microphone and dual-microphone devices;
- media, TTS and VoIP audio mixing;
- wake-word detection and Voice Assistant barge-in.
This allows one ESP device to combine music, Sendspin, TTS, Micro Wake Word, Voice Assistant and telephone calls while retaining an echo-cleaned microphone path.
A New Interface Too
The Lovelace card now supports Home Assistant softphone, ESP mirror, keypad and phonebook modes.
ESP cards can expose endpoint options including Auto Answer, DND, extensions and group membership.
Touchscreen profiles have evolved as well. The Waveshare P4 example includes Contacts and Keyboard views directly on the device.
Where To Follow The Project
This thread documents an earlier stage of the project and will remain useful for historical context.
For current announcements, new releases and future development, please follow the dedicated VoIP Stack discussion:
https://community.home-assistant.io/t/voip-stack-for-home-assistant-and-esphome/
Source code and maintained examples:
Stable 2026.7.1 release:
Thanks to everyone who tested the original intercom versions and reported hardware-specific problems. Those experiments are what eventually pushed the project toward
a standards-based local VoIP platform for Home Assistant.



