Skip to content

v0.2.0

Release Date: 2026-10-27

This release lets agents attend meetings hosted by others on Zoom, Google Meet, and Microsoft Teams by phone dial-in. It adds the attendee session interfaces that every connector implements, an invitation parser, and a dial-in joiner that works through an omnivoice-core voice gateway in audio mode.

Highlights

  • Attend external meetings by phone from their invitation, with no platform app registration
  • Attendee session interfaces shared by dial-in and future browser and SDK connectors
  • Invitation parser for Zoom, Google Meet, and Teams invites and .ics files
  • Simulated meetings for testing dial-in without a real meeting

New Features

Attendee Sessions (attendee)

  • Joiner - Join(ctx, JoinTarget) (Session, error), implemented by each connector
  • Session - ID, Target, Capabilities, State, Events, and Leave
  • Optional interfaces - AudioReceiver, AudioSender, Recorder, and ParticipantLister, implemented as the connection allows
  • Capabilities - what a session supports: audio in and out, display name, speaker names, participants, recording, chat, video
  • States - joining, connected, waiting, admitted, and the terminal states left, removed, ended, and failed
  • JoinTarget - platform, join link, meeting ID, passcode, display name, and phone dial-in details

Invitation Parser (invite)

  • Parse - reads invitation text into a JoinTarget
  • ParseICS - reads the first event of an iCalendar file
  • Recognizes Zoom one-tap lines and numeric phone passcodes, Google Meet PINs, and Teams phone conference IDs
  • Assigns each dial-in number a country from the invite or its calling code, and strips the invisible direction marks calendar clients insert

Dial-in (dialin)

  • Choose - picks a dial-in number by country, preferring toll numbers
  • Sequence and DialString - keypad steps for Zoom (mirroring its one-tap sequence), Google Meet, and Teams, rendered for omnivoice-core's callsystem.WithSendDigits
  • Joiner - joins a meeting through a voice gateway in audio mode: dials, enters the keypad sequence, and returns a session with the meeting's mixed audio as AudioReceiver and AudioSender
  • Options - WithCountry, WithTiming, and WithKeyDuration
jt, err := invite.Parse(invitationText)
if err != nil {
    return err
}
sess, err := dialin.NewJoiner(gw, dialin.WithCountry("US")).Join(ctx, jt)
if err != nil {
    return err
}
audio := sess.(attendee.AudioReceiver).ReceiveAudio()

Phone dial-in cannot see whether the meeting admitted the caller. The session reports admitted once the call is connected and the keypad sequence has had time to finish. Leave hangs up when the gateway session supports it (omni-twilio v0.12.0 and omni-telnyx v0.7.0 do) and closes the session.

Testing (dialin/dialintest)

  • Gateway - a voice gateway in audio mode whose calls reach simulated meetings
  • Meeting - runs a Zoom, Google Meet, or Teams phone menu on the keypad digits, admits the caller only for the right meeting ID and passcode, plays scripted audio, and records audio the caller sends

Example

  • examples/dialin - joins a simulated meeting from an invite, plays a tone, records what it hears to a WAV file, and leaves

Bug Fixes

  • Meeting skill - MeetingSkill implements Version, which omniskill's Skill interface requires since omniskill v0.11, so the skill package builds with current omniskill

Documentation

Breaking Changes

None.

Dependencies

Module From To
github.com/plexusone/omnivoice-core v0.15.0 v0.18.1
github.com/plexusone/omniskill v0.10.0 v0.12.1

The dial-in joiner needs a voice gateway in audio mode: omni-twilio v0.11.0 or omni-telnyx v0.6.0 or later. Use omni-twilio v0.12.0 or omni-telnyx v0.7.0 so that leaving a meeting hangs up the call; with earlier versions Leave only closes the media stream, which leaves a Telnyx call connected.

Installation

go get github.com/plexusone/omnimeet-core@v0.2.0

What's Next

  • OmniAgent tool and CLI command for joining meetings by phone
  • Browser connector for Google Meet and the Zoom web client, with display names and speaker names

Contributors

  • PlexusOne Team