Перейти к содержимому

CLI-клиент

Notifly-CLI — это маленькая консольная утилита notifly для отправки сообщений в ваш канал прямо из терминала, cron-задач и shell-скриптов. Она хранит токен и адрес сервера в конфиге, умеет читать сообщение из stdin и отслеживать изменение вывода произвольной команды (watch).

Утилита не обязательна для отправки уведомлений — то же самое можно сделать через curl (см. REST API). CLI просто избавляет от повторения токена и URL в каждой команде.

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

Окно терминала
# Linux x86-64
curl -Lo notifly https://github.com/notifly/cli/releases/latest/download/notifly-cli-linux-amd64
chmod +x notifly

Проверьте, что всё работает:

Окно терминала
$ notifly version
Version: 2.2.0
Commit: 95cc125e39f805a1369b0c746c8bf3af15797a57
BuildDate: 2025-09-25-16:27:04

При желании положите бинарник в каталог из $PATH:

Окно терминала
sudo mv notifly /usr/local/bin/notifly

Нужен Go. В каталоге cli/ соберите бинарник напрямую:

Окно терминала
go build -o notifly cli.go

Либо используйте make build — он соберёт сразу набор бинарников под все платформы (Linux/macOS/Windows, amd64/386/arm64/arm) в подкаталог build/.

В составе есть Dockerfile (минимальный Alpine-образ). Соберите образ и запускайте notifly в контейнере, прокинув конфиг:

Окно терминала
docker build -t notifly/cli .
docker run -it -v "$PWD/cli.json:/etc/gotify/cli.json" \
notifly/cli:latest push -p 5 "Тест из Notifly CLI"
notifly init # мастер настройки (запишет конфиг)
notifly version # показать версию (алиас: v)
notifly config # показать текущий конфиг
notifly push # отправить сообщение (алиас: p)
notifly watch # следить за выводом команды и слать изменения
notifly help # помощь по командам (алиас: h)

Помощь по конкретной команде: notifly help push, notifly help watch.

Самый простой способ начать — мастер init. Он спросит адрес сервера, токен и приоритет по умолчанию, проверит соединение и запишет конфиг.

Окно терминала
$ notifly init
Notifly URL: https://notifly.ru
Notifly v2.7.4@2025-09-25-16:27:04
Configure an application token
1. Enter an application-token
2. Create an application token (with user/pass)
Enter 1 or 2: 1
Application Token: A4ZudDRdLT40L5X
Default Priority [0-10]: 6
Written config to: /home/user/.gotify/cli.json

На шаге выбора токена есть два варианта:

  • 1 — ввести готовый App-токен. Возьмите его из админки. Токен должен быть ровно 15 символов; утилита тут же проверит его, отправив тестовое сообщение в канал.
  • 2 — создать App-токен по логину/паролю. Вы вводите логин и пароль (Basic Auth), CLI сам создаёт приложение с указанными именем и описанием и сохраняет полученный токен. Логин и пароль не сохраняются — только итоговый токен.

Приоритет по умолчанию должен быть числом от 0 до 10.

init предложит выбрать путь, а остальные команды ищут конфиг в этих местах (первый найденный — побеждает):

  1. ./cli.json (рядом с текущим каталогом);
  2. $XDG_CONFIG_HOME/gotify/cli.json (обычно ~/.config/gotify/cli.json);
  3. ~/.gotify/cli.json;
  4. /etc/gotify/cli.json (кроме Windows).

Конфиг — это обычный JSON. Можно создать его руками, не запуская мастер:

{
"token": "A4ZudDRdLT40L5X",
"url": "https://notifly.ru",
"defaultPriority": 6
}
ПолеОписаниеПример
tokenApp-токен (Client-токен не подойдёт)A4ZudDRdLT40L5X
urlАдрес вашего сервера Notiflyhttps://notifly.ru
defaultPriorityПриоритет по умолчанию (0, если не задан)6

Посмотреть, какой конфиг используется сейчас:

Окно терминала
$ notifly config
Used Config: /home/user/.gotify/cli.json
URL: https://notifly.ru
Default Priority: 6
Token: A4ZudDRdLT40L5X

Текст сообщения передаётся аргументом или через stdin:

Окно терминала
notifly push my message
notifly push "моё сообщение"
echo "моё сообщение" | notifly push
notifly push < somefile

Заголовок и приоритет:

Окно терминала
notifly push -t "Деплой" -p 10 "Прод выкатился"

Флаги команды push:

ФлагНазначениеПо умолчанию
-p, --priorityПриоритет сообщенияиз defaultPriority
-t, --titleЗаголовок (если пусто — берётся имя приложения)имя приложения
--tokenПереопределить App-токен (env: GOTIFY_TOKEN)из конфига
--urlПереопределить адрес сервераиз конфига
-q, --quietНичего не печатать при успехевыкл.
--contentTypeContent-type сообщения, например text/markdown (см. msgextras)
--clickUrlURL, открываемый по тапу на уведомление (см. msgextras)
--bigImageUrlURL картинки, показываемой в уведомлении (см. msgextras)
--disable-unescape-backslashНе раскрывать \n и \t (оставить как обычный текст)раскрывает

Если -p не указан, берётся defaultPriority из конфига; если нет и его — приоритет 0.

Не обязательно держать конфиг — можно передать токен и адрес прямо в команде или через переменную окружения GOTIFY_TOKEN:

Окно терминала
notifly push --url https://notifly.ru --token A4ZudDRdLT40L5X "без конфига"
GOTIFY_TOKEN=A4ZudDRdLT40L5X notifly push --url https://notifly.ru "из env"

По умолчанию notifly раскрывает \n и \t в реальные перенос строки и табуляцию. Это удобно для многострочных сообщений из одной строки аргумента:

Окно терминала
notifly push -t "Отчёт" "Строка 1\nСтрока 2\tс табом"

Чтобы оставить \n и \t как буквальный текст — добавьте --disable-unescape-backslash.

Markdown включается через --contentType:

Окно терминала
notifly push --contentType text/markdown -t "Релиз" "**v2.0** готов — [changelog](https://notifly.ru)"
Окно терминала
notifly push -t "Сборка упала" \
--clickUrl https://ci.example.com/build/42 \
--bigImageUrl https://ci.example.com/build/42/graph.png \
"Джоба #42 завершилась с ошибкой"

Подробнее про эти поля — на странице Доп. поля сообщений.

watch периодически выполняет заданную команду и, как только её вывод изменился по сравнению с прошлым запуском, отправляет новый вывод в канал. Удобно для самодельного мониторинга «на коленке» без отдельного сервиса.

Окно терминала
notifly watch "curl -s https://api.example.com/status | jq '.state'"

По умолчанию команда запускается каждые 2 секунды через sh -c. Заголовком, если он не задан, становится сама команда.

Флаги команды watch:

ФлагНазначениеПо умолчанию
-n, --intervalИнтервал опроса в секундах (дробное допустимо)2
-p, --priorityПриоритетиз defaultPriority
-x, --execЧем исполнять командуsh -c
-t, --titleЗаголовок (если пусто — текст команды)команда
--tokenПереопределить App-токен (env: GOTIFY_TOKEN)из конфига
--urlПереопределить адрес сервераиз конфига
-o, --outputПодробность тела сообщения: short, default, longdefault

Режимы --output:

  • short — только новый вывод, без обёрток;
  • default — новый вывод в блоке == BEGIN NEW OUTPUT == … == END NEW OUTPUT ==;
  • long — и старый, и новый вывод (полный diff в блоках OLD/NEW).

Пример: следить каждые 30 секунд за числом контейнеров и слать длинный diff:

Окно терминала
notifly watch -n 30 -o long -t "docker ps" "docker ps -q | wc -l"

Если сервер за самоподписанным сертификатом, есть переменные окружения:

Окно терминала
# полностью отключить проверку TLS (небезопасно)
export NOTIFLY_SKIP_VERIFY_TLS=True
# или указать собственный корневой CA / закреплённый сертификат
export SSL_CERT_FILE=/path/to/cert.pem

Любую отправку из CLI можно повторить обычным curl — это тот же REST API:

Окно терминала
curl -X POST "$NOTIFLY_URL/message" \
-H "X-Notifly-Key: A4ZudDRdLT40L5X" \
-F "title=Деплой" \
-F "priority=10" \
-F "message=Прод выкатился"

CLI работает поверх того же публичного API, что и всё остальное. Авторизация — заголовком X-Notifly-Key с App-токеном (A…).

МетодПутьНазначениеТокен
POST/messageОтправить сообщение в каналApp-токен
GET/versionВерсия сервера (используется мастером init)

Тело POST /message (JSON или form-data): message (обязателен), title, priority (0–10), extras (например client::display.contentType, client::notification.click.url, client::notification.bigImageUrl). Подробности — на страницах Отправка сообщений и Доп. поля сообщений.