Інтеграція 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' => "Ваш код підтвердження: {$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: не потрібно зберігати коди в БД, керувати termination, рахувати спроби — 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.







