Slack-integrasjon
Koble din selvdriftede Status200 til Slack. Du oppretter en Slack-app fra manifestet serveren din genererer, gir Status200 appens påloggingsinformasjon og kobler hvert prosjekt til et arbeidsområde. Deretter legger Status200 ut hendelser, varsler og planlagt vedlikehold i kanalene dine, og teamet ditt håndterer dem fra Slack.
Denne siden er for den som drifter Status200-serveren. Når Slack er koblet til, settes varslingsregler opp per prosjekt: se Slack.
Slik fungerer det
Slack-appen er din egen: Den er installert i arbeidsområdet ditt og snakker bare med serveren din. Trafikken går begge veier, og hver retning trenger sin egen nettverkstilgang.
Koble et prosjekt til Slack, og bruk det deretter
- Utgående: Status200 kaller Slacks Web API for å legge ut meldinger, opprette kanaler og laste opp bilder.
- Innkommende: Slack kaller fire ruter på serveren din for hendelser, klikk på knapper, menyer og skråstrekkommandoer. Hver forespørsel er signert med appens signing secret. Status200 avviser en forespørsel der signaturen ikke stemmer eller tidsstempelet er mer enn fem minutter gammelt.
Før du begynner
- Et Slack-arbeidsområde der du kan opprette og installere apper.
- Et offentlig HTTPS-vertsnavn for Status200 som Slack kan nå. Se Nettverkstilgang.
- Tilgang til serverens konfigurasjon:
config.envfor Docker Compose, eller Helm-values for Kubernetes. - For å koble til et prosjekt: rollen Project Owner, Project Admin eller Project Member i det.
Sett opp Slack-appen
Angi den offentlige URL-en
Status200 bygger appmanifestet og hver callback-URL fra
HOSTogHTTP_PROTOCOL. Sett dem til vertsnavnet Slack skal kalle, over HTTPS:Docker Compose
HOST=status200.example.com HTTP_PROTOCOL=httpsKubernetes
host: status200.example.com httpProtocol: httpsDisse verdiene genererer bare URL-er. De oppretter ikke DNS-poster, sertifikater eller brannmurregler.
Kopier appmanifestet
Åpne Prosjektinnstillinger > Arbeidsområde > Slack. Inntil Slack er satt opp på serveren, viser siden Integrating Slack with your Status200 Project med manifestet som er generert for vertsnavnet ditt. Det serveres også på
https://status200.example.com/api/slack/app-manifest.Kontroller at hver URL i manifestet begynner med det offentlige vertsnavnet ditt. Hvis ikke, retter du først
HOSTogHTTP_PROTOCOLog tar i bruk endringen.Opprett Slack-appen
Opprett en ny app fra et manifest på api.slack.com/apps, velg arbeidsområdet ditt, og lim inn manifestet. Bruk alltid manifestet din egen server genererer, slik at URL-ene i det passer til vertsnavnet ditt.
Kopier appens påloggingsinformasjon
Kopier Client ID, Client Secret og Signing Secret på appens side Basic Information under App Credentials.
Legg påloggingsinformasjonen inn 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 å holde verdiene i en Kubernetes-Secret som du administrerer selv, angir du i stedet
slackApp.existingSecret: densnameog nøkleneclientIdKey,clientSecretKeyogsigningSecretKey.Ta i bruk konfigurasjonen
Docker Compose
npm run startDette oppretter containerne på nytt med den nye
config.env.docker compose restartleser den ikke inn på nytt.Kubernetes
helm upgrade my-oneuptime oneuptime/status200 -f values.yamlNår Status200 er oppe igjen, viser Prosjektinnstillinger > Arbeidsområde > Slack en knapp Connect with Slack i stedet for manifestet.
Bekreft forespørsels-URL-en for hendelser
Bekreft forespørsels-URL-en under Event Subscriptions i Slack-appen. Status200 svarer først på Slacks challenge når signing secret er satt, så prøv igjen hvis det mislyktes mens du opprettet appen.
Koble til prosjektet
Velg Connect with Slack under Prosjektinnstillinger > Arbeidsområde > Slack, og tillat appen i Slack. Slack sender deg tilbake til samme side, som nå viser arbeidsområdet ditt.
Koble til din egen Slack-konto
Knapper, skjemaer og kommandoer handler som Status200-brukeren som er knyttet til Slack-kontoen som bruker dem. Hver person åpner Brukerinnstillinger > Arbeidsområde > Slack og velger Connect my account with Slack. Den som ikke har koblet til en konto, får der de trykket et svar med en knapp Connect Slack account, som kobler den til i ett trinn.
Miljøvariabler
Docker Compose (config.env) | Helm (values.yaml) | Påkrevd | Verdi |
|---|---|---|---|
SLACK_APP_CLIENT_ID | slackApp.clientId | Ja | Appens Client ID. Uten den viser Slack-siden oppsettveiledningen i stedet for Connect with Slack. |
SLACK_APP_CLIENT_SECRET | slackApp.clientSecret | Ja | Appens Client Secret, som brukes til å bytte koden Slack returnerer mot et token. |
SLACK_APP_SIGNING_SECRET | slackApp.signingSecret | Ja | Appens Signing Secret. Hver forespørsel fra Slack kontrolleres mot den. |
HOST | host | Ja | Det offentlige vertsnavnet ditt, uten skjema. |
HTTP_PROTOCOL | httpProtocol | Ja | https. Slack kaller bare HTTPS-URL-er. |
Hva appen kan gjøre
Manifestet setter opp disse funksjonene. Hver av dem når serveren din via ruten som vises, og fungerer derfor bare når Slack kan nå den ruten.
| Funksjon | Hva den gjør | Rute |
|---|---|---|
/status200 | Erklær en hendelse, planlegg vedlikehold, se hvem som har vakt, tilkall noen, og spør Status200 AI; /status200 help viser alle kommandoene | POST /api/slack/command |
| Snarveiene Create New Incident og Create Scheduled Event | Erklær en hendelse eller planlegg vedlikehold fra Slacks snarveier | POST /api/slack/interactive |
| Knapper og skjemaer i Status200-meldinger | Bekreft, løs, legg til et notat, endre tilstanden, kjør en vaktpolicy | POST /api/slack/interactive og POST /api/slack/options-load |
| Hendelser | Omtaler, meldinger, reaksjoner og festede elementer, for eksempel for å lagre en melding som notat | POST /api/slack/events |
| Appens fane Home | Vaktene dine og de åpne hendelsene og varslene, med knapper for å erklære en hendelse, planlegge vedlikehold, tilkalle noen og se hvem som har vakt | POST /api/slack/events og POST /api/slack/interactive |
| En hilsen i hver kanal appen legges til i | Hvordan man stiller Status200 AI et spørsmål, og hvor man legger til en varslingsregel | POST /api/slack/events |
Bilder i meldinger
Beskrivelser av hendelser og varsler kan inneholde skjermbilder, for eksempel fra en syntetisk monitor (se Vis et skjermbilde). Status200 viser dem i Slack-meldinger ved å laste opp hvert av dem til arbeidsområdet ditt som en privat fil, noe som krever bot-scopet files:write. Det genererte manifestet inneholder det.
Hvis du opprettet Slack-appen fra et eldre manifest, legger du til files:write under OAuth & Permissions > Bot Token Scopes (eller oppdaterer appen fra det gjeldende manifestet). Velg deretter Connect with Slack igjen under Prosjektinnstillinger > Arbeidsområde > Slack, slik at det nye scopet blir gitt. Inntil da vises hvert skjermbilde som sin alternative tekst.
Vakt-brukergrupper
Å holde en vaktplans Slack-brukergruppe lik dem som har vakt (se Vakt-brukergrupper) krever bot-scopene usergroups:read og usergroups:write. Det genererte manifestet inneholder dem.
Hvis du opprettet Slack-appen fra et eldre manifest, legger du til usergroups:read og usergroups:write under OAuth & Permissions > Bot Token Scopes (eller oppdaterer appen fra det gjeldende manifestet). Velg deretter Connect with Slack igjen under Prosjektinnstillinger > Arbeidsområde > Slack, slik at de nye scopene blir gitt. Inntil da sier vaktplanens kort at Status200s Slack-app ennå ikke har lov til å endre brukergrupper.
Apper opprettet fra et eldre manifest
En Slack-app som er opprettet fra et tidligere Status200-manifest, registrerer /incident og /maintenance som egne kommandoer, som kan kollidere med kommandoer med samme navn i andre apper. De virker fortsatt og åpner de samme skjemaene som /status200 incident og /status200 maintenance. For å erstatte dem med /status200 oppdaterer du appen fra manifestet serveren din genererer: på api.slack.com/apps åpner du appens App Manifest, limer inn manifestet og lagrer.
En app som er opprettet før /status200 page, trenger den samme oppdateringen: til den har fått den, kan ikke /status200 page se hvem du nevner med @, og åpner et skjema der du velger dem, i stedet for å tilkalle dem med en gang. Velg deretter Connect with Slack igjen under Prosjektinnstillinger > Arbeidsområde > Slack, slik at scopet users:read.email som manifestet legger til, blir gitt: med det blir en person hvis Slack-konto ikke er koblet til Status200, funnet via e-postadressen sin.
En app som ble opprettet før fanen Home, trenger den samme oppdateringen: til den har den, viser Slack ingen fane Home for appen, og appen publiserer ingen hilsen i en kanal den legges til i. Oppdateringen slår på fanen og abonnerer appen på eventene app_home_opened og member_joined_channel. Den legger ikke til noe scope, så ingenting må kobles til på nytt.
Nettverkstilgang for selvdriftede installasjoner
Trafikkretning og endepunkter
| Trafikk | Nødvendig tilgang |
|---|---|
| Status200 til Slack | DNS og utgående HTTPS på TCP 443 til slack.com for Web API-kall og utveksling av OAuth-token; hooks.slack.com for svar-URL-er fra kommandoer og varsler via incoming webhooks, når de brukes |
| Slack til Status200 | Offentlig HTTPS på TCP 443 til de fire POST-rutene nedenfor, for hele integrasjonen |
| Brukerens nettleser til Status200 | Tilgang til dashbordet og OAuth-omdirigeringer til /api/slack/auth/:projectId/:userId og /api/slack/auth/:projectId/:userId/user; disse kan fortsatt nås via brukerens VPN |
De utgående domenene beskriver Status200s Slack-integrasjon, ikke en fullstendig tillatelsesliste for Slack-klienter eller hver Slack-funksjon. En Slack-incoming webhook driftes av Slack: Status200 sender til den, så den er ikke et innkommende endepunkt på serveren din. Se Slacks veiledning for incoming webhooks.
Videresend disse callbackene til Status200 gjennom ingressen:
| Metode og bane | Formål |
|---|---|
POST /api/slack/events | Verifisering av Events API, reaksjoner, festede elementer, omtaler og meldinger |
POST /api/slack/interactive | Knapper, snarveier, innsendte modaler og en eldre apps /incident og /maintenance |
POST /api/slack/options-load | Forespørsler om alternativer i interaktive menyer |
POST /api/slack/command | Kommandoen /status200 |
OAuth er en omdirigering i nettleseren etterfulgt av en tokenutveksling på serveren. Manifestet registrerer /api/slack/auth som prefiks for omdirigerings-URL-en, og Status200 legger til prosjekt- og brukerbanene når den starter autorisasjonen. Tilgang fra nettleseren alene lar ikke Slack levere hendelser eller klikk på knapper.
Private installasjoner og sikkerhet for callbacker
Publiser Slack-callbackene fra en privat installasjon
Bruk offentlig DNS og en gateway med et offentlig klarert HTTPS-sertifikat, en fullstendig sertifikatkjede og en privat rute til Status200-ingressen din. Tillat innkommende TCP 443 til gatewayen, og videresend bare de fire callback-rutene ovenfor. En privat ClusterIP, et internt DNS-navn eller en ansatts VPN-tilkobling kan ikke nås av Slack. Delt DNS kan holde dashbordet og OAuth-rutene private under samme vertsnavn.
Generer manifestet på nytt og oppdater Slack-appen etter en endring av vertsnavnet.
Bevar gjennom gatewayen:
- metoden, banen, spørrestrengen og den opprinnelige bodyen;
Content-Type,X-Slack-SignatureogX-Slack-Request-Timestamp;- den offentlige verten og HTTPS-skjemaet, via klarerte proxy-headere.
Unnta callback-rutene fra nettleser-SSO, CAPTCHA og proxyens påloggingssider, og behold Status200s kontroller av signing secret og tidsstempel. Hold serverens klokke synkronisert: En forespørsel som avviker med mer enn fem minutter, avvises. Slack dokumenterer verifisering av forespørslers signatur; en kontroll av kilde-IP erstatter den ikke.
Kontroller tilgangen, og forstå begrensningene
- Bekreft forespørsels-URL-en under Event Subscriptions i Slack-appen. Slack sender en POST-challenge og kontrollerer TLS.
- Send et testvarsel, kjør en skråstrekkommando, trykk på en knapp i en hendelsesmelding, og utløs en abonnert hendelse.
- Sjekk loggene til gatewayen og Status200 for mislykkede leveranser, uten å logge hemmeligheter.
Slack forventer raske bekreftelser, blant annet et svar innen tre sekunder for interaksjoner. En GET fra nettleseren eller en vellykket utgående melding bekrefter ikke disse POST-callbackene.
Hvis all innkommende tilkobling er forbudt, kan en allerede autorisert app fortsatt sende meldinger med utgående HTTPS, men hendelser, knapper, snarveier og kommandoer kan ikke fungere. Status200s manifest bruker HTTP-callbacker og slår av Socket Mode; å slå på Slacks Socket Mode er ikke en støttet erstatning for disse rutene.
Innstillingene for tilgang til private nettverk styrer utgående forespørsler til private mål. De gjør ikke callbacker tilgjengelige for Slack.
Feilsøking
Tilkoblingen ble ikke fullført
Når Slack sender deg tilbake og tilkoblingen ikke ble opprettet, viser Slack-siden du startet fra (Prosjektinnstillinger > Arbeidsområde > Slack, eller dine egne Brukerinnstillinger > Arbeidsområde > Slack hvis du koblet til kontoen din), Slack ble ikke koblet til, med én setning på språket ditt som sier hvorfor. Resten av siden lastes som vanlig, så du kan koble til på nytt med en gang. Den viser aldri hva Slack selv svarte: Det står i Status200-serverens logg, sammen med årsaken.
| Siden sier | Hva du gjør |
|---|---|
| "Denne tilkoblingslenken er ugyldig, har utløpt eller er allerede brukt. Start på nytt." | Lenken virker én gang, i 15 minutter, i nettleseren som startet den. Start på nytt fra Slack-siden, og fullfør i Slack innen 15 minutter i samme nettleser. |
| "Du har ikke tillatelse til å koble dette prosjektet til Slack." | Å installere Status200 i Slack krever Project Owner, Project Admin eller Project Member. Det kontrolleres på nytt når Slack sender deg tilbake, så en rolle som er fjernet i mellomtiden, avslutter også tilkoblingen her. |
| "Du er ikke lenger medlem av dette prosjektet." | For å koble til din egen Slack-konto må du være medlem av prosjektet når Slack sender deg tilbake. |
| "Dette prosjektet er ennå ikke koblet til et Slack-arbeidsområde." | Installer først Status200 i Slack fra Prosjektinnstillinger > Arbeidsområde > Slack, og koble deretter til din egen konto. |
| "Du logget på et annet Slack-arbeidsområde enn det dette prosjektet er koblet til." | Koble til kontoen din mens du er logget på Slack-arbeidsområdet prosjektet er installert i. |
| "Du logget på Slack som en annen enn personen som trykket på tilkoblingsknappen i Slack, så ingenting ble koblet til." | En knapp Connect Slack account virker bare for Slack-kontoen som trykket på den. Logg på Slack som deg selv, eller be personen som trykket på den, om å trykke på den. |
| "Tilkoblingen ble avbrutt, så ingenting ble endret." | Forespørselen ble ikke tillatt i Slack. Start på nytt, og tillat den. |
| "Slack er ikke satt opp på denne Status200-serveren." | Angi SLACK_APP_CLIENT_ID og SLACK_APP_CLIENT_SECRET (se Miljøvariabler), og start Status200 på nytt. |
| "Status200 kunne ikke fullføre tilkoblingen. Prøv igjen." | Slack svarte med en feil, eller en forespørsel eller en skriving mislyktes under fullføringen. Status200-serverens logg sier hvilken. Prøv igjen; hvis det fortsetter, sjekker du loggen og innstillingene til Slack-appen. |
Andre problemer
Slack kan ikke bekrefte forespørsels-URL-en for hendelser
Status200 svarer bare på Slacks challenge når SLACK_APP_SIGNING_SECRET er satt og forespørselen når fram. Angi signing secret, ta i bruk konfigurasjonen, og prøv bekreftelsen på nytt. Hvis den fortsatt mislykkes, kontrollerer du at POST /api/slack/events kan nås fra internett med et offentlig klarert sertifikat.
Knapper og skråstrekkommandoer gjør ingenting, men varslene kommer fram
Varsler er utgående og fungerer derfor uten innkommende tilgang. Knapper, snarveier og kommandoer er innkommende: Kontroller at Slack kan nå POST /api/slack/interactive og POST /api/slack/command, og at gatewayen bevarer bodyen og headerne X-Slack-Signature og X-Slack-Request-Timestamp.
Appen sier at Slack-kontoen min ikke er koblet til Status200
Knapper, skjemaer og kommandoer trenger at Slack-kontoen din er knyttet til Status200-brukeren din. Trykk på Connect Slack account i appens svar, eller åpne Brukerinnstillinger > Arbeidsområde > Slack, og velg Connect my account with Slack. Hvis du er fjernet fra prosjektet, sier appen det i stedet, og handlinger fra Slack avvises.
Skjermbilder vises som tekst
Slack-appen mangler scopet files:write. Se Bilder i meldinger.