2014-11-02 117 views
0

我使用红宝石,sinatra和twilio。以下代码会购买一个数字,然后将该数字插入到我的数据库中。我还想获得返回的34个字符的电话号码“sid”并将其插入到我的数据库中,但我不知道如何访问它。当我使用REST API购买Twilio号码时,如何获得电话号码SID?

下面是代码:

get '/buy_phone_number'do 
#get subbacount credentials from my db 
user_key = users.where(:validation => cookie).join(:credentials, :user_id => :id).get(:user_key) 
user_token = users.where(:validation => cookie).join(:credentials, :user_id => :id).get(:user_token) 
user_id = users.where(:validation => cookie).get(:id) 
primary_number = users.where(:validation => cookie).get(:primary_number) 
#search for the right number 
@sub_account_client = Twilio::REST::Client.new(user_key, user_token) 
@subaccount = @sub_account_client.account 
@numbers = @subaccount.available_phone_numbers.get('GB').toll_free.list({}) 
#buy the number and set the voice/sms url aprameters 
@subaccount.incoming_phone_numbers.create(:phone_number => @numbers[0].phone_number, :voice_url => 'http://6c93ce61.ngrok.com/hello', :voice_method => 'GET', :sms_url => 'http://6c93ce61.ngrok.com/receive_sms', :sms_method => 'GET') 
phone_number = @numbers[0].phone_number 
#[HERE IS THE PROBLEM]sid = @numbers[0].Sid 
numbers.insert(:user_id => user_id, :number => phone_number, :sid => sid, :inbound_route => primary_number, :send_to_voicemail => 'false', :show_caller_id => 'false') 
return "You just bought: " + phone_number 

这一切工作正常,但34字符的电话号码SID不是无论是@numbers[0].Sid也不@numbers [0] .phone_number_sid也不@numbers[0].number_sid

所以有返回2问题:

1)特别是如何访问Sid号码? 2)如何查看购买号码后返回的所有对象?

感谢您一如既往的帮助......

回答

2

我是Twilio开发者传道,希望我能帮助。

这里的问题是,AvailablePhoneNumbers resource不响应SID为它返回的电话号码。您购买号码时只能获得SID。

你想要做的就是使用IncomingNumbers resource从购买号码中获得回应。所以,从你的榜样的最后一部分,你可以这样做:

@numbers = @subaccount.available_phone_numbers.get('GB').toll_free.list({}) 
#buy the number and set the voice/sms url aprameters 
@purchased_number = @subaccount.incoming_phone_numbers.create(:phone_number => @numbers[0].phone_number, :voice_url => 'http://6c93ce61.ngrok.com/hello', :voice_method => 'GET', :sms_url => 'http://6c93ce61.ngrok.com/receive_sms', :sms_method => 'GET') 
phone_number = @purchased_number.phone_number 
sid = @purchased_number.sid 
numbers.insert(:user_id => user_id, :number => phone_number, :sid => sid, :inbound_route => primary_number, :send_to_voicemail => 'false', :show_caller_id => 'false') 
return "You just bought: " + phone_number 

正如你所看到的,我分配到采购数量@purchased_number的响应,你可以阅读SID和从那里PHONE_NUMBER。

让我知道这是否有帮助。

+0

干杯菲尔。感谢上帝。这很令人困惑,因为列出了“资源属性”,在相关的api页面上,例如Sid,但返回的对象是sid(带有一个小的“s”)。或者更容易混淆的“FriendlyName”变成“friendly_name”;所以这是一个可怜的家伙。这就解释了我的问题的第二部分:一般来说,我怎样才能看到所有返回的对象?有任何想法吗? – user1903663 2014-11-03 08:14:01

+0

是的,你是对的,Ruby库并没有遵循核心文档。这是因为它更像Ruby开发人员所期望的那样,因为我们倾向于使用较低的下划线方法名称。所以,你可以推断,如果文档说'FriendlyName'将会有'friendly_name'属性。为了查看Twilio对象的属性,可以尝试记录'object.inspect'的结果,尽管我不确定它是否会显示所有内容。尽管你可以相信文档和转换方法。 – philnash 2014-11-03 08:42:10

+0

欢呼菲尔,毫无疑问,我们将再次做生意! – user1903663 2014-11-04 08:04:21