god*_*yan 4 verification ruby-on-rails phone-call twilio ruby-on-rails-3
我在Rails 3中构建一个应用程序,使用twilio来验证企业的存在.基本上,当您创建新的商务时,我会随机生成一个6位数字,然后使用此验证码调用商家电话号码,用户需要将其输入系统以完成注册过程.我无法找到有关如何设置此设置的相关示例.我发现了这一点,但它看起来非常过时,似乎与Rails 3不兼容.twilio-rb gem的文档也令人困惑.
有没有人知道任何例子或有任何代码样本可以指向我正确的方向?
正如我在你的问题评论中所说,我是你提到的twilio-rb gem的作者.在我的头顶,我会实现一个你发布电话号码的验证资源.
POST /verifications.voice { telephone_number: '+12125551234' }
Run Code Online (Sandbox Code Playgroud)
在create action中用于使用Twilio::Call.createTwilio创建新的调用
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
Run Code Online (Sandbox Code Playgroud)
您还需要解决twilio-rb可能引发的任何API错误.url指的是验证资源实例的show动作.然后Twilio将拨打提供的电话号码,并且当呼叫连接时将请求该URL,例如,GET /verifications/1.voice因此您需要一个显示视图,要求提供验证码并使用<Gather>动词收集数字:
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
Run Code Online (Sandbox Code Playgroud)
由于Twilio目前没有实现PUT动词,因此您将向您的资源添加成员
resources :verifications do
member { post 'twilio_hack' }
end
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器中使用用户输入更新对象:
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
Run Code Online (Sandbox Code Playgroud)
最后,在您的模型中,您将需要生成验证码的代码,并验证它是否已确认
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
Run Code Online (Sandbox Code Playgroud)
这一切都是未经测试的,并且在大约2分钟的时间里我想到了,但它应该让你开始.