Быстрый старт по вебхукам
Вебхуки предназначены для самого простого сценария: отправить payload в один текстовый канал Chattr.
Что вы получаете
После создания вебхука портал показывает:
- ID приложения
- канал назначения
- полный runtime URL вебхука
Как отправлять сообщения
- Создайте вебхук на странице нужного сервера.
- Скопируйте runtime URL.
- Отправляйте
POST-запросы с JSON в этот URL.
Необязательные поля payload
name— переопределить имя вебхука для этого сообщенияavatarUrl— переопределить аватарку вебхука для этого сообщенияallowedMentions— явно разрешить упоминания (см. ниже)
Управление упоминаниями
По умолчанию сообщение от вебхука не создаёт уведомлений об упоминаниях, даже если в content встречается @all, упоминание роли или @ник. Это безопасное поведение — утекший токен вебхука не может поднять на уши всех участников сервера. Чтобы явно разрешить упоминания, используйте allowedMentions.parse:
| Токен | Разрешает |
|---|---|
"all" |
Групповое уведомление @all (создатель вебхука должен сохранять право Упоминать @all в канале) |
"roles" |
Уведомления об упоминаниях ролей (@role_name / @role_NNN) — упоминаемые роли срабатывают для всех; для неупоминаемых ролей нужен право Упоминать @all у создателя |
"users" |
Прямые упоминания пользователей @nickname, а также упоминания по ID @<USERID> (см. ниже) |
Пример — позвать всех при падении деплоя:
{
"content": "@all деплой упал — откатываемся",
"allowedMentions": { "parse": ["all"] }
}
Передайте пустой массив (или не указывайте поле), чтобы сообщение было «тихим» и не создавало уведомлений об упоминаниях, что бы ни было в content:
{
"content": "@all тут ничего нет",
"allowedMentions": { "parse": [] }
}
Упоминание пользователей по ID
Ник может измениться. Чтобы гарантированно позвать конкретного пользователя, используйте синтаксис @<USERID> с численным ID:
{
"content": "Сборка упала — @<42> посмотри, пожалуйста, лог.",
"allowedMentions": { "parse": ["users"] }
}
@<42>переписывается сервером в@<текущий_ник>перед сохранением, поэтому в UI сообщение отрисовывается обычным пилл-упоминанием пользователя.- Переписывание работает только если
allowedMentions.parseсодержит"users". Без этого токен@<42>остаётся в сообщении как есть и уведомление не приходит. - Пользователь должен быть участником сервера вебхука; нераспознанные ID остаются текстом без изменений.
- В одном payload поддерживается до 16 уникальных
@<USERID>токенов. Лишние не переписываются.
Примеры кода
cURL
curl -X POST "https://chattr.example.com/webhooks/APP_ID/WEBHOOK_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Деплой завершён успешно."}'
JavaScript (Node.js)
const WEBHOOK_URL = "https://chattr.example.com/webhooks/APP_ID/WEBHOOK_TOKEN";
const res = await fetch(WEBHOOK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
content: "Деплой завершён успешно.",
name: "CI Bot", // необязательно
avatarUrl: null // необязательно
})
});
const data = await res.json();
console.log("Message ID:", data.message.id);
Python
import requests
WEBHOOK_URL = "https://chattr.example.com/webhooks/APP_ID/WEBHOOK_TOKEN"
res = requests.post(WEBHOOK_URL, json={
"content": "Деплой завершён успешно.",
"name": "CI Bot", # необязательно
"avatarUrl": None # необязательно
})
data = res.json()
print("Message ID:", data["message"]["id"])
Go
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
webhookURL := "https://chattr.example.com/webhooks/APP_ID/WEBHOOK_TOKEN"
body, _ := json.Marshal(map[string]any{
"content": "Деплой завершён успешно.",
"name": "CI Bot",
})
resp, err := http.Post(webhookURL, "application/json", bytes.NewReader(body))
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Status:", resp.StatusCode)
}
PHP
$webhookUrl = "https://chattr.example.com/webhooks/APP_ID/WEBHOOK_TOKEN";
$ch = curl_init($webhookUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"content" => "Деплой завершён успешно.",
"name" => "CI Bot", // необязательно
"avatarUrl" => null // необязательно
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo "Message ID: " . $data["message"]["id"];
Права доступа
Для создания и управления вебхуками требуется право manage_server на целевом сервере. Владельцы серверов и администраторы получают это право автоматически.
Что важно помнить
- Каждый вебхук привязан к одному текстовому каналу.
- При регенерации URL старый runtime URL перестаёт работать.
- Управление вебхуками доступно только пользователям с правом
manage_server.