Integrations

May 25, 2026

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

  1. In Slack, open Tools → Workflow Builder (top-left workspace menu → Tools & settingsWorkflow Builder).
  2. Click New Workflow → Build Workflow.
  3. For the trigger, choose From a webhook.
  4. 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 summary Text event Text author Text body Text page_title Text page_url Text

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.

  1. Click Done to save the trigger. Slack shows you a Web request URL like https://hooks.slack.com/triggers/T.../.... Copy it.
  2. 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}}
  1. Click Publish.

Step 2: paste the URL into Reviso

  1. WP-admin → Reviso → Settings → Integrations → Slack Workflow / Discord webhook URL → paste the trigger URL, save.
  2. Pick which events trigger a message, comments, replies, approvals.
  3. 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 example comment.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:

  1. Settings → Integrations → Generic webhook URL → paste the destination.
  2. Optional: add a custom header (e.g. X-Auth-Token: …) if your endpoint requires auth.
  3. 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_id is the reply.
  • comment.resolved, a comment marked resolved. Comment fields plus status.
  • comment.assigned, a comment assigned to a team member (Pro). Comment fields plus assignee_name / assignee_email.
  • page.approved, a client approved a page. Carries page_id, page_title, page_url and the approver’s author_name (and author_email when included).
  • review.created / review.closed, a review was opened or closed. Carries review_id, review_name, review_url, scope_type, status (no page/comment fields).
  • comment.updated, someone edited the text of their own comment. Comment fields plus previous_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 plus previous_status.
  • comment.reaction.added / comment.reaction.removed, an emoji reaction went on or came off. Carries reaction (the key, for example thumbs_up) and reaction_by.
  • comment.screenshot_attached, a screenshot finished uploading and is now on the comment. Carries screenshot_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.

Not using Reviso yet? Install the free plugin or try the live demo.