Automation Action Types
Every action a rule can take, including chat messages and signed webhooks, and how to verify a webhook came from Plenix.
The actions
| Action | What it does |
|---|---|
| Send Notification | An in-app notification to chosen users. Date-based rules without a recipient notify the record's owner, or your admins |
| Create Ticket | Raises a new ticket with the subject, description and priority you set |
| Update Ticket | Changes the status, priority or assignee of the triggering ticket |
| Update Company | Sets a field on the linked client company |
| Send Email | Sends an email to any address. Subject and body can include the record's details |
| Create Work Order | Sends out a field-service job |
| Run RMM Script | Runs a script from your library on the client's devices |
| Post to Slack / Teams | Posts a message to Slack, Microsoft Teams, Discord or Google Chat, optionally with a link to the record |
| Send Webhook | POSTs a JSON payload to your own HTTPS endpoint, signed so you can verify it |
Post to Slack / Teams
Connect your chat tool first under Settings β Integrations. In the action, write the message, choose the provider (Slack is the default) and whether to include a link back to the record.
Send Webhook
Enter an HTTPS URL and, optionally, a JSON payload; the event details are sent if you leave it empty. The rule won't save if the payload isn't valid JSON.
For safety, webhooks only go to public HTTPS addresses β never to internal or private network addresses β and redirects aren't followed.
Verifying a webhook
Every delivery carries an X-Plenix-Signature header: sha256= followed by the HMAC-SHA256 of the raw request body, keyed with your workspace's signing secret.
- On Settings β Automation Rules, open Webhook signing secret (admins only) and copy the secret.
- In your receiver, compute the HMAC-SHA256 of the raw body with that secret and compare it with the header using a constant-time comparison. Reject the request if they differ.
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-plenix-signature']));
Where to go next
Was this article helpful?