Slack-integration
Forbind din selvhostede Status200 med Slack. Du opretter en Slack-app ud fra det manifest, din server genererer, giver Status200 appens legitimationsoplysninger og forbinder hvert projekt med et arbejdsområde. Derefter poster Status200 hændelser, alarmer og planlagt vedligeholdelse i dine kanaler, og dit team handler på dem fra Slack.
Denne side er til den, der driver Status200-serveren. Når Slack er forbundet, opsættes notifikationsregler pr. projekt: se Slack.
Sådan fungerer det
Slack-appen er din egen: Den er installeret i dit arbejdsområde og taler kun med din server. Trafikken går begge veje, og hver retning kræver sin egen netværksadgang.
Forbind et projekt med Slack, og brug det derefter
- Udgående: Status200 kalder Slacks Web API for at poste beskeder, oprette kanaler og uploade billeder.
- Indgående: Slack kalder fire ruter på din server for events, klik på knapper, menuer og slash-kommandoer. Hver anmodning er signeret med appens signing secret. Status200 afviser en anmodning, hvis signatur ikke passer, eller hvis tidsstempel er mere end fem minutter gammelt.
Før du begynder
- Et Slack-arbejdsområde, hvor du kan oprette og installere apps.
- Et offentligt HTTPS-værtsnavn til Status200, som Slack kan nå. Se Netværksadgang.
- Adgang til serverens konfiguration:
config.envtil Docker Compose eller dine Helm-values til Kubernetes. - For at forbinde et projekt: rollen Project Owner, Project Admin eller Project Member i det.
Opsæt Slack-appen
Angiv den offentlige URL
Status200 bygger appmanifestet og hver callback-URL ud fra
HOSTogHTTP_PROTOCOL. Sæt dem til det værtsnavn, Slack skal kalde, over HTTPS:Docker Compose
HOST=status200.example.com HTTP_PROTOCOL=httpsKubernetes
host: status200.example.com httpProtocol: httpsDisse værdier genererer kun URL'er. De opretter ikke DNS-poster, certifikater eller firewallregler.
Kopiér appmanifestet
Åbn Projektindstillinger > Arbejdsområde > Slack. Indtil Slack er sat op på serveren, viser siden Integrating Slack with your Status200 Project med det manifest, der er genereret til dit værtsnavn. Det serveres også på
https://status200.example.com/api/slack/app-manifest.Kontrollér, at hver URL i manifestet begynder med dit offentlige værtsnavn. Hvis ikke, så ret først
HOSTogHTTP_PROTOCOL, og anvend ændringen.Opret Slack-appen
Opret på api.slack.com/apps en ny app ud fra et manifest, vælg dit arbejdsområde, og indsæt manifestet. Brug altid det manifest, din egen server genererer, så dets URL'er passer til dit værtsnavn.
Kopiér appens legitimationsoplysninger
Kopiér Client ID, Client Secret og Signing Secret på appens side Basic Information under App Credentials.
Tilføj legitimationsoplysningerne i Status200
Docker Compose
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_SECRETKubernetes
slackApp: clientId: "YOUR_SLACK_APP_CLIENT_ID" clientSecret: "YOUR_SLACK_APP_CLIENT_SECRET" signingSecret: "YOUR_SLACK_APP_SIGNING_SECRET"For at holde værdierne i en Kubernetes-Secret, som du selv administrerer, angiver du i stedet
slackApp.existingSecret: densnameog nøglerneclientIdKey,clientSecretKeyogsigningSecretKey.Anvend konfigurationen
Docker Compose
npm run startDet genopretter containerne med den nye
config.env.docker compose restartlæser den ikke igen.Kubernetes
helm upgrade my-oneuptime oneuptime/status200 -f values.yamlNår Status200 kører igen, viser Projektindstillinger > Arbejdsområde > Slack en knap Connect with Slack i stedet for manifestet.
Bekræft request-URL'en til events
Bekræft request-URL'en under Event Subscriptions i Slack-appen. Status200 besvarer først Slacks challenge, når signing secret er angivet, så prøv igen, hvis det mislykkedes, mens du oprettede appen.
Forbind projektet
Vælg Connect with Slack under Projektindstillinger > Arbejdsområde > Slack, og tillad appen i Slack. Slack sender dig tilbage til samme side, som nu viser dit arbejdsområde.
Forbind din egen Slack-konto
Knapper, formularer og kommandoer handler som den Status200-bruger, der er knyttet til den Slack-konto, der bruger dem. Hver person åbner Brugerindstillinger > Arbejdsområde > Slack og vælger Connect my account with Slack. Den, der ikke har forbundet en konto, får der, hvor vedkommende trykkede, et svar med en knap Connect Slack account, der forbinder den i ét trin.
Miljøvariabler
Docker Compose (config.env) | Helm (values.yaml) | Påkrævet | Værdi |
|---|---|---|---|
SLACK_APP_CLIENT_ID | slackApp.clientId | Ja | Appens Client ID. Uden den viser Slack-siden opsætningsvejledningen i stedet for Connect with Slack. |
SLACK_APP_CLIENT_SECRET | slackApp.clientSecret | Ja | Appens Client Secret, som bruges til at bytte den kode, Slack returnerer, til et token. |
SLACK_APP_SIGNING_SECRET | slackApp.signingSecret | Ja | Appens Signing Secret. Hver anmodning fra Slack kontrolleres med det. |
HOST | host | Ja | Dit offentlige værtsnavn, uden skema. |
HTTP_PROTOCOL | httpProtocol | Ja | https. Slack kalder kun HTTPS-URL'er. |
Hvad appen kan
Manifestet opsætter disse funktioner. Hver af dem når din server via den viste rute og virker derfor kun, når Slack kan nå den rute.
| Funktion | Hvad den gør | Rute |
|---|---|---|
/status200 | Erklær en hændelse, planlæg vedligeholdelse, se hvem der har vagt, tilkald nogen, og spørg Status200 AI; /status200 help viser alle kommandoer | POST /api/slack/command |
| Genvejene Create New Incident og Create Scheduled Event | Erklær en hændelse eller planlæg vedligeholdelse fra Slacks genveje | POST /api/slack/interactive |
| Knapper og formularer i Status200-beskeder | Kvittér, løs, tilføj en note, skift tilstand, kør en vagtpolitik | POST /api/slack/interactive og POST /api/slack/options-load |
| Events | Omtaler, beskeder, reaktioner og fastgørelser, for eksempel for at gemme en besked som note | POST /api/slack/events |
| Appens fane Home | Dine vagter og de åbne hændelser og advarsler, med knapper til at erklære en hændelse, planlægge vedligeholdelse, tilkalde nogen og se, hvem der har vagt | POST /api/slack/events og POST /api/slack/interactive |
| En hilsen i hver kanal, appen tilføjes til | Hvordan man stiller Status200 AI et spørgsmål, og hvor man tilføjer en notifikationsregel | POST /api/slack/events |
Billeder i beskeder
Beskrivelser af hændelser og alarmer kan indeholde skærmbilleder, for eksempel fra en syntetisk monitor (se Vis et skærmbillede). Status200 viser dem i Slack-beskeder ved at uploade hvert enkelt til dit arbejdsområde som en privat fil, hvilket kræver bot-scopet files:write. Det genererede manifest indeholder det.
Hvis du har oprettet din Slack-app ud fra et ældre manifest, så tilføj files:write under OAuth & Permissions > Bot Token Scopes (eller opdatér appen ud fra det aktuelle manifest). Vælg derefter Connect with Slack igen under Projektindstillinger > Arbejdsområde > Slack, så det nye scope bliver givet. Indtil da vises hvert skærmbillede som sin alternative tekst.
Vagt-brugergrupper
At holde en vagtplans Slack-brugergruppe lig med dem, der har vagt (se Vagt-brugergrupper), kræver bot-scopes usergroups:read og usergroups:write. Det genererede manifest indeholder dem.
Hvis du har oprettet din Slack-app ud fra et ældre manifest, så tilføj usergroups:read og usergroups:write under OAuth & Permissions > Bot Token Scopes (eller opdatér appen ud fra det aktuelle manifest). Vælg derefter Connect with Slack igen under Projektindstillinger > Arbejdsområde > Slack, så de nye scopes bliver givet. Indtil da siger vagtplanens kort, at Status200s Slack-app endnu ikke må ændre brugergrupper.
Apps oprettet ud fra et ældre manifest
En Slack-app, der er oprettet ud fra et tidligere Status200-manifest, registrerer /incident og /maintenance som egne kommandoer, og de kan støde sammen med andre apps' kommandoer med samme navn. De virker stadig og åbner de samme formularer som /status200 incident og /status200 maintenance. For at erstatte dem med /status200 skal du opdatere appen ud fra det manifest, din server genererer: på api.slack.com/apps åbner du appens App Manifest, indsætter manifestet og gemmer.
En app, der er oprettet før /status200 page, skal have den samme opdatering: indtil den har fået den, kan /status200 page ikke se, hvem du nævner med @, og åbner en formular, hvor du vælger dem, i stedet for at tilkalde dem med det samme. Vælg derefter Connect with Slack igen under Projektindstillinger > Arbejdsområde > Slack, så det users:read.email-scope, manifestet tilføjer, bliver givet: med det findes en person, hvis Slack-konto ikke er forbundet med Status200, på sin e-mailadresse.
En app, der er oprettet før fanen Home, har brug for den samme opdatering: indtil den har den, viser Slack ingen fane Home for appen, og appen slår ingen hilsen op i en kanal, den tilføjes til. Opdateringen slår fanen til og abonnerer appen på begivenhederne app_home_opened og member_joined_channel. Den tilføjer intet scope, så intet skal forbindes igen.
Netværksadgang for selvhostede installationer
Trafikretning og endpoints
| Trafik | Påkrævet adgang |
|---|---|
| Status200 til Slack | DNS og udgående HTTPS på TCP 443 til slack.com for Web API-kald og udveksling af OAuth-token; hooks.slack.com for svar-URL'er fra kommandoer og notifikationer via incoming webhooks, når de bruges |
| Slack til Status200 | Offentlig HTTPS på TCP 443 til de fire POST-ruter nedenfor, for den fulde integration |
| Brugerens browser til Status200 | Adgang til dashboardet og OAuth-omdirigeringer til /api/slack/auth/:projectId/:userId og /api/slack/auth/:projectId/:userId/user; de kan forblive tilgængelige via brugerens VPN |
De udgående domæner beskriver Status200s Slack-integration, ikke en fuldstændig tilladelsesliste for Slack-klienter eller hver Slack-funktion. En Slack-incoming webhook hostes af Slack: Status200 sender til den, så den er ikke et indgående endpoint på din server. Se Slacks vejledning til incoming webhooks.
Videresend disse callbacks til Status200 gennem dens ingress:
| Metode og sti | Formål |
|---|---|
POST /api/slack/events | Verificering af Events API, reaktioner, fastgørelser, omtaler og beskeder |
POST /api/slack/interactive | Knapper, genveje, indsendte modaler og en ældre apps /incident og /maintenance |
POST /api/slack/options-load | Anmodninger om valgmuligheder i interaktive menuer |
POST /api/slack/command | Kommandoen /status200 |
OAuth er en omdirigering i browseren efterfulgt af en tokenudveksling på serveren. Manifestet registrerer /api/slack/auth som præfiks for omdirigerings-URL'en, og Status200 tilføjer projekt- og brugerstierne, når den starter autorisationen. Adgang fra browseren alene lader ikke Slack levere events eller klik på knapper.
Private installationer og sikkerhed for callbacks
Udgiv Slack-callbacks fra en privat installation
Brug offentlig DNS og en gateway med et offentligt betroet HTTPS-certifikat, en komplet certifikatkæde og en privat rute til din Status200-ingress. Tillad indgående TCP 443 til gatewayen, og videresend kun de fire callback-ruter ovenfor. En privat ClusterIP, et internt DNS-navn eller en medarbejders VPN-forbindelse kan Slack ikke nå. Split DNS kan holde dashboardet og OAuth-ruterne private under samme værtsnavn.
Generér manifestet igen, og opdatér Slack-appen efter en ændring af værtsnavnet.
Bevar gennem gatewayen:
- metoden, stien, forespørgselsstrengen og den oprindelige body;
Content-Type,X-Slack-SignatureogX-Slack-Request-Timestamp;- den offentlige vært og HTTPS-skemaet, via betroede proxyheadere.
Undtag callback-ruterne fra browser-SSO, CAPTCHA og proxyens loginsider, og behold Status200s kontrol af signing secret og tidsstempel. Hold serverens ur synkroniseret: En anmodning, der afviger mere end fem minutter, afvises. Slack dokumenterer verificering af anmodningers signatur; en kontrol af kilde-IP erstatter den ikke.
Kontrollér adgangen, og forstå begrænsningerne
- Bekræft request-URL'en under Event Subscriptions i Slack-appen. Slack sender en POST-challenge og kontrollerer TLS.
- Send en testnotifikation, kør en slash-kommando, tryk på en knap i en hændelsesbesked, og udløs et abonneret event.
- Gennemgå gatewayens og Status200s logs for mislykkede leveringer, uden at logge hemmeligheder.
Slack forventer hurtige kvitteringer, herunder et svar inden for tre sekunder ved interaktioner. Et GET fra browseren eller en udgående besked, der lykkes, bekræfter ikke disse POST-callbacks.
Hvis al indgående forbindelse er forbudt, kan en allerede autoriseret app stadig sende beskeder med udgående HTTPS, men events, knapper, genveje og kommandoer kan ikke fungere. Status200s manifest bruger HTTP-callbacks og slår Socket Mode fra; at slå Slacks Socket Mode til er ikke en understøttet erstatning for disse ruter.
Indstillingerne for adgang til private netværk styrer udgående anmodninger til private destinationer. De gør ikke callbacks tilgængelige for Slack.
Fejlfinding
Forbindelsen blev ikke fuldført
Når Slack sender dig tilbage, og forbindelsen ikke blev oprettet, viser den Slack-side, du startede fra (Projektindstillinger > Arbejdsområde > Slack, eller dine egne Brugerindstillinger > Arbejdsområde > Slack, hvis du forbandt din konto), Slack blev ikke forbundet med én sætning på dit sprog, der siger hvorfor. Resten af siden indlæses som normalt, så du kan forbinde igen lige dér. Den viser aldrig, hvad Slack selv svarede: Det står i Status200-serverens log sammen med årsagen.
| Siden siger | Hvad du gør |
|---|---|
| "Dette forbindelseslink er ugyldigt, er udløbet eller er allerede brugt. Start forfra." | Linket virker én gang, i 15 minutter, i den browser, der startede det. Start forfra fra Slack-siden, og gør det færdigt i Slack inden for 15 minutter i samme browser. |
| "Du har ikke tilladelse til at forbinde dette projekt til Slack." | At installere Status200 i Slack kræver Project Owner, Project Admin eller Project Member. Det kontrolleres igen, når Slack sender dig tilbage, så en rolle, der er fjernet i mellemtiden, afslutter også forbindelsen her. |
| "Du er ikke længere medlem af dette projekt." | For at forbinde din egen Slack-konto skal du være medlem af projektet, når Slack sender dig tilbage. |
| "Dette projekt er endnu ikke forbundet til et Slack-arbejdsområde." | Installér først Status200 i Slack fra Projektindstillinger > Arbejdsområde > Slack, og forbind derefter din egen konto. |
| "Du loggede ind i et andet Slack-arbejdsområde end det, dette projekt er forbundet til." | Forbind din konto, mens du er logget ind i det Slack-arbejdsområde, projektet er installeret i. |
| "Du loggede ind i Slack som en anden end den person, der trykkede på forbindelsesknappen i Slack, så intet blev forbundet." | En knap Connect Slack account virker kun for den Slack-konto, der trykkede på den. Log ind i Slack som dig selv, eller bed den person, der trykkede på den, om at trykke på den. |
| "Forbindelsen blev annulleret, så intet blev ændret." | Anmodningen blev ikke tilladt i Slack. Start forfra, og tillad den. |
| "Slack er ikke sat op på denne Status200-server." | Angiv SLACK_APP_CLIENT_ID og SLACK_APP_CLIENT_SECRET (se Miljøvariabler), og genstart Status200. |
| "Status200 kunne ikke fuldføre forbindelsen. Prøv igen." | Slack svarede med en fejl, eller en anmodning eller en skrivning mislykkedes under afslutningen. Status200-serverens log siger hvilken. Prøv igen; hvis det bliver ved, så tjek loggen og Slack-appens indstillinger. |
Andre problemer
Slack kan ikke bekræfte request-URL'en til events
Status200 besvarer kun Slacks challenge, når SLACK_APP_SIGNING_SECRET er angivet, og anmodningen når frem. Angiv signing secret, anvend konfigurationen, og prøv bekræftelsen igen. Hvis den stadig mislykkes, så kontrollér, at POST /api/slack/events kan nås fra internettet med et offentligt betroet certifikat.
Knapper og slash-kommandoer gør ingenting, men notifikationer kommer frem
Notifikationer er udgående og virker derfor uden indgående adgang. Knapper, genveje og kommandoer er indgående: Kontrollér, at Slack kan nå POST /api/slack/interactive og POST /api/slack/command, og at gatewayen bevarer body samt headerne X-Slack-Signature og X-Slack-Request-Timestamp.
Appen siger, at min Slack-konto ikke er forbundet med Status200
Knapper, formularer og kommandoer kræver, at din Slack-konto er knyttet til din Status200-bruger. Tryk på Connect Slack account i appens svar, eller åbn Brugerindstillinger > Arbejdsområde > Slack, og vælg Connect my account with Slack. Hvis du er fjernet fra projektet, siger appen det i stedet, og handlinger fra Slack afvises.
Skærmbilleder vises som tekst
Slack-appen mangler scopet files:write. Se Billeder i beskeder.