Ga naar hoofdinhoud
API Documentatie

Webhooks & Integraties

Bouw bots, automatiseringen en integraties met mssgs webhooks en triggers

Aan de slag

Met mssgs webhooks kun je berichten naar kanalen sturen en interactieve bots bouwen die reageren op commando's.

1

Maak een webhook aan

Ga naar Serverinstellingen > Integraties en maak een nieuwe webhook of trigger aan.

2

Kopieer de URL

Kopieer de webhook-URL of trigger-GUID voor je integratie.

3

Begin met bouwen

Stuur JSON payloads naar de webhook-URL om berichten te plaatsen.

Twee manieren om te integreren

Incoming Webhooks — Stuur berichten naar mssgs vanuit externe tools (CI/CD, monitoring, etc.)
Webhook Triggers — Bouw interactieve bots die reageren op commando's en knopkliks.

Incoming Webhooks

Stuur berichten naar een kanaal via een webhook-URL. Ideaal voor CI/CD-notificaties, monitoring-alerts en andere automatiseringen.

POST /server/:server_guid/webhook/:channel_guid

Request structuur

Stuur een POST request met je bericht payload als JSON body. Voeg je server management token toe in het token veld.

Request Body
{
  "token": "server_management_token",
  "content": "Hello from my integration!",
  "color": "green",
  "title": "My Bot"
}

Simple Format

De eenvoudigste manier om een bericht te versturen.

Simple Message
{
  "content": "Server backup completed at 03:00 UTC",
  "color": "green",
  "title": "Backup Bot"
}
Field Type Beschrijving
content string Berichttekst required
color string blue, green, orange, red, yellow, purple
title string Titel boven het bericht
title_url string Maakt de titel een klikbare link
sub_title string Kleinere tekst onder de titel
avatar_url string Avatar afbeeldings-URL

Full Format (message_container)

Voor meer controle over het bericht, gebruik het volledige message_container object.

Full Message Container
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "title": "Order Update",
    "description": "Your order #12345 has been shipped!",
    "title_url": "https://example.com/orders/12345",
    "sub_title": "Estimated delivery: Tomorrow",
    "bot_name": "Order Bot",
    "fields": [
      { "field": "Status", "value": "Shipped" },
      { "field": "Tracking", "value": "ABC123456" }
    ]
  },
  "actions": [...]
}
Field Type Beschrijving
type string embed_message (standaard) of system_message
color string Accentkleur van het bericht
title string Titel van het bericht
description string Hoofdtekst required
title_url string Link achter de titel
sub_title string Ondertiteltekst
bot_name string Aangepaste botnaam
avatar_url string Avatar afbeelding
fields array Sleutel-waarde velden

Fields

Voeg gestructureerde sleutel-waarde data toe aan je bericht.

Fields Array
{
  "fields": [
    { "field": "Status", "value": "Completed" },
    { "field": "Duration", "value": "2m 34s" },
    { "field": "Environment", "value": "Production" }
  ]
}

Webhook Triggers

Met webhook triggers kun je externe services koppelen aan je server. Wanneer een gebruiker een bijpassend commando typt (bijv. /help) of op een action button klikt, stuurt de backend een POST naar je webhook-URL. Je webhook antwoordt met JSON om een bericht terug te sturen naar het kanaal.

1

Gebruiker typt een commando

Een gebruiker stuurt een bericht dat begint met het prefix van je trigger, bijv. /help

2

mssgs roept je webhook aan

De backend stuurt een POST-request naar je geconfigureerde webhook-URL met de berichtgegevens.

3

Je antwoordt met JSON

Je server retourneert een JSON-response met de berichtinhoud, embeds en actions.

4

Bericht verschijnt in het kanaal

mssgs toont de response als een bericht in het kanaal.

Request die je webhook ontvangt

Wanneer een gebruiker een bericht stuurt dat begint met het trigger_match prefix van je trigger:

POST {your_webhook_url}
Command Match Request
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/help",
  "message": {
    "id": "d01ZZdef6-xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "content": "/help how do I create a channel?",
    "member_guid": "member-guid-here",
    "user_guid": "user-guid-here",
    "cms": 1234567890123,
    "group_guids": ["group-guid-1", "group-guid-2"]
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request via Action Button

Wanneer getriggerd via een trigger:{guid} action button, is de content altijd "[Action Triggered]" en bevat het de payload van de action:

Action Button Request
{
  "server_guid": "abc12345-...",
  "channel_guid": "def67890-...",
  "trigger_match": "/help",
  "message": {
    "id": "d01ZZdef6-xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "content": "[Action Triggered]",
    "member_guid": "member-guid-here",
    "user_guid": "user-guid-here",
    "cms": 1234567890123,
    "group_guids": ["group-guid-1", "group-guid-2"],
    "is_action_button": true,
    "action_payload": {
      "custom_key": "custom_value"
    }
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

Request Velden

Field Type Beschrijving
server_guid string De server waar de trigger is afgevuurd
channel_guid string Het kanaal waar het bericht is verstuurd
trigger_match string Het prefix dat overeenkomt (bijv. /help)
message object Het oorspronkelijke bericht dat de webhook heeft getriggerd
message.id string Uniek bericht-ID
message.content string Volledige berichttekst (command match) of "[Action Triggered]" (action button)
message.member_guid string Het serverlid dat de trigger heeft afgevuurd
message.user_guid string De globale GUID van de gebruiker
message.group_guids array De servergroep-GUID's waar het lid bij hoort (gebruik om rollen zoals admin te controleren)
message.cms number Tijdstempel in milliseconden
message.is_action_button boolean true wanneer getriggerd via een action button (niet aanwezig bij command matches)
message.action_payload object Aangepaste data van de action button (alleen aanwezig bij action triggers)
callback_url string Unieke URL om het antwoordbericht bij te werken of te verwijderen (geldig voor 30 minuten)

Response Format

Je webhook moet antwoorden met een 200 status en een JSON body. De response wordt een bericht in het kanaal.

Simpele response

Simple Response
{
  "content": "Hello! How can I help you?"
}

Embed response

Embed Response
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "title": "Help",
    "description": "Here's how to create a channel...",
    "title_url": "https://docs.example.com/channels",
    "sub_title": "Channel Guide",
    "avatar_url": "https://example.com/bot-avatar.png"
  }
}

Volledige response met actions

Full Response
{
  "content": "Here's what I found:",
  "message_container": {
    "type": "embed_message",
    "color": "green",
    "title": "Search Results",
    "description": "Found 3 matching items.",
    "title_url": "https://example.com/results",
    "sub_title": "Query: channels",
    "avatar_url": "https://example.com/bot-avatar.png"
  },
  "actions": [
    {
      "type": "button",
      "text": "View Details",
      "color": "blue",
      "triggers": [
        {
          "action": "ws:send",
          "payload": {
            "method": "USER_REQUESTED_TRIGGER",
            "server_guid": "server-guid",
            "channel_guid": "channel-guid",
            "trigger_guid": "details-trigger-guid",
            "action": { "result_id": "42" }
          }
        }
      ]
    },
    {
      "text": "Open Docs",
      "type": "url:https://docs.example.com"
    }
  ]
}

Response Velden

Field Type Beschrijving
content string Platte tekst berichtinhoud
message_container object Rijke embed/systeembericht weergave
message_container.type string embed_message (standaard) of system_message
message_container.color string blue, green, orange, red (standaard: blue)
message_container.title string Embed titel
message_container.description string Embed inhoudstekst
message_container.title_url string Maakt de titel een klikbare link
message_container.sub_title string Kleinere tekst onder de titel
message_container.avatar_url string Avatar afbeeldings-URL naast de embed
actions array Action buttons (zie Actions)

Minstens een van content, message_container of actions moet aanwezig zijn — anders wordt er geen bericht aangemaakt.

De berichtauteur is de post_app_name van je trigger (geconfigureerd in serverinstellingen). Als deze niet is ingesteld, wordt de servernaam gebruikt.

Timeout

Je webhook moet binnen 5 seconden antwoorden. Bij een timeout wordt een foutmelding getoond aan de gebruiker. Gebruik de callback URL als je meer verwerkingstijd nodig hebt.

Actions

Actions zijn interactieve knoppen die onder je bericht worden weergegeven. Er zijn twee stijlen: simple shorthands en trigger chains.

Action Velden

Field Type Beschrijving
type string "button" voor trigger chains, of shorthand "trigger:{guid}" / "url:{url}" required
text string Knoptekst (accepteert ook label) required
color string green, blue, purple (primair) of red, orange, yellow (secundair)
payload object Data die wordt teruggestuurd bij gebruik van trigger:{guid} shorthand
triggers array Sequentiële trigger chain (voor type: "button")

Simple Shorthands

Voor eenvoudige actions, gebruik de type shorthand:

Type Beschrijving
trigger:{guid} Vuurt een andere webhook trigger af op basis van GUID. De trigger ontvangt message.action_payload met de payload van de action.
url:{url} Opent de URL in de browser van de gebruiker
Shorthand Actions
{
  "actions": [
    {
      "text": "Check Status",
      "type": "trigger:abc123-trigger-guid",
      "payload": { "order_id": "12345" }
    },
    {
      "text": "View Order",
      "type": "url:https://example.com/orders/12345"
    }
  ]
}

Wat gebeurt er wanneer een action wordt geklikt?

Wanneer de gebruiker op "Check Status" klikt, ontvangt de webhook van de doeltrigger een nieuw request met message.content ingesteld op "[Action Triggered]", message.is_action_button ingesteld op true, en message.action_payload ingesteld op { "order_id": "12345" }.

Trigger Chains

Voor rijkere interacties, gebruik type: "button" met een triggers array. Triggers worden sequentieel uitgevoerd en ondersteunen conditionele logica op basis van het resultaat van de vorige trigger.

Trigger types

Action Beschrijving
ws:send Stuurt een WebSocket-commando naar de gateway. Plaats de method en payload in payload.
local:update_message Werkt het bericht lokaal bij (geen server round-trip). Geef message_container en optioneel actions mee.
local:remove_message Verwijdert het bericht uit de weergave van de client.

Condities

Conditie Beschrijving
(geen) Wordt altijd uitgevoerd
previous:success Alleen als de vorige trigger succesvol was
previous:failed Alleen als de vorige trigger mislukt is

Voorbeeld: Trigger chain met condities

Deze knop vuurt een webhook trigger af en werkt vervolgens het bericht bij naar een "bezig"-status bij succes, of een foutmelding bij mislukking:

Trigger Chain Example
{
  "message_container": {
    "title": "Order #12345",
    "description": "Your order is being processed."
  },
  "actions": [
    {
      "type": "button",
      "text": "Check Status",
      "color": "green",
      "triggers": [
        {
          "action": "ws:send",
          "payload": {
            "method": "USER_REQUESTED_TRIGGER",
            "server_guid": "server-guid",
            "channel_guid": "channel-guid",
            "trigger_guid": "status-check-trigger-guid",
            "action": { "order_id": "12345" }
          }
        },
        {
          "condition": "previous:success",
          "action": "local:update_message",
          "message_container": {
            "color": "blue",
            "title": "Order #12345",
            "description": "Checking status..."
          },
          "actions": []
        },
        {
          "condition": "previous:failed",
          "action": "local:update_message",
          "message_container": {
            "color": "red",
            "title": "Order #12345",
            "description": "Could not check status. Try again later."
          }
        }
      ]
    },
    {
      "type": "button",
      "text": "Dismiss",
      "color": "red",
      "triggers": [
        {
          "action": "local:remove_message"
        }
      ]
    }
  ]
}

Wat gebeurt er wanneer "Check Status" wordt geklikt

1. De client stuurt USER_REQUESTED_TRIGGER via WebSocket
2. Bij succes: het bericht wordt lokaal bijgewerkt naar "Checking status..." met knoppen verwijderd
3. Bij mislukking: het bericht wordt bijgewerkt met een rode foutmelding
4. De webhook vuurt af en de response komt binnen als een nieuw MESSAGE_CREATE

Rate limit

Gebruikers worden beperkt in snelheid om spam te voorkomen bij het afvuren van triggers.

Callback URL

Elk webhook-request bevat een callback_url — een unieke, token-geauthenticeerde URL die je service kan aanroepen om het antwoordbericht bij te werken of te verwijderen nadat het is geplaatst. De URL is geldig voor 30 minuten.

Toepassingen

  • Een "bezig met verwerken..."-bericht bijwerken met eindresultaten
  • Live voortgang tonen (bijv. build-status, deployment)
  • Een bericht verwijderen wanneer het niet meer relevant is

Bericht bijwerken

PUT {callback_url}
Update Request
{
  "content": "Updated text content",
  "message_container": {
    "color": "green",
    "title": "Build Complete",
    "description": "All 42 tests passed."
  },
  "actions": []
}

Alle velden zijn optioneel — voeg alleen de velden toe die je wilt wijzigen. Om action buttons te verwijderen, stuur "actions": [].

Bericht verwijderen

DELETE {callback_url}

Geen request body nodig. Het bericht wordt permanent verwijderd uit het kanaal.

Responses

Callback Responses
// 200 OK
{ "success": true }

// 404 Not Found (callback token expired or invalid)
{ "error": "TOKEN_NOT_FOUND" }

// 400 Bad Request (no update fields provided)
{ "error": "MISSING_FIELDS" }

Voorbeeld: Voortgangsupdates

Progress Update Flow
// 1. Your webhook responds immediately with a "loading" message
// Response:
{
  "message_container": {
    "color": "blue",
    "title": "Deploying...",
    "description": "Starting deployment to production."
  }
}

// 2. Your service updates the message as progress continues
// PUT {callback_url}
{
  "message_container": {
    "color": "blue",
    "title": "Deploying...",
    "description": "Step 2/3: Running migrations."
  }
}

// 3. Final update when done
// PUT {callback_url}
{
  "message_container": {
    "color": "green",
    "title": "Deploy Complete",
    "description": "v2.1.0 is now live on production."
  },
  "actions": [
    {
      "label": "View Logs",
      "type": "url:https://example.com/deploys/123/logs"
    }
  ]
}

Callback URL levensduur

Geldig voor 30 minuten vanaf het moment dat de trigger afvuurt. Daarna retourneren update/delete-requests 404. Zodra je het bericht verwijdert, is de callback URL verbruikt en kan niet opnieuw worden gebruikt.

Errors

Bij fouten ontvang je een JSON error response.

Error Response
{
  "error": "ERROR_CODE"
}

Foutcodes

Code Beschrijving
INVALID_TOKEN Ongeldig authenticatie-token
MISSING_REQUIRED_FIELDS Verplichte velden ontbreken in data
MISSING_CONTENT Bericht vereist content of message_container.description
TOKEN_NOT_FOUND Callback token verlopen of ongeldig
MISSING_FIELDS Geen update-velden opgegeven in callback-request
UNSUPPORTED_GITHUB_EVENT GitHub event type niet ondersteund
UNSUPPORTED_UNIFI_PROTECT_EVENT UniFi Protect event niet ondersteund

Succes response

Success
{
  "success": true
}

Voorbeelden

Simpele notificatie

cURL
curl -X POST https://mss.gs/server/SERVER_GUID/webhook/CHANNEL_GUID \
  -H "Content-Type: application/json" \
  -d '{
    "token": "your_token",
    "content": "Build completed successfully!"
  }'

Gekleurd alert met link

JSON Body
{
  "token": "your_token",
  "content": "Build #123 completed!",
  "color": "green",
  "title": "CI/CD Pipeline",
  "title_url": "https://github.com/org/repo/actions/runs/123"
}

Fout-alert

JSON Body
{
  "token": "your_token",
  "message_container": {
    "type": "system_message",
    "color": "red",
    "title": "Alert: Database Error",
    "description": "Connection failed: timeout after 30s",
    "sub_title": "prod-db-01"
  }
}

Deployment-goedkeuring met actions

JSON Body
{
  "token": "your_token",
  "message_container": {
    "color": "yellow",
    "title": "Deployment Request",
    "description": "User @johndoe requested a deployment to production."
  },
  "actions": [
    {
      "label": "Approve",
      "type": "trigger:approve-deploy-trigger-guid",
      "payload": { "deploy_id": "dep_123", "env": "production" }
    },
    {
      "label": "Reject",
      "type": "trigger:reject-deploy-trigger-guid",
      "payload": { "deploy_id": "dep_123" }
    },
    {
      "label": "View Changes",
      "type": "url:https://github.com/org/repo/compare/main...deploy"
    }
  ]
}

Trigger response: privébericht

Private Response
{
  "message_container": {
    "description": "This is a private response only you can see."
  },
  "visible_to_member_guids": ["<member_guid from request>"],
  "ephemeral": true
}

Trigger response: interactief menu

Interactive Menu
{
  "message_container": {
    "title": "What would you like to do?",
    "description": "Choose an option below:"
  },
  "actions": [
    {
      "label": "Get Help",
      "type": "trigger:help-trigger-guid"
    },
    {
      "label": "View Stats",
      "type": "trigger:stats-trigger-guid",
      "payload": { "period": "weekly" }
    }
  ]
}

Speciale Webhooks

mssgs herkent automatisch bepaalde webhook-types.

GitHub Webhooks

Automatisch gedetecteerd via de x-github-event header. Ondersteunde events: Push, Pull Requests, Issues, Releases en meer.

UniFi Protect Webhooks

Automatisch gedetecteerd via de user-agent: protect-alarm-manager header.

Opmerkingen

  • Timeout: Je webhook moet binnen 5 seconden antwoorden. Bij een timeout wordt een foutmelding getoond aan de gebruiker. Gebruik de callback URL als je meer verwerkingstijd nodig hebt.
  • Berichtopslag: Trigger response-berichten worden opgeslagen in de database en verschijnen in de kanaalgeschiedenis.
  • Callback URL levensduur: Geldig voor 30 minuten vanaf het moment dat de trigger afvuurt. Daarna retourneren update/delete-requests 404.
  • Rate limiting: Gebruikers worden beperkt in snelheid om spam te voorkomen bij het afvuren van triggers.

Vragen?

We helpen je graag verder met je integratie.

developers@mss.gs