Перейти к содержимому
CalabДокументация

Токен и права

Формат токена бота, как его передавать, перевыпускать и отзывать; как работают права бота и что для ботов закрыто всегда.

Токен

Токен бота выглядит так:

text
calab_bot_0192a1b2-3c4d-7e5f-8a9b-0c1d2e3f4a5b_Xq3v9aT2LmN8pR4sW7yZ1bC5dF0gH6jK3nQ9uV2xE8w
└──┬────┘ └───────────────┬──────────────────┘ └────────────────┬────────────────────┘
 префикс           id бота (UUID)                  секрет: 43 символа base64url
  • Префикс calab_bot_ нужен сканерам секретов (GitHub и другие), чтобы распознать утёкший токен.
  • Сервер хранит только хеш sha256 секрета: показать токен повторно невозможно. В профиле бота видны первые 6 символов секрета (tokenPrefix) — чтобы отличать токены.
  • Токен не истекает сам: он действует, пока его не перевыпустят или не отзовут.

Как передавать

ГдеКак
RESTзаголовок Authorization: Bearer <токен>
Gatewayполе token в кадре IDENTIFY (или RESUME)

Никогда не передавайте токен в URL, query-строке или теле вебхука — только в этих двух местах.

bash
curl -s https://app.example.com/api/me -H "Authorization: Bearer $TOKEN"

Перевыпуск и отзыв

В «Настройках пространства → Боты» владелец бота или участник с правом MANAGE_BOTS в домашнем пространстве бота может:

  • «Перевыпустить токен» — получить новый токен; старый перестаёт работать сразу.
  • «Отозвать токен» — выключить бота без нового токена, пока его не перевыпустят.
  • «Удалить бота» — бот выходит из всех пространств и звонков; его сообщения остаются.

Что происходит со старым токеном:

КаналРеакция
REST401 UNAUTHENTICATED
Gatewayсокет закрывается с кодом 4010, переподключаться не нужно
Голосбот выходит из звонков

Один токен — один процесс

Токен — это одно «устройство» в gateway. Второй процесс с тем же токеном вытесняет первый: сокет первого закрывается с кодом 4000 и причиной replaced by a new session. Запускайте один процесс на токен. Чтобы масштабировать обработку, используйте вебхук с идемпотентной обработкой по id или несколько ботов.

Права

Бот — участник пространства, и его права считаются точно так же, как права человека: роли пространства плюс переопределения в комнате или на доске.

  • По умолчанию бот получает роль участника: видит открытые комнаты, пишет в них, заходит в голос.
  • Нужно больше — выдайте боту роль с нужными правами: MANAGE_MESSAGES для модерации, CREATE_TASKS / EDIT_TASKS для досок, INVITE_MEMBERS для приглашений и так далее.
  • Нужно меньше — запретите право переопределением в комнате.
  • Закрытые комнаты и доски бот видит только через переопределение на самом объекте — личное или по роли, как и человек. Иначе — 404.

Каждая глава REST-раздела перечисляет права, которые нужны для её маршрутов. Если права нет, сервер отвечает 403 FORBIDDEN, а message называет недостающее право.

Бот с правами администратора — администратор

Токен бота, чьи роли дают MANAGE_*, INVITE_* или VIEW_JOURNALS, действует как администратор с этими правами. Храните такой токен как пароль администратора и перевыпускайте при малейшем сомнении. Редактор ролей предупреждает, когда административные права получает роль, которая есть у ботов. Сервер записывает в журнал каждое административное действие бота — маршрут, статус ответа, бота и его владельца.

Бот в нескольких пространствах

Бот создаётся в одном — домашнем — пространстве; там им управляют (токен, удаление). Администратор другого пространства может добавить бота к себе: «Настройки пространства → Боты → Добавить бота из другого пространства» по его username или по ссылке /bots/<username>. В каждом пространстве права бота — свои, по его ролям там.

Блокировка людьми

Человек может «Заблокировать бота» — тогда бот не может писать ему в личные сообщения: новые DM и сообщения в существующем DM получают 403 BOT_BLOCKED.

Что закрыто для ботов всегда

Эти маршруты отвечают боту 403 FORBIDDEN с reason: "BOT_NOT_ALLOWED" — какие бы роли у него ни были:

ОбластьЧто именно
Оплатабаланс, платежи, способы оплаты, автопополнение, смена и остановка тарифа
Identityнастройки SSO и каталога, OAuth-клиенты, OAuth-провайдер (/oidc/…), согласия OAuth, повторный вход
Управление ботамисоздание, добавление, удаление ботов, их токены и аватары — даже с MANAGE_BOTS
Аккаунтсессии, пароль, почта, подтверждение почты, статус, выбор username, заметки о людях, блокировки ботов
Пространствасоздание, поиск, удаление, вступление по приглашению, настройки уведомлений
Приглашенияпоиск аккаунта по адресу и прямое добавление аккаунта (приглашения ссылкой и письмом — доступны)
Комнатыгостевые ссылки, настройки уведомлений, ожидание впуска как гость
Голосзвонки один на один (позвонить, принять, отклонить)
Заметкиполки заметок целиком
Pushрегистрация устройств и всё про push
Задачиголосование в согласовании, доступ к доске, окончательное удаление доски, вебхук доски, изменение автоматизаций, Git-связи
Сообщениянажатие кнопок под сообщениями (это действие человека)
Календарьответы на приглашения (RSVP), «сегодня», CalDAV и внешние календари
ПрочееДиск, фоны камеры, веб-приложения пространства, телефония (настройки и журнал), настройки распознавания записей, выдача ачивок, таблица и установка дней рождения, удаление и повторная выгрузка записей, превью ссылок, суперадминка

Точный список маршрутов — Маршруты ботов.

Хорошие практики

  • Храните токен в секрет-хранилище (Vault, переменные окружения CI), не в коде.
  • Давайте боту минимальные права: отдельная роль под задачу лучше, чем роль администратора.
  • Для админских задач заведите отдельного бота — токен с широкими правами должен быть у меньшего числа процессов.
  • Секрет вебхука храните отдельно от токена и проверяйте подпись каждой доставки — см. Вебхуки.