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

Поиск

Единый поиск по сообщениям, задачам, встречам, файлам и расшифровкам, поиск по сообщениям пространства и упоминания бота.

Бот ищет по тем же правилам, что и человек: в выдачу попадает только то, что разрешают права его ролей, — сообщения комнат с VIEW_ROOM, задачи досок с VIEW_BOARD, встречи, которые бот организует, и встречи видимых комнат. Раздел заметок для бота всегда пуст.

Маршруты

МетодПутьЧто делает
GET/api/searchЕдиный поиск: ?q=&scope=<id пространства>|all&types=&type=&limit=&cursor=&sort= → {sections}
GET/api/workspaces/{id}/messages/searchПолнотекстовый поиск по сообщениям пространства: ?q=&room_id=&author_id=&before=&limit= (≤ 50) → {messages, hasMore}
GET/api/me/mentionsСообщения, где упомянут бот (@<id>, @everyone, @here): ?before=&limit=&workspace_id= → {messages, hasMore}

Поиск внутри одной комнаты — GET /api/rooms/{id}/messages?q=, см. Сообщения. Поиск задач по ключу — GET /api/workspaces/{id}/tasks/search, см. Доски и задачи.

Единый поиск

ПараметрОписание
q1..200 символов. Слова ищутся по основе (русский) и как написаны; последнее слово от 2 символов — ещё и как префикс («рел» найдёт «релиз»); работают "точная фраза", -исключение и OR. Короткие поля (названия задач и встреч, имена файлов) находятся и с опечатками. Ключ задачи ABC-12 находит её первой
scopeid пространства (бот должен быть участником, иначе 404) или all — все пространства бота и его личные сообщения. Обязателен
typesЧерез запятую: messages, task_comments, tasks, events, files, transcripts (по умолчанию все). Неизвестное имя — 400
typeОдин раздел лентой с курсором («Все результаты»); заменяет types
limitСводка — 1..20 на раздел (по умолчанию 4); лента — 1..20 (по умолчанию 20)
cursornextCursor предыдущей страницы того же q / scope / type / sort
sortrelevance (по умолчанию) или new

Ответ — разделы в порядке типов, каждый присутствует, даже если пуст: {type, items, totalEstimate, nextCursor, timedOut}. totalEstimate считается до 1000 («1000 или больше») и только на первой странице. Элемент SearchHit — snippet (простой текст; найденные слова обёрнуты в символы U+0002 … U+0003 — замените их на свою подсветку), title, workspaceId, at, authorId и одна ссылка на объект: message, taskComment, task, event, file или transcript (с recordingId, roomId, offsetMs).

curl -s "$CALAB/api/search?q=сертификат&scope=$WS&types=messages,tasks" -H "Authorization: Bearer $TOKEN"
JSON
{
  "sections": [
    {
      "type": "SEARCH_TYPE_MESSAGES",
      "items": [
        {
          "snippet": "…продлить \u0002сертификат\u0003 до пятницы…",
          "title": "#ops",
          "workspaceId": "0191f0aa-0000-7000-8000-000000000001",
          "at": "2026-10-13T15:20:00Z",
          "authorId": "0191c2d3-0000-7000-8000-000000000042",
          "message": {"messageId": "0192a1c4-7b2e-7d10-9a51-3f2b8c0e1d77", "roomId": "0191f0aa-2c3d-7e4f-8a9b-1c2d3e4f5a6b"}
        }
      ],
      "totalEstimate": 1,
      "nextCursor": "",
      "timedOut": false
    },
    {"type": "SEARCH_TYPE_TASKS", "items": [], "totalEstimate": 0, "nextCursor": "", "timedOut": false}
  ]
}

Упоминания бота

GET /api/me/mentions — сообщения, где упомянут бот, новые сверху, только из комнат, которые бот видит. Удобно, если бот работает без gateway и опрашивает сервер по расписанию.

curl -s "$CALAB/api/me/mentions?limit=20" -H "Authorization: Bearer $TOKEN"