Messages
Отправить сообщение
space_idUUIDrequiredSpace, в котором канал.
channel_idUUIDrequiredКанал из allowed_channels бота.
contentstringrequiredТекст сообщения. От 1 до 10000 символов. Не зашифрован для прокатки через бэк (бот пишет в plain), но юзеры получат его через стандартный chat-flow.
reply_toUUIDОпционально — message_id для thread-reply.
curl -X POST https://api.reasonspace.ru/api/bot/spaces/{space_id}/channels/{channel_id}/messages \
-H "Authorization: Bot bot_..." \
-H "Content-Type: application/json" \
-d '{
"content": "Привет!",
"reply_to": null
}'
await bot.send_message(channel_id, "Привет!", space_id=space_id)
async with httpx.AsyncClient() as client:
r = await client.post(
f"https://api.reasonspace.ru/api/bot/spaces/{space_id}/channels/{channel_id}/messages",
headers={"Authorization": f"Bot {BOT_TOKEN}"},
json={"content": "Привет!"},
)
Требования:
- Scope:
messages.send channel_id∈allowed_channel_ids- Rate limit: 5/sec/channel, 60/min/space
Прочитать сообщения
curl https://api.reasonspace.ru/api/bot/spaces/{space_id}/channels/{channel_id}/messages?limit=50 \
-H "Authorization: Bot bot_..."
messages = await bot.client.list_messages(channel_id, space_id=space_id, limit=50)
limitintegerdefault: 501..100
beforeUUIDДля pagination: id сообщения, до которого читать (более старые).
Content обычного чата E2E-encrypted — SDK или ваш код не сможет его прочитать. List messages предназначен для сообщений ботов и служебных. Обычные сообщения юзеров боту как webhook не доставляются — единственный inbound-канал юзер→бот — это slash-команды.
Inbound от юзера к боту — через slash-команды. Пользователь вызывает
POST /api/chat/{space_id}/{channel_id}/commands/invoke → бот получает webhook
command.invoked → отвечает эфемерно через POST /api/bot/interactions/respond
(виден только инвокеру, не пишется в чат). Это полноценная рабочая подсистема:
регистрация команд, типизированные опции, адресная доставка только целевому
боту, подписанный interaction-token (HMAC-SHA256, TTL 900 с). См.
Команды.
Реакции
curl -X POST https://api.reasonspace.ru/api/bot/spaces/{space_id}/messages/{message_id}/reactions \
-H "Authorization: Bot bot_..." \
-H "Content-Type: application/json" \
-d '{"emoji": "👍"}'
await bot.add_reaction(message_id, "👍", space_id=space_id)
Требует scope messages.react. Channel-check косвенный (бэк load'ит
сообщение → проверяет channel_id ∈ allowed).
Удалить сообщение
DELETE /api/bot/spaces/{space_id}/messages/{message_id}
- Своё сообщение бота → scope
messages.delete.own. - Чужое сообщение (модерация) → scope
moderation.messages. - Канал сообщения должен быть в
allowed_channel_ids.
curl -X DELETE https://api.reasonspace.ru/api/bot/spaces/{space_id}/messages/{message_id} \
-H "Authorization: Bot bot_..."
Возвращает 204 No Content. Бэк определяет своё/чужое по автору сообщения и
требует соответствующий scope (messages.delete.own или moderation.messages).
Errors
| HTTP | Code | Что значит |
|---|---|---|
| 401 | Bot token required / invalid bot token | Токен не передан, не того формата или не прошёл проверку |
| 403 | missing scope: messages.send | Не выдан scope |
| 403 | bot has no access to this channel | Channel не в allowed |
| 404 | message not found | Несуществующий message_id |
| 422 | validation | Body не валиден |
| 429 | rate limit | См. Retry-After header |