Что это и зачем
Раздел отвечает за то, как сотрудник привязывает свой аккаунт Telegram к профилю в системе, чтобы получать в этот чат уведомления, и как он может отвязать его. Привязка нужна, потому что канал доставки в Telegram отправляет сообщения не по номеру телефона и не по логину, а по конкретному чату — и система должна заранее знать, какой чат принадлежит какому сотруднику в какой компании. Механика построена на подтверждении по одноразовому коду: сначала сотрудник открывает бот в Telegram, бот заводит предварительную (неподтверждённую) запись и выдаёт код, а затем сотрудник вводит этот код в веб- или мобильном интерфейсе, уже находясь под своим рабочим аккаунтом. Только после ввода кода чат «переезжает» на его аккаунт и текущую компанию.Бот выдаёт код из 8 цифр и проверяет, что такой же код не выдан другому ожидающему подтверждения чату. Форма подтверждения принимает от 6 до 10 символов — это нужно, чтобы коды, выданные до перехода на восьмизначные, продолжали срабатывать и никто не застрял на середине привязки.
Модель данных
В привязке участвует связка Пользователя Telegram — записи, соединяющей Telegram-чат с сотрудником и компанией. В процессе привязки таких записей две: временная неподтверждённая (её создаёт бот вместе с кодом) и итоговая подтверждённая (её формирует система после успешной проверки кода).
У пары «Компания + Сотрудник» действует ограничение уникальности: в одной компании у сотрудника может быть только одна привязка Telegram.
Как проходит привязка
Привязка выполняется через endpoint привязки Telegram, доступный только авторизованному сотруднику. У него две операции:- Отправка кода — сотрудник передаёт код, полученный от бота (принимается от 6 до 10 символов). На эту операцию действует лимит 10 попыток в минуту на сотрудника.
- Просмотр текущей привязки — возвращает уже существующую привязку сотрудника в текущей компании (если её нет — «не найдено»). Эта операция не ограничена лимитом: интерфейс опрашивает её, чтобы показать состояние привязки.
Проверка кода
При отправке кода формат привязки Telegram делает следующее:- Берёт текущую компанию (определённую по контексту запроса) и текущего сотрудника (из авторизации).
- Ищет неподтверждённую запись Пользователя Telegram с таким же кодом подтверждения.
- Если ни одной неподтверждённой записи с этим кодом нет — запрос завершается ответом «не найдено» (404), привязка не создаётся.
- Если по одному коду нашлось несколько ожидающих чатов — код считается неоднозначным и тоже отклоняется ответом «не найдено». Произвольный выбор одного из чатов не делается: код нужно получить заново.
Почему код нельзя искать «только в своей компании». Ожидающую подтверждения запись создаёт бот в момент, когда сотрудник открыл с ним чат — на этом шаге бот знает только сам чат, ни компании, ни сотрудника ещё нет. Список ожидающих чатов один на всю платформу, и до ввода кода сузить поиск просто не по чему. Поэтому секретом здесь является сам код, а защита строится на нём: 8 цифр от бота, проверка на неоднозначность и лимит 10 попыток в минуту на сотрудника.
Перенос чата и подтверждение
Если неподтверждённая запись найдена, система:- Запоминает данные чата: ID чата, Telegram-логин, имя и фамилию.
- Удаляет временную неподтверждённую запись.
- Освобождает прежнюю привязку этого сотрудника в этой компании, если она была сделана к другому чату. Так «перепривязать» Telegram к новому чату можно сразу, не отвязывая старый вручную.
- Создаёт (или обновляет, если такая уже есть) подтверждённую запись по ID чата: проставляет текущую компанию, текущего сотрудника, переносит логин/имя/фамилию, включает флаг «подтверждён» и обнуляет код подтверждения.
- Отправляет в этот чат сообщение об успешной привязке (фоновой задачей доставки в Telegram).
В ответе на успешную привязку возвращается только Telegram-логин привязанного чата (как имя привязки). Сам код — поле только для записи и в ответе не показывается.
Как проходит отвязка
Отвязка выполняется через отдельный endpoint отвязки Telegram, тоже доступный только авторизованному сотруднику. Здесь формат отвязки Telegram не принимает никаких входных полей: он находит привязку текущего сотрудника в текущей компании и удаляет её. Если у сотрудника нет привязки в этой компании — ответ «не найдено» (404).Отвязка действует в границах текущей компании: удаляется привязка именно этого сотрудника в той компании, в контексте которой сделан запрос. Если у сотрудника есть привязки в нескольких компаниях, отвязка в одной из них остальные не затрагивает.
Как это используется
- После успешной привязки чат становится готовым адресатом для канала доставки в Telegram: уведомления, у которых включена доставка в этот канал, будут уходить в привязанный чат.
- Просмотр текущей привязки (операция чтения на endpoint привязки) позволяет интерфейсу показать, привязан ли уже Telegram у сотрудника, и под каким логином.
- Отвязка нужна, когда сотрудник хочет перестать получать уведомления в Telegram или сменить чат — после отвязки можно пройти привязку заново с новым кодом.
Особенности поведения
- Если по одному и тому же коду существует несколько неподтверждённых записей, привязка не выполняется вовсе: код отклоняется как неоднозначный, ни один из чатов не выбирается.
- Слишком частые попытки ввода кода отклоняются: больше 10 попыток в минуту от одного сотрудника не принимается. Просмотр состояния привязки лимитом не ограничен.
- Привязка выполняется в режиме «обновить или создать» по ID чата, поэтому повторный ввод кода для уже привязанного чата не создаёт дубликат, а перезаписывает существующую привязку (может сменить сотрудника или компанию у чата).
- Привязка нового чата, когда у сотрудника в этой же компании уже есть привязка к другому чату, проходит штатно: прежняя привязка освобождается автоматически, отвязывать старый чат вручную не нужно.
- Между удалением временной записи и созданием подтверждённой нет явной единой транзакции: при сбое на шаге создания временная запись уже удалена, и код придётся получать заново.
- Отвязка работает только в границах текущей компании: удаляется привязка сотрудника именно в той компании, в контексте которой сделан запрос, привязки в других компаниях остаются.
- Сообщение об успешной привязке отправляется фоновой задачей, поэтому доставка подтверждения в чат может произойти с задержкой или не произойти при сбое очереди, хотя сама привязка уже сохранена.
- У кода нет срока жизни: выданный ботом код остаётся действующим, пока чат не подтверждён или запись не удалена.
Связанные страницы
Глоссарий: Привязка Telegram
Полный перечень полей и терминов, используемых в привязке и отвязке Telegram.
Уведомления (доставка и доступ)
Обзорная страница модуля уведомлений: доставка, каналы и доступы.
Модель и веер доставки
Модели уведомления и получателя, сигнал сохранения и разветвление доставки по каналам с учётом доступов.
Создание и группировка
Фоновые задачи создания уведомлений: одиночные, обновляемые по объекту и сгруппированные в 30-минутном окне.
Каналы доставки
Транспортные задачи и сервис: веб-доставка, мобильные push-уведомления и рассылка в Telegram.
Чтение, архивация и список
Список уведомлений, счётчик непрочитанных, отметка прочтения и архивация с логикой первого клейма.
Push-токены устройств
Регистрация и отписка push-токенов мобильных устройств с уникальностью по устройству и типом платформы.
Доступ и настройки
Матрица доступов «источник × тема» на пользователя и bulk-редактирование настроек уведомлений.