Guide2 min read

Your first workflow, from webhook to Slack

Build and verify a real workflow in about ten minutes - a webhook trigger that branches on the payload and posts the right message to Slack.

This guide builds the classic first automation: an external system POSTs to a URL, the workflow inspects the payload, and Slack gets a message that matches what happened. You will touch a trigger, a flow-control node, and an action node - the three shapes almost every workflow is made of. The node reference documents all of them.

Create the workflow and add a Webhook trigger

Create a new workflow and drag a Webhook node onto the canvas as its trigger. Open the node: Pipory shows the workflow's unique URL and a per-workflow secret, both with copy buttons. Keep this dialog open - you will need both values to test.

Callers authenticate with the secret either in an x-webhook-secret header or a ?secret= query parameter. A wrong or missing secret gets a 401 and no run is created.

Whatever JSON body the caller POSTs becomes available in every downstream node as {{webhook.your_field}}.

Branch on the payload

Add a Branch node after the trigger. Give it a condition such as {{webhook.status}} equals paid. The node exposes two outputs, true and false, and the run only walks the side the condition selects - nodes on the untaken side report a skipped state on the canvas rather than running.

Post to Slack

Add a Slack node to each branch output. The Slack node takes an incoming webhook URL from your Slack workspace directly in its config, plus a message template:

Payment received: {{webhook.customer}} paid {{webhook.amount}}

Put a success message on the true side and a fallback like an alert on the false side.

Fire it and watch it run

Send a test request with the values from the trigger dialog:

curl -X POST 'https://your-pipory-host/api/webhooks/wf/WORKFLOW_ID' \
  -H 'x-webhook-secret: YOUR_SECRET' \
  -H 'Content-Type: application/json' \
  -d '{"status": "paid", "customer": "Ada", "amount": "$49"}'

Switch to the canvas while the request is in flight: the webhook node lights up, the branch resolves, one Slack node runs and the other reports skipped - all live. Open the execution afterward to see each node's exact input, output, and duration.

Where to go next

  • Flip the payload's status to anything else and confirm the false branch fires instead.
  • Add a trigger filter so runs only spawn for the events you care about.
  • Follow the synchronous-response guide to send a reply back to the caller instead of just returning 200.
  • Put the run on a clock instead of a webhook with the daily report guide.
Always on

Let your automations run the busywork

The canvas, the execution engine, and every node - no per-execution meter, free while in early access.

Frequently asked questions

Every workflow webhook gets a per-workflow secret. Callers pass it in an x-webhook-secret header or a ?secret= query parameter; a wrong or missing secret gets a 401 and no run is created.

Written by

Pipory Team

Product + engineering

Notes from the team building Pipory - workflow design, automation economics, and putting AI to work inside automations.

View all articles by Pipory

More guides