4

我正在Rails 3中構建一個應用程序,使用twilio來驗證商家存在。基本上,當您創建一個新的商務時,我隨機生成一個6位數的號碼,然後用此驗證碼調用業務電話號碼,用戶需要將其輸入系統以完成註冊過程。我無法找到任何相關示例來說明如何實現這一設置。我發現this,但它看起來非常過時,並且看起來並不適用於Rails 3。 twilio-rb gem的文檔也很混亂。Rails 3和Twilio做電話驗證

有誰知道任何示例或有任何代碼示例可以指向我在正確的方向嗎?

+0

您能否澄清一下,如果您是在整個應用程序之後還是需要幫助的某個過程的特定部分,例如Twiml讀取DTMF,如何使用Rails進行調用,或者控制器可能看起來如何像Twilio電話迴應,或...? – 2011-04-20 15:38:45

+3

我是twilio-rb寶石的作者。如果您有任何問題,您可以將我加入Skype。我也很感激你對我如何改進文檔/自述文件的任何反饋! skype id:sjtg85 – 2011-04-20 16:16:41

回答

6

正如我在你的問題本身的評論中所說的,我是你提到的twilio-rb gem的作者。除了我的頭頂,我會實現一個驗證資源,您可以發佈一個電話號碼。

POST /verifications.voice { telephone_number: '+12125551234' } 

在創建操作使用Twilio::Call.create創建一個新的呼叫與Twilio

def create 
    @verification = Verification.new params[:verification] 

    if @verification.save 
    Twilio::Call.create to: @verification.telephone_number, 
     from: YOUR_CALLER_ID, url: verification_url(@verification, format: :voice) 
    # 201 created and return verification code etc 
    else 
    # Handle errors 
    end 
end 

你也想拯救任何API的錯誤,twilio-RB可能提高。 url指的是驗證資源實例的show操作。 Twilio然後將撥打提供的電話號碼,並且當呼叫連接時將請求URL,例如, GET /verifications/1.voice所以你需要一個要求驗證碼,並收集數字表演鑑於<Gather> verb

res.gather num_digits: 4, action: twilio_hack_verification_url(@verification, :format => :voice), method: 'POST' do |form| 
    form.say 'Please enter the your 4 digit verification code' 
end 

由於Twilio目前沒有實現PUT動詞,你將成員添加到您的資源

resources :verifications do 
    member { post 'twilio_hack' } 
end 

然後在您的控制器更新與用戶輸入的對象:

def twilio_hack 
    @verification = Verification.find(params[:id]).tap do |v| 
    v.user_input params['Digits'] 
    v.save 
    end 

    if @verification.confirmed? 
    # handle success 
    else 
    # handle failure 
    end 

end 

最後,在你的模型,你會需要生成的驗證碼,如果確認

class Verification < ActiveRecord::Base 
    before_save -> { self[:confirmed] = true if user_input == verification_code }, if: user_input 
    before_create -> { self[:verification_code] = rand.to_s[2..5] } 
end 

這是所有未經測試,我的頭的頂部,約2分鐘的思想驗證代碼,但它應該讓你開始。

1

您是否考慮過使用Twilio的撥出呼叫者ID來幫助解決此問題?

當您通過REST調用Twilio爲您的賬戶添加一個新的呼叫者ID時,Twilio將返回一個6位數的驗證碼(屬性ValidationCode)供您在UI中顯示,然後Twilio會自動呼叫該號碼並提示代碼。當用戶通過電話驗證號碼時,他們的號碼將被添加到您帳戶的主叫ID中。然後,您可以通過REST(參數PhoneNumber)查詢Twilio的電話號碼以確保驗證成功。

看到這裏的文檔:

添加呼叫方ID:http://www.twilio.com/docs/api/rest/outgoing-caller-ids#list-post

查找來電顯示:http://www.twilio.com/docs/api/rest/outgoing-caller-ids#list

+0

這不是解決OP的問題。 – jdc 2011-04-20 22:25:31

2

當你想驗證業務:

  • 生成驗證碼。
  • 使用Twilio REST API啓動出站呼叫,並將回調URL傳遞給將處理驗證邏輯的控制器。 Twilio的文檔是here,示例是here
  • 這意味着您需要通過回調URL將驗證碼傳遞到控制器。使用具有綁定參數的非資源路由。請參閱here

寫控制器處理呼叫,並處理驗證:

  • 的Emit TwiML,挑戰用戶輸入的驗證碼。我發現使用Nokogiri自己構建TwiML是最直接的方法。 (請參閱此簡單應用程序中的phone_greeting方法,我寫道:here。)
  • 如果它是正確的,請將商戶標記爲已驗證,祝賀用戶並掛斷電話。
  • 如果沒有,循環。

希望這是足夠的信息來指引您在正確的方向。