Коли клієнт заповнює форму на сайті, заявка має дійти до менеджера за лічені секунди. Пошта повільна, CRM вимагає ручної обробки, але Telegram-бот з вбудованою кнопкою «Прийняти запит» — це коли менеджер відкриває чат і відразу працює. Аналізуємо повну реалізацію в PHP: від отримання даних з сайту до обробки зворотного дзвінка від менеджера.
Архітектура: → менеджер → вебхук-ботів веб-сайту
Схема проста: HTML форма на сайте надсилає запит Post до вашої кінцевої точки API. PHP-скрипт генерує lead_id, записує запис у таблицю лідів, генерує повідомлення за допомогою вбудованої кнопки та надсилає його через Bot API менеджеру. Коли менеджер натискає «Взяти», бот отримує callback_query, перевіряє, що додаток ще вільний, і перенаправляє його в чат з менеджером.
Основні обмеження, які слід враховувати негайно: callback_data вбудована кнопка не може перевищувати 64 байт. Тому замість довгих ідентифікаторів або об 'єктів JSON ми використовуємо компактний хеш.
Ведучі таблиці в базі даних
Перш ніж надіслати запит, ми створюємо таблицю. Вам знадобиться: унікальний ідентифікатор, статус (новий/прийнятий/закритий), ідентифікатор менеджера, який прийняв запит, і час прийняття.
Створення lead_id: bin2hex(random_bytes(7))
Навіщо вам посвідчення особи, якщо є автоінкремент? Автоматичне збільшення є передбачуваним, і lead_id має бути непередбачуваним і коротким. random_bytes(7) генерує 7 байтів, bin2hex перетворює їх на 14 символів — досить компактно для callback_data і водночас безпечно.
Приклад результату: a3f8b2c1d9e04f
Обробник форм на місці: HTML + JavaScript
Форма мінімальна, але перевірка обов 'язкова. Ми надсилаємо запит на отримання, показуємо статус завантаження та обробляємо помилки.
Кінцева точка API: /api/lead/submit
Цей PHP-скрипт отримує дані, перевіряє, записує в базу даних та надсилає повідомлення в Telegram. Токен бота та chat_id менеджера походять зі змінних середовища.
Обробка callback_query: бот приймає запит
Кінцева точка вебхука бота отримує callback_query. Ми перевіряємо: заявка є, вона ще не прийнята. Якщо все гаразд, оновлюємо статус, запам 'ятовуємо менеджера та надсилаємо йому реквізити заявки в особистому чаті.
Чому не вбудована кнопка з довгими даними
Ліміти Telegram callback_data до 64 байт. Якщо ви набиваєте там JSON клієнтськими даними, ви можете легко перевищити ліміт довгим повідомленням. Двійковий хеш з random_bytes(7) складає 14 символів, компактний і достатній для надійного з 'єднання з основою. Дані зберігаються в MySQL, а не в кнопці.
Ідемпотентність: подвійне клацання не лякає
Менеджер може випадково натиснути кнопку двічі. ОНОВИТИ ... WHERE status = 'new' з підтвердженням $stmt->rowCount() гарантії: буде виконано лише перше натискання. Другий отримає відповідь «заявка вже прийнята».
Що далі?
До базової схеми можна додати: повідомлення клієнту про отримання заявки, автоматичний перезапуск кнопки через N хвилин, якщо менеджер не взяв, або експорт необроблених заявок наприкінці дня. Головне, щоб дані вже були в базі, а менеджер отримував їх одним дотиком.
Для швидкого розгортання пакету форм та Telegram-бота можна скористатися готовими рішеннями на BotCreator.