Введение в плагины Notifly
[!caution] Плагины недоступны в облачной (serverless) версии Notifly.
Yandex Cloud Functions запускают каждый запрос в изолированном окружении и не позволяют динамически загружать
.so-файлы. Плагины работают только в self-hosted-сборке (см. Установку). Для облачной версии рекомендуется использовать вместо плагинов:
- Вебхуки — приём событий от внешних систем;
- Email Inbox — приём писем как уведомлений;
- WebScript — события с фронтенда без бекенда;
- Heartbeat и Активные мониторы — встроенные источники алёртов;
- MCP-сервер — интеграции с AI и сторонними скриптами через готовые инструменты.
[!warning] Плагины в настоящее время поддерживаются только на Linux и MacOS из-за текущего ограничения golang.
Описание
Заголовок раздела «Описание»Эта документация в целом предназначена для разработчиков плагинов. Если вы просто хотели использовать существующий плагин, вам нужно обратиться к документации разработчика плагина.
Notifly предоставляет встроенную функциональность плагинов, построенную поверх go plugin system. Она создана для расширения функциональности Notifly.
Функции
Заголовок раздела «Функции»- Один экземпляр плагина на пользователя
- Регистрация пользовательских обработчиков HTTP
- Отправка сообщений от имени канала
- Система конфигурации на основе YAML в WebUI
- Постоянное хранилище для каждого экземпляра плагина пользователя
- Отображение динамически генерируемых инструкций пользователям
Применение
Заголовок раздела «Применение»- Получение webhook от GitHub, Travis CI и т. д.
- Опрос новых каналов через RSS, Atom или другие источники.
- Расширение функциональности WebUI.
- Доставка уведомлений об сигнализации.
Начало работы
Заголовок раздела «Начало работы»Сначала давайте посмотрим на минимальный пример плагина notifly, вы можете скопировать этот образец кода для загрузки собственного плагина:
package main
import ( "github.com/notifly/plugin-api")
// GetNotiflyPluginInfo — возвращает информацию о плагине notiflyfunc GetNotiflyPluginInfo() plugin.Info { return plugin.Info{ Name: "minimal plugin", ModulePath: "github.com/Notifly/example/minimal", }}
// Plugin — экземпляр плагинаtype Plugin struct{}
// Enable — реализует plugin.Pluginfunc (c *Plugin) Enable() error { return nil}
// Disable — реализует plugin.Pluginfunc (c *Plugin) Disable() error { return nil}
// NewNotiflyPluginInstance — создаёт экземпляр плагина для контекста пользователя.func NewNotiflyPluginInstance(ctx plugin.UserContext) plugin.Plugin { return &Plugin{}}
func main() { panic("this should be built as go plugin")}Эта программа экспортирует две функции: GetNotiflyPluginInfo и NewNotiflyPluginInstance, notifly используются эти для получения метаданных плагина и создания экземпляров плагина для каждого пользователя.
GetNotiflyPluginInfo должна возвращать plugin.Info, содержащую описательную информацию о текущем плагине, все поля опциональны кроме ModulePath (путь модуля этого плагина), который используется для различения разных плагинов.
NewNotiflyPluginInstance вызывается с plugin.UserContext для каждого пользователя при запуске и каждый раз, когда добавляется новый пользователь, плагин должен вернуть экземпляр плагина, который удовлетворяет интерфейсу plugin.Plugin.
Больше функциональностей можно реализовать, реализовав больше интерфейсов в пакете plugin-api.