1. Вебхуки
Вебхук — секретный адрес, по которому внешний сервис публикует сообщения в один текстовый канал без входа в Блям. Вход и токен пользователя не нужны: право писать даёт сам адрес.
- Откройте настройки текстового канала → Вебхуки. Нужно право «Управлять вебхуками».
- Создайте вебхук, задайте имя и аватар — ими подписываются его сообщения.
- Скопируйте адрес. Он показывается один раз; если адрес утёк, выпустите новый токен — старый перестанет работать.
https://api.blyam.ru/api/v1/webhooks/{webhookId}/{token}
Храните адрес как пароль: не публикуйте его в открытых репозиториях и логах сборки.
2. Отправка сообщения
POST на адрес вебхука с телом application/json до 1 МБ:
curl -X POST "https://api.blyam.ru/api/v1/webhooks/{webhookId}/{token}?wait=true" \
-H "Content-Type: application/json" \
-d '{
"content": "Сборка **0.4.2** готова",
"username": "Blyam CI",
"embeds": [{
"title": "Релиз 0.4.2",
"url": "https://example.com/releases/0.4.2",
"color": 2991182,
"fields": [
{ "name": "Платформа", "value": "Windows x64", "inline": true },
{ "name": "Время сборки", "value": "6 мин 12 с", "inline": true }
]
}]
}'
| Поле | Назначение |
|---|---|
content | Текст до 2000 символов, с тем же форматированием, что в приложении |
username | Имя только для этого сообщения, 1–80 символов. Без него — имя вебхука |
avatar_url | Аватар только для этого сообщения, ссылка https до 2048 символов |
embeds | До 10 эмбедов (раздел 4) |
- Нужен непустой
contentили хотя бы один эмбед. - С
?wait=trueответ —200и созданное сообщение сid, без него —204сразу после сохранения. - Повтор запроса создаёт новое сообщение.
3. Изменение и удаление
Вебхук может менять и удалять только свои сообщения. Так CI держит одно сообщение о сборке и обновляет его по ходу.
PATCH /api/v1/webhooks/{webhookId}/{token}/messages/{messageId}
DELETE /api/v1/webhooks/{webhookId}/{token}/messages/{messageId}
В PATCH меняются только content и embeds: переданное поле заменяется целиком, "embeds": [] убирает эмбеды. Ответ — 200 с сообщением; DELETE отвечает 204.
4. Эмбеды
Эмбед — карточка под текстом: цветная полоса, автор, заголовок со ссылкой, описание, поля, картинки и подвал. Создавать эмбеды могут только вебхуки.
{
"title": "Релиз 0.4.2",
"description": "Установщик для **Windows** загружен.",
"url": "https://example.com/releases/0.4.2",
"color": 2991182,
"timestamp": "2026-11-02T07:09:00Z",
"author": { "name": "megoRU", "url": "https://github.com/megoRU", "icon_url": "https://..." },
"fields": [{ "name": "Платформа", "value": "Windows x64", "inline": true }],
"thumbnail": { "url": "https://..." },
"image": { "url": "https://..." },
"footer": { "text": "BlyamCorp/blyam-desktop", "icon_url": "https://..." }
}
| Поле | Ограничение |
|---|---|
title | До 256 символов, простой текст |
description | До 4096 символов, форматирование и ссылки [текст](https://...) |
url | Ссылка заголовка, http или https |
color | Цвет полосы числом от 0 до 16777215 (0xFFFFFF) |
timestamp | ISO 8601, показывается в подвале по местному времени читателя |
author | name до 256 символов обязателен; url, icon_url — по желанию |
fields | До 25 полей: name до 256, value до 1024 символов, inline — до трёх в ряд |
thumbnail, image | url — только https, до 2048 символов |
footer | text до 2048 символов обязателен; icon_url — как у картинок |
- В сообщении до 10 эмбедов, всего текста в них — не больше 6000 символов.
- Картинки (PNG, JPEG, WebP, GIF до 10 МБ) приложение загружает через прокси Бляма, а не напрямую: владелец картинки не узнает IP-адреса читателей. Адреса во внутренней сети не загружаются.
- Упоминания внутри эмбедов показываются, но уведомлений не создают.
- Ошибка в эмбеде —
422 INVALID_EMBEDс путём к полю:{"field": "embeds[0].fields[3].value", "reason": "TOO_LONG"}.
5. GitHub
Уведомления репозитория можно получать без своего кода. В GitHub откройте Settings → Webhooks → Add webhook:
| Поле в GitHub | Значение |
|---|---|
| Payload URL | Адрес вебхука с /github в конце |
| Content type | application/json |
| Secret | Тот же секрет, что в настройках вебхука в Бляме. Без него подпись не проверяется |
| Events | «Send me everything» или выбранные события — неподдерживаемые пропускаются |
https://api.blyam.ru/api/v1/webhooks/{webhookId}/{token}/github
Сейчас в канал приходят push, открытие, закрытие и слияние pull request, задачи и опубликованные релизы. Список событий будет расширяться. Повторные доставки GitHub не дублируют сообщения.
6. Ограничения и ошибки
- До 15 вебхуков в канале и 50 на сервере.
- При превышении частоты отправки —
429 RATE_LIMITED, вdetails.retry_after_msуказано, через сколько повторить.
| HTTP | Код | Ситуация |
|---|---|---|
| 400 | INVALID_MESSAGE | Нет ни content, ни эмбедов |
| 401 | INVALID_SIGNATURE | Подпись GitHub не сходится |
| 404 | WEBHOOK_NOT_FOUND | Вебхука нет или токен неверный |
| 404 | MESSAGE_NOT_FOUND | Сообщение не этого вебхука или удалено |
| 413 | PAYLOAD_TOO_LARGE | Тело больше 1 МБ (у GitHub — 25 МБ) |
| 422 | INVALID_EMBED | Эмбед нарушает ограничения |
| 422 | MESSAGE_TOO_LONG | content длиннее 2000 символов |
| 422 | INVALID_WEBHOOK_NAME | Имя пустое, длиннее 80 символов или системное |
| 429 | RATE_LIMITED | Слишком часто |
7. Боты скоро
Мы готовим API для ботов: собственный аккаунт бота, чтение сообщений и события в реальном времени, команды и ответы участникам. Документация появится на этой странице к запуску.
А пока для уведомлений и интеграций используйте вебхуки — они уже работают.