Настройка верификации клиента через звонок-сброс 1С-Битрикс
Звонок-сброс (missed call verification) — альтернатива SMS-коду. Пользователь вводит номер телефона, система звонит на него и сразу сбрасывает: последние 4 цифры входящего номера становятся кодом подтверждения. Это дешевле SMS в 5–10 раз и работает там, где SMS-доставка нестабильна.
Принцип работы и провайдеры
Технически схема такая: ваш сервер отдаёт команду телефонной платформе совершить вызов с одного из номеров пула. Пользователь видит входящий вызов, запоминает (или копирует) последние 4 цифры и вводит их в форму. Звонок при этом не нужно принимать.
Провайдеры, поддерживающие этот метод:
- Exolve (МТС) — API Flash Call, пул исходящих номеров
- Zadarma — функция «flash call» в тарифах с API
- Novofon — поддержка через REST API
- Звонок.ru — специализированный сервис верификации
Ключевое требование: провайдер должен предоставлять пул номеров с разными последними 4 цифрами и возможность выбрать конкретный номер при исходящем вызове.
Реализация в Битрикс
Архитектура аналогична SMS-верификации, но вместо кода-текста система генерирует 4-значный суффикс и выбирает из пула телефонный номер с этим суффиксом.
Таблица для хранения сессий верификации:
CREATE TABLE custom_flashcall_verification (
id INT AUTO_INCREMENT PRIMARY KEY,
phone VARCHAR(20) NOT NULL,
caller_number VARCHAR(20) NOT NULL,
code VARCHAR(4) NOT NULL,
created_at DATETIME NOT NULL,
attempts INT DEFAULT 0,
verified TINYINT DEFAULT 0
);
Логика генерации:
function initiateFlashCall(string $targetPhone): array {
// Генерируем 4-значный код (0001–9999)
$code = str_pad(random_int(1, 9999), 4, '0', STR_PAD_LEFT);
// Выбираем номер из пула, заканчивающийся на этот код
$callerNumber = FlashCallPool::getNumberByCode($code);
if (!$callerNumber) {
throw new \Exception('No available number for code: ' . $code);
}
// Инициируем вызов через API провайдера
$provider = new ExolveFlashCallProvider();
$provider->call($callerNumber, $targetPhone);
// Сохраняем в БД
FlashCallVerificationTable::add([
'PHONE' => $targetPhone,
'CALLER_NUMBER' => $callerNumber,
'CODE' => $code,
'CREATED_AT' => new \Bitrix\Main\Type\DateTime(),
]);
return ['success' => true, 'hint' => 'Ожидайте входящего звонка'];
}
Управление пулом номеров
Пул номеров — критичная часть системы. Для кодов 0000–9999 нужен минимум пул из нескольких сотен номеров, иначе коллизии неизбежны при высокой нагрузке.
Таблица пула:
CREATE TABLE custom_flashcall_pool (
id INT AUTO_INCREMENT PRIMARY KEY,
phone_number VARCHAR(20) NOT NULL,
code_suffix VARCHAR(4) NOT NULL,
in_use TINYINT DEFAULT 0,
last_used DATETIME,
INDEX idx_code (code_suffix),
INDEX idx_available (in_use, last_used)
);
При выборе номера из пула берётся первый доступный с нужным суффиксом, который не использовался последние 30 секунд. После завершения верификации номер возвращается в пул.
Пользовательский интерфейс
Форма верификации через звонок-сброс отличается от SMS:
- Пользователь вводит номер телефона
- Появляется сообщение: «Сейчас вам позвонит номер, запомните его последние 4 цифры»
- Поле ввода с маской
_ _ _ _ - Таймер обратного отсчёта (обычно 30–60 секунд)
- Кнопка «Позвонить ещё раз» после истечения таймера
Важно сообщить пользователю, что принимать звонок не нужно — это нестандартно и без подсказки вызывает замешательство.
Интеграция с Битрикс
Верификация встраивается через AJAX-контроллер (\Bitrix\Main\Engine\Controller) и подключается к форме регистрации или оформления заказа через JavaScript. В компоненте bitrix:sale.order.ajax добавляется шаг верификации между вводом контактных данных и подтверждением заказа.
Резервный вариант: если звонок не поступил в течение 90 секунд, пользователю предлагается переключиться на SMS-верификацию.
Сроки выполнения
| Объём работ | Срок |
|---|---|
| Интеграция с провайдером + базовая форма | 1–2 дня |
| Пул номеров + управление коллизиями | +1 день |
| Fallback на SMS + полная интеграция с Битрикс | 3–4 дня |
Для высоконагруженных магазинов с 1000+ верификациями в сутки стоит проработать резервирование пула и мониторинг доступности провайдера.







