== twilio
Bindings to the Twilio API
[[toc:]]
=== Abstract
[[http://www.twilio.com/|Twilio]] allows one to send SMSes and
place calls using their API; and the {{twilio}} egg requires at least three
pieces of information to do so:
* The account SID
* The auth token
* The from number
They are populated initially from the environment
variables {{TWILIO_SID}}, {{TWILIO_AUTH}}, {{TWILIO_FROM}};
respectively. It is also possible to set the dynamic
parameters {{twilio-sid}}, {{twilio-auth}}, {{twilio-from}}.
=== Documentation
==== {{twilio-sid}}
twilio-sid → (get-environment-variable TWILIO_SID)
The Twilio account SID
(define twilio-sid (make-parameter (get-environment-variable "TWILIO_SID")))
==== {{twilio-auth}}
twilio-auth → (get-environment-variable TWILIO_AUTH)
The Twilio auth token
(define twilio-auth (make-parameter (get-environment-variable "TWILIO_AUTH")))
==== {{twilio-from}}
twilio-from → (get-environment-variable TWILIO_FROM)
The phone number from which to post
(define twilio-from (make-parameter (get-environment-variable "TWILIO_FROM")))
==== {{twilio-url}}
twilio-url → https://~a:~a@api.twilio.com/2010-04-01/Accounts/~a/~a
The Twilio API URL
(define twilio-url
(make-parameter "https://~a:~a@api.twilio.com/2010-04-01/Accounts/~a/~a"))
==== {{twilio-make-call}}
(twilio-make-call to #!key url application-sid method fallback-url fallback-method status-callback status-callback-method send-digits if-machine timeout record) → unspecified
Make a call using the Twilio API; see [[http://www.twilio.com/docs/api/rest/making-calls]].
; to : The phone number to call
; url : TwiML URL when the call connects
; application-sid : Alternatively, the app containing the URL
; method : Method to request {{url}}
; fallback-url : Second {{url}} to try
; fallback-method : Method to which to fall back
; status-callback : URL to post status to
; status-callback-method : Method to use
; send-digits : Keys to dial after connecting
; if-machine : Determine whether the caller is a machine
; timeout : How long to let the phone ring
; record : Whether to record the call
(define (twilio-make-call
to
#!key
url
application-sid
method
fallback-url
fallback-method
status-callback
status-callback-method
send-digits
if-machine
timeout
record)
(let ((parameters
`((from unquote (twilio-from))
(to unquote to)
(url unquote url)
(application-sid unquote application-sid)
(method unquote method)
(fallback-url unquote fallback-url)
(fallback-method unquote fallback-method)
(status-callback unquote status-callback)
(status-callback-method unquote status-callback-method)
(send-digits unquote send-digits)
(if-machine unquote if-machine)
(timeout unquote timeout)
(record unquote record))))
(with-input-from-request
(twilio-url-calls)
(upper-camel-filter-parameters parameters)
void)))
===== Examples
Placing a call
(twilio-make-call "+14158141829" url: "http://example.com/twiml.scm")
==== {{twilio-send-sms}}
(twilio-send-sms to body #!key status-callback application-sid) → unspecified
Send an SMS using the Twilio API; see [[http://www.twilio.com/docs/api/rest/sending-sms]].
; to : The number to send to
; body : The SMS to send
; status-callback : POST when the message is processed
; application-sid : The application's SID
(define (twilio-send-sms to body #!key status-callback application-sid)
(let ((parameters
`((from unquote (twilio-from))
(to unquote to)
(body unquote body)
(status-callback unquote status-callback)
(application-sid unquote application-sid))))
(with-input-from-request
(twilio-url-sms)
(upper-camel-filter-parameters parameters)
void)))
===== Examples
Sending an SMS
(twilio-send-sms "+14158141829"
"If you wish to make an apple pie from scratch, you must first invent the universe.")
==== {{twilio-write}}
(twilio-write response) → unspecified
Write STwiML as TwiML.
; response : The STwiML response
(define twilio-write write-shtml-as-html)
==== {{twilio-response}}
(twilio-response . verbs) → STwiML
Wrap verbs in a STwiML response; see [[http://www.twilio.com/docs/api/twiml]].
; verbs : The verbs to wrap in a response
(define (twilio-response . verbs) `(Response ,@verbs))
==== {{twilio-say}}
(twilio-say text #!key voice loop language) → STwiML
Say something; see [[http://www.twilio.com/docs/api/twiml/say]].
; text : The text to say
; voice : The voice to say it in
; loop : How many times to say it
; language : The language to say it in
(define (twilio-say text #!key voice loop language)
(let ((parameters
(lower-camel-filter-parameters
`((voice ,voice) (loop ,loop) (language ,language)))))
(if (null? parameters)
`(Say ,text)
`(Say (,(string->symbol "@")
,@(lower-camel-filter-parameters parameters))
,text))))
==== {{twilio-play}}
(twilio-play url #!key loop) → STwiML
Play something; see [[http://www.twilio.com/docs/api/twiml/play]].
; url : The audio file to play
; loop : How many times to play it
(define (twilio-play url #!key loop)
(let ((parameters (lower-camel-filter-parameters `((loop ,loop)))))
(if (null? parameters)
`(Play ,url)
`(Play (,(string->symbol "@")
,@(lower-camel-filter-parameters parameters))
,url))))
==== {{twilio-sms}}
(twilio-sms text #!key to from action method status-callback) → STwiML
Send an SMS; see [[http://www.twilio.com/docs/api/twiml/sms]].
; text : The text to send
; to : The number to send it to
; from : The number to send it from
; action : Action URL
; method : {{POST}} or {{GET}} for {{action}}
; status-callback : Status callback URL
(define (twilio-sms text #!key to from action method status-callback)
(let* ((parameters
(lower-camel-filter-parameters
`((to ,to)
(from ,from)
(action ,action)
(method ,method)
(status-callback ,status-callback)))))
(if (null? parameters)
`(Sms ,text)
`(Sms (,(string->symbol "@")
,@(lower-camel-filter-parameters parameters))
,text))))
=== About this egg
==== Author
[[/users/klutometis|Peter Danenberg]]
==== Repository
[[https://github.com/klutometis/twilio]]
==== License
BSD
==== Dependencies
* [[debug]]
* [[htmlprag]]
* [[http-client]]
* [[matchable]]
* [[s]]
* [[setup-helper]]
==== Versions
; [[https://github.com/klutometis/twilio/releases/tag/0.1|0.1]] : First release: calls and SMS
; [[https://github.com/klutometis/twilio/releases/tag/0.2|0.2]] : Some Twilio verbs
; [[https://github.com/klutometis/twilio/releases/tag/0.2.1|0.2.1]] : Accomodate no parameters.
==== Colophon
Documented by [[/egg/cock|cock]].