Skip to content

v0.17.0

Release date: 2026-10-27

This release lets outbound calls send keypad tones (DTMF) once they are answered, so an agent can dial into a conference line and enter its meeting ID and passcode. Voice gateways can now accept call options on outbound calls without breaking existing gateway implementations.

Highlights

  • Keypad digits on outbound calls — callsystem.WithSendDigits sends tones after the call is answered, in dial-string notation with w and W pauses
  • Call options through gateways — gateway.MakeCallWithOptions passes options to gateways that implement the new OptionCaller interface, and reports ErrCallOptionsUnsupported instead of dropping them
  • Docs reorganized — user guides in docs/guides, specs in docs/specs, and architecture in docs/design/architecture

Added

Keypad digits (callsystem/)

  • WithSendDigits(digits) call option and CallOptions.SendDigits field
  • ValidateSendDigits(digits) accepts 0-9, *, #, A-D, w (half-second pause), and W (one-second pause); providers call it from MakeCall and return an error for anything else
// Wait 4 seconds, enter the meeting ID, wait 8 seconds, enter the passcode.
call, err := calls.MakeCall(ctx, "+16695550100",
    callsystem.WithSendDigits("WWWW85012345678#WWWWWWWW*482913#"),
)

Gateway call options (gateway/)

  • OptionCaller interface with MakeCallWithOptions(ctx, to, opts...), optional so that existing Gateway implementations keep compiling
  • MakeCallWithOptions(ctx, gw, to, opts...) helper: calls gw.MakeCall without options, and returns ErrCallOptionsUnsupported when options are given to a gateway that does not implement OptionCaller

Documentation

Fixed

omnictl server run

  • Stopping a local server with Ctrl+C now checks the server's exit error instead of discarding it; an exit caused by the stop signal is treated as a normal stop
  • Errors from sending the stop signal and from removing the server socket are returned instead of ignored

Changed

Documentation layout

  • User guides moved from docs/ to docs/guides/
  • The voice architecture comparison moved to docs/design/architecture/
  • The voice integration PRD, Twilio integration TRD, provider conformance TRD (formerly TRD_PROVIDERTEST.md), and roadmap (formerly ROADMAP.md) moved to docs/specs/
  • Release notes link to the changelog page on the documentation site

Provider Support

Keypad digits are sent by:

  • omni-twilio: played with <Play digits> before the media stream connects
  • omni-telnyx: sent with send_dtmf when the call is answered

Both require their releases built on omnivoice-core v0.17.0.

Dependencies

  • google.golang.org/grpc v1.85.0 and updated golang.org/x modules

Compatibility

No breaking changes. The Gateway interface is unchanged; gateways opt into call options by implementing OptionCaller.