Интеграция SMS-рассылки (Twilio) с сайтом
Twilio — американский провайдер коммуникационных API: SMS, голос, видео, WhatsApp. Один из стандартов для международных проектов. Номера доступны в большинстве стран, но для отправки на российские номера могут быть ограничения от операторов — рекомендуется тестировать заранее.
Отправка SMS
// composer require twilio/sdk
$twilio = new \Twilio\Rest\Client(
env('TWILIO_ACCOUNT_SID'),
env('TWILIO_AUTH_TOKEN')
);
$message = $twilio->messages->create(
$to, // '+79001234567'
[
'from' => env('TWILIO_PHONE_NUMBER'), // '+12025551234'
'body' => "Your verification code: {$code}"
]
);
$messageSid = $message->sid; // сохранить для трекинга
Верификация через Twilio Verify
Twilio Verify — специализированный сервис для OTP-кодов (лучше чем самописный):
// Отправить OTP
$verification = $twilio->verify->v2
->services(env('TWILIO_VERIFY_SERVICE_SID'))
->verifications->create($phone, 'sms');
// Проверить код
$check = $twilio->verify->v2
->services(env('TWILIO_VERIFY_SERVICE_SID'))
->verificationChecks->create(['to' => $phone, 'code' => $userCode]);
if ($check->status === 'approved') {
// Код верный
}
Преимущество Verify: не нужно хранить коды в БД, управлять истечением, считать попытки — Twilio делает это автоматически.
Webhook для статусов
Twilio отправляет статус доставки на URL:
Route::post('/webhooks/twilio/sms', function (Request $request) {
// Проверить подпись X-Twilio-Signature
$validator = new \Twilio\Security\RequestValidator(env('TWILIO_AUTH_TOKEN'));
if (!$validator->validate($request->header('X-Twilio-Signature'), $url, $request->all())) {
return response('Unauthorized', 403);
}
SmsDelivery::updateOrCreate(
['message_sid' => $request->MessageSid],
['status' => $request->MessageStatus] // sent, delivered, failed
);
});
Срок интеграции: 1 рабочий день, включая настройку Verify для OTP.







