Discord Webhook через curl: примеры команд для терминала
Отправка сообщений в Discord через curl из командной строки. Простые сообщения, embed, файлы, переменные окружения и автоматизация скриптов.
Зачем использовать curl для Discord Webhook?
curl — универсальный инструмент командной строки для HTTP-запросов, доступный на всех платформах. Использование curl для Discord webhook идеально подходит для:
- Быстрого тестирования — проверка webhook без написания кода
- Bash-скриптов — автоматизация уведомлений в shell-скриптах
- CI/CD пайплайнов — отправка статусов билдов из Jenkins, GitLab CI и других
- Cron-задач — периодические уведомления с сервера
- Мониторинга — алерты из скриптов мониторинга
Всё, что нужно — URL вебхука и одна команда curl.
Создание Webhook в Discord
- Откройте настройки канала Discord (шестерёнка рядом с названием)
- Перейдите в Интеграции → Вебхуки
- Нажмите Новый вебхук
- Задайте имя и скопируйте 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 с помощью Python — Альтернатива curl для автоматизации на Python
- Отправка Discord Webhook из JavaScript и Node.js — Отправка webhook из JavaScript-приложений
- Отправка уведомлений в Discord из GitHub Actions — Использование curl в CI/CD пайплайнах
- Конструктор опросов Discord Webhook — Создание опросов через curl и визуальный конструктор
- Отложенные сообщения Discord Webhook — Планирование отправки сообщений по расписанию
Попробуйте в нашем инструменте
Открыть конструктор Discord Webhook