slayer-twilio 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/CHANGELOG.rdoc +31 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.rdoc +63 -0
- data/Rakefile +9 -0
- data/lib/twilio.rb +53 -0
- data/lib/twilio/account.rb +12 -0
- data/lib/twilio/available_phone_numbers.rb +56 -0
- data/lib/twilio/call.rb +37 -0
- data/lib/twilio/conference.rb +35 -0
- data/lib/twilio/incoming_phone_number.rb +30 -0
- data/lib/twilio/notification.rb +20 -0
- data/lib/twilio/outgoing_caller_id.rb +33 -0
- data/lib/twilio/recording.rb +24 -0
- data/lib/twilio/sms.rb +22 -0
- data/lib/twilio/twilio_object.rb +19 -0
- data/lib/twilio/verb.rb +387 -0
- data/lib/twilio/version.rb +3 -0
- data/spec/fixtures/xml/account.xml +23 -0
- data/spec/fixtures/xml/account_renamed.xml +11 -0
- data/spec/fixtures/xml/available_phone_numbers_local.xml +26 -0
- data/spec/fixtures/xml/available_phone_numbers_local_search.xml +15 -0
- data/spec/fixtures/xml/available_phone_numbers_toll_free.xml +14 -0
- data/spec/fixtures/xml/available_phone_numbers_toll_free_search.xml +10 -0
- data/spec/fixtures/xml/call.xml +18 -0
- data/spec/fixtures/xml/call_new.xml +14 -0
- data/spec/fixtures/xml/call_redirected.xml +15 -0
- data/spec/fixtures/xml/calls.xml +36 -0
- data/spec/fixtures/xml/conference.xml +10 -0
- data/spec/fixtures/xml/conference_participant.xml +12 -0
- data/spec/fixtures/xml/conference_participant_muted.xml +12 -0
- data/spec/fixtures/xml/conference_participants.xml +24 -0
- data/spec/fixtures/xml/conferences.xml +12 -0
- data/spec/fixtures/xml/incoming_phone_number.xml +12 -0
- data/spec/fixtures/xml/incoming_phone_numbers.xml +24 -0
- data/spec/fixtures/xml/notification.xml +19 -0
- data/spec/fixtures/xml/notifications.xml +32 -0
- data/spec/fixtures/xml/outgoing_caller_id.xml +10 -0
- data/spec/fixtures/xml/outgoing_caller_id_new.xml +7 -0
- data/spec/fixtures/xml/outgoing_caller_ids.xml +20 -0
- data/spec/fixtures/xml/recording.xml +10 -0
- data/spec/fixtures/xml/recordings.xml +20 -0
- data/spec/fixtures/xml/sms.xml +14 -0
- data/spec/fixtures/xml/sms_messages.xml +29 -0
- data/spec/fixtures/xml/sms_new.xml +14 -0
- data/spec/fixtures/xml/sms_new_with_callback.xml +15 -0
- data/spec/fixtures/xml/transcription.xml +13 -0
- data/spec/fixtures/xml/transcriptions.xml +26 -0
- data/spec/fixtures/yml/verb_responses.yml +86 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/twilio_helpers.rb +52 -0
- data/spec/twilio/account_spec.rb +21 -0
- data/spec/twilio/available_phone_numbers_spec.rb +53 -0
- data/spec/twilio/call_spec.rb +64 -0
- data/spec/twilio/conference_spec.rb +58 -0
- data/spec/twilio/incoming_phone_number_spec.rb +42 -0
- data/spec/twilio/live_connection_spec.rb +21 -0
- data/spec/twilio/notification_spec.rb +29 -0
- data/spec/twilio/outgoing_caller_id_spec.rb +43 -0
- data/spec/twilio/recording_spec.rb +44 -0
- data/spec/twilio/sms_spec.rb +36 -0
- data/spec/twilio/verb_spec.rb +253 -0
- data/twilio.gemspec +30 -0
- metadata +258 -0
data/.gitignore
ADDED
data/CHANGELOG.rdoc
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
= Twilio Gem Changelog
|
2
|
+
|
3
|
+
== 3.0.1
|
4
|
+
|
5
|
+
* Bumped down Builder version requirement for Rails compat
|
6
|
+
|
7
|
+
== 3.0
|
8
|
+
|
9
|
+
* SSL validation (thanks Kyle Humberto)
|
10
|
+
* Available phone numbers search support (thanks Mark Turner)
|
11
|
+
* Deprecated Twilio::Connection method has been removed, use Twilio.connect(...)
|
12
|
+
* LocalPhoneNumber and TollFreeNumber have been removed to reflect API changes
|
13
|
+
* New phone numbers are now provisioned via the IncomingPhoneNumber class
|
14
|
+
* Several classes improved to avoid adding a stray "?" when no params were set
|
15
|
+
* Compatibility with 1.9.2 (and tested on 1.8.7 MRI and REE)
|
16
|
+
* Now uses Bundler, Rspec 2, and WebMock
|
17
|
+
|
18
|
+
== 2.9
|
19
|
+
|
20
|
+
* Compatibility with Twilio's 2010-04-01 API publish
|
21
|
+
|
22
|
+
== 2.8
|
23
|
+
|
24
|
+
* SMS callback URLs
|
25
|
+
* Ability to delete phone numbers
|
26
|
+
|
27
|
+
== 2.7
|
28
|
+
|
29
|
+
* SMS functionality
|
30
|
+
|
31
|
+
For earlier versions, see https://github.com/webficient/twilio/commits/master
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009-2010 Phil Misiowiec, Webficient LLC
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
= Slayer's modifications:
|
2
|
+
|
3
|
+
* added Reject verb
|
4
|
+
|
5
|
+
= Twilio Gem
|
6
|
+
|
7
|
+
The Twilio gem provides two major pieces of functionality: (1) a Ruby wrapper for the Twilio REST API and (2) response handlers based on the Twilio Markup XML (TwiML).
|
8
|
+
|
9
|
+
See http://www.twilio.com/docs/index for Twilio's API documentation.
|
10
|
+
|
11
|
+
== Calling the Twilio REST API
|
12
|
+
|
13
|
+
First set your credentials by calling the connect method:
|
14
|
+
|
15
|
+
Twilio.connect('my_twilio_sid', 'my_auth_token')
|
16
|
+
|
17
|
+
Now call any of the Twilio classes:
|
18
|
+
|
19
|
+
Twilio::Call.make('1234567890', '9876543210', 'http://mysite.com/connected_call')
|
20
|
+
Twilio::Recording.list
|
21
|
+
|
22
|
+
== Responding to Twilio
|
23
|
+
|
24
|
+
When Twilio calls your application URL, your response must use the Twilio Markup XML (http://www.twilio.com/docs/api_reference/TwiML/). The Twilio gem makes this very easy
|
25
|
+
by providing a Twilio Verb class.
|
26
|
+
|
27
|
+
For example, in a Ruby on Rails application, you could do the following inside a controller class:
|
28
|
+
|
29
|
+
Twilio::Verb.dial '415-123-4567'
|
30
|
+
|
31
|
+
and you can nest multiple verbs inside a block:
|
32
|
+
|
33
|
+
verb = Twilio::Verb.new { |v|
|
34
|
+
v.say "The time is #{Time.now}"
|
35
|
+
v.hangup
|
36
|
+
}
|
37
|
+
verb.response
|
38
|
+
|
39
|
+
== Installation
|
40
|
+
|
41
|
+
gem install twilio
|
42
|
+
|
43
|
+
== Contributing
|
44
|
+
|
45
|
+
1. Run 'bundle' from the command line to install dependencies
|
46
|
+
2. Write test(s) for your patch
|
47
|
+
3. Submit a pull request
|
48
|
+
|
49
|
+
Note: don't require 'rubygems' in any file (http://www.rubyinside.com/why-using-require-rubygems-is-wrong-1478.html)
|
50
|
+
|
51
|
+
== Copyright
|
52
|
+
|
53
|
+
Copyright (c) 2009-2011 Phil Misiowiec, Webficient LLC. See LICENSE for details.
|
54
|
+
|
55
|
+
== Contributors
|
56
|
+
|
57
|
+
* Kyle Daigle
|
58
|
+
* Yuri Gadow
|
59
|
+
* Kyle Humberto
|
60
|
+
* Jonathan Rudenberg
|
61
|
+
* Mark Turner
|
62
|
+
* Jeff Wigal
|
63
|
+
* Alex K Wolfe
|
data/Rakefile
ADDED
data/lib/twilio.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2009 Phil Misiowiec, phil@webficient.com
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
require 'httparty'
|
25
|
+
require 'builder'
|
26
|
+
|
27
|
+
require 'twilio/twilio_object'
|
28
|
+
|
29
|
+
require 'twilio/account'
|
30
|
+
require 'twilio/available_phone_numbers'
|
31
|
+
require 'twilio/call'
|
32
|
+
require 'twilio/conference'
|
33
|
+
require 'twilio/incoming_phone_number'
|
34
|
+
require 'twilio/notification'
|
35
|
+
require 'twilio/outgoing_caller_id'
|
36
|
+
require 'twilio/recording'
|
37
|
+
require 'twilio/sms'
|
38
|
+
require 'twilio/verb'
|
39
|
+
|
40
|
+
module Twilio
|
41
|
+
include HTTParty
|
42
|
+
TWILIO_URL = "https://api.twilio.com/2010-04-01/Accounts"
|
43
|
+
SSL_CA_PATH = "/etc/ssl/certs"
|
44
|
+
|
45
|
+
# The connect method caches your Twilio account id and authentication token
|
46
|
+
# Example:
|
47
|
+
# Twilio.connect('AC309475e5fede1b49e100272a8640f438', '3a2630a909aadbf60266234756fb15a0')
|
48
|
+
def self.connect(account_sid, auth_token)
|
49
|
+
self.base_uri "#{TWILIO_URL}/#{account_sid}"
|
50
|
+
self.basic_auth account_sid, auth_token
|
51
|
+
self.default_options[:ssl_ca_path] ||= SSL_CA_PATH unless self.default_options[:ssl_ca_file]
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Twilio
|
2
|
+
# An AvailablePhoneNumbers resources represents the available phone numbers
|
3
|
+
# that Twilio can provide you based on your search criteria. The valid
|
4
|
+
# query terms are outlined in the search methods.
|
5
|
+
# Example:
|
6
|
+
# Twilio.connect('my_twilio_sid', 'my_auth_token')
|
7
|
+
# Twilio.AvailablePhoneNumbers.search_local(:area_code => 541)
|
8
|
+
class AvailablePhoneNumbers < TwilioObject
|
9
|
+
|
10
|
+
# The Search method handles the searching of both local and toll-free
|
11
|
+
# numbers.
|
12
|
+
def search(opts={})
|
13
|
+
iso_country_code = opts[:iso_country_code] || 'US'
|
14
|
+
resource = opts.delete(:resource)
|
15
|
+
|
16
|
+
params = {
|
17
|
+
:AreaCode => opts[:area_code],
|
18
|
+
:InPostalCode => opts[:postal_code],
|
19
|
+
:InRegion => opts[:in_region],
|
20
|
+
:Contains => opts[:contains],
|
21
|
+
:NearLatLong => opts[:near_lat_long],
|
22
|
+
:NearNumber => opts[:near_number],
|
23
|
+
:InLata => opts[:in_lata],
|
24
|
+
:InRateCenter => opts[:in_rate_center],
|
25
|
+
:Distance => opts[:distance]
|
26
|
+
}.reject {|k,v| v == nil} unless opts.empty?
|
27
|
+
|
28
|
+
Twilio.get("/AvailablePhoneNumbers/#{iso_country_code}/#{resource}", :query => params)
|
29
|
+
end
|
30
|
+
|
31
|
+
# The search_local method searches for numbers in local areas (i.e. state, zip, etc..)
|
32
|
+
# Search Options:
|
33
|
+
# :area_code
|
34
|
+
# :postal_code
|
35
|
+
# :in_region
|
36
|
+
# :contains
|
37
|
+
# :near_lat_long
|
38
|
+
# :near_number
|
39
|
+
# :in_lata
|
40
|
+
# :in_rate_center
|
41
|
+
# :distance
|
42
|
+
def search_local(opts ={})
|
43
|
+
opts = {:resource => 'Local'}.merge(opts)
|
44
|
+
search(opts)
|
45
|
+
end
|
46
|
+
|
47
|
+
# The search_toll_free method searches for available toll-free numbers
|
48
|
+
# Search Options
|
49
|
+
# :contains
|
50
|
+
def search_toll_free(opts ={})
|
51
|
+
opts = {:resource => 'TollFree'}.merge(opts)
|
52
|
+
search(opts)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
data/lib/twilio/call.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Twilio
|
2
|
+
# A Call represenents a connection between a telephone and Twilio. This may be
|
3
|
+
# inbound, when a person calls your application, or outbound when your application
|
4
|
+
# initiates the call, either via the REST API, or during a call via the Dial Verb.
|
5
|
+
class Call < TwilioObject
|
6
|
+
# Example:
|
7
|
+
# Twilio.connect('my_twilio_sid', 'my_auth_token')
|
8
|
+
# Twilio::Call.make(CALLER_ID, user_number, 'http://myapp.com/twilio_response_handler')
|
9
|
+
def make(from, to, url, opts = {})
|
10
|
+
Twilio.post("/Calls", :body => {:From => from, :To => to, :Url => url}.merge(opts))
|
11
|
+
end
|
12
|
+
|
13
|
+
def list(opts = {})
|
14
|
+
Twilio.get("/Calls", :query => (opts.empty? ? nil : opts))
|
15
|
+
end
|
16
|
+
|
17
|
+
def get(call_sid)
|
18
|
+
Twilio.get("/Calls/#{call_sid}")
|
19
|
+
end
|
20
|
+
|
21
|
+
def redirect(call_sid, new_url, url_action = 'POST')
|
22
|
+
Twilio.post("/Calls/#{call_sid}", :body => {:CurrentUrl => new_url, :CurrentMethod => url_action})
|
23
|
+
end
|
24
|
+
|
25
|
+
def segments(call_sid, call_segment_sid = nil)
|
26
|
+
Twilio.get("/Calls/#{call_sid}/Segments#{ '/' + call_segment_sid if call_segment_sid }")
|
27
|
+
end
|
28
|
+
|
29
|
+
def recordings(call_sid)
|
30
|
+
Twilio.get("/Calls/#{call_sid}/Recordings")
|
31
|
+
end
|
32
|
+
|
33
|
+
def notifications(call_sid)
|
34
|
+
Twilio.get("/Calls/#{call_sid}/Notifications")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Twilio
|
2
|
+
# The Conference REST resource allows you to query and manage the state of conferences.
|
3
|
+
# When a caller joins a conference via the Dial verb and Conference noun,
|
4
|
+
# a Conference Instance Resource is created to represent the conference room
|
5
|
+
# and a Participant Instance Resource is created to represent the caller who joined.
|
6
|
+
class Conference < TwilioObject
|
7
|
+
def list(opts = {})
|
8
|
+
Twilio.get("/Conferences", :query => (opts.empty? ? nil : opts))
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(conference_sid)
|
12
|
+
Twilio.get("/Conferences/#{conference_sid}")
|
13
|
+
end
|
14
|
+
|
15
|
+
def participants(conference_sid, opts = {})
|
16
|
+
Twilio.get("/Conferences/#{conference_sid}/Participants", :query => (opts.empty? ? nil : opts))
|
17
|
+
end
|
18
|
+
|
19
|
+
def participant(conference_sid, call_sid)
|
20
|
+
Twilio.get("/Conferences/#{conference_sid}/Participants/#{call_sid}")
|
21
|
+
end
|
22
|
+
|
23
|
+
def mute_participant(conference_sid, call_sid)
|
24
|
+
Twilio.post("/Conferences/#{conference_sid}/Participants/#{call_sid}", :body => {:Muted => true})
|
25
|
+
end
|
26
|
+
|
27
|
+
def unmute_participant(conference_sid, call_sid)
|
28
|
+
Twilio.post("/Conferences/#{conference_sid}/Participants/#{call_sid}", :body => {:Muted => false})
|
29
|
+
end
|
30
|
+
|
31
|
+
def kick_participant(conference_sid, call_sid)
|
32
|
+
Twilio.delete("/Conferences/#{conference_sid}/Participants/#{call_sid}")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Twilio
|
2
|
+
# An IncomingPhoneNumber resource represents a phone number given to you by
|
3
|
+
# Twilio to receive incoming phone calls.
|
4
|
+
# Example:
|
5
|
+
# Twilio.connect('my_twilio_sid', 'my_auth_token')
|
6
|
+
# Twilio::IncomingPhoneNumber.list
|
7
|
+
class IncomingPhoneNumber < TwilioObject
|
8
|
+
def list(opts = {})
|
9
|
+
Twilio.get("/IncomingPhoneNumbers", :query => (opts.empty? ? nil : opts))
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(incoming_sid)
|
13
|
+
Twilio.get("/IncomingPhoneNumbers/#{incoming_sid}")
|
14
|
+
end
|
15
|
+
|
16
|
+
# Creates a phone number in Twilio. You must first find an existing number using
|
17
|
+
# the AvailablePhoneNumber class before creating one here.
|
18
|
+
#
|
19
|
+
# Required: you must either set PhoneNumber or AreaCode as a required option
|
20
|
+
# For additional options, see http://www.twilio.com/docs/api/rest/incoming-phone-numbers
|
21
|
+
def create(opts)
|
22
|
+
raise "You must set either :PhoneNumber or :AreaCode" if !opts.include?(:AreaCode) && !opts.include?(:PhoneNumber)
|
23
|
+
Twilio.post("/IncomingPhoneNumbers", :body => opts)
|
24
|
+
end
|
25
|
+
|
26
|
+
def delete(incoming_sid)
|
27
|
+
Twilio.delete("/IncomingPhoneNumbers/#{incoming_sid}")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Twilio
|
2
|
+
# A Notification represenents a log entry made by Twilio in the course of handling
|
3
|
+
# your calls or using the REST API.
|
4
|
+
# Example:
|
5
|
+
# Twilio.connect('my_twilio_sid', 'my_auth_token')
|
6
|
+
# Twilio::Notification.list
|
7
|
+
class Notification < TwilioObject
|
8
|
+
def list(opts = {})
|
9
|
+
Twilio.get('/Notifications', :query => (opts.empty? ? nil : opts))
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(notification_sid)
|
13
|
+
Twilio.get("/Notifications/#{notification_sid}")
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete(notification_sid)
|
17
|
+
Twilio.delete("/Notifications/#{notification_sid}")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Twilio
|
2
|
+
# An OutgoingCallerId resource represents an outgoing Caller ID that you have
|
3
|
+
# registered with Twilio for use when making an outgoing call or using the Dial Verb.
|
4
|
+
# Example:
|
5
|
+
# Twilio.connect('my_twilio_sid', 'my_auth_token')
|
6
|
+
# Twilio::OutgoingCallerId.list
|
7
|
+
class OutgoingCallerId < TwilioObject
|
8
|
+
def create(phone_number, friendly_name = phone_number, call_delay = 0, extension = nil)
|
9
|
+
Twilio.post("/OutgoingCallerIds", :body => {
|
10
|
+
:PhoneNumber => phone_number,
|
11
|
+
:FriendlyName => friendly_name,
|
12
|
+
:CallDelay => call_delay,
|
13
|
+
:Extension => extension
|
14
|
+
})
|
15
|
+
end
|
16
|
+
|
17
|
+
def list(opts = {})
|
18
|
+
Twilio.get("/OutgoingCallerIds", :query => (opts.empty? ? nil : opts))
|
19
|
+
end
|
20
|
+
|
21
|
+
def get(callerid_sid)
|
22
|
+
Twilio.get("/OutgoingCallerIds/#{callerid_sid}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def update_name(callerid_sid, name)
|
26
|
+
Twilio.put("/OutgoingCallerIds/#{callerid_sid}", :body => {:FriendlyName => name})
|
27
|
+
end
|
28
|
+
|
29
|
+
def delete(callerid_sid)
|
30
|
+
Twilio.delete("/OutgoingCallerIds/#{callerid_sid}")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Twilio
|
2
|
+
# Recordings are generated when you use the Record Verb. Those recordings are
|
3
|
+
# hosted on Twilio's REST API for you to access.
|
4
|
+
# Example:
|
5
|
+
# Twilio.connect('my_twilio_sid', 'my_auth_token')
|
6
|
+
# Twilio::Recording.list
|
7
|
+
class Recording < TwilioObject
|
8
|
+
def list(opts = {})
|
9
|
+
Twilio.get("/Recordings", :query => (opts.empty? ? nil : opts))
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(recording_sid)
|
13
|
+
Twilio.get("/Recordings/#{recording_sid}")
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete(recording_sid)
|
17
|
+
Twilio.delete("/Recordings/#{recording_sid}")
|
18
|
+
end
|
19
|
+
|
20
|
+
def transcriptions(recording_sid, transcription_sid = nil)
|
21
|
+
Twilio.get("/Recordings/#{recording_sid}/Transcriptions#{ '/' + transcription_sid if transcription_sid }")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|