Rails 3 и Twilio, чтобы сделать проверку телефона - PullRequest
4 голосов
/ 20 апреля 2011

Я создаю приложение в Rails 3, используя twilio для проверки существования бизнеса. По сути, когда вы создаете новый бизнес, я случайным образом генерирую 6-значный номер, а затем набираю служебный телефонный номер с этим кодом подтверждения, и пользователь должен ввести его обратно в систему, чтобы завершить процесс регистрации. У меня возникают проблемы с поиском соответствующих примеров того, как это настроить. Я нашел этот , но он кажется ужасно устаревшим и, похоже, не работает с Rails 3. Документация для twilio-rb gem также сбивает с толку.

Кто-нибудь знает какие-либо примеры или примеры кода, которые могли бы указать мне правильное направление?

Ответы [ 3 ]

6 голосов
/ 20 апреля 2011

Как я уже сказал в комментарии к самому вашему вопросу, я являюсь автором упомянутого вами камня twilio-rb.Вдобавок ко всему, я бы использовал ресурс проверки, на который вы указали номер телефона.

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>глагол :

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 минут подумал, но это должно помочь вам начать.

2 голосов
/ 20 апреля 2011

Когда вы хотите подтвердить бизнес:

  • Сгенерируйте проверочный код.
  • Используйте Twilio REST API, чтобы инициировать исходящий вызов, передав URL-адрес для обратного вызова контроллеру, который будет обрабатывать логику проверки. Документы в Twilio здесь , а пример здесь .
  • Это означает, что вам необходимо передать проверочный код в контроллер через URL обратного вызова. Используйте нересурсный маршрут со связанным параметром. Смотри здесь .

Напишите контроллер, который обрабатывает вызов и обрабатывает проверку:

  • Emit TwiML, который заставляет пользователя вводить код подтверждения. Я обнаружил, что использование Nokogiri для создания TwiML - самый простой подход. (См. Метод phone_greeting в этом простом приложении, которое я написал: здесь .)
  • Если это правильно, отметьте Бизнес как подтвержденный, поздравьте пользователя и повесьте трубку.
  • Если нет, цикл.

Надеюсь, этого достаточно, чтобы указать вам правильное направление.

1 голос
/ 20 апреля 2011

Рассматривали ли вы использование идентификаторов исходящих звонков Twilio для решения этой проблемы?

При вызове Twilio через REST для добавления нового идентификатора звонящего в вашу учетную запись Twilio вернет 6-значный код подтверждения (свойство ValidationCode)для вас, чтобы отобразить в вашем пользовательском интерфейсе, а затем Twilio автоматически позвонит по номеру и запросит код.Когда пользователь проверит номер по телефону, его номер будет добавлен в идентификаторы звонков вашей учетной записи.Затем вы можете запросить у Twilio их номер телефона через REST (параметр PhoneNumber), чтобы убедиться, что проверка прошла успешно.

См. Здесь документацию:

Добавление идентификатора вызывающего абонента: http://www.twilio.com/docs/api/rest/outgoing-caller-ids#list-post

Найдите идентификатор звонящего: http://www.twilio.com/docs/api/rest/outgoing-caller-ids#list

...