2014-11-02 108 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