utwil: Go Utilities for Twilio
utwil is currently under heavy development, so expect breakage.
Documentation can be found at:
https://godoc.org/github.com/wyc/utwil
Made with gojson.
Installation
In your terminal:
$ go get github.com/wyc/utwil
In your code:
import "github.com/wyc/utwil"
Features
Make a utwil.Client
client := utwil.NewClient(AccoutSID, AuthToken)
Send an SMS
msg, err := client.SendSMS("+15551231234", "+15553214321", "Hello, world!")
Send an MMS
mediaURL := "http://i.imgur.com/sZPem77.png"
body := "Hello, world!"
msg, err := client.SendMMS("+15551231234", "+15553214321", body, mediaURL)
Make a Call
callbackPostURL := fmt.Sprintf(
"http://twimlets.com/forward?PhoneNumber=%s",
"+15559871234",
)
call, err := client.Call("+15551231234", "+15553214321", callbackPostURL)
Make a Recorded Call
call, err := client.RecordedCall("+15551231234", "+15553214321", callbackPostURL)
Lookups
lookup, err := client.Lookup("+15551231234")
fmt.Println(lookup.Carrier.Type)
Custom requests
For more complicated requests, populate the respective XxxxxReq struct
and call the client.SubmitXxxxx(XxxxxReq) (Xxxxx, error)
method:
msgReq := utwil.MessageReq{
From: "+15559871234",
To: "+15551231234",
Body: "Hello, world!",
StatusCallback: "https://post.here.com/when/msg/status/changes.twiml",
}
msg, err := client.SubmitMessage(msgReq)
Query Messages (SMS/MMS)
weekAgo := time.Now().Add(-7 * 24 * time.Hour)
iter := client.Messages(
utwil.SentBeforeYMD(weekAgo),
utwil.To("+15551231234")).Iter()
var msg utwil.Message
for iter.Next(&msg) {
}
if iter.Err() != nil {
}
Query Calls
iter := client.Calls(
utwil.From("+15551231234"),
utwil.StartedAfter("2015-04-01")).Iter()
var call utwil.Call
for iter.Next(&call) {
}
if iter.Err() != nil {
}
Testing
First, populate env vars TWILIO_ACCOUNT_SID
, TWILIO_AUTH_TOKEN
,
TWILIO_DEFAULT_TO
, TWILIO_DEFAULT_FROM
.
Then run go test
and expect many annoyances to TWILIO_DEFAULT_TO
:
- Phone call and second forwarded phone call to the same number
- One SMS message
Run go test -test.v
instead if you want more details to the console.
To do
- Better testing harness...maybe we can borrow a testing AccountSID/AuthToken
pair and commit them to the repo >:)
- Fetching additional resources from a call/msg such as recording or MMS
- Tools for responding with TwiML, including changing live call state
- CRUD for managerial records such as accounts, addresses, phone numbers,
queues, SIP, etc
- More comments in src
- Investigate STUN, TURN, and ICE offerings
Feel free to request features by opening an issue.
Alternatives