Перейти к основному содержимому

Messages

Отправить сообщение

space_idUUIDrequired

Space, в котором канал.

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_idallowed_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: 50

1..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

HTTPCodeЧто значит
401Bot token required / invalid bot tokenТокен не передан, не того формата или не прошёл проверку
403missing scope: messages.sendНе выдан scope
403bot has no access to this channelChannel не в allowed
404message not foundНесуществующий message_id
422validationBody не валиден
429rate limitСм. Retry-After header