Личные сообщения
Как бот открывает личные сообщения с участником, пишет в них, загружает файлы и что значит блокировка бота.
Бот может написать в личные сообщения любому участнику общего пространства, кроме гостей. Личные сообщения — это комната типа 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"}'const dm = await bot.dm(userId);
await bot.send(dm.room.id, 'Напоминаю про отчёт к пятнице');dm = requests.post(f"{CALAB}/api/dms", headers=H, json={"userId": user_id}).json()["dm"]
requests.post(f"{CALAB}/api/rooms/{dm['room']['id']}/messages", headers=H,
json={"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 секунд на комнату |