Added

Callr Actions: voicebot@v2, an AI agent that knows what the caller really heard

voicebot@v2 is a new version of the Callr Actions AI voice agent. The model now gets the conversation as the caller heard it, with the right timing, so it no longer answers sentences that were never played.

  • The history of what was really said. A sentence of the bot enters the history once it is played, cut to the words the caller heard when they interrupt it. The words of the caller are placed where they said them, and a sentence the caller never heard is dropped.
  • Interruptions you control. The new interruptions parameter replaces stopSpeaking. mode: interrupt (default) cuts the bot off when the caller says more than minWords words (default 3); fewer words, like "yes" or "ok", are an acknowledgement and the bot goes on. mode: wait never cuts the bot off and answers once it is silent. mode: ignore does not listen while the bot speaks, for speakerphones where the bot could hear itself.
  • Smart restarts. When the caller talks over the very beginning of a sentence, the bot says it again from the start, unless the model answers instead.
  • Better waiting sentences. In pleaseWait, delayBefore (default 4 s) is the time without an answer before a waiting sentence is said, and delayAfter (default 2 s) is a silence after it, so the answer does not follow it at once.
  • The latest OpenAI models. The model is called with the OpenAI Responses API (engine.api: responses, the default) and engine.model is required: gpt-6.1-terra and the other recent reasoning models work, with the reasoning effort they need set for you (engine.params.reasoningEffort, none when the model allows it, for the lowest latency). temperature is only sent when you set it. With an OpenAI-compatible engine.url that only has chat completions, set engine.api: chat. The -pro models are refused: too slow for a call.
  • A dated transcript. The result has a transcript: everything said, with the time and a status for each entry (played, cut with the words heard, dropped, backchannel, tool calls...).

initialMessages, tools, voice, language and the built-in dial, hangup and set_value tools work as in voicebot@v1. To migrate, change the action name, set engine.model, and replace stopSpeaking.minWords with interruptions.minWords and pleaseWait.delay with pleaseWait.delayBefore. stopSpeaking.enabled: false is close to interruptions.mode: wait. The temperature of voicebot@v1 (0.2 by default) is no longer sent unless you set it. voicebot@v1 is unchanged.

For a fast response, pick a Flash voice, such as en-US-Olivia:MAI-Voice-2.1-Flash.

- action: voicebot@v2
  params:
    voice: en-US-Olivia:MAI-Voice-2.1-Flash
    initialMessages:
      - role: system
        content: You are a smart AI agent on the phone. Make short replies.
      - role: assistant
        content: Hello there. How can I help?
    engine:
      name: OpenAI
      model: gpt-6.1-terra
      auth: ${{ $openai_key }}
    interruptions:
      mode: interrupt
      minWords: 3
    pleaseWait:
      enabled: true
      delayBefore: 2
      sentences:
        - One moment, please.
  result: $bot

See the Language Reference and the AI agent templates.