Getting Started With Flows
Pingerflows let you intercept messages as they arrive and run them through a processing pipeline before they are delivered to subscribers. You can filter, transform, throttle, validate, and reroute events — all without touching your backend code.
What Is a Flow?
A flow is a sequence of nodes attached to a specific channel. When a message arrives on that channel it is passed through each node in order. If all nodes succeed the message (and any broadcasts produced by the flow) is delivered. If any node fails or drops the message, delivery stops.
Incoming message → [Node 1] → [Node 2] → [Node N] → BroadcastCreating a Flow
- Go to Dashboard → Apps → [Your App] → Flows
- Click Add Flow
- Give the flow a name and set the channel it listens on
- Click Create — you are redirected to the flow editor
- Add nodes and configure them
- Click Publish to deploy
One flow per channel. A channel can only have one active flow at a time.
If no flow exists for a channel, messages pass through and are broadcast as-is (passthrough mode).
The Flow Editor
The editor is a visual drag-and-drop interface. Each node appears as a card; nodes execute top-to-bottom.
- Add a node — click the + button between steps
- Configure a node — click the node card to open its settings panel
- Reorder nodes — drag cards up or down
- Delete a node — click the trash icon on the card
- Publish — deploy the current flow; changes are live immediately
Available Nodes
| Node | Purpose |
|---|---|
| Filter | Drop messages that don't match a MongoDB-style query |
| Transform | Reshape data with a JavaScript function |
| Schema Validator | Validate payload shape against a JSON Schema |
| Throttle | Allow only the first message in a time window; drop the rest |
| Debounce | Wait for a quiet period, then process only the last message |
| Delay | Pause execution for a fixed duration |
| Send to Channel | Broadcast the (optionally transformed) message to a channel |
Execution Timeout
Flows have a maximum execution time of 5 seconds. If a flow exceeds this limit the message is dropped and the client receives a timeout error. Keep transforms lightweight and avoid long delays in critical paths.
Example Flows
Chat moderation
- Schema Validator — require
text(string) anduserId(string) - Filter — block messages where
data.textcontains banned words (using$ninor a custom filter) - Transform — add
serverTimestampto the payload - Send to Channel — broadcast to the same channel
Rate-limited notifications
- Throttle — allow one notification per 10 seconds per channel
- Send to Channel — broadcast to
notifications-{{data.userId}}
Typing indicator collapse
- Debounce — 300 ms window
- Send to Channel — broadcast
typing-stoppedevent
Publishing Flows
Click Publish in the flow editor. The flow is compiled, cached, and active immediately. Existing connections receive the new flow on their next message — no reconnection needed.