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

Личные сообщения

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

Бот может написать в личные сообщения любому участнику общего пространства, кроме гостей. Личные сообщения — это комната типа ROOM_TYPE_DM без пространства: сообщения, реакции, закрепы и отметка о прочтении работают через обычные маршруты комнат и сообщений (см. Сообщения), а файлы загружаются отдельным маршрутом.

Маршруты

МетодПутьЧто делает
POST/api/dmsОткрыть (или найти) личные сообщения с участником {userId} → {dm}: 201 — созданы, 200 — уже были
GET/api/dmsЛичные сообщения бота, свежие сверху (≤ 500) → {dms}
GET/api/dms/candidatesКому бот может написать: ?q= по имени или никнейму (≤ 20) → {users}
POST/api/dms/{id}/filesЗагрузить файл в личные сообщения (multipart file) → {file}

Недоступно ботам

  • Архив и «Удалить чат» для себя: PATCH /api/dms/{id}/state.
  • Звонки один на один: POST /api/dms/{id}/call, /api/calls/{id}/accept · decline · cancel · hangup — бот не звонит и не отвечает, позвонить боту нельзя.
  • Список заблокированных ботов /api/me/blocked-bots… — это настройка человека.

Открыть и написать

POST /api/dms {userId} разрешён, когда оба — полноправные участники (не гости) общего пространства, либо личные сообщения уже существуют. Гостевой аккаунт с любой стороны — 403; сам с собой — 422; неизвестный пользователь или нет общего пространства — 404. Ответ — DmSummary {room, peer, readState, lastMessageAt}; пишите в dm.room.id.

curl -s -X POST $CALAB/api/dms -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d "{\"userId\": \"$USER\"}"
# → {"dm": {"room": {"id": "0192d0…", "type": "ROOM_TYPE_DM", "workspaceId": "", …}, "peer": {"id": "…", "displayName": "Анна", …}, …}}
curl -s -X POST $CALAB/api/rooms/$DM_ROOM/messages -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"content": "Напоминаю про отчёт к пятнице", "nonce": "dm-1"}'

Когда человек открывает личные сообщения с ботом, бот получает событие dmCreate, а новые сообщения — как messageCreate (см. Gateway). В личных сообщениях с ботом /команда адресована этому боту, см. Команды и кнопки.

Файлы

В личных сообщениях нет пространства, поэтому файлы загружаются в сами личные сообщения: POST /api/dms/{id}/files (multipart file), затем id передаётся в attachmentIds. SDK bot.send(roomId, {files}) выбирает нужный маршрут сам.

curl -s -X POST $CALAB/api/dms/$DM_ROOM/files -H "Authorization: Bearer $TOKEN" -F file=@invoice.pdf

Блокировка

Человек может заблокировать бота. После этого бот не может открыть с ним новые личные сообщения и писать в существующие: 403, код BOT_BLOCKED. Заблокировавший бота человек также не получает от него пересылку уведомлений о задачах.

Лимиты

ЛимитЗначение
Новые личные сообщения10 сразу, 30 в час (429)
Сообщения бота20 в минуту по всем комнатам и личным сообщениям, плюс общие 5 за 5 секунд на комнату