Integrations
Integrations: Slack, Discord, webhooks (Pro)
Pro lets you push every new comment + approval to Slack, Discord, or any HTTP endpoint (Zapier / Make / n8n / custom).
Slack
Reviso sends Slack notifications via Workflow Builder. Slack’s older “Incoming Webhooks” app still works today but Slack has flagged it for eventual removal, so we’ve standardised on Workflow Builder, it’s where Slack is putting all its new tooling and it gives you a lot more control over what the message looks like.
This setup has two parts: building a workflow in Slack, then pasting its URL into Reviso. Plan on about 5 minutes.
Step 1: create the workflow in Slack
- In Slack, open Tools → Workflow Builder (top-left workspace menu → Tools & settings → Workflow Builder).
- Click New Workflow → Build Workflow.
- For the trigger, choose From a webhook.
- Click Set up variables, then add the following six variables. Names must match exactly, and all of them are Data type: text: Variable name Data type
summaryTexteventTextauthorTextbodyTextpage_titleTextpage_urlText
Important: all six must exist. Slack rejects the whole webhook with a 400 error if Reviso sends a variable the trigger doesn’t know about, there’s no partial delivery.
- Click Done to save the trigger. Slack shows you a Web request URL like
https://hooks.slack.com/triggers/T.../.... Copy it. - Add at least one step. The simplest is Messages → Send a message to a channel:
- Send this message to: pick the channel.
- Add a message: insert variables from the right-hand panel. A good starting point is just
{{summary}}, that gives you the same one-line message Reviso would have sent the old way. For richer formatting, mix and match the other variables, e.g. 💬 New comment from{{author}}on{{page_title}}{{body}}{{page_url}}
- Click Publish.
Step 2: paste the URL into Reviso
- WP-admin → Reviso → Settings → Integrations → Slack Workflow / Discord webhook URL → paste the trigger URL, save.
- Pick which events trigger a message, comments, replies, approvals.
- Click Send test. The message should land in the channel within a couple of seconds. If you get an error like “Unsupported Slack URL”, the URL you pasted is the legacy
/services/…shape, go back to Workflow Builder and copy the trigger URL instead (it contains/triggers/).
You can include or exclude reviewer email addresses in the payload (off by default for privacy). Slack/Discord messages never include the email regardless, the toggle only affects the generic webhook payload.
What Reviso sends
For every event, Reviso POSTs a JSON body with exactly the six variables above, all as strings. summary is the same human-readable line we’d send via the old method (💬 New comment from Sarah on "About": The header feels heavy on mobile.). The other fields are the raw pieces so you can format them yourself in the workflow:
summary, pre-formatted one-liner. Use this if you just want the message to “look like Slack”.event, the event name, for examplecomment.created,comment.replied,comment.resolved,comment.assigned,page.approved,review.created,review.closed,test.ping. Useful for branching in the workflow (e.g. route approvals to a different channel).author, reviewer name.body, the comment text, truncated to ~25 words.page_title, title of the page the comment was left on.page_url, direct link to that page.
Routing different events to different channels
Workflow Builder supports conditional steps. After the trigger, add a Branch (if/else) step and switch on the event variable, e.g. if event equals page.approved, send to #client-approvals; else send to #design-feedback. You only need one Reviso webhook URL for this; the branching happens entirely inside Slack.
Discord
Discord’s webhooks are Slack-compatible. In Discord: Channel settings → Integrations → Webhooks → Create webhook → copy URL → paste into Reviso’s Slack field. Same flow.
Generic webhook (Zapier / Make / n8n / your own)
For anything Slack-shaped:
- Settings → Integrations → Generic webhook URL → paste the destination.
- Optional: add a custom header (e.g.
X-Auth-Token: …) if your endpoint requires auth. - Save → test.
Payload format (JSON):
{
"event": "comment.created",
"site": "https://example.com",
"review_id": 42,
"review_name": "Acme Homepage R2",
"page_id": 17,
"page_title": "About",
"page_url": "https://example.com/about/",
"comment_id": 91,
"comment_body": "The header feels heavy on mobile.",
"comment_url": "https://example.com/reviso-review/a1b2.../item/17/?reviso_comment=91",
"author_name": "Sarah",
"author_email": "sarah@client.com",
"timestamp": "2026-05-25T14:03:00Z"
}
Events emitted:
comment.created, a new top-level comment. Full comment fields (incl.comment_id).comment.replied, a reply on a thread. Same comment fields;comment_idis the reply.comment.resolved, a comment marked resolved. Comment fields plusstatus.comment.assigned, a comment assigned to a team member (Pro). Comment fields plusassignee_name/assignee_email.page.approved, a client approved a page. Carriespage_id,page_title,page_urland the approver’sauthor_name(andauthor_emailwhen included).review.created/review.closed, a review was opened or closed. Carriesreview_id,review_name,review_url,scope_type,status(no page/comment fields).comment.updated, someone edited the text of their own comment. Comment fields plusprevious_body, the text it replaced.comment.deleted, a comment was deleted along with its replies. The payload is the comment as it last existed, so you can match it to your own copy.comment.status_changed, any status change, including a comment being re-opened. Comment fields plusprevious_status.comment.reaction.added/comment.reaction.removed, an emoji reaction went on or came off. Carriesreaction(the key, for examplethumbs_up) andreaction_by.comment.screenshot_attached, a screenshot finished uploading and is now on the comment. Carriesscreenshot_url.
test.ping is also sent when you use the Send test button. Each event has its own on/off checkbox in Reviso → Integrations, so you only receive the ones you turn on. The six events added in 1.6.2 are off until you switch them on.
Two things to know before you build against these
comment.resolved and comment.status_changed overlap on purpose. comment.resolved behaves exactly as it always has, so nothing you have already built changes. comment.status_changed is the one to use if you also care about “in progress”, or about a comment being re-opened. Subscribe to one or the other, not both, or you will process a resolve twice.
A screenshot is not there when the comment arrives. It is captured, uploaded and attached in separate requests after the comment itself is saved, so comment.created often carries an empty screenshot_url. If your automation needs the image, create the task on comment.created and attach the picture when comment.screenshot_attached arrives. Not every comment has a screenshot, so do not wait for one before acting.
Zapier-style use cases
- New comment → ClickUp task
- New approval → Trello card move
- New comment with priority “high” → SMS via Twilio
- New review created → Slack channel created
- All events → Notion database row
Zapier and Make both have a generic “Webhook by Zapier / Webhook” trigger, paste Reviso’s webhook URL as the source and you have full access to the payload above.
Privacy + payload control
By default the webhook payload includes:
- Comment body (the actual feedback text)
- Reviewer name
- Page URL
Excluded by default:
- Reviewer email address (you can opt to include via the “Include reviewer email” checkbox)
- IP addresses
- User-agent
You control the destination. Reviso has no relationship with the third-party service you’re pushing to, Slack/Discord/Zapier/etc are your subprocessors, not ours.
Rate limits
If a reviewer hammers comments, Reviso throttles webhook delivery to avoid getting your Slack workspace muted. Default: max 30 messages / minute / webhook. Configurable in Settings → Integrations → Advanced.
Comment event fields
Comment events (every comment.* event) carry the comment’s visibility (everyone, team, or private), its assignee_id and assignee_name, any file attachments and the screenshot_url, so an integration can sync them without a second request. Notes left on a listing or archive page also include a context key identifying that surface (for example tax:category:8) in place of a single page id.
They also carry comment_url, a link that opens that one comment. It routes through the review, so whoever you send it to does not need an existing session: they land on the page with the comment open and highlighted. Use it as the link back on a task you create from a webhook. It is empty for a note left on an archive or search results page, which has no single page to link to.
You can copy the same link by hand: open a comment’s … menu and choose Copy link. Handy for asking a client to clarify one specific piece of feedback.