Go SDK for Twilio with adapters for OmniChat (SMS) and OmniVoice (voice).
- π CallSystem: PSTN call handling (incoming/outgoing phone calls)
- π‘ 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: Send/receive SMS via OmniChat provider interface
go get github.com/plexusone/omni-twilioomni-twilio/
βββ client/ # Exported Twilio REST API client
βββ omnichat/ # SMS provider for omnichat
βββ omnivoice/
βββ callsystem/ # Call handling provider
βββ transport/ # Media Streams provider
βββ stt/ # Speech-to-text provider
βββ tts/ # Text-to-speech provider
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())import (
"github.com/plexusone/omni-twilio/omnivoice/callsystem"
"github.com/plexusone/omni-twilio/omnivoice/transport"
)
// Create call system
cs, _ := callsystem.New(
callsystem.WithPhoneNumber("+15551234567"),
callsystem.WithWebhookURL("wss://your-server.com/media-stream"),
)
// Handle incoming calls
cs.OnIncomingCall(func(call callsystem.Call) error {
fmt.Printf("Incoming call from %s\n", call.From())
return call.Answer(context.Background())
})
// Make outbound call
call, _ := cs.MakeCall(ctx, "+15559876543")
fmt.Printf("Call initiated: %s\n", call.ID())
// Set up webhooks
http.HandleFunc("/incoming", handleIncoming(cs))
http.HandleFunc("/media-stream", handleMediaStream(cs.Transport()))import "github.com/plexusone/omni-twilio/client"
c, _ := client.New(&client.Config{
AccountSID: "ACxxxxxxxx",
AuthToken: "your-token",
})
// Send SMS
msg, _ := c.SendSMS(ctx, &client.SendSMSParams{
To: "+15559876543",
From: "+15551234567",
Body: "Hello!",
})
// Make call
call, _ := c.MakeCall(ctx, &client.MakeCallParams{
To: "+15559876543",
From: "+15551234567",
Twiml: "<Response><Say>Hello!</Say></Response>",
})import "github.com/plexusone/omni-twilio/omnivoice/tts"
provider, _ := tts.New(
tts.WithVoice("Polly.Joanna"),
tts.WithLanguage("en-US"),
)
// Generate TwiML
result, _ := provider.Synthesize(ctx, "Hello!", tts.SynthesisConfig{
VoiceID: "Polly.Matthew",
})
// result.Audio contains TwiMLimport "github.com/plexusone/omni-twilio/omnivoice/stt"
provider, _ := stt.New(
stt.WithLanguage("en-US"),
stt.WithSpeechModel("phone_call"),
)
// Generate TwiML for speech recognition
twiml := provider.GenerateGatherTwiML(stt.GatherConfig{
Input: "speech",
Language: "en-US",
SpeechTimeout: "auto",
Action: "/handle-speech",
Prompt: "Please say your account number",
})import "github.com/plexusone/omni-twilio/omnivoice/transport"
tr, _ := transport.New()
// Listen for Media Stream connections
connCh, _ := tr.Listen(ctx, "/media-stream")
for conn := range connCh {
go func(c transport.Connection) {
audio := make([]byte, 1024)
for {
n, _ := c.AudioOut().Read(audio)
// Process audio...
c.AudioIn().Write(responseAudio)
}
}(conn)
}export TWILIO_ACCOUNT_SID="your-account-sid"
export TWILIO_AUTH_TOKEN="your-auth-token"Twilio Basic: alice, man, woman
Amazon Polly: Polly.Joanna, Polly.Matthew, Polly.Amy, Polly.Brian, etc.
Google TTS: Google.en-US-Standard-A through D, Google.en-US-Wavenet-A through D
# Unit tests
go test -v ./...
# Integration tests (requires credentials)
export TWILIO_ACCOUNT_SID="ACxxxx"
export TWILIO_AUTH_TOKEN="xxxx"
export TWILIO_PHONE_NUMBER="+15551234567"
go test -v -tags=integration ./...This package was renamed from twilio-go to omni-twilio in v0.5.0 to align with the omni-* naming convention.
# Update imports
find . -name "*.go" -exec sed -i '' \
's|github.com/plexusone/twilio-go|github.com/plexusone/omni-twilio|g' {} +
# Update go.mod
go get github.com/plexusone/omni-twilio@v0.5.0
go mod tidy| Before | After |
|---|---|
github.com/plexusone/omnivoice-twilio/callsystem |
github.com/plexusone/omni-twilio/omnivoice/callsystem |
github.com/plexusone/omnivoice-twilio/transport |
github.com/plexusone/omni-twilio/omnivoice/transport |
github.com/plexusone/omnivoice-twilio/tts |
github.com/plexusone/omni-twilio/omnivoice/tts |
github.com/plexusone/omnivoice-twilio/stt |
github.com/plexusone/omni-twilio/omnivoice/stt |
Added in v0.4.0:
github.com/plexusone/omni-twilio/client- Exported Twilio clientgithub.com/plexusone/omni-twilio/omnichat- SMS provider for OmniChat
- omnivoice-core - Voice interfaces
- omnichat - Chat interfaces
- elevenlabs-go - ElevenLabs SDK
MIT