Как создать и использовать Discord Webhook

Иван Корнев·26 апреля 2026·4 мин

Discord Webhook — это специальный URL-адрес, позволяющий отправлять сообщения в текстовый канал сервера напрямую из внешних приложений, скриптов или сервисов без необходимости писать полноценного бота. Чтобы начать работу, создайте вебхук в настройках канала, скопируйте его URL и отправьте POST-запрос с JSON-данными на этот адрес.

Этот инструмент идеален для автоматических уведомлений: отчеты о сборке кода (CI/CD), алерты мониторинга, заявки с сайта или логи ошибок.

Оглавление

Что такое Webhook и зачем он нужен

Webhook (вебхук) действует как «односторонний мост» между вашим кодом и Discord. В отличие от бота, вебхук не может читать сообщения, реагировать на команды или находиться в голосовых каналах. Его единственная задача — публиковать контент.

Основные сценарии использования:

  • DevOps: Уведомления об успешном или неудачном деплое из GitHub Actions/GitLab CI.
  • Мониторинг: Мгновенные алерты в канал #alerts, если сервер упал или нагрузка превысила норму.
  • Бизнес: Получение лидов с форм обратной связи сайта прямо в канал продаж.
  • Игры: Интеграция статистики игровых серверов.

Пошаговое создание вебхука

Создание выполняется через интерфейс Discord (Desktop или Web-версия).

  1. Наведите курсор на нужный текстовый канал в списке слева.
  2. Нажмите на шестеренку «Настройки канала» (Edit Channel).
  3. В меню слева выберите раздел «Интеграции» (Integrations) → «Вебхуки» (Webhooks).
    • Примечание: В старых версиях интерфейса пункт может называться просто «Webhooks».
  4. Нажмите кнопку «Создать вебхук» (New Webhook).
  5. Настройте внешний вид:
    • Имя: От кого будет приходить сообщение (например, Deploy Bot).
    • Аватар: Загрузите изображение (логотип проекта или иконку сервиса).
    • Канал: Выберите, куда именно отправлять сообщения.
  6. Нажмите «Копировать URL вебхука» (Copy Webhook URL).
  7. Нажмите «Сохранить изменения».

Безопасность прежде всего! URL вебхука содержит секретный токен. Любой, кто владеет этой ссылкой, может отправлять сообщения в ваш канал. Никогда не выкладывайте URL в публичные репозитории GitHub или открытые чаты.

Формат запроса и отправка сообщений

Для отправки сообщения необходимо выполнить HTTP-запрос методом POST на скопированный URL.

Требования к запросу:

  • Header: Content-Type: application/json
  • Body: JSON-объект с данными сообщения.

Минимальная структура JSON для простого текста:

{
  "content": "Текст вашего сообщения"
}

Примеры кода: cURL, Python, JavaScript

1. Отправка через cURL (терминал)

Универсальный способ для быстрой проверки работоспособности.

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"content": "✅ Тестовое сообщение успешно доставлено!"}' \
  https://discord.com/api/webhooks/ВАШ_ID/ВАШ_ТОКЕН

2. Отправка через Python (библиотека requests)

Наиболее популярный вариант для бэкенда и скриптов автоматизации.

import requests
import json

webhook_url = "https://discord.com/api/webhooks/ВАШ_ID/ВАШ_ТОКЕН"

# Данные сообщения
data = {
    "content": "🚀 Деплой завершен успешно!",
    "username": "CI Bot" # Можно переопределить имя прямо в запросе
}

try:
    response = requests.post(webhook_url, json=data)
    if response.status_code == 204:
        print("Сообщение отправлено.")
    else:
        print(f"Ошибка: {response.status_code}")
except Exception as e:
    print(f"Не удалось отправить: {e}")

3. Отправка через Node.js (fetch)

Для современных JS-приложений.

const webhookUrl = "https://discord.com/api/webhooks/ВАШ_ID/ВАШ_ТОКЕН";

const message = {
  content: "🔥 Новая заявка с сайта!",
  embeds: [{
    title: "Контактные данные",
    description: "Пользователь оставил заявку на консультацию.",
    color: 5814783
  }]
};

fetch(webhookUrl, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(message)
})
.then(res => console.log("Отправлено"))
.catch(err => console.error("Ошибка:", err));

Расширенные сообщения (Embeds)

Обычный текст (content) ограничен 2000 символами и выглядит просто. Для красивых уведомлений используйте Embeds (встраиваемые блоки). Они позволяют добавлять заголовки, цвета, поля и футеры.

Структура Embed

{
  "content": "Внимание! Критическая ошибка.",
  "embeds": [
    {
      "title": "Ошибка базы данных",
      "description": "Не удалось подключиться к основному кластеру.",
      "color": 15158332, 
      "fields": [
        {
          "name": "Сервер",
          "value": "db-primary-01",
          "inline": true
        },
        {
          "name": "Код ошибки",
          "value": "`CONN_REFUSED`",
          "inline": true
        }
      ],
      "footer": {
        "text": "Monitoring System v2.0"
      },
      "timestamp": "2026-04-26T10:00:00.000Z"
    }
  ]
}

Ключевые параметры:

  • color: Число (десятичное представление HEX-цвета). Например, 15158332 — это красный #E74C3C.
  • fields: Массив объектов с полями name и value. Параметр inline: true выстраивает поля в одну строку (до 3 штук).
  • timestamp: Время в формате ISO 8601. Отображается в подвале карточки.

Вы можете отправлять до 10 embeds в одном сообщении, но обычно одного хорошо оформленного блока достаточно для читаемости.

Частые ошибки и безопасность

При интеграции вебхуков разработчики часто сталкиваются со следующими проблемами:

ОшибкаПричинаРешение
400 Bad RequestНеверный формат JSON или отсутствие заголовка Content-Type.Проверьте синтаксис JSON и убедитесь, что заголовок передается.
404 Not FoundНеверный URL вебхука или он был удален.Пересоздайте вебхук и обновите URL в коде.
429 Too Many RequestsПревышен лимит отправок (рейт-лимит).Discord ограничивает частоту запросов (обычно 5 запросов в 2 секунды на один вебхук). Добавьте задержку в код.
Сообщение не приходитБлокировка фаерволом или ошибкой в коде.Проверьте логи приложения и попробуйте отправить запрос через Postman/cURL локально.

Рекомендации по безопасности

  1. Храните URL в переменных окружения. Используйте .env файлы или секреты CI/CD (GitHub Secrets, GitLab Variables).
  2. Регулярно ротируйте ключи. Если есть подозрение, что ссылка утекла, удалите старый вебхук и создайте новый. Старая ссылка перестанет работать мгновенно.
  3. Ограничьте права. Вебхук может только писать. Он не имеет доступа к истории сообщений или списку участников, что делает его безопаснее полноценного бота с точки зрения утечки данных.

FAQ

Можно ли изменить имя отправителя в коде? Да, передав поле "username": "Новое Имя" в JSON-теле запроса. Однако, если в настройках вебхука задано имя, оно может перезаписываться или игнорироваться в зависимости от контекста. Лучше задавать имя один раз в настройках канала.

Есть ли лимит на длину сообщения? Да, поле content ограничено 2000 символами. Поле description внутри embed — 4096 символами. Если текст длиннее, его нужно разбивать на несколько запросов.

Работают ли вебхуки в личных сообщениях (DM)? Нет. Вебхуки работают только на серверах (гильдиях) в текстовых каналах. Отправить сообщение пользователю в личку через вебхук невозможно.

Как удалить вебхук? Зайдите в настройки канала → Интеграции → Вебхуки, нажмите на значок корзины рядом с нужным вебхуком и подтвердите удаление.