twilio-rb 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +95 -0
- data/lib/twilio/twiml.rb +20 -0
- data/lib/twilio.rb +1 -1
- metadata +20 -3
data/README.md
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
|
2
|
+
# Twilio.rb
|
3
|
+
|
4
|
+
Interact with the Twilio API in a nice Ruby way
|
5
|
+
|
6
|
+
## Configuration
|
7
|
+
|
8
|
+
Configuration for this library is encapsulated within `Twilio::Config`. One needs to setup with an Account SID and an Auth Token, e.g.
|
9
|
+
|
10
|
+
<pre># This should be in an initializer or similar
|
11
|
+
Twilio::Config.setup do
|
12
|
+
account_sid 'AC0000000000000000000000000000'
|
13
|
+
auth_token '000000000000000000000000000000'
|
14
|
+
end</pre>
|
15
|
+
|
16
|
+
Any method that calls the Twilio API will raise `Twilio::ConfigurationError` if either Account SID or Auth Token are not configured.
|
17
|
+
|
18
|
+
## Making a telephone call
|
19
|
+
|
20
|
+
The API used to make a telephone call is similar to interacting with an ActiveRecord model object.
|
21
|
+
<pre>Twilio::Call.create :to => '+16465551234', :from => '+19175550000',
|
22
|
+
:url => "http://example.com/call_handler"</pre>
|
23
|
+
or
|
24
|
+
<pre>call = Twilio::Call.new :to => '+16465551234', :from => '+19175550000',
|
25
|
+
:url => "http://example.com/call_handler"
|
26
|
+
|
27
|
+
call.save</pre>
|
28
|
+
|
29
|
+
The parameter keys should be given as underscored symbols. They will be converted internally to camelized strings prior to an API call being made.
|
30
|
+
|
31
|
+
Please see the Twilio REST API documentation for an up to date list of supported parameters.
|
32
|
+
|
33
|
+
### Modifying a live telephone call
|
34
|
+
|
35
|
+
Once a call has been been created it can be modified with the following methods:
|
36
|
+
|
37
|
+
`Twilio::Call#cancel!` will terminate the call if its state is `queued` or `ringing`
|
38
|
+
`Twilio::Call#complete!` will terminate the call even if its state is `in-progress`
|
39
|
+
`Twilio::Call#url=` will immediately redirect the call to a new handler URL
|
40
|
+
|
41
|
+
`Twilio::Call#cancel!` and `Twilio::Call#complete!` will raise `Twilio::InvalidStateError` if the call has not been "saved".
|
42
|
+
`Twilio::Call#url=` will updated its state with the new URL ready for when `Twilio::Call#save` is called.
|
43
|
+
|
44
|
+
## Sending an SMS message
|
45
|
+
|
46
|
+
The API used to send an SMS message is similar to interacting with an ActiveRecord model object.
|
47
|
+
<pre>Twilio::SMS.create :to => '+16465551234', :from => '+19175550000',
|
48
|
+
:body => "Hey baby, how was your day? x"</pre>
|
49
|
+
or
|
50
|
+
<pre>sms = Twilio::SMS.new :to => '+16465551234', :from => '+19175550000',
|
51
|
+
:body => "Hey baby, how was your day? x"
|
52
|
+
|
53
|
+
sms.save</pre>
|
54
|
+
|
55
|
+
The parameter keys should be given as underscored symbols. They will be converted internally to camelized strings prior to an API call being made.
|
56
|
+
|
57
|
+
Please see the Twilio REST API documentation for an up to date list of supported parameters.
|
58
|
+
|
59
|
+
## Building TwiML documents
|
60
|
+
|
61
|
+
A TwiML document is an XML document. The best way to build XML in Ruby is with Builder, and so it follows that we should use builder for TwiML. `Twilio::TwiML.build` behaves like builder except element names are capitalised for you and attributes are camelized for you as well. This is so you may continue to write beautiful code.
|
62
|
+
|
63
|
+
The following Ruby code:
|
64
|
+
|
65
|
+
<pre>Twilio::TwiML.build do |res|
|
66
|
+
res.say 'Hey man! Listen to this!', :voice => 'man'
|
67
|
+
res.play 'http://foo.com/cowbell.mp3'
|
68
|
+
res.say 'What did you think of that?!', :voice => 'man'
|
69
|
+
res.record :action => "http://foo.com/handleRecording.php",
|
70
|
+
:method => "GET", :max_length => "20",
|
71
|
+
:finish_on_Key => "*"
|
72
|
+
res.gather :action => "/process_gather.php", :method => "GET" do |g|
|
73
|
+
g.say 'Now hit some buttons!'
|
74
|
+
end
|
75
|
+
res.say 'Awesome! Thanks!', :voice => 'man'
|
76
|
+
res.hangup
|
77
|
+
end</pre>
|
78
|
+
|
79
|
+
Therefore emits the following TwiML document:
|
80
|
+
|
81
|
+
<pre><?xml version="1.0" encoding="UTF-8"?>
|
82
|
+
<Response>
|
83
|
+
<Say voice="man">Hey man! Listen to this!</Say>
|
84
|
+
<Play>http://foo.com/cowbell.mp3</Play>
|
85
|
+
<Say voice="man">What did you think of that?!</Say>
|
86
|
+
<Record maxLength="20" method="GET" action="http://foo.com/handleRecording.php" finishOnKey="*"/>
|
87
|
+
<Gather method="GET" action="/process_gather.php">
|
88
|
+
<Say>Now hit some buttons!</Say>
|
89
|
+
</Gather>
|
90
|
+
<Say voice="man">Awesome! Thanks!</Say>
|
91
|
+
<Hangup/>
|
92
|
+
</Response>
|
93
|
+
</pre>
|
94
|
+
|
95
|
+
This specialised behaviour only affects `Twilio::TwiML.build` and does not affect Builder in general.
|
data/lib/twilio/twiml.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Twilio
|
2
|
+
module TwiML
|
3
|
+
def build &blk
|
4
|
+
xm = Builder::XmlMarkup.new(:indent => 2)
|
5
|
+
xm.instance_eval do
|
6
|
+
def method_missing(meth, *args, &blk)
|
7
|
+
# camelize options
|
8
|
+
if args.last.kind_of? Hash
|
9
|
+
args[-1] = Hash[args.last.map { |k,v| [k.to_s.camelize(:lower), v]}]
|
10
|
+
end
|
11
|
+
# let builder do the heavy lifting
|
12
|
+
super(meth.to_s.capitalize, *args, &blk)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
xm.instruct!
|
16
|
+
xm.response &blk
|
17
|
+
end
|
18
|
+
extend self
|
19
|
+
end
|
20
|
+
end
|
data/lib/twilio.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Stevie Graham
|
@@ -77,6 +77,21 @@ dependencies:
|
|
77
77
|
version: 1.3.5
|
78
78
|
type: :runtime
|
79
79
|
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: builder
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
segments:
|
89
|
+
- 2
|
90
|
+
- 1
|
91
|
+
- 2
|
92
|
+
version: 2.1.2
|
93
|
+
type: :runtime
|
94
|
+
version_requirements: *id005
|
80
95
|
description: A nice Ruby wrapper for the Twilio REST API
|
81
96
|
email: sjtgraham@mac.com
|
82
97
|
executables: []
|
@@ -86,10 +101,12 @@ extensions: []
|
|
86
101
|
extra_rdoc_files: []
|
87
102
|
|
88
103
|
files:
|
104
|
+
- README.md
|
89
105
|
- lib/twilio/call.rb
|
90
106
|
- lib/twilio/config.rb
|
91
107
|
- lib/twilio/resource.rb
|
92
108
|
- lib/twilio/sms.rb
|
109
|
+
- lib/twilio/twiml.rb
|
93
110
|
- lib/twilio.rb
|
94
111
|
has_rdoc: true
|
95
112
|
homepage: http://github.com/stevegraham/twilio-rb
|