Ця стаття для тих, кому цікаво, що відбувається між кнопкою «Нагадувати в Telegram» і повідомленням у месенджері. Користуватися нагадуваннями можна і без цього, а от довіряти каналу легше, коли розумієш, як він працює.
Чому бот один, а не свій у кожного салону
Ми могли б просити кожен салон завести бота через BotFather, вставити токен у налаштування і налаштувати вебхук. Майстер, який працює один, кине це на другому кроці. І буде правий: він прийшов приймати записи, а не адмініструвати ботів.
Тому бот один на всю платформу. Клієнт бачить назву салону в тексті повідомлення, а відправник спільний. Це чесно: людина підписалася на нагадування сервісу, а не почала переписку з майстром.
Салон, якому потрібен саме свій бот зі своїм ім'ям, підключає його як інтеграцію. Це окремий канал, і він працює як раніше.
Що зашито в посилання підписки
Кнопка на сторінці запису веде на t.me/<бот>?start=<маркер>. У маркері чотири частини:
777-52-1788438490-a3d2dc5d8e7c8e76e359
│ │ │ └─ підпис
│ │ └─ строк дії
│ └─ компанія
└─ клієнт
Стан на сервері не зберігається: ні таблиці, ні запису в кеші. Маркер живе добу і перевіряється підписом, тому переживає перезапуск сервера і очищення кешу, і його не треба чистити за розкладом.
Чому підпис такий короткий
Підпис у маркері — 20 знаків, 80 біт. Це не економія. Telegram обмежує корисне навантаження команди /start 64 символами, і в них треба вмістити ще три числа. Повний підпис туди не входить.
80 біт для маркера, який живе добу і дає право отримувати нагадування про один візит, достатньо з запасом. Підібрати його перебором дорожче, ніж подзвонити в салон і запитати, коли запис.
Перевірка підпису йде функцією з постійним часом виконання. Звичайне порівняння рядків завершується на першому розбіжному символі, і за часом відповіді можна підбирати підпис по одному знаку.
Відхиляється все, що не зійшлося: підроблений підпис, підмінений клієнт або салон, прострочений маркер. На це є тест, який намагається підмінити кожну частину.
Що робить бот
| Команда | Дія |
|---|---|
/start з маркером | Прив'язує чат до картки клієнта |
/start без маркера | Пояснює, що відкривати треба зі сторінки запису |
/stop | Відписує від усіх салонів одразу |
| будь-який текст | Пояснює, що бот не веде переписку |
/stop відписує всюди навмисно. Людина відмовляється від розсилки, а не від одного майстра, і пам'ятати, скільки їх було, вона не зобов'язана. Просити її уточнити означає не відписати.
На сторонній текст бот відповідає, а не мовчить. Мовчазний бот виглядає зламаним, і клієнт повертається в салон із питанням «а воно працює?». Але й переписку бот не веде і вигляду не робить: людина чекала б відповіді майстра.
Як захищений вхід
Адреса, на яку Telegram надсилає повідомлення, відкрита всьому інтернету, інакше Telegram до неї не достукається. Справжнє повідомлення від чужого відрізняє тільки секрет у заголовку, який задає наш же виклик при налаштуванні вебхука.
Перевірка закривається, а не пропускає: секрет не заданий — відмова. Без неї будь-хто міг би надіслати повідомлення з чужим маркером і підписати свій чат на нагадування про чужі візити, тобто дізнаватися, хто, коли і до якого майстра ходить.
Що це означає для салону
Нічого не треба налаштовувати. Кнопка з'являється сама, коли бот платформи увімкнений, і не з'являється, коли ні: посилання на неіснуючого бота гірше за його відсутність. Якщо клієнт підписався, нагадування йдуть безкоштовно і без лімітів.
Коментарі
Коментарів поки немає. Поставте запитання — відповідаємо протягом доби.