Skip to content

Release Notes: v0.12.0

Release Date: 2026-10-27

Highlights

  • Hang up from the session: Session.Hangup ends the call, not just the media stream
  • Realtime mode hears the caller: caller audio now reaches the realtime pipeline

New Features

Hanging Up Calls

Session.Hangup(ctx) ends the call through the Twilio REST API and then closes the session. Close stops only the session's media stream, so it does not end a call whose stream has not connected yet, for example while keypad digits play.

sess, err := gw.MakeCallWithOptions(ctx, "+16695550100",
    callsystem.WithSendDigits("WWWW85012345678#WWWWWWWW*482913#"),
)
if err != nil {
    return err
}

// Later, to leave:
if err := sess.(interface{ Hangup(context.Context) error }).Hangup(ctx); err != nil {
    return err
}

Sessions in every pipeline mode have Hangup, including audio-mode sessions. OmniMeet's dial-in joiner calls it when an agent leaves a meeting.

Bug Fixes

  • Realtime mode caller audio: the media stream dropped caller audio until the pipeline signaled it was ready, and only the text pipeline did, so the realtime pipeline never received caller audio. The realtime pipeline now signals readiness once its bridge starts.

Testing

  • Unit test that realtime mode delivers caller audio to the realtime provider, which fails without the fix
  • Unit test that Hangup sends a call update to completed and closes the session
  • Tests pass under the race detector

Documentation

Dependencies

No dependency changes.

Installation

go get github.com/plexusone/[email protected]

Migration Guide

From v0.11.0

No code changes are required. Realtime mode now receives caller audio. To end a call from your application, call Hangup on the session instead of Close.

Full Changelog

See CHANGELOG.md for the complete list of changes.