Ga naar hoofdinhoud
Developers Knoppen

Knoppen toevoegen

Zet knoppen onder elke kaart. Een knop opent een link, verandert de kaart voor iedereen zodra iemand erop tikt, of laat je service weten dat hij is ingedrukt.

Wat je kunt doen

  • Een link openenStuur mensen naar een pagina, een dashboard of een pull request.
  • De kaart veranderen met een tikBewerk hem, verwijder hem, reageer of antwoord, direct vanuit de knopdruk, zonder eigen server.
  • Elke druk horenJe service hoort live wie wat heeft ingedrukt.
  • Een commando uitvoerenEen knop kan een van de slash-commando's van de community activeren, met data.

In de app

Er wordt aangebeld: de kaart verschijnt

Een tik op Poort openen: de kaart verandert voor iedereen

Voor de verandering zelf is geen server nodig: de stappen zijn bij het bericht opgeslagen. Je poortcontroller hoort de druk en opent de poort.

Snel aan de slag

  1. Voeg een actions-lijst toe

    Knoppen horen in actions, naast de kaart, in een post via een webhook, een antwoord op een commando of een update.

    json
    {
      "message_container": {
        "color": "yellow",
        "title": "Deploy v2.1 to production?",
        "description": "Requested by maya."
      },
      "actions": [
        { "type": "url:https://ci.example.com/deploys/218", "text": "View changes", "color": "blue" }
      ]
    }
    deploys
    System
    Bericht van Deploybot

    v2.1 naar productie uitrollen?

    Aangevraagd door maya.
  2. Kies wat een druk doet

    Een link, een wijziging aan de kaart, of een aanroep van je service. De drie soorten staan hieronder.

Drie soorten knoppen

Het type bepaalt wat een druk doet.

TypeWat een druk doetBereikt jou
url:{url}Opent de link.Nee
webhook_actionVoert de stappen uit die je erbij hebt opgeslagen, voor iedereen in het kanaal.Ja, via de stream_url van het bericht
trigger:{guid}Activeert een van de triggers van de community, met de payload van de knop.Ja, als nieuw request naar de URL van die trigger

De kaart veranderen met een tik

Een webhook_action-knop heeft een lijst stappen in triggers. Bij een druk draaien die op de server van mssgs, op volgorde, en iedereen in het kanaal ziet het resultaat.

StapWat hij doet, voor iedereenVelden
update_messageVervangt de kaart en zijn knoppen. Stuur "actions": [] om de knoppen weg te halen.message_container, actions, content
remove_messageVerwijdert het bericht.Geen
add_reactionVoegt een reactie toe, namens het lid dat drukte.emoji
add_replyPost een antwoord, namens het lid dat drukte.content
json
{
  "message_container": { "color": "yellow", "title": "Front door", "description": "Someone rang the bell." },
  "actions": [
    {
      "type": "webhook_action",
      "id": "open_gate",
      "text": "Open gate",
      "color": "green",
      "payload": { "door": "front" },
      "triggers": [
        {
          "action": "update_message",
          "message_container": { "color": "blue", "title": "Front door", "description": "Opening…" },
          "actions": []
        },
        { "action": "add_reaction", "emoji": ":white_check_mark:" }
      ]
    }
  ]
}
Stappen worden uit het opgeslagen bericht gelezen, nooit uit de app van het lid, dus een druk kan alleen doen wat jij erin hebt gezet.
Stappen draaien op volgorde en elke stap wordt geprobeerd: mislukt er een, dan draait de rest toch.

De druk horen

Een bericht met knoppen komt van de webhook terug met een stream_url. Houd die open en elke druk komt binnen als event van het type action, met het id van de knop, de opgeslagen knop met zijn payload, en wie er drukte:

sse
data: {"type": "action", "message_id": "...", "action_id": "open_gate", "action": {"id": "open_gate", "payload": {"door": "front"}, ...}, "member_guid": "member-guid", "member": {...}, "ts": 1790000000000}

Doe het echte werk, zoals de poort openen, en zet daarna de eindstand van de kaart via callback_url. Hoe de stream en de callback werken lees je bij live-updates.

Een commando uitvoeren vanaf een knop

Een trigger:{guid}-knop activeert een van de triggers van je community, alsof iemand het commando had getypt, en geeft de payload van de knop mee. De trigger ontvangt:

json
{
  "actions": [
    {
      "type": "trigger:5f2c9a1e-trigger-guid",
      "text": "Check status",
      "color": "blue",
      "payload": { "order_id": "12345" }
    }
  ]
}
json
{
  "trigger_match": "/status",
  "message": {
    "content": "[Action Triggered]",
    "member_guid": "member-guid",
    "is_action_button": true,
    "action_payload": { "order_id": "12345" }
  },
  "callback_url": "https://mss.gs/api/v1/trigger-callback/...",
  "stream_url": "https://mss.gs/api/v1/instant/...?token=..."
}
Wat de trigger antwoordt, wordt als nieuwe kaart gepost. Het request zegt niet op welk bericht de knop stond: zet wat je nodig hebt in payload.

Velden

VeldTypeWat het doet
typestringurl:{url}, webhook_action of trigger:{guid}. Verplicht.
textstringDe tekst op de knop. Verplicht; label werkt ook.
colorstringDe kleur van de knop, zie hieronder.
idstringVoor webhook_action: welke knop is ingedrukt. Uniek binnen het bericht.
payloadobjectJouw data, die je bij een druk terugkrijgt.
triggersarrayVoor webhook_action: de stappen die draaien.
disabledbooleanToont de knop grijs, en een druk erop wordt geweigerd.

Kleuren

green, blue en purple geven een gevulde, primaire knop. red, orange en yellow geven een secundaire: gebruik die voor "Afwijzen", "Annuleren" en andere keuzes waar je voorzichtig mee moet zijn.

Fouten

Post je een bericht met knoppen, dan controleert mssgs die eerst:

CodeBetekenis
INVALID_ACTIONS_FORMATactions is geen lijst van objecten.
INVALID_ACTION_MISSING_FIELDSEen knop heeft geen type of geen text.
DUPLICATE_ACTION_IDTwee knoppen hebben hetzelfde id.
INVALID_TRIGGERS_FORMATtriggers is geen lijst van stappen.
INVALID_TRIGGER_MISSING_ACTIONEen stap heeft geen action.
INVALID_TRIGGER_ACTION_NOT_ALLOWEDEen andere stap dan de vier hierboven.

Als iemand drukt

CodeBetekenis
MESSAGE_NOT_FOUNDHet bericht is intussen verwijderd.
ACTION_NOT_FOUNDHet bericht heeft geen knop met dat id.
ACTION_DISABLEDDe knop is uitgeschakeld.
TRIGGER_NOT_FOUND, TRIGGER_NOT_ACTIVEDe trigger waar een knop naar wijst, bestaat niet meer of staat uit.
TRIGGER_NOT_ALLOWEDHet lid heeft geen rol die die trigger mag gebruiken.

Kom je van de oude docs?

Knoppen van het type button met ws:send-stappen, local:update_message en local:remove_message, previous:success-voorwaarden en expire_in_seconds werken niet meer voor externe afzenders. Gebruik webhook_action met de stappen hierboven: die bereiken iedereen, niet alleen degene die drukte.

Verder bouwen