@php $providerStatuses = $providerStatuses ?? [ 'email' => ['status' => 'inactive', 'label' => 'Uses existing mail settings'], 'sms' => ['status' => 'inactive', 'label' => 'Not configured'], 'whatsapp' => ['status' => 'inactive', 'label' => 'Not configured'], 'telegram' => ['status' => 'inactive', 'label' => 'Not configured'], ]; $smsServers = $smsSendingServers ?? collect(); $waServers = $whatsappSendingServers ?? collect(); $hasSmsServers = $smsServers->isNotEmpty(); $hasWaServers = $waServers->isNotEmpty(); $smsEnabledChecked = old('otp_sms_enabled', $settings['otp_sms_enabled'] ?? false) && $hasSmsServers; $waEnabledChecked = old('otp_whatsapp_enabled', $settings['otp_whatsapp_enabled'] ?? false) && $hasWaServers; $emailStatus = $providerStatuses['email']['status'] ?? 'inactive'; $smsStatus = $providerStatuses['sms']['status'] ?? 'inactive'; $waStatus = $providerStatuses['whatsapp']['status'] ?? 'inactive'; $tgStatus = $providerStatuses['telegram']['status'] ?? 'inactive'; $telegramWebhookUrl = rtrim((string) config('app.url'), '/').'/webhooks/telegram/otp'; @endphp

Delivery channels

OTP Providers

Choose how one-time codes reach users. Lower delivery priority wins when multiple methods are enabled.

4 channels Save before testing
{{-- Email --}}
{{-- SMS --}}

Channel

SMS OTP

{{ $providerStatuses['sms']['label'] ?? 'Not configured' }}
{{ str_replace('_', ' ', $smsStatus) }}
Reuse an active SMS sending server
@if(! $hasSmsServers) @endif
@if(! $hasSmsServers) @endif @error('otp_sms_sending_server_id')
{{ $message }}
@enderror
{{-- WhatsApp --}}

Channel

WhatsApp OTP

{{ $providerStatuses['whatsapp']['label'] ?? 'Not configured' }}
{{ str_replace('_', ' ', $waStatus) }}
Reuse an active WhatsApp sending server
@if(! $hasWaServers) @endif
@if(! $hasWaServers) @endif @error('otp_whatsapp_sending_server_id')
{{ $message }}
@enderror
{{-- Telegram --}}

Channel

Telegram OTP

{{ $providerStatuses['telegram']['label'] ?? 'Not configured' }}
{{ str_replace('_', ' ', $tgStatus) }}
Turn on Telegram one-time codes for users
Reserved endpoint for future Telegram webhook registration.
Registration is reserved and not fully wired yet
How to integrate Telegram OTP
  1. Open Telegram and message @BotFather.
  2. Send /newbot, then choose a display name and username ending in bot.
  3. Copy the HTTP API token BotFather returns (looks like 123456:ABC-DEF…).
  4. Paste the token above, set the bot username, enable Telegram OTP, then click Save provider settings.
  5. Ask each user to start a chat with your bot so Telegram can deliver OTP messages to their chat ID.
  6. Use Test Telegram below with a chat ID after saving to verify delivery.

Fallback order

Global MFA priorities & recovery

Let users fall back to one-time recovery codes