Skip to main content
SVDY Logo
Developer guide
Available now

Get your team's alerts in Slack

Late clock-ins, leave requests, process approvals show up in your Slack channel. Your team stops checking three apps every morning. One channel, one source of truth.

Why your team will thank you

HR managers stop checking three apps every morning. Late clock-ins show up the moment they happen — not in tomorrow's email digest. Leave requests post in your team channel where everyone sees the backlog. Process approvals route to the right channel automatically. One-time setup; runs forever.

No IT ticket

Your channel admin clicks Connect, picks the channel, and it's done. No tenant admin approval, no 30-day procurement loop.

Clean messages

Each alert is a formatted Slack message with a deep link back to the request — your team clicks once to act on it.

Mute what you want

Don't care about shift assignments? Toggle them off without losing late clock-in alerts. Per-alert control on Pro tier.

Locked-down secrets

Slack tokens encrypted at rest. Even SVDY support staff can't read them back after install.

Install in 30 seconds

1

Open /admin/integrations in your QuTime / PureOA tenant.

2

Click the Slack card → Connect.

3

Slack opens its authorize page; pick the channel you want notifications in.

4

Slack returns to svdy; you'll see a green "Connected" chip and a per-event toggle list.

5

(Optional) Click Send test to verify the integration with a live message.

Plan tier required: Starter or higher. Free-tier orgs get a 402 with a license_required code on Connect.


Alerts you can turn on

7 alert types — late clock-ins, leave requests, process approvals. Each Slack message has a one-line summary and an "Open request" button so a manager can act in one click. All 7 toggle-able so your channel doesn't turn into a noise machine.

Late clock-in

Source: attendance

clock_in_late
Default ON

Pro: mute

🌴

Leave request submitted

Source: leaves

leave_request_submitted
Default ON

Pro: mute

Leave approved

Source: leaves

leave_request_approved
Default ON

Pro: mute

Leave rejected

Source: leaves

leave_request_rejected
Default ON

Pro: mute

📋

Process request submitted

Source: process

process_request_submitted
Default ON

Pro: mute

🔄

Process status changed

Source: process

process_request_status_changed
Default ON

Pro: mute

📅

Shift assigned

Source: attendance

shift_assigned
Default OFF

Pro: mute

Professional+

Per-event mute

On Professional and Enterprise plans, the connected dialog shows toggles for each of the 7 events. Mute the noisy ones (e.g. shift_assigned on high-churn rosters) without disconnecting the integration. Lower tiers see all seven events fire by default — no UI gate teases features that aren't enabled.

PATCH /v1/integrations/connections/slack/event-subscriptions

{
  "event_subscriptions": {
    "clock_in_late": false,
    "shift_assigned": true
  }
}

Partial PATCH — keys omitted from the body keep their existing value. Unknown event keys silently dropped (defense against client typos).


Block Kit message format

Each event renders as four Block Kit blocks: emoji + title header, mrkdwn section body, optional actions button (when a deep-link is available), and a small grey context footer with the event key and timestamp.

{
  "text": "⏰ Alice late by 12 min",
  "blocks": [
    { "type": "header",
      "text": { "type": "plain_text", "text": "⏰ Alice late by 12 min", "emoji": true } },
    { "type": "section",
      "text": { "type": "mrkdwn", "text": "Clocked in at 09:12 · scheduled 09:00 · Front Office" } },
    { "type": "actions",
      "elements": [
        { "type": "button", "style": "primary",
          "text": { "type": "plain_text", "text": "Open in svdy" },
          "url": "https://qutime.com/admin/attendance/entries/te_..." }
      ] },
    { "type": "context",
      "elements": [
        { "type": "mrkdwn",
          "text": "`clock_in_late` · 2026-05-24 14:00 UTC" }
      ] }
  ]
}

Troubleshooting

On install failure svdy redirects back to /admin/integrations?integration_error=<code>. Common codes:

license_required

Org plan tier is below Starter (Slack) or Professional (Teams / WeCom).

Upgrade in /admin/billing or contact sales.

state_expired_or_invalid

OAuth state token expired (5 min TTL) or was forged.

Click Connect Slack again from /admin/integrations.

provider_mismatch

OAuth state was minted for a different provider than the URL says.

Almost certainly an attacker — refuse and re-install fresh.

code_exchange_failed

Slack rejected the authorization code.

Disconnect + Connect again. If persistent, contact support@svdy.com.

provider_error:access_denied

Admin clicked "Cancel" in Slack's authorize dialog.

Click Connect Slack again and approve.


Other IM providers

Slack uses OAuth because Slack's API exposes an incoming-webhook scope that returns a channel-bound URL. Microsoft and Tencent don't expose an equivalent — both use a webhook-paste model where you create a connector / bot inside the platform and paste its URL into svdy.

Microsoft Teams

Professional+

Use a Power Automate Workflow with an HTTP trigger — Microsoft deprecated Office 365 Connectors on 2025-12-31. Adaptive Card v1.5 payload.

Accepted webhook URL hosts: *.webhook.office.com, *.logic.azure.com, *.azurewebsites.net.

WeCom (企业微信)

Professional+

Create a group robot inside WeCom (群机器人) and copy its webhook URL. Markdown payload (4096-byte cap).

Accepted host: qyapi.weixin.qq.com. Both HTTP-status non-2xx and non-zero errcode are treated as failure.

Ready to connect Slack?

Open the integrations page in your tenant and click Connect — 30 seconds to a working install. Pricing details a click away if you want to compare tiers first.