BeeSection BeeSection

Як це влаштовано: чому один Telegram-бот на всіх і як клієнт підписується

Нотатка про те, як влаштований Telegram-канал нагадувань: чому бот один на платформу, що зашито в посилання підписки і чому підпис у ньому такий короткий.

BeeSection · · 4 хв читання
Читати іншою мовою: Русский English

Ця стаття для тих, кому цікаво, що відбувається між кнопкою «Нагадувати в Telegram» і повідомленням у месенджері. Користуватися нагадуваннями можна і без цього, а от довіряти каналу легше, коли розумієш, як він працює.

Чому бот один, а не свій у кожного салону

Ми могли б просити кожен салон завести бота через BotFather, вставити токен у налаштування і налаштувати вебхук. Майстер, який працює один, кине це на другому кроці. І буде правий: він прийшов приймати записи, а не адмініструвати ботів.

Тому бот один на всю платформу. Клієнт бачить назву салону в тексті повідомлення, а відправник спільний. Це чесно: людина підписалася на нагадування сервісу, а не почала переписку з майстром.

Салон, якому потрібен саме свій бот зі своїм ім'ям, підключає його як інтеграцію. Це окремий канал, і він працює як раніше.

Що зашито в посилання підписки

Кнопка на сторінці запису веде на t.me/<бот>?start=<маркер>. У маркері чотири частини:

777-52-1788438490-a3d2dc5d8e7c8e76e359
│   │  │          └─ підпис
│   │  └─ строк дії
│   └─ компанія
└─ клієнт

Стан на сервері не зберігається: ні таблиці, ні запису в кеші. Маркер живе добу і перевіряється підписом, тому переживає перезапуск сервера і очищення кешу, і його не треба чистити за розкладом.

Чому підпис такий короткий

Підпис у маркері — 20 знаків, 80 біт. Це не економія. Telegram обмежує корисне навантаження команди /start 64 символами, і в них треба вмістити ще три числа. Повний підпис туди не входить.

80 біт для маркера, який живе добу і дає право отримувати нагадування про один візит, достатньо з запасом. Підібрати його перебором дорожче, ніж подзвонити в салон і запитати, коли запис.

Перевірка підпису йде функцією з постійним часом виконання. Звичайне порівняння рядків завершується на першому розбіжному символі, і за часом відповіді можна підбирати підпис по одному знаку.

Відхиляється все, що не зійшлося: підроблений підпис, підмінений клієнт або салон, прострочений маркер. На це є тест, який намагається підмінити кожну частину.

Що робить бот

КомандаДія
/start з маркеромПрив'язує чат до картки клієнта
/start без маркераПояснює, що відкривати треба зі сторінки запису
/stopВідписує від усіх салонів одразу
будь-який текстПояснює, що бот не веде переписку

/stop відписує всюди навмисно. Людина відмовляється від розсилки, а не від одного майстра, і пам'ятати, скільки їх було, вона не зобов'язана. Просити її уточнити означає не відписати.

На сторонній текст бот відповідає, а не мовчить. Мовчазний бот виглядає зламаним, і клієнт повертається в салон із питанням «а воно працює?». Але й переписку бот не веде і вигляду не робить: людина чекала б відповіді майстра.

Як захищений вхід

Адреса, на яку Telegram надсилає повідомлення, відкрита всьому інтернету, інакше Telegram до неї не достукається. Справжнє повідомлення від чужого відрізняє тільки секрет у заголовку, який задає наш же виклик при налаштуванні вебхука.

Перевірка закривається, а не пропускає: секрет не заданий — відмова. Без неї будь-хто міг би надіслати повідомлення з чужим маркером і підписати свій чат на нагадування про чужі візити, тобто дізнаватися, хто, коли і до якого майстра ходить.

Що це означає для салону

Нічого не треба налаштовувати. Кнопка з'являється сама, коли бот платформи увімкнений, і не з'являється, коли ні: посилання на неіснуючого бота гірше за його відсутність. Якщо клієнт підписався, нагадування йдуть безкоштовно і без лімітів.

Ця стаття допомогла?

Схожі статті

Як це влаштовано: чому сайт відкривається українською, навіть якщо в браузері російська
Як це влаштовано

Як це влаштовано: чому сайт відкривається українською, навіть якщо в браузері російська

Порядок вибору мови на сайті й на сторінках запису: вибір людини, потім регіон, потім мова браузера. Чому регіон стоїть вище за браузер і як ми його дізнаємось.

· 2 хв читання
Як це влаштовано: чому двоє адміністраторів не посадять двох клієнтів на один час
Як це влаштовано

Як це влаштовано: чому двоє адміністраторів не посадять двох клієнтів на один час

Перевірка «час вільний» і збереження запису — дві різні дії, і між ними встигає пролізти другий запис. Як блокування на рівні бази закриває цю щілину для CRM, онлайн-запису і календаря одразу.

· 2 хв читання
Як це влаштовано: адреса сторінки запису і чому ми не підказуємо вільні
Як це влаштовано

Як це влаштовано: адреса сторінки запису і чому ми не підказуємо вільні

Чому адресу сторінки запису обирає людина, а не система, які слова зарезервовані, чому перевірка відповідає тільки «так» або «ні» і чому адресу не можна змінити.

· 3 хв читання

Коментарі

Коментарів поки немає. Поставте запитання — відповідаємо протягом доби.

Залишити коментар

Пошта не публікується. Вона потрібна лише щоб вам відповісти.