feat: add Slack target type for incoming webhook notifications
All checks were successful
check / check (push) Successful in 2m2s
All checks were successful
check / check (push) Successful in 2m2s
Add a new 'slack' target type that sends webhook events as formatted messages to any Slack-compatible incoming webhook URL (Slack, Mattermost, and other compatible services). Messages include event metadata (method, content type, timestamp, body size) and the payload pretty-printed in a code block. JSON payloads are automatically formatted with indentation; non-JSON payloads are shown as raw text. Large payloads are truncated at 3500 chars. Changes: - Add TargetTypeSlack constant to model_target.go - Add SlackTargetConfig struct and deliverSlack method to delivery engine - Add FormatSlackMessage (exported) for building Slack message text - Route slack targets in processDelivery switch - Handle slack type in HandleTargetCreate with webhook_url config - Add slack option to source_detail.html target creation form - Add comprehensive tests (config parsing, message formatting, delivery success/failure, routing) - Update README with slack target documentation
This commit is contained in:
16
README.md
16
README.md
@@ -291,7 +291,7 @@ events should be forwarded.
|
||||
| `id` | UUID | Primary key |
|
||||
| `webhook_id` | UUID | Foreign key → Webhook |
|
||||
| `name` | string | Human-readable name |
|
||||
| `type` | TargetType | One of: `http`, `database`, `log` |
|
||||
| `type` | TargetType | One of: `http`, `slack`, `database`, `log` |
|
||||
| `active` | boolean | Whether deliveries are enabled (default: true) |
|
||||
| `config` | JSON text | Type-specific configuration |
|
||||
| `max_retries` | integer | Maximum retry attempts for HTTP targets (0 = fire-and-forget, >0 = retries with backoff) |
|
||||
@@ -463,6 +463,16 @@ target simply marks the delivery as immediately successful. The
|
||||
per-webhook DB IS the dedicated event database — that's the whole point
|
||||
of the database target type.
|
||||
|
||||
The **Slack target type** sends webhook events as formatted messages to
|
||||
any Slack-compatible incoming webhook URL (works with Slack, Mattermost,
|
||||
and other compatible services). Each message includes event metadata
|
||||
(HTTP method, content type, timestamp, body size) and the payload
|
||||
pretty-printed in a code block. JSON payloads are automatically
|
||||
formatted with indentation for readability; non-JSON payloads are shown
|
||||
as raw text. Large payloads are truncated to keep messages reasonable.
|
||||
Config stores `webhook_url` — the Slack/Mattermost incoming webhook
|
||||
endpoint.
|
||||
|
||||
The database uses the
|
||||
[modernc.org/sqlite](https://pkg.go.dev/modernc.org/sqlite) driver at
|
||||
runtime, though CGO is required at build time due to the transitive
|
||||
@@ -601,7 +611,7 @@ fine — startup recovery rescans the database anyway).
|
||||
|
||||
**Scope:** Circuit breakers only apply to **HTTP targets with
|
||||
`max_retries` > 0**. Fire-and-forget HTTP targets (`max_retries` == 0),
|
||||
database targets (local operations), and log targets (stdout) do not use
|
||||
Slack targets, database targets (local operations), and log targets (stdout) do not use
|
||||
circuit breakers.
|
||||
|
||||
When a circuit is open and a new delivery arrives, the engine marks the
|
||||
@@ -860,6 +870,8 @@ linted, tested, and compiled.
|
||||
retries with exponential backoff when max_retries>0)
|
||||
- [x] Implement database target type (store events in per-webhook DB)
|
||||
- [x] Implement log target type (console output)
|
||||
- [x] Implement Slack target type (Slack/Mattermost incoming webhook
|
||||
notifications with pretty-printed payloads)
|
||||
- [x] Webhook management pages (list, create, edit, delete)
|
||||
- [x] Webhook request log viewer with pagination
|
||||
- [x] Entrypoint and target management UI
|
||||
|
||||
Reference in New Issue
Block a user