CLI-клиент
Notifly-CLI — это маленькая консольная утилита notifly для отправки
сообщений в ваш канал прямо из терминала, cron-задач и shell-скриптов.
Она хранит токен и адрес сервера в конфиге, умеет читать сообщение из
stdin и отслеживать изменение вывода произвольной команды (watch).
Утилита не обязательна для отправки уведомлений — то же самое можно
сделать через curl (см. REST API). CLI просто избавляет
от повторения токена и URL в каждой команде.
Установка
Заголовок раздела «Установка»Готовый бинарник
Заголовок раздела «Готовый бинарник»Скачайте бинарник под вашу ОС и сделайте его исполняемым:
# Linux x86-64curl -Lo notifly https://github.com/notifly/cli/releases/latest/download/notifly-cli-linux-amd64chmod +x notiflyПроверьте, что всё работает:
$ notifly versionVersion: 2.2.0Commit: 95cc125e39f805a1369b0c746c8bf3af15797a57BuildDate: 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.
Настройка: notifly init
Заголовок раздела «Настройка: notifly init»Самый простой способ начать — мастер init. Он спросит адрес сервера,
токен и приоритет по умолчанию, проверит соединение и запишет конфиг.
$ notifly initNotifly URL: https://notifly.ruNotifly v2.7.4@2025-09-25-16:27:04
Configure an application token1. Enter an application-token2. Create an application token (with user/pass)Enter 1 or 2: 1Application 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 предложит выбрать путь, а остальные команды ищут конфиг в этих
местах (первый найденный — побеждает):
./cli.json(рядом с текущим каталогом);$XDG_CONFIG_HOME/gotify/cli.json(обычно~/.config/gotify/cli.json);~/.gotify/cli.json;/etc/gotify/cli.json(кроме Windows).
Конфиг вручную
Заголовок раздела «Конфиг вручную»Конфиг — это обычный JSON. Можно создать его руками, не запуская мастер:
{ "token": "A4ZudDRdLT40L5X", "url": "https://notifly.ru", "defaultPriority": 6}| Поле | Описание | Пример |
|---|---|---|
token | App-токен (Client-токен не подойдёт) | A4ZudDRdLT40L5X |
url | Адрес вашего сервера Notifly | https://notifly.ru |
defaultPriority | Приоритет по умолчанию (0, если не задан) | 6 |
Посмотреть, какой конфиг используется сейчас:
$ notifly configUsed Config: /home/user/.gotify/cli.jsonURL: https://notifly.ruDefault Priority: 6Token: A4ZudDRdLT40L5XОтправка сообщений: notifly push
Заголовок раздела «Отправка сообщений: notifly push»Текст сообщения передаётся аргументом или через stdin:
notifly push my messagenotifly push "моё сообщение"echo "моё сообщение" | notifly pushnotifly push < somefileЗаголовок и приоритет:
notifly push -t "Деплой" -p 10 "Прод выкатился"Флаги команды push:
| Флаг | Назначение | По умолчанию |
|---|---|---|
-p, --priority | Приоритет сообщения | из defaultPriority |
-t, --title | Заголовок (если пусто — берётся имя приложения) | имя приложения |
--token | Переопределить App-токен (env: GOTIFY_TOKEN) | из конфига |
--url | Переопределить адрес сервера | из конфига |
-q, --quiet | Ничего не печатать при успехе | выкл. |
--contentType | Content-type сообщения, например text/markdown (см. msgextras) | — |
--clickUrl | URL, открываемый по тапу на уведомление (см. msgextras) | — |
--bigImageUrl | URL картинки, показываемой в уведомлении (см. msgextras) | — |
--disable-unescape-backslash | Не раскрывать \n и \t (оставить как обычный текст) | раскрывает |
Если -p не указан, берётся defaultPriority из конфига; если нет и его —
приоритет 0.
Переопределение токена и URL
Заголовок раздела «Переопределение токена и URL»Не обязательно держать конфиг — можно передать токен и адрес прямо в команде
или через переменную окружения GOTIFY_TOKEN:
notifly push --url https://notifly.ru --token A4ZudDRdLT40L5X "без конфига"
GOTIFY_TOKEN=A4ZudDRdLT40L5X notifly push --url https://notifly.ru "из env"Markdown и переносы строк
Заголовок раздела «Markdown и переносы строк»По умолчанию 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 завершилась с ошибкой"Подробнее про эти поля — на странице Доп. поля сообщений.
Слежение за командой: notifly watch
Заголовок раздела «Слежение за командой: notifly watch»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, long | default |
Режимы --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 и самоподписанные сертификаты
Заголовок раздела «TLS и самоподписанные сертификаты»Если сервер за самоподписанным сертификатом, есть переменные окружения:
# полностью отключить проверку TLS (небезопасно)export NOTIFLY_SKIP_VERIFY_TLS=True
# или указать собственный корневой CA / закреплённый сертификатexport SSL_CERT_FILE=/path/to/cert.pemАльтернатива без CLI: curl
Заголовок раздела «Альтернатива без CLI: curl»Любую отправку из CLI можно повторить обычным curl — это тот же REST API:
curl -X POST "$NOTIFLY_URL/message" \ -H "X-Notifly-Key: A4ZudDRdLT40L5X" \ -F "title=Деплой" \ -F "priority=10" \ -F "message=Прод выкатился"REST API
Заголовок раздела «REST API»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).
Подробности — на страницах Отправка сообщений и
Доп. поля сообщений.