Zum Inhalt springen

Slack-Integration einrichten

Diese Anleitung zeigt dir, wie du Slack mit einem Arbeitsbereich von Control Center verbindest, entweder indem Control Center die App anlegt oder indem du sie selbst baust.

Für einen geführten ersten Durchlauf siehe Slack mit deinem Arbeitsbereich verbinden.

  • Die Rolle owner oder admin im Arbeitsbereich von Control Center — eine Chat-App zu verbinden ändert die Einstellungen des Arbeitsbereichs
  • Die Berechtigung, im Slack-Workspace Apps anzulegen und zu installieren
  • Nichts muss öffentlich erreichbar sein: Die Verbindung geht nach außen (Socket Mode), der Server braucht also keinen eingehenden Port, keinen Tunnel und keine Domain
Weg Du lieferst Control Center erledigt
Geführt Ein App-Konfigurationstoken (xoxe-…) Legt die App mit den richtigen Scopes, Ereignissen, Socket Mode und dem Slash-Befehl an; gibt dir die beiden Schritte, für die Slack keine API hat
In Slack erstellen Nichts Öffnet Slack mit derselben schon ausgefüllten Konfiguration; du wählst einen Workspace und bestätigst
Von Hand Die Tokens der fertigen App Prüft sie und verbindet

Nur der geführte Weg lässt die App danach auch aus Control Center verwaltbar, und genau das schaltet Den Chatbot anpassen frei. Eine App über In Slack erstellen lässt sich später zu einer verwalteten machen, indem du im Verbindungsdialog ein Konfigurationstoken einfügst.

Es gibt absichtlich keine Schaltfläche „Control Centers Slack-App installieren“. Eine verteilte Slack-App zu installieren braucht ein gemeinsames Client-Secret (Slack hat kein PKCE), und Socket Mode verteilt die Ereignisse einer App zufällig über ihre Verbindungen — eine gemeinsame App würde die Nachrichten deines Arbeitsbereichs also an die Server anderer Leute liefern. Jeder Arbeitsbereich besitzt deshalb seine eigene App, und bei den drei Wegen geht es darum, wie wenig Arbeit dich das kostet.

  1. Erzeuge auf api.slack.com/apps ein Paar App-Konfigurationstoken und kopiere das Refresh-Token (xoxe-…)
  2. Geh in Control Center zu Einstellungen → Arbeitsbereich → Allgemein und weiter zur Karte Chat-Brücken
  3. Klicke im Slack-Block auf App für mich erstellen
  4. Füge das Token ein, passe App-Name, Bot-Name, Beschreibungen und Slash-Befehl an, und klicke auf App erstellen
  5. Folge den beiden restlichen Schritten, die der Dialog zeigt, jeder ein Link nach Slack:
    • Basic Information → App-Level Tokens: erzeuge ein Token mit dem Scope connections:write (xapp-…)
    • Install App: installiere die App im Workspace und kopiere das Bot User OAuth Token (xoxb-…)
  6. Klicke auf Zugangsdaten einfügen und weiter mit Verbinden

Das Konfigurationstoken rotiert bei jeder Verwendung. Control Center speichert den rotierten Wert gleich mit, du musst es also nie wieder einfügen.

Dieselbe App, kein Konfigurationstoken — Slack öffnet dir seinen eigenen Erstellbildschirm, das Manifest ist schon ausgefüllt.

  1. Geh in Control Center zu Einstellungen → Arbeitsbereich → Allgemein und weiter zur Karte Chat-Brücken
  2. Klicke im Slack-Block auf App für mich erstellen
  3. Passe App-Name, Bot-Name, Beschreibungen und Slash-Befehl an — die gehen mit dem Link mit
  4. Klicke auf In Slack erstellen. Dein Browser öffnet die Erstellseite von Slack mit der vorausgefüllten Konfiguration
  5. Wähle den Slack-Workspace und bestätige. Scopes, Ereignisse, Socket Mode und Slash-Befehl stimmen schon
  6. Zurück in Control Center folgst du den beiden restlichen Schritten, die der Dialog zeigt:
    • Basic Information → App-Level Tokens: erzeuge ein Token mit dem Scope connections:write (xapp-…)
    • Install App: installiere die App im Workspace und kopiere das Bot User OAuth Token (xoxb-…)
  7. Klicke auf Zugangsdaten einfügen und weiter mit Verbinden

Slack meldet nicht, welche App es angelegt hat, Control Center erfährt die App-ID also nicht, und die Links in Schritt 6 führen zu deiner App-Liste, nicht direkt zu dieser App. Bot anpassen braucht ein Konfigurationstoken.

Lege eine App auf api.slack.com/apps an und richte sie so ein.

Socket Mode: schalte ihn ein und lass jede Request URL leer. Slack lehnt ein Manifest ab, das Socket Mode und Webhook-Zustellung zugleich verlangt.

Bot Token Scopes (OAuth & Permissions):

app_mentions:read
assistant:write
channels:history
chat:write
commands
groups:history
im:history
users:read
users:read.email

Event Subscriptions (Bot-Ereignisse):

app_home_opened
app_mention
message.channels
message.groups
message.im

message.channels und message.groups sorgen dafür, dass eine Antwort in einem Slack-Thread ankommt, den die Brücke schon führt. Ohne sie trifft nur die erste Erwähnung ein.

Slash-Befehl: /cc (jeder Name geht — die Brücke nimmt den Befehl, mit dem sie zuletzt aufgerufen wurde).

App Home: aktiviere den Tab Messages und lass ihn beschreibbar, damit Mitglieder dem Bot eine Direktnachricht schicken können.

Tokens: erzeuge ein App-Level-Token mit connections:write, installiere dann die App und kopiere das Bot User OAuth Token.

  1. Geh zu Einstellungen → Arbeitsbereich → Allgemein und weiter zur Karte Chat-Brücken
  2. Klicke im Slack-Block auf Slack verbinden
  3. Fülle die Felder aus:
Feld Wert Wo es in Slack liegt
Bot-Token xoxb-… OAuth & Permissions → Bot User OAuth Token
App-Token xapp-… Basic Information → App-Level Tokens (connections:write)
App-Konfigurationstoken (optional) xoxe-… Das Paar der App-Konfigurationstoken auf api.slack.com/apps

Das Präfix jedes Werts wird auf beiden Seiten geprüft, bevor irgendetwas gesendet wird. Ein Wert im falschen Feld wird beiderseits mit demselben Satz abgelehnt.

  1. Klicke auf Slack verbinden

Control Center prüft das Bot-Token mit Slacks auth.test, bevor etwas gespeichert wird, sodass ein Tippfehler dir gemeldet wird, statt zu einem Socket zu werden, der still nie funktioniert. Das App-Level-Token lässt sich nur beweisen, indem der Socket aufgeht. Ein falsches erscheint deshalb einen Moment später als Verbindungsfehler in derselben Zeile.

Ohne das optionale App-Konfigurationstoken funktioniert die Verbindung — den Bot kannst du dann nicht aus Control Center bearbeiten.

  • Speichert die Zugangsdaten im eigenen Verzeichnis des Arbeitsbereichs, neben seiner Datenbank, nur für den Eigentümer lesbar. An einen Client gehen sie nie zurück
  • Öffnet eine Socket-Mode-Verbindung für diesen Arbeitsbereich und empfängt Erwähnungen, Antworten in Slack-Threads, Direktnachrichten und Slash-Befehle
  • Nimmt jeden Slack-Thread, den die Brücke schon führte, wieder auf, sodass eine neue Verbindung bestehende Unterhaltungen fortsetzt, statt sie hängen zu lassen
  • Kostet nichts für Arbeitsbereiche ohne Chat-App: kein Socket, keine Timer, kein Verkehr

Die Slack-Zeile zeigt ein Status-Kennzeichen: Live, Verbinden…, Verbindungsfehler (daneben der Fehler von Slack selbst) oder Nicht verbunden. So prüfst du den Weg durch:

  1. Lade den Bot in Slack in einen Channel ein: /invite @your-bot-name
  2. Erwähne ihn mit einer Anfrage
  3. Eine Antwort im Slack-Thread erscheint, und in Control Center erscheint ein passender Bereich

Jedes Mitglied, das die Brücke nutzen will, verknüpft danach das eigene Konto — siehe Dein Slack-Konto verknüpfen.

Über den gestreamten Worten sitzt eine gruppierte Karte mit einer Zeile je Schritt. Die Einrichtung ist eine Zeile, deren Titel von Working on it… über Cloning … zu Starting the agent… wechselt. Das Nachdenken fügt eine Zeile Thinking… an; ist der Schritt fertig, kann darauf ein kurzer Gedanke stehen. Jedes Tool ist eine eigene Zeile (Read lib/main.dart). Die Antwort kommt als gewöhnlicher Text unter der Karte. Die Karte gilt als abgeschlossen, wenn der Zug endet, und als fehlerhaft, wenn der Lauf fehlgeschlagen ist, unterbrochen wurde oder sein Zug-Limit erreicht hat.

Die Karte geht in dem Moment auf, in dem der Bot die Erwähnung annimmt — Working on it… —, damit der Slack-Thread nicht stumm bleibt, während der Bereich noch aufgebaut wird. Deine erste Erwähnung in einem Slack-Channel legt die Unterhaltung an, und dabei werden die Repos geklont, in denen der Agent arbeitet. Die Einrichtungszeile liest dann Cloning acme/widgets…, danach Setting up Reviewer…, dann Starting the agent…, und eine Zeile Thinking…, sobald der Agent wirklich nachdenkt. Bei einem großen Repository dauert diese erste Einrichtung eine Weile; an der Karte erkennst du, dass die Anfrage läuft und nicht liegen geblieben ist. Spätere Erwähnungen im selben Slack-Thread beginnen weiter mit Working on it… und überspringen die Klon-Schritte, weil der Bereich schon da ist.

Das Nachdenken als Textwand und die Ausgabe der Tools verlassen Control Center nie — der Gedanke auf der Zeile Thinking… ist eine kurze Zeile, kein Transkript. View in Control Center auf der Karte öffnet die ganze Unterhaltung in der Desktop-App — der Link geht an deinen eigenen Server von Control Center, und der übergibt den Browser an die App.

Passiert beim Klick nichts, ist der Server, der die Nachricht geschickt hat, von dem Rechner aus nicht erreichbar, auf dem du geklickt hast (ein Server, der nur auf Loopback hört, angeklickt von einem Smartphone, zum Beispiel), oder Control Center läuft dort nicht. Ein Server ohne erreichbare Adresse schickt eine Karte ohne Schaltfläche, statt einer, die ins Leere führt.

Füge den neuen Wert im Verbindungsdialog neu ein und klicke auf Slack verbinden. Verbinden ersetzt die laufende Verbindung dieses Arbeitsbereichs, der Socket wird also mit den neuen Zugangsdaten neu aufgebaut.

Die beiden Pflicht-Tokens müssen bei jedem Verbinden da sein. Das optionale App-Konfigurationstoken behält seinen gespeicherten Wert, wenn du das Feld leer lässt, das Rotieren eines Bot-Tokens kostet dich also nicht die Möglichkeit, die App zu bearbeiten.

Klicke in der Slack-Zeile auf Trennen (nur für Admins). Der Socket schließt sich, und die Zugangsdaten werden verworfen.

Verknüpfungen von Bereichen und Nutzern bleiben absichtlich erhalten: Dieselbe App neu zu verbinden stellt jeden angebundenen Slack-Thread wieder her. Es sind Zeilen des Arbeitsbereichs, das Löschen des Arbeitsbereichs entfernt sie also ohnehin.

Lies den Fehler neben dem Kennzeichen. Ein abgelehntes Zugangsdatum (invalid_auth, not_authed, token_revoked, account_inactive) ist endgültig — die Brücke versucht es nicht weiter und wartet auf neue Tokens, denn ein widerrufenes Token endlos erneut zu versuchen bringt nur ein Rate-Limit. Füge die Tokens im Verbindungsdialog neu ein.

Ein Fehler missing_scope heißt, die App ist mit weniger Scopes installiert, als die Brücke braucht. Ergänze den fehlenden Scope, installiere die App in Slack neu und verbinde dann erneut.

Alles Vorübergehende (ein abgerissener Socket, eine kurze Störung bei Slack) verbindet sich von selbst neu, mit exponentiellem Backoff, gedeckelt bei 30 Sekunden, und die übliche Socket-Rotation von Slack setzt diesen Backoff nicht hoch.

  • Ist der Bot im Channel? Slack liefert Channel-Nachrichten nur an Apps, die Mitglied sind. Führe /invite @your-bot-name aus
  • Bist du verknüpft? Ein nicht verknüpftes Mitglied bekommt in diesem Slack-Thread eine Antwort, die erklärt, wie die Verknüpfung geht. Siehe Dein Slack-Konto verknüpfen
  • Bist du Mitglied des Arbeitsbereichs mit einer schreibenden Rolle? Einem viewer oder guest wird gesagt, die Rolle sei nur lesend. Die Brücke startet nie Arbeit für jemanden, den sie nicht zuordnen kann
  • Hat der Arbeitsbereich Agenten? Ohne Agenten wird die Nachricht gespeichert, aber niemand kann sie beantworten

Im Channel kommt eine Antwort, normale Nachrichten werden ignoriert

Abschnitt betitelt „Im Channel kommt eine Antwort, normale Nachrichten werden ignoriert“

Das ist Absicht. Außerhalb einer Direktnachricht handelt die Brücke nur bei einer Nachricht, die den Bot erwähnt, oder bei einer Antwort in einem Slack-Thread, den sie schon führt. Alles andere ist das Gespräch anderer Leute.

Antworten kommen als eine große Nachricht statt als Stream

Abschnitt betitelt „Antworten kommen als eine große Nachricht statt als Stream“

Die Zeile sagt „Live-Streaming ist für diese Slack-App aus — Antworten kommen als eine Nachricht.“ Die Streaming-Antworten von Slack brauchen die Funktion Agents & AI Apps in einem bezahlten Tarif; lehnt Slack sie ab, fragt die Brücke für den Rest der Lebensdauer dieser Verbindung nicht mehr an und postet stattdessen ganze Antworten. Verloren geht nichts — das volle Transkript liegt immer in Control Center.

Streaming braucht außerdem einen Anker im Slack-Thread. Eine Antwort ohne Slack-Thread, in den sie hineinwachsen kann, wird im Ganzen gepostet. Die Aufgabenkarte kommt so oder so an: Bei einer ganzen Antwort sitzt sie in derselben Nachricht, schon abgeschlossen.

Die Aufgabenkarten von Slack gehören zur selben neuen Oberfläche Agents & AI Apps wie das Streaming, und Slack lehnt erst beim Aufruf ab. Tut es das, behält Control Center die Antwort und lässt die Karte für den Rest der Lebensdauer dieser Verbindung weg — eine Antwort ohne Statuszeile ist besser als eine Statuszeile ohne Antwort.

„Control Center braucht ein App-Konfigurationstoken, um den Bot zu bearbeiten“

Abschnitt betitelt „„Control Center braucht ein App-Konfigurationstoken, um den Bot zu bearbeiten““

Die Zeile Bot anpassen ist deaktiviert, weil die Verbindung kein App-Konfigurationstoken hat. Das ist bei einer von Hand gebauten App oder einer App über In Slack erstellen zu erwarten — Slack hat Control Center nie gesagt, welche App es ist. Erzeuge auf api.slack.com/apps ein Token-Paar und verbinde neu, mit ausgefülltem Refresh-Token.

Slack deckelt eine einzelne Nachricht bei 40.000 Zeichen, die Brücke schneidet deshalb bei 39.000 ab und hängt einen Verweis auf Control Center an — eine gekürzte Antwort ist besser als eine, die Slack rundweg ablehnt. Der volle Text steht immer im Transkript des Bereichs.