Zum Inhalt springen
Slack-Integration

Slack-Integration

Verbinden Sie Ihr selbst gehostetes Status200 mit Slack. Sie erstellen eine Slack-App aus dem Manifest, das Ihr Server erzeugt, geben Status200 die Zugangsdaten der App und verbinden jedes Projekt mit einem Arbeitsbereich. Status200 veröffentlicht dann Vorfälle, Alarme und geplante Wartungen in Ihren Kanälen, und Ihr Team bearbeitet sie direkt in Slack.

Diese Seite richtet sich an alle, die den Status200-Server betreiben. Sobald Slack verbunden ist, werden Benachrichtigungsregeln pro Projekt eingerichtet: siehe Slack.

So funktioniert es

Die Slack-App gehört Ihnen: Sie ist in Ihrem Arbeitsbereich installiert und spricht nur mit Ihrem Server. Der Datenverkehr fließt in beide Richtungen, und jede Richtung braucht ihren eigenen Netzwerkzugriff.

sequenceDiagram participant B as Ihr Browser participant O as Status200 participant S as Slack B->>O: Mit Slack verbinden O-->>B: Weiterleitung zu Slack B->>S: Die App zulassen S-->>B: Weiterleitung zu<br/>/api/slack/auth B->>O: Einmaliger Code O->>S: Code gegen ein<br/>Bot-Token tauschen Note over O,S: Sobald verbunden O->>S: Nachrichten senden,<br/>ausgehendes HTTPS S->>O: Ereignisse, Klicks,<br/>Befehle, eingehendes HTTPS

Ein Projekt mit Slack verbinden und dann nutzen

  • Ausgehend: Status200 ruft die Web-API von Slack auf, um Nachrichten zu senden, Kanäle zu erstellen und Bilder hochzuladen.
  • Eingehend: Slack ruft vier Routen auf Ihrem Server auf, für Ereignisse, Klicks auf Schaltflächen, Menüs und Slash-Befehle. Jede Anfrage ist mit dem Signing Secret der App signiert. Status200 lehnt eine Anfrage ab, deren Signatur nicht passt oder deren Zeitstempel älter als fünf Minuten ist.

Bevor Sie beginnen

  • Ein Slack-Arbeitsbereich, in dem Sie Apps erstellen und installieren können.
  • Ein öffentlicher HTTPS-Hostname für Status200, den Slack erreichen kann. Siehe Netzwerkzugriff.
  • Zugriff auf die Konfiguration des Servers: config.env bei Docker Compose oder Ihre Helm-Values bei Kubernetes.
  • Um ein Projekt zu verbinden, die Rolle Project Owner, Project Admin oder Project Member darin.

Die Slack-App einrichten

  1. Die öffentliche URL festlegen

    Status200 erzeugt das App-Manifest und jede Callback-URL aus HOST und HTTP_PROTOCOL. Setzen Sie beide auf den Hostnamen, den Slack aufrufen wird, über HTTPS:

    Docker Compose

    config.envBash
    HOST=status200.example.com
    HTTP_PROTOCOL=https

    Kubernetes

    values.yamlYAML
    host: status200.example.com
    httpProtocol: https

    Diese Werte erzeugen nur URLs. Sie legen keine DNS-Einträge, Zertifikate oder Firewall-Regeln an.

  2. Das App-Manifest kopieren

    Öffnen Sie Projekteinstellungen > Arbeitsbereich > Slack. Solange Slack auf dem Server nicht eingerichtet ist, zeigt die Seite Slack in Ihr Status200-Projekt integrieren mit dem für Ihren Hostnamen erzeugten Manifest. Es wird auch unter https://status200.example.com/api/slack/app-manifest ausgeliefert.

    Prüfen Sie, dass jede URL im Manifest mit Ihrem öffentlichen Hostnamen beginnt. Ist das nicht so, korrigieren Sie zuerst HOST und HTTP_PROTOCOL und wenden die Änderung an.

  3. Die Slack-App erstellen

    Erstellen Sie auf api.slack.com/apps eine neue App aus einem Manifest, wählen Sie Ihren Arbeitsbereich und fügen Sie das Manifest ein. Verwenden Sie immer das Manifest, das Ihr eigener Server erzeugt, damit seine URLs zu Ihrem Hostnamen passen.

  4. Die Zugangsdaten der App kopieren

    Kopieren Sie auf der Seite Basic Information der App unter App Credentials die Client ID, das Client Secret und das Signing Secret.

  5. Die Zugangsdaten in Status200 eintragen

    Docker Compose

    config.envBash
    SLACK_APP_CLIENT_ID=YOUR_SLACK_APP_CLIENT_ID
    SLACK_APP_CLIENT_SECRET=YOUR_SLACK_APP_CLIENT_SECRET
    SLACK_APP_SIGNING_SECRET=YOUR_SLACK_APP_SIGNING_SECRET

    Kubernetes

    values.yamlYAML
    slackApp:
      clientId: "YOUR_SLACK_APP_CLIENT_ID"
      clientSecret: "YOUR_SLACK_APP_CLIENT_SECRET"
      signingSecret: "YOUR_SLACK_APP_SIGNING_SECRET"

    Um die Werte in einem Kubernetes-Secret zu halten, das Sie selbst verwalten, setzen Sie stattdessen slackApp.existingSecret: seinen name und die Schlüssel clientIdKey, clientSecretKey und signingSecretKey.

  6. Die Konfiguration anwenden

    Docker Compose

    Bash
    npm run start

    Das erstellt die Container mit der neuen config.env neu. docker compose restart liest sie nicht neu ein.

    Kubernetes

    Bash
    helm upgrade my-oneuptime oneuptime/status200 -f values.yaml

    Sobald Status200 wieder läuft, zeigt Projekteinstellungen > Arbeitsbereich > Slack statt des Manifests eine Schaltfläche Mit Slack verbinden.

  7. Die Request-URL für Ereignisse verifizieren

    Verifizieren Sie in den Event Subscriptions der Slack-App die Request-URL. Status200 beantwortet die Challenge von Slack erst, wenn das Signing Secret gesetzt ist; wiederholen Sie die Prüfung also, falls sie beim Erstellen der App fehlgeschlagen ist.

  8. Das Projekt verbinden

    Wählen Sie unter Projekteinstellungen > Arbeitsbereich > Slack die Option Mit Slack verbinden und lassen Sie die App in Slack zu. Slack schickt Sie zur selben Seite zurück, die nun Ihren Arbeitsbereich nennt.

  9. Ihr eigenes Slack-Konto verbinden

    Schaltflächen, Formulare und Befehle handeln als der Status200-Benutzer, der mit dem Slack-Konto verknüpft ist, das sie verwendet. Jede Person öffnet Benutzereinstellungen > Arbeitsbereich > Slack und wählt Connect my account with Slack. Wer kein Konto verbunden hat, bekommt dort, wo er gedrückt hat, eine Antwort mit einer Schaltfläche Connect Slack account, die es in einem Schritt verbindet.

Umgebungsvariablen

Docker Compose (config.env)Helm (values.yaml)ErforderlichWert
SLACK_APP_CLIENT_IDslackApp.clientIdJaDie Client ID der App. Ohne sie zeigt die Slack-Seite die Einrichtungsanleitung statt Mit Slack verbinden.
SLACK_APP_CLIENT_SECRETslackApp.clientSecretJaDas Client Secret der App, mit dem der Code, den Slack zurückgibt, gegen ein Token getauscht wird.
SLACK_APP_SIGNING_SECRETslackApp.signingSecretJaDas Signing Secret der App. Jede Anfrage von Slack wird damit geprüft.
HOSThostJaIhr öffentlicher Hostname, ohne Schema.
HTTP_PROTOCOLhttpProtocolJahttps. Slack ruft nur HTTPS-URLs auf.

Was die App kann

Das Manifest richtet diese Funktionen ein. Jede erreicht Ihren Server über die angegebene Route und funktioniert daher nur, wenn Slack diese Route erreichen kann.

FunktionWas sie tutRoute
/status200Einen Vorfall melden, eine Wartung planen, sehen, wer Bereitschaft hat, jemanden alarmieren und Status200 AI fragen; /status200 help listet alle Befehle aufPOST /api/slack/command
Die Shortcuts Create New Incident und Create Scheduled EventEinen Vorfall melden oder eine Wartung planen, über die Shortcuts von SlackPOST /api/slack/interactive
Schaltflächen und Formulare in Status200-NachrichtenBestätigen, lösen, eine Notiz hinzufügen, den Status ändern, eine On-Call-Richtlinie ausführenPOST /api/slack/interactive und POST /api/slack/options-load
EreignisseErwähnungen, Nachrichten, Reaktionen und Pins, zum Beispiel um eine Nachricht als Notiz zu speichernPOST /api/slack/events
Der Tab Home der AppIhre Bereitschaftsschichten und die offenen Vorfälle und Warnungen, mit Schaltflächen, um einen Vorfall zu melden, eine Wartung zu planen, jemanden zu alarmieren und zu sehen, wer Bereitschaft hatPOST /api/slack/events und POST /api/slack/interactive
Eine Begrüßung in jedem Kanal, zu dem die App hinzugefügt wirdWie man Status200 AI eine Frage stellt und wo man eine Benachrichtigungsregel hinzufügtPOST /api/slack/events

Bilder in Nachrichten

Beschreibungen von Vorfällen und Alarmen können Screenshots enthalten, zum Beispiel den eines synthetischen Monitors (siehe Einen Screenshot zeigen). Status200 zeigt sie in Slack-Nachrichten, indem es jeden als private Datei in Ihren Arbeitsbereich hochlädt; dafür braucht es den Bot-Scope files:write. Das erzeugte Manifest enthält ihn.

Wenn Sie Ihre Slack-App aus einem älteren Manifest erstellt haben, fügen Sie files:write unter OAuth & Permissions > Bot Token Scopes hinzu (oder aktualisieren Sie die App aus dem aktuellen Manifest). Wählen Sie dann unter Projekteinstellungen > Arbeitsbereich > Slack erneut Mit Slack verbinden, damit der neue Scope gewährt wird. Bis dahin wird jeder Screenshot als sein Alternativtext angezeigt.

Bereitschafts-Benutzergruppen

Damit die Slack-Benutzergruppe eines Bereitschaftsplans gleich denen bleibt, die Bereitschaft haben (siehe Bereitschafts-Benutzergruppen), braucht es die Bot-Scopes usergroups:read und usergroups:write. Das erzeugte Manifest enthält sie.

Wenn Sie Ihre Slack-App aus einem älteren Manifest erstellt haben, fügen Sie usergroups:read und usergroups:write unter OAuth & Permissions > Bot Token Scopes hinzu (oder aktualisieren Sie die App aus dem aktuellen Manifest). Wählen Sie dann unter Projekteinstellungen > Arbeitsbereich > Slack erneut Mit Slack verbinden, damit die neuen Scopes gewährt werden. Bis dahin sagt die Karte des Bereitschaftsplans, dass die Slack-App von Status200 Benutzergruppen noch nicht ändern darf.

Apps aus einem älteren Manifest

Eine Slack-App, die aus einem früheren Status200-Manifest erstellt wurde, registriert /incident und /maintenance als eigene Befehle, die mit gleichnamigen Befehlen anderer Apps kollidieren können. Sie funktionieren weiter und öffnen dieselben Formulare wie /status200 incident und /status200 maintenance. Um sie durch /status200 zu ersetzen, aktualisieren Sie die App aus dem Manifest, das Ihr Server erzeugt: Öffnen Sie auf api.slack.com/apps das App Manifest der App, fügen Sie das Manifest ein und speichern Sie.

Eine App, die vor /status200 page erstellt wurde, braucht dieselbe Aktualisierung: Bis sie sie hat, erkennt /status200 page nicht, wen Sie mit @ erwähnen, und öffnet ein Formular, in dem Sie die Personen auswählen, statt sie sofort zu alarmieren. Wählen Sie dann unter Projekteinstellungen > Arbeitsbereich > Slack erneut Mit Slack verbinden, damit der Scope users:read.email, den das Manifest hinzufügt, gewährt wird: Damit wird eine Person, deren Slack-Konto nicht mit Status200 verbunden ist, an ihrer E-Mail-Adresse erkannt.

Eine App, die vor dem Tab Home erstellt wurde, braucht dieselbe Aktualisierung: Bis sie sie hat, zeigt Slack für die App keinen Tab Home, und die App postet keine Begrüßung in einem Kanal, zu dem sie hinzugefügt wird. Die Aktualisierung schaltet den Tab ein und abonniert für die App die Ereignisse app_home_opened und member_joined_channel. Sie fügt keinen Scope hinzu, daher muss nichts erneut verbunden werden.

Netzwerkzugriff für selbst gehostete Installationen

Verkehrsrichtung und Endpunkte

VerkehrErforderlicher Zugriff
Status200 zu SlackDNS und ausgehendes HTTPS über TCP 443 zu slack.com für Web-API-Aufrufe und den OAuth-Tokentausch; hooks.slack.com für Antwort-URLs von Befehlen und Benachrichtigungen über Incoming Webhooks, falls verwendet
Slack zu Status200Öffentliches HTTPS über TCP 443 zu den vier POST-Routen unten, für die vollständige Integration
Browser der Nutzer zu Status200Dashboard-Zugriff und OAuth-Weiterleitungen zu /api/slack/auth/:projectId/:userId und /api/slack/auth/:projectId/:userId/user; diese können über das VPN der Nutzer erreichbar bleiben

Die ausgehenden Domains beschreiben die Slack-Integration von Status200, keine vollständige Allowlist für Slack-Clients oder jede Slack-Funktion. Ein Slack-Incoming Webhook wird von Slack gehostet: Status200 sendet an ihn, er ist also kein eingehender Endpunkt auf Ihrem Server. Siehe die Anleitung zu Incoming Webhooks von Slack.

Leiten Sie diese Callbacks über den Ingress an Status200 weiter:

Methode und PfadZweck
POST /api/slack/eventsVerifizierung der Events API, Reaktionen, Pins, Erwähnungen und Nachrichten
POST /api/slack/interactiveSchaltflächen, Shortcuts, abgeschickte Modals und /incident und /maintenance einer älteren App
POST /api/slack/options-loadAnfragen nach Optionen interaktiver Menüs
POST /api/slack/commandBefehl /status200

OAuth ist eine Weiterleitung im Browser, gefolgt von einem serverseitigen Tokentausch. Das Manifest registriert /api/slack/auth als Präfix der Weiterleitungs-URL, und Status200 ergänzt die Projekt- und Benutzerpfade, wenn es die Autorisierung startet. Zugriff im Browser allein lässt Slack keine Ereignisse oder Klicks auf Schaltflächen zustellen.

Private Installationen und Callback-Sicherheit

flowchart TB Slack["Slack"] -->|HTTPS 443| GW["Öffentliches Gateway"] GW -->|"/api/slack/* nur POST"| ING["Status200-Ingress"] Users["Mitarbeitende im VPN"] --> ING ING --> App["Status200-App"]

Die Slack-Callbacks aus einer privaten Installation veröffentlichen

Verwenden Sie öffentliches DNS und ein Gateway mit einem öffentlich vertrauenswürdigen HTTPS-Zertifikat, einer vollständigen Zertifikatskette und einer privaten Route zu Ihrem Status200-Ingress. Erlauben Sie eingehendes TCP 443 zum Gateway und leiten Sie nur die vier Callback-Routen oben weiter. Eine private ClusterIP, ein interner DNS-Name oder die VPN-Verbindung einer Mitarbeiterin ist für Slack nicht erreichbar. Mit Split-DNS können das Dashboard und die OAuth-Routen unter demselben Hostnamen privat bleiben.

Erzeugen Sie das Manifest nach einer Änderung des Hostnamens neu und aktualisieren Sie die Slack-App.

Erhalten Sie über das Gateway hinweg:

  • Methode, Pfad, Query-String und den ursprünglichen Body;
  • Content-Type, X-Slack-Signature und X-Slack-Request-Timestamp;
  • den öffentlichen Host und das HTTPS-Schema, über vertrauenswürdige Proxy-Header.

Nehmen Sie die Callback-Routen von Browser-SSO, CAPTCHA und Proxy-Anmeldeseiten aus, und behalten Sie die Prüfungen von Signing Secret und Zeitstempel in Status200 bei. Halten Sie die Uhr des Servers synchron: Eine Anfrage, die mehr als fünf Minuten abweicht, wird abgelehnt. Slack dokumentiert die Prüfung der Anfragesignatur; eine Prüfung der Quell-IP ersetzt sie nicht.

Zugriff prüfen und Grenzen verstehen

  1. Verifizieren Sie in den Event Subscriptions der Slack-App die Request-URL. Slack sendet eine POST-Challenge und prüft TLS.
  2. Senden Sie eine Testbenachrichtigung, führen Sie einen Slash-Befehl aus, klicken Sie auf eine Schaltfläche in einer Vorfallsnachricht und lösen Sie ein abonniertes Ereignis aus.
  3. Prüfen Sie die Logs des Gateways und von Status200 auf fehlgeschlagene Zustellungen, ohne Geheimnisse zu protokollieren.

Slack erwartet schnelle Bestätigungen, darunter eine Antwort innerhalb von drei Sekunden bei Interaktionen. Ein GET im Browser oder eine erfolgreich gesendete Nachricht prüft diese POST-Callbacks nicht.

Warnung

Ist jede eingehende Verbindung untersagt, kann eine bereits autorisierte App weiterhin Nachrichten über ausgehendes HTTPS senden, aber Ereignisse, Schaltflächen, Shortcuts und Befehle funktionieren nicht. Das Manifest von Status200 verwendet HTTP-Callbacks und deaktiviert den Socket Mode; den Socket Mode von Slack einzuschalten, ist kein unterstützter Ersatz für diese Routen.

Die Einstellungen für den Zugriff auf private Netzwerke steuern ausgehende Anfragen an private Ziele. Sie machen keine Callbacks für Slack erreichbar.

Fehlerbehebung

Das Verbinden wurde nicht abgeschlossen

Wenn Slack Sie zurückschickt und die Verbindung nicht zustande gekommen ist, zeigt die Slack-Seite, von der Sie gestartet sind (Projekteinstellungen > Arbeitsbereich > Slack oder, wenn Sie Ihr Konto verbunden haben, Ihre eigenen Benutzereinstellungen > Arbeitsbereich > Slack), Slack wurde nicht verbunden mit einem Satz in Ihrer Sprache, der den Grund nennt. Der Rest der Seite lädt wie gewohnt, sodass Sie gleich dort erneut verbinden können. Was Slack selbst geantwortet hat, zeigt sie nie: Das steht mit dem Grund im Log des Status200-Servers.

Die Seite sagtWas zu tun ist
"Dieser Verbindungslink ist ungültig, abgelaufen oder wurde bereits verwendet. Bitte beginnen Sie erneut."Der Link funktioniert einmal, 15 Minuten lang, in dem Browser, in dem er gestartet wurde. Beginnen Sie auf der Slack-Seite erneut und schließen Sie in Slack innerhalb von 15 Minuten im selben Browser ab.
"Sie haben keine Berechtigung, dieses Projekt mit Slack zu verbinden."Status200 in Slack zu installieren, erfordert Project Owner, Project Admin oder Project Member. Das wird erneut geprüft, wenn Slack Sie zurückschickt; eine Rolle, die Ihnen inzwischen entzogen wurde, beendet die Verbindung also auch hier.
"Sie sind kein Mitglied dieses Projekts mehr."Um Ihr eigenes Slack-Konto zu verbinden, müssen Sie Mitglied des Projekts sein, wenn Slack Sie zurückschickt.
"Dieses Projekt ist noch mit keinem Slack-Arbeitsbereich verbunden."Installieren Sie Status200 zuerst unter Projekteinstellungen > Arbeitsbereich > Slack in Slack und verbinden Sie dann Ihr eigenes Konto.
"Sie haben sich bei einem anderen Slack-Arbeitsbereich angemeldet als dem, mit dem dieses Projekt verbunden ist."Verbinden Sie Ihr Konto, während Sie bei dem Slack-Arbeitsbereich angemeldet sind, in dem das Projekt installiert ist.
"Sie haben sich bei Slack als eine andere Person angemeldet als die, die in Slack die Schaltfläche zum Verbinden gedrückt hat, daher wurde nichts verbunden."Eine Schaltfläche Connect Slack account funktioniert nur für das Slack-Konto, das sie gedrückt hat. Melden Sie sich bei Slack als Sie selbst an, oder bitten Sie die Person, die sie gedrückt hat, sie zu drücken.
"Die Verbindung wurde abgebrochen, daher wurde nichts geändert."Die Anfrage wurde in Slack nicht zugelassen. Beginnen Sie erneut und lassen Sie sie zu.
"Slack ist auf diesem Status200-Server nicht eingerichtet."Setzen Sie SLACK_APP_CLIENT_ID und SLACK_APP_CLIENT_SECRET (siehe Umgebungsvariablen) und starten Sie Status200 neu.
"Status200 konnte die Verbindung nicht abschließen. Bitte versuchen Sie es erneut."Slack hat mit einem Fehler geantwortet, oder eine Anfrage oder ein Schreibvorgang ist beim Abschließen fehlgeschlagen. Das Log des Status200-Servers sagt, was davon. Versuchen Sie es erneut; passiert es weiterhin, prüfen Sie das Log und die Einstellungen der Slack-App.

Weitere Probleme

Slack kann die Request-URL für Ereignisse nicht verifizieren

Status200 beantwortet die Challenge von Slack nur, wenn SLACK_APP_SIGNING_SECRET gesetzt ist und die Anfrage ankommt. Setzen Sie das Signing Secret, wenden Sie die Konfiguration an und wiederholen Sie die Verifizierung. Schlägt sie weiterhin fehl, prüfen Sie, dass POST /api/slack/events aus dem Internet mit einem öffentlich vertrauenswürdigen Zertifikat erreichbar ist.

Schaltflächen und Slash-Befehle tun nichts, aber Benachrichtigungen kommen an

Benachrichtigungen sind ausgehend und funktionieren daher ohne eingehenden Zugriff. Schaltflächen, Shortcuts und Befehle sind eingehend: Prüfen Sie, dass Slack POST /api/slack/interactive und POST /api/slack/command erreichen kann und dass das Gateway den Body sowie die Header X-Slack-Signature und X-Slack-Request-Timestamp erhält.

Die App sagt, mein Slack-Konto sei nicht mit Status200 verbunden

Schaltflächen, Formulare und Befehle brauchen Ihr Slack-Konto, verknüpft mit Ihrem Status200-Benutzer. Drücken Sie in der Antwort der App Connect Slack account, oder öffnen Sie Benutzereinstellungen > Arbeitsbereich > Slack und wählen Sie Connect my account with Slack. Wurden Sie aus dem Projekt entfernt, sagt die App stattdessen das, und Aktionen aus Slack werden abgelehnt.

Screenshots erscheinen als Text

Der Slack-App fehlt der Scope files:write. Siehe Bilder in Nachrichten.

Nächste Schritte