Если вам нужна помощь с настройкой среды разработки для Ruby, ознакомьтесь с документацией по установке.
Мы начнем с базового примера кода, реализующего приложение на Sinatra.
Запуск примера кода:
`$ ruby index.rb`
Это приложение возвращает TwiML на любой запрос к «/» без какой-либо проверки:
«`
$ curl -XPOST http://localhost:4567
«`
«`
# Ваш Twilio Auth Token можно найти здесь: https://www.twilio.com/console
# Установите во время выполнения следующим образом:
# $ TWILIO_AUTH_TOKEN=»XXXXXXXXXXXXXXXXXXX» ruby index.rb
#
# Это не сработает, если не экспортировать переменную окружения TWILIO_AUTH_TOKEN.
require ‘sinatra’
require ‘twilio-ruby’
post ‘/’ do
content_type ‘text/xml’
response = Twilio::TwiML::MessagingResponse.new
response.message(‘Hello World’)
response
end
«`
Чтобы добавить проверку запросов в ваше приложение Sinatra, вам понадобится токен аутентификации.
Нам потребуется токен аутентификации для Twilio API из Twilio Console, и этот токен будет установлен путем экспорта новой переменной окружения:
«`
$ export TWILIO_AUTH_TOKEN=»TWILIO_AUTH_TOKEN_HERE»
«`
Для включения проверки запросов через Rack middleware добавьте следующую строку:
`use Rack::TwilioWebhookAuthentication, ENV[‘TWILIO_AUTH_TOKEN’], ‘/’`
«`
# Ваш Twilio Auth Token можно найти здесь: https://www.twilio.com/console
# Установите во время выполнения следующим образом:
# $ TWILIO_AUTH_TOKEN=»XXXXXXXXXXXXXXXXXXX» ruby index.rb
#
# Это не сработает, если не экспортировать переменную окружения TWILIO_AUTH_TOKEN.
require ‘sinatra’
require ‘twilio-ruby’
require ‘rack’
# Для настройки переменных окружения см. http://twil.io/secure
use Rack::TwilioWebhookAuthentication, ENV[‘TWILIO_AUTH_TOKEN’], ‘/’
post ‘/’ do
content_type ‘text/xml’
response = Twilio::TwiML::MessagingResponse.new
response.message(body: ‘Адрес магазина: ул. Легкая, 123.’)
response
end
«`
На данный момент пример расширился и включает безопасную аутентификацию запросов Twilio с использованием вашего токена аутентификации.
Мы можем проверить, что проверка запросов работает, повторив предыдущий шаг с `curl`:
«`
$ curl -XPOST http://localhost:4567
Twilio Request Validation Failed.
«`
Подтвердите подлинность входящих запросов к вашему приложению Sinatra с помощью этой пользовательской логики проверки. Она вернет `
если запрос корректен, или `Twilio Request Validation Failed.`,
если он некорректен. Затем логика либо продолжает обработку запроса, либо возвращает ошибку 403 HTTP для недействительных попыток.
Если вы пишете тесты для своего приложения Sinatra, эти тесты могут не проходить для маршрутов, где используется проверка запросов Twilio. Чтобы решить эту проблему, рекомендуем использовать библиотеку для мокинга в ваших тестах. Ознакомьтесь с официальной документацией Rack для мокинга запросов и ответов.
Проверка запросов к вашим вебхукам Twilio — это отличный первый шаг для обеспечения безопасности вашего приложения Twilio. Рекомендуем ознакомиться с полной документацией по безопасности для получения дополнительных советов по защите вашего приложения, а также с Руководством разработчика по борьбе с мошенничеством.
Чтобы узнать больше о защите вашего приложения Sinatra в целом, ознакомьтесь со страницей рекомендаций по безопасности в официальной документации Sinatra, а также с официальной документацией Rack и Twilio Ruby SDK.