# Slack & Kanäle

Slack mit einem Projekt verbinden und Sitzungen über einen Kanal steuern.

Canonical page: https://beeuni.ai/docs/de/connect/slack

Ein Channel verbindet eine Chatplattform mit einem Projekt. Eine Nachricht in einem verbundenen
Channel startet eine [Sitzung](/docs/de/work/sessions). Der Agent antwortet im selben Thread.

## Live-Channels

Beeuni unterstützt derzeit vier Channel-Plattformen:

- **Slack** — verbinde Slack mit einem Klick über die von Beeuni verwaltete App oder verwende dein eigenes Bot-Token.
- **Microsoft Teams** — verbinde Teams über OAuth mit Zustimmung des Organisationsadministrators oder verwende deinen eigenen Azure Bot (experimentell; aktiviere die Funktion unter
  [Settings → Feature flags](/docs/de/feature-flags)).
- **E-Mail** — ein auf AgentMail basierender Channel (experimentell; aktiviere die Funktion unter
  [Settings → Feature flags](/docs/de/feature-flags)).
- **Sprache** — ein Echtzeit-Sprachkanal (experimentell; aktiviere die Funktion unter
  [Settings → Feature flags](/docs/de/feature-flags)). Sprich in Echtzeit mit einem Agenten.

Nur Slack und Microsoft Teams lassen sich über die CLI und das Dashboard verbinden. E-Mail
und Sprache werden über das Dashboard verwaltet. Auf dieser Seite geht es um Slack.
Für Teams gelten dieselben Regeln für Sitzungen, Identitätsverknüpfungen und Anmeldedaten.

<a id="how-a-channel-starts-a-session"></a>

## So startet ein Channel eine Sitzung

Die erste Nachricht in einem Slack-Thread oder einer Teams-Unterhaltung erstellt eine Sitzung.
Der Thread behält diese Sitzung bei, auch wenn die Sandbox beendet und fortgesetzt wird.

In einem Slack-Channel erreicht eine spätere Nachricht die Sitzung nur, wenn sie den Bot erwähnt.
Nicht markierte Antworten sind für die Personen im Thread bestimmt. Der Agent liest sie
beim nächsten Mal, wenn ihn jemand erwähnt. In einer Direktnachricht geht jede Nachricht
an die Sitzung.

Wenn ein Slack-Workspace mit mehr als einem
Projekt verbunden ist, wird bei der ersten Erwähnung eine Projektauswahl angezeigt.

<a id="identity-linking"></a>

## Identitätsverknüpfung

Beeuni verknüpft jeden Chat-Absender mit einem Beeuni-Konto, bevor der Agent für diese Person
läuft. Führe `/beeuni login` in Slack aus und folge dem Link, um dich anzumelden. Für Teams gilt
dieselbe Voraussetzung. Ein nicht verknüpfter Absender wird aufgefordert, sein Konto zu verknüpfen,
anstatt eine Sitzung zu starten.

Ein Anmeldelink kann einmal verwendet werden und läuft nach 10 Minuten ab. Ein Slack-Konto, das
mit einem Beeuni-Konto verbunden ist, kann nicht mit einem anderen verbunden werden: Führe zuerst
`/beeuni logout` aus. Wenn deine Organisation eine Zwei-Faktor-Authentifizierung verlangt,
fordert Beeuni deinen zweiten Faktor an, bevor die Verbindung hergestellt wird. Der Chat läuft dann
mit dem Faktor, mit dem du dich verbunden hast.

Jede Aktion wird mit dem verknüpften Konto der Person ausgeführt, die sie vorgenommen hat, und
unterliegt der Projektrolle dieses Kontos. Kontoinhaber und Administratoren gelten als Projektmanager.

| Aktion | Wer darf sie ausführen? |
|---|---|
| Den Bot in einer neuen Nachricht oder in seinem Thread erwähnen | Ein verknüpftes Konto mit Zugriff auf das Projekt, gemäß den Richtlinien des Channels |
| Einen Lauf stoppen | Die Person, die die beantwortete Nachricht gesendet hat, oder alle Personen, die für diese Sitzung zugelassen wurden und das Projekt weiterhin nutzen dürfen |
| Das Projekt, den Agenten, das Modell oder die Richtlinie des Channels ändern | Ein Projektmanager; in einer DM mit dem Bot jedes Projektmitglied |
| Bei einer Überprüfung handeln | Ein Projektmanager |
| Einen Connector-Aufruf genehmigen oder ablehnen | Ein Projektmanager oder die Person, die die Sitzung gestartet hat |
| Jemanden in einen `owner_approval`-Thread aufnehmen | Der Sitzungsinhaber |
| `link-bot` | Ein Projektmanager |

<a id="where-credentials-live"></a>

## Wo Anmeldedaten gespeichert werden

Das Bot-Token eines verbundenen Channels ist ein Connector-spezifisches
[Secret](/docs/de/project/secrets). Es wird nicht auf der Secrets-Seite des Projekts angezeigt.
Beeuni fügt es niemals in eine Sandbox ein. Beeuni löst das Token serverseitig auf, wenn der Agent
Chatnachrichten sendet oder liest.

<a id="connect-slack"></a>

## Slack verbinden

### Verbindung starten
Führe in der CLI Folgendes aus:

```
beeuni channels connect
```

Auf einem Host, auf dem die gemeinsame Slack-App eingerichtet ist (zum Beispiel Beeuni Cloud),
wird ein Installationslink mit einem Klick ausgegeben. Öffne den Link und wähle den Workspace aus.
Klicke auf **Allow**. Füge `--wait` hinzu, damit der Befehl so lange abfragt, bis die Installation
abgeschlossen ist.

Öffne im Dashboard stattdessen die Channels-Seite des Projekts und verbinde Slack dort.
Der Installationsablauf ist derselbe.

<a id="use-your-own-slack-app"></a>

### Eigene Slack-App verwenden

Um deine eigene Slack-App zu verwenden, führe `beeuni channels manifest` aus, um ein App-Manifest
anzuzeigen. Erstelle die App unter
`api.slack.com/apps` anhand dieses Manifests. Installiere die App in deinem Workspace.
Führe anschließend Folgendes aus:

```
beeuni channels connect --manual --bot-token xoxb-... --signing-secret ...
```

### Verbindung überprüfen
```
beeuni channels status
```

Führe `beeuni channels disconnect` aus, um die Verbindung zu entfernen. Alle Flags findest du in der
[CLI-Referenz](/docs/de/cli).

Beim Verbinden von Slack wird für dich ein Eintrag `channel` [Connector](/docs/de/connect/connectors) zu `beeuni.yaml` hinzugefügt. Du musst diesen Eintrag niemals selbst erstellen.

<a id="use-slack"></a>

## Slack verwenden

Erwähne den Bot mit einer Aufgabe in einem beliebigen Channel, dem er beigetreten ist, oder öffne
eine Direktnachricht. Wie oben beschrieben, behält der Thread seine Sitzung bei. Erwähne den Bot
in einem Channel-Thread erneut, um die Unterhaltung fortzusetzen. Bei einer bloßen Erwähnung ohne
Aufgabe wirst du aufgefordert, eine Aufgabe hinzuzufügen, statt eine Sitzung zu starten.

<a id="what-the-agent-can-read"></a>

## Was der Agent lesen kann

Der Agent liest Slack über den Slack-[Connector](/docs/de/connect/connectors) des Projekts
(`beeuni_slack` oder den Befehl `slack` in der Sandbox). Jedes Projekt, das mit demselben
Slack-Workspace verbunden ist, verwendet denselben Bot. Daher beschränkt Beeuni jeden Lesezugriff
auf die Unterhaltungen des jeweiligen Projekts:

| Unterhaltung | Lesezugriff |
|---|---|
| Ein mit diesem Projekt verbundener Channel oder eine DM | Erlaubt |
| Ein Thread, den eine Sitzung dieses Projekts in einem beliebigen Channel gestartet oder betreten hat | Erlaubt |
| Ein Channel, eine DM oder ein Thread eines anderen Projekts | Verweigert |
| Eine Unterhaltung, mit der kein Projekt verbunden ist | Nur erlaubt, solange kein anderes Projekt mit dem Workspace verbunden ist |

Bei einem verweigerten Lesezugriff antwortet `403` mit dem Grund `conversation_not_in_project` und einer Nachricht,
die die Unterhaltung benennt. Um eine Unterhaltung zu lesen, mit der kein Projekt verbunden ist,
musst du sie zuerst verbinden: Führe darin `/beeuni switch` aus und wähle dieses Projekt aus.

- Im Channelverlauf werden die Nachrichten aus dem Thread eines anderen Projekts ausgelassen.
- `get_history` und `get_thread` fügen jeder Nachricht, deren Verfasser Slack benennen kann,
  `user_name` neben der `user`-ID hinzu. Pro Lesevorgang werden bis zu 25 Personen benannt;
  ein Name, den Slack nicht innerhalb von 2 Sekunden zurückgibt, wird ausgelassen.
- `list_channels` listet alle öffentlichen Channels sowie die privaten Channels und DMs auf,
  die der Agent lesen darf.
- `channel_info` antwortet für jeden öffentlichen Channel. Für einen privaten Channel oder eine DM
gilt die obige Tabelle.
- `file_info` antwortet, wenn die Datei in einer Unterhaltung geteilt wurde, die der Agent lesen darf,
  oder in einem Thread dieses Projekts. `slack download` folgt derselben Regel: Wird eine Datei nur in der Unterhaltung
  eines anderen Projekts geteilt, lautet die Antwort `403`. Ein Download ist auf 50 MB begrenzt und liefert
  `413` zurück.
- `search_messages` wird nur ausgeführt, solange kein anderes Projekt mit dem Workspace verbunden ist,
  da eine Suche nicht auf die Unterhaltungen eines einzelnen Projekts beschränkt werden kann.
- `list_users`, `user_info` und `auth_test` lesen das Workspace-Verzeichnis und sind
  nicht eingeschränkt.

Für Schreibzugriffe gilt eine eigene Regel (siehe unten).

<a id="what-the-agent-can-post"></a>

## Was der Agent posten kann

Posten, Dateien senden, bearbeiten, löschen, mit Reaktionen versehen, einem Channel beitreten und
Threads zuordnen folgen einer Regel: Der Agent handelt niemals innerhalb des Channels oder Threads
eines anderen Projekts.

| Ziel | Schreibzugriff |
|---|---|
| Ein Channel dieses Projekts oder ein Thread, den eine seiner Sitzungen gestartet oder betreten hat | Erlaubt |
| Ein Channel, mit dem kein Projekt verbunden ist | Erlaubt. Eine neue Nachricht startet den Thread dieses Projekts, daher kehrt eine Antwort, die den Bot erwähnt, zur Sitzung zurück |
| Eine Direktnachricht mit einer Person | Erlaubt, auch wenn die DM dieser Person mit dem Bot zu einem anderen Projekt gehört |
| Ein Channel oder eine Gruppen-DM eines anderen Projekts | Verweigert |
| Ein Thread eines anderen Projekts in einer beliebigen Unterhaltung | Verweigert: keine Antwort, Bearbeitung, Löschung oder Reaktion |

Bei einem verweigerten Schreibzugriff antwortet `403` mit dem Grund `conversation_not_in_project` und einer Nachricht,
die die Unterhaltung benennt. Für `slack send --file` und `slack bind-thread` gilt dieselbe Regel.

`channel` muss die Unterhaltungs- oder Benutzer-ID sein, etwa `C0123ABCD` oder
`U0123ABCD`, und kein Channelname. Slack veröffentlicht Beiträge anhand eines Namens, und ein Name lässt sich
nicht anhand der Regel überprüfen. Wenn Slack dennoch eine Nachricht an einem anderen Ort als der geprüften
Unterhaltung veröffentlicht, löscht Beeuni die Nachricht und verweigert den Beitrag.

Um in einem Channel zu posten, den ein anderes Projekt verwendet, führe darin `/beeuni switch` aus
und wähle dieses Projekt aus, oder poste über dieses Projekt.

<a id="control-a-session-with-slash-commands"></a>

## Sitzung mit Slash-Befehlen steuern

Gib diese Befehle in Slack als `/beeuni <command>` ein oder als normalen Text in einer DM. Slash-Befehle
werden im Assistant-DM-Bereich nicht ausgeführt. Dort interpretiert Beeuni dieselben Wörter als normalen
Text.

| Befehl | Funktion |
|---|---|
| `login`, `logout` | Deine Slack-Identität verknüpfen oder die Verknüpfung aufheben |
| `switch`, `unbind` | Diesen Channel erneut einem Projekt zuordnen oder die Zuordnung aufheben |
| `projects` | Projekte auflisten, denen du den Channel zuordnen kannst |
| `sessions` | Kürzlich in diesem Workspace gestartete Sitzungen auflisten |
| `whoami` | Das Channel-Panel anzeigen: Projekt, Agent, Modell, Richtlinie und deine verknüpfte Identität |
| `models` | Das Modell für diesen Channel auswählen — siehe [Modelle und Schlüssel](#models-and-keys) |
| `agent <name>`, `model <id>` | Den Agenten oder das Modell für diesen Channel festlegen |
| `policy <mode>` | Festlegen, wer hier Sitzungen starten kann |
| `help` | Alle Befehle auflisten |

`policy` akzeptiert `project_open` (Standard — jedes Projektmitglied, das den Bot erwähnt,
erhält eine Sitzung), `owner_approval` oder `owner_only`. Dies ist eine Einstellung für eine einzelne
Ressource auf einem Channel, keine Rolle. Sie gewährt keine Berechtigung, die durch die Rollenprüfung
verweigert wird — siehe [Konten und Zugriff](/docs/de/accounts#per-feature-access-settings).

<a id="models-and-keys"></a>

## Modelle und Schlüssel

`/beeuni models` listet alle Modelle auf, die du hier ausführen kannst, wie in der Modellauswahl im Web:
Beeuni-Modelle und Modelle, die du über einen Provider-API-Schlüssel oder ein ChatGPT-Abonnement nutzt.
Bei jedem Modell wird angegeben, wie es bezahlt wird. Eine lange Liste erscheint als Auswahlfeld, in das du
tippen kannst. Wähle ein Modell aus oder gib `/beeuni model <id>` ein; mit `/beeuni model default` kehrst du zum
Projektstandard zurück.

Welche Schlüssel verfügbar sind, hängt von der Unterhaltung ab:

- **Eine DM mit dem Bot** — deine eigenen Schlüssel und dein ChatGPT-Abonnement sowie mit dem Projekt
  geteilte Schlüssel. Die Sitzungen darin sind nur für dich bestimmt.
- **Ein Channel oder eine Gruppen-DM** — nur Schlüssel, die mit dem gesamten Projekt geteilt werden.
  Um ein Modell mit deinen eigenen Schlüsseln auszuführen, wähle es stattdessen in einer DM aus.

Ein Modell, das Schlüssel verwendet, nutzt alle Schlüssel, die du für seinen Provider verwenden darfst.
Bei Ratenbegrenzungen werden sie abwechselnd verwendet. Das Modell des Channels wird für jeden neuen Thread
verwendet; ein Thread behält das Modell bei, mit dem er gestartet wurde. Ein Modell, das ein Thread nicht mehr
ausführen kann, wird für die betreffende Nachricht ersetzt, statt dass die Nachricht fehlschlägt. Siehe
[Provider-Schlüssel und Mitgliederzugriff](/docs/de/project/models#provider-keys-and-member-access).

Eine Folgefrage mit einem Bild wird mit einem Modell ausgeführt, das Bilder lesen kann. Wenn keines der
verfügbaren Modelle dazu in der Lage ist, wird der Agent im Prompt darüber informiert: Er sagt, dass er das Bild
nicht sehen kann, und bittet um den Text, statt zu raten.

<a id="channel-and-people-names"></a>

## Channel- und Personennamen

Slack sendet IDs wie `C0123ABCD` und `U0123ABCD`. Beeuni zeigt die Namen an, die Personen in Slack
sehen, und behält die IDs für Aktionen bei.

| Ort | Anzeige |
|---|---|
| Die Channels-Seite, `beeuni channels bindings` | `#channel` für einen öffentlichen oder privaten Channel, die Person für eine DM, die Mitglieder für eine Gruppen-DM |
| Eine Slack-Nachricht in einer Sitzung | Der Name des Absenders und `#channel` |
| Eine `slack send`-Antwort in einer Sitzung | `#channel` oder die Person bei einer DM |
| Der Sitzungstitel | Erwähnungen wie in Slack angezeigt: `@Beeuni`, nicht `<@U0123ABCD>` |
| Der Prompt des Agenten | Namen neben IDs: `Sam Rivera (U0123ABCD)`, `#general (C0123ABCD)` |
| Die Planungsschritte des Agenten in Slack | Eine Person als `@Sam Rivera`, ein Channel als `#general`. Ein Schritt benachrichtigt niemals jemanden |
| Eine Genehmigungskarte in Slack | Ein Channel-Parameter als Channel-Link, dessen Name Slack anhand deines eigenen Zugriffs anzeigt. Ein Benutzerparameter mit dem Namen der Person |

Ein Channel, den Slack nicht finden kann, wird als **Nicht verfügbarer Channel** angezeigt; seine ID bleibt erhalten.
Das passiert, wenn der Channel gelöscht oder der Bot daraus entfernt wurde. Ein Name, den Slack nicht innerhalb von
2 Sekunden zurückgibt, wird in dieser Nachricht ausgelassen. Der Prompt enthält dann nur die IDs, und der Vorgang
wartet nicht.

<a id="approvals"></a>

## Genehmigungen

Wenn ein Agent vor dem Fortfahren eine menschliche Entscheidung benötigt, erstellt er einen Prüfeintrag.
Wurde die Sitzung in diesem Thread gestartet, erscheint die Entscheidung hier als Karte mit Titel,
Zusammenfassung, Risikostufe und den Optionen **Genehmigen**, **Änderungen anfordern** und **Ablehnen**.

**Änderungen anfordern** öffnet ein Feld, in dem du beschreiben kannst, was geändert werden soll. Deine Eingabe wird
zusammen mit der Entscheidung gespeichert und an den Agenten weitergegeben, sodass er nicht ein zweites Mal fragen muss.
Die Eingabe ist optional — lässt du das Feld leer, wird der Agent angewiesen nachzufragen. Genehmigen und Ablehnen
bleiben Ein-Klick-Aktionen.

Um bei einer Überprüfung zu handeln, benötigst du ein verknüpftes Beeuni-Konto mit Schreibzugriff auf das Projekt.

<a id="stopping-a-run"></a>

## Lauf stoppen

Während der Agent arbeitet, enthält seine Live-Nachricht eine **Stoppen**-Schaltfläche. Damit wird der Lauf in der
Laufzeit beendet, nicht nur in der Nachricht — bleibt ein Lauf offen, wird die nächste Nachricht im Thread abgefangen,
statt beantwortet zu werden.

Die Person, die die beantwortete Nachricht gesendet hat, kann den Lauf stoppen. Dasselbe gilt für alle, die für diese
Sitzung zugelassen wurden, solange sie das Projekt weiterhin nutzen dürfen. Andere Personen im Channel können den Lauf
nicht stoppen; sie erhalten eine private Nachricht mit einer entsprechenden Erklärung.

<a id="what-does-not-work"></a>

## Was nicht funktioniert

- Slash-Befehle werden im Assistant-DM-Bereich nicht ausgeführt. Gib dort `/beeuni <command>` stattdessen als normalen
  Text ein.
- Andere Chatplattformen, darunter Telegram, werden derzeit nicht als Channels unterstützt.
  Nur Slack und Microsoft Teams lassen sich über die CLI und das Dashboard verbinden; E-Mail
  und Sprache werden über das Dashboard verbunden.
