Налаштування верифікації клієнта через дзвінок-скидання у 1С-Bitrix
Дзвінок-скидання (missed call verification) — альтернатива SMS-коду. Користувач вводить номер телефону, система дзвонить на нього і одразу скидає: останні 4 цифри вхідного номера стають кодом підтвердження. Це дешевше SMS у 5–10 разів і працює там, де доставка SMS нестабільна.
Принцип роботи і постачальники
Технічно схема така: ваш сервер видає команду телефонній платформі здійснити виклик з одного з номерів пулу. Користувач бачить вхідний дзвінок, запам'ятовує (або копіює) останні 4 цифри і вводить їх у форму. При цьому приймати дзвінок не потрібно.
Постачальники, які підтримують цей метод:
- Exolve (МТС) — Flash Call API, пул вихідних номерів
- Zadarma — функція «flash call» у тарифах з API
- Novofon — підтримка через REST API
- Zvonok.ru — спеціалізований сервіс верифікації
Ключева вимога: постачальник повинен надавати пул номерів з різними останніми 4 цифрами і можливість вибору конкретного номера для вихідного дзвінку.
Реалізація у Bitrix
Архітектура аналогічна 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 секунд)
- Кнопка «Позвоните ещё раз» після закінчення таймера
Важливо повідомити користувачу, що приймати дзвінок не потрібно — це нестандартно і без підказки викликає замішання.
Інтеграція з Bitrix
Верифікація вбудовується через AJAX-контролер (\Bitrix\Main\Engine\Controller) і підключається до форми реєстрації або оформлення замовлення через JavaScript. У компоненті bitrix:sale.order.ajax додається крок верифікації між введенням контактних даних і підтвердженням замовлення.
Резервний варіант: якщо дзвінок не надійшов протягом 90 секунд, користувачу пропонується перейти на SMS-верифікацію.
Сроки виконання
| Обсяг робіт | Строк |
|---|---|
| Інтеграція з постачальником + базова форма | 1–2 дні |
| Пул номерів + управління колізіями | +1 день |
| Fallback на SMS + повна інтеграція з Bitrix | 3–4 дні |
Для високонавантажених магазинів з 1000+ верифікаціями на день варто опрацювати резервування пулу і моніторинг доступності постачальника.







