Перейти к содержимому
Все статьи
· Обновлено 15 февраля 2026 г.

Discord Webhook через curl: примеры команд для терминала

Отправка сообщений в Discord через curl из командной строки. Простые сообщения, embed, файлы, переменные окружения и автоматизация скриптов.

curlwebhookbashclicurl discord 2026командная строка webhookbash discord
Discord Webhook через curl: примеры команд для терминала

Зачем использовать curl для Discord Webhook?

curl — универсальный инструмент командной строки для HTTP-запросов, доступный на всех платформах. Использование curl для Discord webhook идеально подходит для:

  • Быстрого тестирования — проверка webhook без написания кода
  • Bash-скриптов — автоматизация уведомлений в shell-скриптах
  • CI/CD пайплайнов — отправка статусов билдов из Jenkins, GitLab CI и других
  • Cron-задач — периодические уведомления с сервера
  • Мониторинга — алерты из скриптов мониторинга

Всё, что нужно — URL вебхука и одна команда curl.

Создание Webhook в Discord

  1. Откройте настройки канала Discord (шестерёнка рядом с названием)
  2. Перейдите в ИнтеграцииВебхуки
  3. Нажмите Новый вебхук
  4. Задайте имя и скопируйте URL

URL будет выглядеть так:

https://discord.com/api/webhooks/1234567890/abcdefghijklmnop

Важно: Храните URL в секрете. Используйте переменные окружения в скриптах.

Простое текстовое сообщение

Самая базовая команда для отправки текста:

curl -H "Content-Type: application/json" \
     -d '{"content": "Привет из curl!"}' \
     https://discord.com/api/webhooks/YOUR_WEBHOOK_URL

Успешный запрос вернёт статус 204 No Content (без тела ответа).

С переменной окружения

Вместо хардкода URL используйте переменную:

export DISCORD_WEBHOOK="https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"

curl -H "Content-Type: application/json" \
     -d '{"content": "Сообщение через переменную окружения"}' \
     $DISCORD_WEBHOOK

Добавьте export DISCORD_WEBHOOK=... в ~/.bashrc или ~/.zshrc для постоянного использования.

Отправка Embed-сообщения

Embed позволяют создавать красиво оформленные сообщения:

curl -H "Content-Type: application/json" \
     -d '{
       "embeds": [{
         "title": "Статус сервера",
         "description": "Все системы работают нормально",
         "color": 5763719,
         "fields": [
           {
             "name": "CPU",
             "value": "23%",
             "inline": true
           },
           {
             "name": "RAM",
             "value": "4.2 ГБ / 16 ГБ",
             "inline": true
           }
         ],
         "footer": {
           "text": "Monitoring Bot"
         },
         "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"'"
       }]
     }' \
     $DISCORD_WEBHOOK

Обратите внимание на $(date -u +%Y-%m-%dT%H:%M:%S.000Z) — это вставляет текущее время в формате ISO 8601.

Кастомное имя и аватар

Переопределите имя и аватар webhook:

curl -H "Content-Type: application/json" \
     -d '{
       "content": "Деплой завершён успешно!",
       "username": "Deploy Bot",
       "avatar_url": "https://example.com/deploy-avatar.png"
     }' \
     $DISCORD_WEBHOOK

Это полезно, когда один webhook используется для разных типов уведомлений.

Отправка файлов

Для отправки файлов используйте multipart/form-data:

curl -F "payload_json={\"content\": \"Вот лог-файл:\"}" \
     -F "file=@/path/to/server.log" \
     $DISCORD_WEBHOOK

Параметр -F автоматически устанавливает Content-Type: multipart/form-data. Символ @ перед путём указывает, что это файл.

Отправка нескольких файлов

curl -F "payload_json={\"content\": \"Логи и конфиг:\"}" \
     -F "file1=@/var/log/app.log" \
     -F "file2=@/etc/app/config.yml" \
     $DISCORD_WEBHOOK

Discord поддерживает до 10 файлов в одном сообщении (макс. 25 МБ каждый).

Использование heredoc для читаемости

Для сложных JSON используйте heredoc:

curl -H "Content-Type: application/json" \
     -d @- $DISCORD_WEBHOOK <<EOF
{
  "embeds": [{
    "title": "Отчёт о деплое",
    "description": "Приложение задеплоено в production",
    "color": 5763719,
    "fields": [
      {
        "name": "Версия",
        "value": "v2.1.0",
        "inline": true
      },
      {
        "name": "Окружение",
        "value": "Production",
        "inline": true
      },
      {
        "name": "Время деплоя",
        "value": "$(date '+%Y-%m-%d %H:%M:%S')",
        "inline": false
      }
    ],
    "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"
  }]
}
EOF

Это намного читабельнее, чем одна длинная строка.

Скрипт мониторинга с уведомлениями

Практический пример — скрипт проверки доступности сайта:

#!/bin/bash

WEBHOOK_URL="https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"
TARGET_URL="https://example.com"

# Проверяем доступность
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" $TARGET_URL)

if [ $HTTP_CODE -eq 200 ]; then
  COLOR=5763719  # Зелёный
  STATUS="Онлайн"
else
  COLOR=15548997  # Красный
  STATUS="Недоступен"
fi

# Отправляем уведомление
curl -H "Content-Type: application/json" \
     -d @- $WEBHOOK_URL <<EOF
{
  "embeds": [{
    "title": "Проверка $TARGET_URL",
    "description": "Статус: **$STATUS**",
    "color": $COLOR,
    "fields": [
      {
        "name": "HTTP код",
        "value": "$HTTP_CODE",
        "inline": true
      },
      {
        "name": "Время проверки",
        "value": "$(date '+%Y-%m-%d %H:%M:%S')",
        "inline": true
      }
    ],
    "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"
  }]
}
EOF

Сохраните как monitor.sh, сделайте исполняемым (chmod +x monitor.sh) и добавьте в cron:

# Проверка каждые 5 минут
*/5 * * * * /path/to/monitor.sh

Уведомления о завершении долгих команд

Отправляйте уведомление после завершения долгой команды:

# Запускаем долгую команду и отправляем уведомление
npm run build && \
  curl -H "Content-Type: application/json" \
       -d '{"content": "✅ Билд завершён успешно!"}' \
       $DISCORD_WEBHOOK || \
  curl -H "Content-Type: application/json" \
       -d '{"content": "❌ Билд завершился с ошибкой!"}' \
       $DISCORD_WEBHOOK

Или создайте функцию в .bashrc:

notify_discord() {
  local message="$1"
  curl -s -H "Content-Type: application/json" \
       -d "{\"content\": \"$message\"}" \
       $DISCORD_WEBHOOK > /dev/null
}

# Использование
npm run build && notify_discord "✅ Билд готов" || notify_discord "❌ Билд упал"

Отправка вывода команды в Discord

Отправьте результат команды как код-блок:

#!/bin/bash

OUTPUT=$(df -h | head -n 5)

curl -H "Content-Type: application/json" \
     -d @- $DISCORD_WEBHOOK <<EOF
{
  "embeds": [{
    "title": "Использование диска",
    "description": "\`\`\`\n$OUTPUT\n\`\`\`",
    "color": 3447003,
    "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"
  }]
}
EOF

Важно: Экранируйте спецсимволы в JSON. Для сложных данных используйте jq.

Использование jq для безопасного JSON

jq помогает корректно формировать JSON:

#!/bin/bash

MESSAGE="Сообщение с \"кавычками\" и спецсимволами"

curl -H "Content-Type: application/json" \
     -d "$(jq -n --arg msg "$MESSAGE" '{content: $msg}')" \
     $DISCORD_WEBHOOK

Для embed:

curl -H "Content-Type: application/json" \
     -d "$(jq -n \
       --arg title "Заголовок" \
       --arg desc "Описание" \
       --argjson color 5763719 \
       '{embeds: [{title: $title, description: $desc, color: $color}]}')" \
     $DISCORD_WEBHOOK

Обработка ошибок и rate limits

Проверяйте статус ответа:

#!/bin/bash

send_webhook() {
  local message="$1"
  local response=$(curl -s -w "\n%{http_code}" \
                        -H "Content-Type: application/json" \
                        -d "{\"content\": \"$message\"}" \
                        $DISCORD_WEBHOOK)
  
  local http_code=$(echo "$response" | tail -n1)
  
  if [ $http_code -eq 204 ]; then
    echo "Сообщение отправлено успешно"
    return 0
  elif [ $http_code -eq 429 ]; then
    echo "Rate limit превышен. Повторите позже."
    return 1
  else
    echo "Ошибка: HTTP $http_code"
    echo "$response" | head -n -1
    return 1
  fi
}

send_webhook "Тестовое сообщение"

Цветные embed для разных статусов

Создайте функцию для разных типов уведомлений:

#!/bin/bash

send_notification() {
  local type="$1"
  local message="$2"
  
  case $type in
    success)
      color=5763719
      emoji="✅"
      ;;
    error)
      color=15548997
      emoji="❌"
      ;;
    warning)
      color=16776960
      emoji="⚠️"
      ;;
    info)
      color=3447003
      emoji="ℹ️"
      ;;
    *)
      color=9807270
      emoji="📢"
      ;;
  esac
  
  curl -s -H "Content-Type: application/json" \
       -d @- $DISCORD_WEBHOOK <<EOF
{
  "embeds": [{
    "description": "$emoji $message",
    "color": $color,
    "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"
  }]
}
EOF
}

# Использование
send_notification success "Деплой завершён"
send_notification error "Не удалось подключиться к БД"
send_notification warning "Диск заполнен на 85%"
send_notification info "Начинается обновление"

Интеграция с Git hooks

Отправляйте уведомления при коммитах (.git/hooks/post-commit):

#!/bin/bash

WEBHOOK_URL="https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"

COMMIT_MSG=$(git log -1 --pretty=%B)
AUTHOR=$(git log -1 --pretty=%an)
HASH=$(git log -1 --pretty=%h)

curl -H "Content-Type: application/json" \
     -d @- $WEBHOOK_URL <<EOF
{
  "embeds": [{
    "title": "Новый коммит",
    "description": "$COMMIT_MSG",
    "color": 5793266,
    "fields": [
      {
        "name": "Автор",
        "value": "$AUTHOR",
        "inline": true
      },
      {
        "name": "Hash",
        "value": "\`$HASH\`",
        "inline": true
      }
    ],
    "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"
  }]
}
EOF

Сделайте файл исполняемым: chmod +x .git/hooks/post-commit

Лимиты Discord API

  • 5 запросов за 2 секунды на один webhook
  • 30 запросов за 60 секунд на один канал
  • Максимальный размер сообщения: 2000 символов
  • Максимальный размер embed: 6000 символов
  • Максимальный размер файла: 25 МБ

При превышении лимитов Discord вернёт 429 Too Many Requests.

Полезные флаги curl

  • -s — тихий режим (без прогресс-бара)
  • -w "%{http_code}" — вывести HTTP статус
  • -o /dev/null — не выводить тело ответа
  • -X POST — явно указать метод (обычно не нужно с -d)
  • -v — подробный вывод для отладки
  • --retry 3 — автоматический повтор при ошибках

Что дальше

Теперь вы можете отправлять Discord webhook из любого bash-скрипта или командной строки. Это мощный инструмент для автоматизации уведомлений без написания полноценного кода. Для создания опросов и интерактивных кнопок через curl обратитесь к соответствующим руководствам.

Попробуйте визуально в нашем бесплатном конструкторе Discord Webhook — создавайте embed-сообщения с предпросмотром, а затем копируйте JSON для использования в curl-командах.

Помимо кода, discord-webhook.com предлагает визуальный конструктор с такими функциями как отложенные сообщения, поддержка тредов и форумов, опросы и интерактивные кнопки с действиями — всё без написания кода.

Похожие статьи

Попробуйте в нашем инструменте

Открыть конструктор Discord Webhook