Autonnel v0.1.0

Notifications

Per-deployment notification channels — email, Slack, webhook. HMAC signing for webhooks.


The notification system delivers automated messages to your team across three channels: email, Slack, and webhook. It is currently used by the conversion analysis cron job and is designed to support additional event-driven triggers in the future.

Prerequisites

At least one channel must be configured and enabled before notifications are delivered. The notification system is independent of transactional order emails.

Channels

Email

Reuses the existing email queue pipeline. Notifications are sent from the same fromEmail address configured in Settings → Email Provider. You specify one or more recipient addresses in the Notifications settings.

Configure: enable the email channel and enter a comma-separated list of recipient addresses.

Slack

Sends a plain-text message to a Slack channel via an incoming webhook URL.

Configure: enable the Slack channel and paste your Slack incoming webhook URL. Treat the webhook URL as a secret — anyone with it can post to your channel.

Webhook

Posts a JSON payload to any URL via HTTP POST. An optional HMAC-SHA256 secret can be configured. When a secret is set, Autonnel signs the payload body and includes the signature in the request:

X-Webhook-Signature: sha256=<hex-digest>

To verify on your server:

const crypto = require('node:crypto');

function verifySignature(secret, rawBody, signatureHeader) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader)
  );
}

The payload shape:

{
  "purpose": "conversion_analysis",
  "subject": "Conversion analysis — last 2 hours",
  "body": "...",
  "timestamp": "2026-05-11T14:00:00.000Z"
}

HTTP timeout is 10 seconds per attempt. There is no retry on failure; the failure is recorded in the notification log.

Conversion analysis cadence

The conversion analysis cron job runs on a configurable interval (30 minutes to 24 hours, default 2 hours). The interval is set in Settings → Notifications. Each run analyzes recent funnel behavior via the configured LLM and dispatches the summary to all enabled channels.

You can also provide a custom prompt in the settings to prepend to or override the default analysis prompt.

Testing a channel

Each channel has a Test button in Settings → Notifications. Clicking it sends a test event through that channel immediately and records it in the notification log with purpose: "test".

Use the test button after initial configuration to confirm the channel is reachable before the next cron run.

Notification log

Every dispatch attempt — whether from a cron run or a test — is logged with:

FieldDescription
channelemail, slack, or webhook
purposeconversion_analysis or test
recipientEmail address, Slack webhook URL, or target URL
statussent or failed
errorError message if failed

Log rows are retained for 3 days. The notification-log-cleanup cron job removes older rows automatically.

You can view recent logs in Settings → Notifications → Logs.

Permission

The Notifications settings page and its API require the settings.notifications feature permission.

Caveats

  • Webhook URLs must be reachable from your deployment. If your server is behind a firewall or on a private network, external webhook targets may not be reachable.
  • SSRF in self-hosted deployments. Autonnel does not restrict webhook target URLs in the OSS core. On SaaS deployments, webhook URLs pointing to localhost or private IP ranges are blocked. If you are self-hosting and multiple deployments exist, consider adding your own URL allowlist.
  • Slack webhook URLs are credentials. Anyone with the URL can post to your Slack channel. Do not share it publicly or commit it to version control.
  • No retry on failure. A failed webhook or Slack delivery is logged but not retried. If a channel is consistently failing, check the log for error details and verify the URL is correct and reachable.
  • Email channel requires an active email provider. If no email provider is configured in Settings → Email Provider, email notifications fail even if the email channel is enabled.