Slack-integration
Anslut din egenvärdade Status200 till Slack. Du skapar en Slack-app från manifestet som din server genererar, ger Status200 appens inloggningsuppgifter och ansluter varje projekt till en arbetsyta. Sedan publicerar Status200 incidenter, larm och planerat underhåll i dina kanaler, och ditt team hanterar dem direkt i Slack.
Den här sidan är till för den som driver Status200-servern. När Slack är anslutet ställs aviseringsregler in per projekt: se Slack.
Så fungerar det
Slack-appen är din egen: den är installerad i din arbetsyta och pratar bara med din server. Trafiken går åt båda hållen, och varje riktning behöver sin egen nätverksåtkomst.
Ansluta ett projekt till Slack och sedan använda det
- Utgående: Status200 anropar Slacks Web API för att publicera meddelanden, skapa kanaler och ladda upp bilder.
- Inkommande: Slack anropar fyra rutter på din server för händelser, klick på knappar, menyer och snedstreckskommandon. Varje begäran är signerad med appens signing secret. Status200 avvisar en begäran vars signatur inte stämmer eller vars tidsstämpel är mer än fem minuter gammal.
Innan du börjar
- En Slack-arbetsyta där du kan skapa och installera appar.
- Ett offentligt HTTPS-värdnamn för Status200 som Slack kan nå. Se Nätverksåtkomst.
- Åtkomst till serverns konfiguration:
config.envför Docker Compose, eller dina Helm-values för Kubernetes. - För att ansluta ett projekt: rollen Project Owner, Project Admin eller Project Member i det.
Konfigurera Slack-appen
Ange den offentliga URL:en
Status200 bygger appmanifestet och varje callback-URL från
HOSTochHTTP_PROTOCOL. Ställ in dem på värdnamnet som Slack kommer att anropa, över HTTPS:Docker Compose
HOST=status200.example.com HTTP_PROTOCOL=httpsKubernetes
host: status200.example.com httpProtocol: httpsDe här värdena genererar bara URL:er. De skapar inga DNS-poster, certifikat eller brandväggsregler.
Kopiera appmanifestet
Öppna Projektinställningar > Arbetsyta > Slack. Så länge Slack inte är konfigurerat på servern visar sidan Integrating Slack with your Status200 Project med manifestet som genererats för ditt värdnamn. Det serveras också på
https://status200.example.com/api/slack/app-manifest.Kontrollera att varje URL i manifestet börjar med ditt offentliga värdnamn. Om inte, rätta först
HOSTochHTTP_PROTOCOLoch tillämpa ändringen.Skapa Slack-appen
Skapa en ny app från ett manifest på api.slack.com/apps, välj din arbetsyta och klistra in manifestet. Använd alltid manifestet som din egen server genererar, så att dess URL:er stämmer med ditt värdnamn.
Kopiera appens inloggningsuppgifter
Kopiera Client ID, Client Secret och Signing Secret på appens sida Basic Information under App Credentials.
Lägg till inloggningsuppgifterna 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"För att hålla värdena i en Kubernetes-Secret som du själv hanterar anger du i stället
slackApp.existingSecret: dessnameoch nycklarnaclientIdKey,clientSecretKeyochsigningSecretKey.Tillämpa konfigurationen
Docker Compose
npm run startDet här återskapar containrarna med den nya
config.env.docker compose restartläser inte in den igen.Kubernetes
helm upgrade my-oneuptime oneuptime/status200 -f values.yamlNär Status200 är igång igen visar Projektinställningar > Arbetsyta > Slack en knapp Connect with Slack i stället för manifestet.
Verifiera begärande-URL:en för händelser
Verifiera begärande-URL:en under Event Subscriptions i Slack-appen. Status200 svarar på Slacks challenge först när signing secret är angiven, så försök igen om det misslyckades medan du skapade appen.
Anslut projektet
Välj Connect with Slack under Projektinställningar > Arbetsyta > Slack och tillåt appen i Slack. Slack skickar tillbaka dig till samma sida, som nu visar din arbetsyta.
Anslut ditt eget Slack-konto
Knappar, formulär och kommandon agerar som den Status200-användare som är kopplad till Slack-kontot som använder dem. Varje person öppnar Användarinställningar > Arbetsyta > Slack och väljer Connect my account with Slack. Den som inte har anslutit ett konto får där de tryckte ett svar med knappen Connect Slack account, som ansluter det i ett steg.
Miljövariabler
Docker Compose (config.env) | Helm (values.yaml) | Obligatorisk | Värde |
|---|---|---|---|
SLACK_APP_CLIENT_ID | slackApp.clientId | Ja | Appens Client ID. Utan den visar Slack-sidan konfigurationsguiden i stället för Connect with Slack. |
SLACK_APP_CLIENT_SECRET | slackApp.clientSecret | Ja | Appens Client Secret, som används för att byta koden som Slack returnerar mot en token. |
SLACK_APP_SIGNING_SECRET | slackApp.signingSecret | Ja | Appens Signing Secret. Varje begäran från Slack kontrolleras mot den. |
HOST | host | Ja | Ditt offentliga värdnamn, utan schema. |
HTTP_PROTOCOL | httpProtocol | Ja | https. Slack anropar bara HTTPS-URL:er. |
Vad appen kan göra
Manifestet konfigurerar de här funktionerna. Var och en når din server via den angivna rutten och fungerar därför bara när Slack kan nå den rutten.
| Funktion | Vad den gör | Rutt |
|---|---|---|
/status200 | Deklarera en incident, schemalägg underhåll, se vem som har jour, larma någon och fråga Status200 AI; /status200 help visar alla kommandon | POST /api/slack/command |
| Genvägarna Create New Incident och Create Scheduled Event | Deklarera en incident eller schemalägg underhåll från Slacks genvägar | POST /api/slack/interactive |
| Knappar och formulär i Status200-meddelanden | Kvittera, lös, lägg till en anteckning, ändra tillståndet, kör en jourpolicy | POST /api/slack/interactive och POST /api/slack/options-load |
| Händelser | Omnämnanden, meddelanden, reaktioner och fästningar, till exempel för att spara ett meddelande som en anteckning | POST /api/slack/events |
| Appens flik Home | Dina jourpass och de öppna incidenterna och larmen, med knappar för att deklarera en incident, schemalägga underhåll, larma någon och se vem som har jour | POST /api/slack/events och POST /api/slack/interactive |
| En hälsning i varje kanal som appen läggs till i | Hur man ställer en fråga till Status200 AI, och var man lägger till en aviseringsregel | POST /api/slack/events |
Bilder i meddelanden
Beskrivningar av incidenter och larm kan innehålla skärmbilder, till exempel från en syntetisk monitor (se Visa en skärmbild). Status200 visar dem i Slack-meddelanden genom att ladda upp var och en till din arbetsyta som en privat fil, vilket kräver bot-scopet files:write. Det genererade manifestet innehåller det.
Om du skapade din Slack-app från ett äldre manifest lägger du till files:write under OAuth & Permissions > Bot Token Scopes (eller uppdaterar appen från det aktuella manifestet). Välj sedan Connect with Slack igen under Projektinställningar > Arbetsyta > Slack, så att det nya scopet beviljas. Fram till dess visas varje skärmbild som sin alternativa text.
Jouranvändargrupper
Att hålla ett schemas användargrupp i Slack lika med dem som har jour (se Jouranvändargrupper) kräver bot-scopen usergroups:read och usergroups:write. Det genererade manifestet innehåller dem.
Om du skapade din Slack-app från ett äldre manifest lägger du till usergroups:read och usergroups:write under OAuth & Permissions > Bot Token Scopes (eller uppdaterar appen från det aktuella manifestet). Välj sedan Connect with Slack igen under Projektinställningar > Arbetsyta > Slack, så att de nya scopen beviljas. Fram till dess säger schemats kort att Status200s Slack-app inte får ändra användargrupper än.
Appar skapade från ett äldre manifest
En Slack-app som skapats från ett tidigare Status200-manifest registrerar /incident och /maintenance som egna kommandon, som kan krocka med kommandon med samma namn i andra appar. De fungerar fortfarande och öppnar samma formulär som /status200 incident och /status200 maintenance. För att ersätta dem med /status200 uppdaterar du appen från manifestet som din server genererar: på api.slack.com/apps öppnar du appens App Manifest, klistrar in manifestet och sparar.
En app som skapades före /status200 page behöver samma uppdatering: tills den har fått den kan /status200 page inte känna igen vem du nämner med @, och öppnar ett formulär där du väljer dem i stället för att larma dem direkt. Välj sedan Connect with Slack igen under Projektinställningar > Arbetsyta > Slack, så att scopet users:read.email som manifestet lägger till beviljas: med det hittas en person vars Slack-konto inte är anslutet till Status200 via sin e-postadress.
En app som skapades före fliken Home behöver samma uppdatering: tills den har den visar Slack ingen flik Home för appen, och appen publicerar ingen hälsning i en kanal den läggs till i. Uppdateringen slår på fliken och prenumererar appen på händelserna app_home_opened och member_joined_channel. Den lägger inte till något scope, så inget behöver anslutas igen.
Nätverksåtkomst för egenvärdade installationer
Trafikriktning och slutpunkter
| Trafik | Nödvändig åtkomst |
|---|---|
| Status200 till Slack | DNS och utgående HTTPS på TCP 443 till slack.com för Web API-anrop och utbyte av OAuth-token; hooks.slack.com för svars-URL:er från kommandon och aviseringar via incoming webhooks, när de används |
| Slack till Status200 | Offentlig HTTPS på TCP 443 till de fyra POST-rutterna nedan, för den fullständiga integrationen |
| Användarens webbläsare till Status200 | Åtkomst till dashboarden och OAuth-omdirigeringar till /api/slack/auth/:projectId/:userId och /api/slack/auth/:projectId/:userId/user; de kan fortsatt nås via användarens VPN |
De utgående domänerna beskriver Status200s Slack-integration, inte en fullständig tillåtelselista för Slack-klienter eller varje Slack-funktion. En Slack-incoming webhook drivs av Slack: Status200 skickar till den, så den är ingen inkommande slutpunkt på din server. Se Slacks guide för incoming webhooks.
Vidarebefordra de här callbacks till Status200 via dess ingress:
| Metod och sökväg | Syfte |
|---|---|
POST /api/slack/events | Verifiering av Events API, reaktioner, fästningar, omnämnanden och meddelanden |
POST /api/slack/interactive | Knappar, genvägar, inskickade modaler och en äldre apps /incident och /maintenance |
POST /api/slack/options-load | Begäranden om alternativ i interaktiva menyer |
POST /api/slack/command | Kommandot /status200 |
OAuth är en omdirigering i webbläsaren följd av ett tokenutbyte på servern. Manifestet registrerar /api/slack/auth som prefix för omdirigerings-URL:en, och Status200 lägger till projekt- och användarsökvägarna när den startar auktoriseringen. Enbart åtkomst från webbläsaren låter inte Slack leverera händelser eller klick på knappar.
Privata installationer och säkerhet för callbacks
Publicera Slack-callbacks från en privat installation
Använd offentlig DNS och en gateway med ett offentligt betrott HTTPS-certifikat, en fullständig certifikatkedja och en privat rutt till din Status200-ingress. Tillåt inkommande TCP 443 till gatewayen och vidarebefordra bara de fyra callback-rutterna ovan. En privat ClusterIP, ett internt DNS-namn eller en anställds VPN-anslutning kan Slack inte nå. Med delad DNS kan dashboarden och OAuth-rutterna förbli privata under samma värdnamn.
Generera om manifestet och uppdatera Slack-appen efter ett byte av värdnamn.
Bevara genom gatewayen:
- metoden, sökvägen, frågesträngen och den ursprungliga bodyn;
Content-Type,X-Slack-SignatureochX-Slack-Request-Timestamp;- den offentliga värden och HTTPS-schemat, via betrodda proxyhuvuden.
Undanta callback-rutterna från webbläsar-SSO, CAPTCHA och proxyns inloggningssidor, och behåll Status200s kontroller av signing secret och tidsstämpel. Håll serverns klocka synkroniserad: en begäran som avviker mer än fem minuter avvisas. Slack dokumenterar verifiering av begärandens signatur; en kontroll av käll-IP ersätter den inte.
Kontrollera åtkomsten och förstå begränsningarna
- Verifiera begärande-URL:en under Event Subscriptions i Slack-appen. Slack skickar en POST-challenge och kontrollerar TLS.
- Skicka en testavisering, kör ett snedstreckskommando, tryck på en knapp i ett incidentmeddelande och utlös en prenumererad händelse.
- Kontrollera gatewayens och Status200s loggar efter misslyckade leveranser, utan att logga hemligheter.
Slack förväntar sig snabba kvitteringar, bland annat ett svar inom tre sekunder för interaktioner. En GET från webbläsaren eller ett lyckat utgående meddelande verifierar inte de här POST-callbacks.
Om all inkommande anslutning är förbjuden kan en redan auktoriserad app fortfarande skicka meddelanden med utgående HTTPS, men händelser, knappar, genvägar och kommandon kan inte fungera. Status200s manifest använder HTTP-callbacks och stänger av Socket Mode; att slå på Slacks Socket Mode är inte en ersättning som stöds för de här rutterna.
Inställningarna för åtkomst till privata nätverk styr utgående begäranden till privata mål. De gör inte callbacks nåbara för Slack.
Felsökning
Anslutningen slutfördes inte
När Slack skickar tillbaka dig och anslutningen inte gjordes visar Slack-sidan du började från (Projektinställningar > Arbetsyta > Slack, eller dina egna Användarinställningar > Arbetsyta > Slack om du anslöt ditt konto) Slack anslöts inte, med en mening på ditt språk som säger varför. Resten av sidan laddas som vanligt, så du kan ansluta igen direkt där. Den visar aldrig vad Slack själv svarade: det står i Status200-serverns logg, tillsammans med orsaken.
| Sidan säger | Vad du gör |
|---|---|
| "Den här anslutningslänken är ogiltig, har gått ut eller har redan använts. Börja om." | Länken fungerar en gång, i 15 minuter, i webbläsaren som startade den. Börja om från Slack-sidan och slutför i Slack inom 15 minuter, i samma webbläsare. |
| "Du har inte behörighet att ansluta det här projektet till Slack." | Att installera Status200 i Slack kräver Project Owner, Project Admin eller Project Member. Det kontrolleras igen när Slack skickar tillbaka dig, så en roll som tagits bort under tiden avslutar också anslutningen här. |
| "Du är inte längre medlem i det här projektet." | För att ansluta ditt eget Slack-konto måste du vara medlem i projektet när Slack skickar tillbaka dig. |
| "Det här projektet är ännu inte anslutet till någon Slack-arbetsyta." | Installera först Status200 i Slack från Projektinställningar > Arbetsyta > Slack och anslut sedan ditt eget konto. |
| "Du loggade in i en annan Slack-arbetsyta än den som det här projektet är anslutet till." | Anslut ditt konto medan du är inloggad i den Slack-arbetsyta som projektet är installerat i. |
| "Du loggade in i Slack som någon annan än personen som tryckte på anslutningsknappen i Slack, så inget anslöts." | En knapp Connect Slack account fungerar bara för det Slack-konto som tryckte på den. Logga in i Slack som dig själv, eller be personen som tryckte på den att trycka på den. |
| "Anslutningen avbröts, så inget ändrades." | Begäran tilläts inte i Slack. Börja om och tillåt den. |
| "Slack är inte konfigurerat på den här Status200-servern." | Ange SLACK_APP_CLIENT_ID och SLACK_APP_CLIENT_SECRET (se Miljövariabler) och starta om Status200. |
| "Status200 kunde inte slutföra anslutningen. Försök igen." | Slack svarade med ett fel, eller så misslyckades en begäran eller en skrivning under slutförandet. Status200-serverns logg säger vilken. Försök igen; om det fortsätter, kontrollera loggen och Slack-appens inställningar. |
Andra problem
Slack kan inte verifiera begärande-URL:en för händelser
Status200 svarar på Slacks challenge bara när SLACK_APP_SIGNING_SECRET är angiven och begäran når fram. Ange signing secret, tillämpa konfigurationen och försök verifiera igen. Om det fortfarande misslyckas, kontrollera att POST /api/slack/events kan nås från internet med ett offentligt betrott certifikat.
Knappar och snedstreckskommandon gör ingenting, men aviseringarna kommer fram
Aviseringar är utgående och fungerar därför utan inkommande åtkomst. Knappar, genvägar och kommandon är inkommande: kontrollera att Slack kan nå POST /api/slack/interactive och POST /api/slack/command, och att gatewayen bevarar bodyn och huvudena X-Slack-Signature och X-Slack-Request-Timestamp.
Appen säger att mitt Slack-konto inte är anslutet till Status200
Knappar, formulär och kommandon kräver att ditt Slack-konto är kopplat till din Status200-användare. Tryck på Connect Slack account i appens svar, eller öppna Användarinställningar > Arbetsyta > Slack och välj Connect my account with Slack. Om du har tagits bort från projektet säger appen det i stället, och åtgärder från Slack avvisas.
Skärmbilder visas som text
Slack-appen saknar scopet files:write. Se Bilder i meddelanden.