Notifications
Lantfly tells you when something needs your attention: a run failed, a monitor fired, credit is running low, a listening alert went off. Notifications go to the bell in the top bar, by email, and to the alert channels your account sets up.
The bell
The bell shows unread notifications and updates every minute. Click one to open what it is about. In an organization, each member has their own read state.
Choose what you get
Open Settings → Notifications. The table lists every notification type, grouped as Runs, Automation, Billing, Actor development, Team, Listening and Support, with a switch for in-app and for email. Email goes only to verified addresses.
Among the types:
| Type | When | Default |
|---|---|---|
| Run failed | A run failed or timed out | In-app |
| Monitor alert | A monitoring rule fired | In-app and email |
| Schedule failed | A schedule could not start its run | In-app and email |
| Webhook failing | A webhook keeps failing | In-app |
| Integration failing | An export such as Google Sheets gave up | In-app and email |
| Low credit / out of credit | Usage is nearly or fully used up (once per billing period) | In-app and email |
| Unusual usage | Spending over the last 24 hours is far above your usual daily spend | In-app and email (owner and admins) |
| Payment failed, subscription ending, payments, refunds, invoices | Billing events | In-app and email |
| Listening alert | A listening alert rule fired | In-app and email |
| Team invitation accepted | Someone joined your team | In-app |
| Store review | A review of your actor, or a reply to yours | In-app |
| Monthly developer summary | Runs, accounts, error rate and new reviews of your public actors last month | |
| Support reply | Support answered your ticket | In-app and email |
| Alert channel broken | A channel's token could not be renewed | In-app and email (owner and admins) |
Billing notifications go only to the owner and admins of an account.
Two cards below the table:
- Monitoring alerts lists the monitoring rules of the account and links to each one.
- Schedules that fail to start lets you turn the failure notification on or off per schedule.
Security emails (a sign-in from a new browser, a new API token, two-factor changes and similar) are always sent and cannot be turned off.
Alert channels
Owners and admins can send notifications to chat apps and other places in the Alert channels card. Every notification of the chosen Types is posted there, for the whole account (none selected means every type).
| Kind | What you enter |
|---|---|
| Slack | An incoming webhook URL (https://hooks.slack.com/services/…) |
| Discord | A channel webhook URL (https://discord.com/api/webhooks/…) |
| Webhook (JSON) | Any URL. It receives the notification as signed JSON (see below). |
| Telegram | Your Bot token from @BotFather and the Chat id (add the bot to the group first). For a group with topics, a Topic (thread) id. |
| Zalo OA | Your Official Account OA access token and a Recipient id: a follower (user id) or a group of the OA |
| Zalo ZNS | Phone numbers (1 to 10 Vietnamese numbers) and an approved ZNS template |
| Email list | Up to 20 addresses, comma-separated. Each notification is emailed to all of them. |
To add one:
- Open Settings → Notifications and, in Alert channels, click Add channel.
- Pick the Kind, enter a Name and the fields above, and pick the Types to send.
- Click Add, then send a test from the channel to check it. For Telegram, the test also checks the bot token.
Tokens and addresses are stored encrypted. Tokens are never shown again; only the end of an address is shown. Use Replace to paste a new token. Addresses on private networks are refused.
Signed JSON webhook
A Webhook (JSON) channel receives each notification as JSON (type, title, body, url, data). Its signing
secret is shown once when you create the channel; Rotate gives a new one and the old one stops working at once.
Each request carries:
| Header | Value |
|---|---|
X-Lantfly-Timestamp | Unix time of the request |
X-Lantfly-Signature | sha256= and the HMAC-SHA256 of timestamp.body with the secret |
Recompute the signature over the timestamp, a dot and the raw body, compare in constant time, and reject requests more than 5 minutes old. See Webhook signatures.
Zalo OA tokens
Zalo OA access tokens expire after about 25 hours. Turn on Auto-refresh (recommended) and enter the Refresh token, App id and App secret key of your Zalo app: Lantfly renews the token before it expires. If it cannot, the channel shows Needs a new token and owners and admins get a notification; paste a new token with Replace.
Zalo ZNS
ZNS sends an approved Zalo template message to phone numbers. Under Send through, pick:
- My own Official Account: enter your OA access token, App secret key, the ZNS template id and the
Template parameters, one per line as
parameter=source. Sources aretitle,body,url,type,account,date,time,datetime,data.KEYortext:followed by fixed text. - Lantfly's Official Account (daily limit), when it is offered: Pick a Lantfly template. Each phone number must first confirm a 6-digit code sent by Zalo (Send code, then Verify; a code is valid for 10 minutes) before it receives messages, and the number of messages per day is limited.
Each ZNS message is charged by Zalo.
The channel's history lists the last 50 messages tried, with masked phone numbers and their status.
API
| Request | What it does |
|---|---|
GET /api/v3/notifications | Your notifications (unread=1, per_page), with meta.unread_count |
POST /api/v3/notifications/:id/read, POST /api/v3/notifications/read-all | Mark as read |
DELETE /api/v3/notifications/:id | Remove from your bell |
GET / PUT /api/v3/notifications/settings | Read or save [{ type, in_app, email }] |
GET / POST /api/v3/notifications/channels | List or add alert channels (owner and admins) |
PATCH / DELETE /api/v3/notifications/channels/:id | Change the name and types, or remove |
POST /api/v3/notifications/channels/:id/test | Send a sample now |
POST /api/v3/notifications/channels/:id/rotate-secret | New secret for a JSON webhook; for Telegram and Zalo, { "secret": "…" } replaces the token |