Omni-Twilio¶
Go SDK for Twilio with adapters for OmniChat (SMS), OmniVoice (voice), and OmniMemory (memory).
Features¶
- Voice Gateway: Full-duplex phone calls with dual pipeline modes:
- Text Mode: STT → LLM → TTS (500-1000ms latency, custom voices)
- Realtime Mode: Native voice-to-voice (100-200ms latency)
- Client: Exported Twilio REST API client for calls and SMS
- Transport: Twilio Media Streams for real-time audio
- TTS: Text-to-speech via Twilio's Say verb (Alice, Polly, Google voices)
- STT: Speech recognition via Gather verb and real-time transcription
- SMS/MMS/RCS: Send/receive messages via OmniChat provider interface
- Memory: Twilio Memory API provider for semantic search and recall
Package Structure¶
omni-twilio/
├── client/ # Exported Twilio REST API client
├── omnichat/ # SMS provider for omnichat
├── omnimemory/ # Memory provider for omnimemory (Twilio Memory API)
└── omnivoice/
├── gateway/ # Full-duplex voice gateway (STT→LLM→TTS)
├── callsystem/ # Call handling provider
├── transport/ # Media Streams provider
├── stt/ # Speech-to-text provider
└── tts/ # Text-to-speech provider
Quick Start¶
SMS (OmniChat)¶
import "github.com/plexusone/omni-twilio/omnichat"
provider, _ := omnichat.New(
omnichat.WithAccountSID("ACxxxxxxxx"),
omnichat.WithAuthToken("your-token"),
omnichat.WithPhoneNumber("+15551234567"),
)
// Connect and send SMS
provider.Connect(ctx)
provider.Send(ctx, "+15559876543", provider.OutgoingMessage{
Content: "Hello from Twilio!",
})
// Handle incoming SMS via webhook
http.Handle("/sms", provider.WebhookHandler())
Voice (OmniVoice)¶
import "github.com/plexusone/omni-twilio/omnivoice/callsystem"
provider, _ := callsystem.New(
callsystem.WithAccountSID("ACxxxxxxxx"),
callsystem.WithAuthToken("your-token"),
callsystem.WithPhoneNumber("+15551234567"),
)
// Make an outbound call
call, _ := provider.MakeCall(ctx, "+15559876543", callbackURL)
Memory (OmniMemory)¶
import (
"github.com/plexusone/omnimemory"
"github.com/plexusone/omnimemory/core"
_ "github.com/plexusone/omni-twilio/omnimemory" // Register provider
)
client, _ := omnimemory.NewClient(core.ClientConfig{
Providers: []core.ProviderConfig{
{Name: core.ProviderNameTwilio},
},
})
// Add and recall memories
client.Add(ctx, &core.AddRequest{
Context: core.Context{TenantID: "store-id", SubjectID: "profile-id"},
Type: core.MemoryTypeObservation,
Content: "User prefers dark mode",
})
recalled, _ := client.Recall(ctx, &core.RecallRequest{
Context: core.Context{TenantID: "store-id", SubjectID: "profile-id"},
Query: "user preferences",
})