At MRCP level, proper barge-in is:
Start TTS with SPEAK
In parallel, start ASR with RECOGNIZE and barge-in-enabled + VAD on.
When the recognizer detects user speech, MRCP sends a start-of-input / start-of-speech event.
Either:
the server itself stops TTS because Kill-On-Barge-In is true, or
the client (Asterisk) sends a STOP for the ongoing SPEAK.
The UniMRCP Asterisk module wraps this logic in SynthAndRecog() so you don’t have to do it manually. When barge-in occurs, the synth session is stopped and ASR keeps processing the live audio. UniMRCP+1
What you have now (“interrupt only once the prompt is fully prepared”) usually means TTS is rendered to a file/buffer first and only then streamed as a normal playback – Asterisk can only stop that at file boundaries, not in true streaming fashion.