Slack
Wenn Sie Slack als Kanal für Ihren digitalen Assistenten (oder Standalone-Skill) verwenden, geschieht Folgendes:
- Slack hostet Ihren digitalen Assistenten mittels einer Slack-App.
- Benutzer chatten mit Ihrem digitalen Assistenten über die Slack-App in der Slack-Benutzeroberfläche.
Unter Building Slack apps finden Sie eine Slack-Entwicklerdokumentation für Slack-Apps.
Nachfolgend werden die Schritte zum Erstellen eines Slack-Kanals für Digital Assistant beschrieben.
Skills und digitale Assistenten, die Sie über Slack-Kanäle verfügbar machen, können auch in Gruppenchats aufgenommen werden. Siehe Gruppenchats.
Schritt 1: Slack-Workspace erhalten
Um Ihren digitalen Assistenten (oder Standalone-Bot) in Slack verfügbar zu machen, benötigen Sie einen Slack-Workspace, in dem Sie über die erforderlichen Berechtigungen zum Erstellen einer Slack-App verfügen.
Wenn Ihnen kein derartiger Workspace zur Verfügung steht, können Sie Ihren eigenen Workspace erstellen. Siehe Seite Create a new workspace von Slack.
Schritt 2: Slack-App erstellen
-
Gehen Sie zur Seite Your Apps von Slack.
-
Klicken Sie auf Slack-App erstellen, und wählen Sie Von Grund auf aus.
-
Füllen Sie im Dialogfeld "Create a Slack App" die Felder App Name und Development Slack Workspace aus, und klicken Sie auf Create App.
Nachdem die App erstellt wurde, wird die zugehörige Seite mit allgemeinen Informationen angezeigt.
-
Scrollen Sie zum Abschnitt "App Credentials" der Seite, und notieren Sie sich die Werte für Client ID, Client Secret und Signing Secret.
Sie benötigen diese Zugangsdaten, wenn Sie den Kanal in Digital Assistant einrichten.
Schritt 3: OAuth-Geltungsbereiche für die Slack-App hinzufügen
Sie fügen OAuth-Geltungsbereiche für Berechtigungen hinzu, die Sie dem Bot und dem Benutzer erteilen möchten.
-
Wählen Sie in der linken Navigationsleiste der Webkonsole für Ihre Slack-App im Abschnitt "Features" die Option OAuth and Permissions aus.
-
Scrollen Sie zu dem Abschnitt Scopes der Seite.
-
Die Geltungsbereiche fallen in folgende Kategorien:
- Bot Token Scopes
- User Token Scopes
-
Fügen Sie im Abschnitt "Bot Token Scopes" die Geltungsbereiche hinzu, die den Berechtigungen auf Botebene entsprechen, die Sie zulassen möchten. Mindestens die folgenden Bottokengeltungsbereiche sind erforderlich:
chat:write
im:history
users:read
Je nach den Features des Skills sind möglicherweise andere Geltungsbereiche erforderlich. Beispiel: Die folgenden Geltungsbereiche sind für die Arbeit mit Anhängen erforderlich:
files:read
files:write
-
Fügen Sie im Abschnitt "User Token Scopes" die Geltungsbereiche hinzu, die den Berechtigungen auf Benutzerebene entsprechen, die Sie zulassen möchten. Die folgenden Geltungsbereiche für Benutzertoken sind erforderlich:
files:read
files:write
Abhängig von den Anforderungen Ihres Bots müssen Sie möglicherweise andere Geltungsbereiche hinzufügen.
Schritt 4: App zum Workspace hinzufügen
-
Scrollen Sie zurück zum Anfang der Seite OAuth & Permissions.
-
Klicken Sie im Abschnitt OAuth Tokens & Umleitungs-URLs auf In Workspace installieren.
Daraufhin wird eine Seite angezeigt, auf der die App demonstriert wird.
-
Klicken Sie unten auf der Seite auf Allow.
Nachdem Sie diesen Schritt abgeschlossen haben, sollten Sie die App in Ihrem Slack-Arbeitsbereich anzeigen können, indem Sie in der linken Navigationsleiste Apps auswählen.
Schritt 5: Kanal in Digital Assistant erstellen
-
Klicken Sie in Digital Assistant im linken Menü auf Kanäle, und wählen Sie Benutzer aus.
-
Klicken Sie auf + Kanal, um das Dialogfeld "Kanal erstellen" zu öffnen.
-
Geben Sie einen Namen für Ihren Kanal ein.
-
Wählen Sie Slack als Kanaltyp aus.
-
Geben Sie unter Client-ID, Client Secret und Signatur-Secret die Werte ein, die Sie beim Erstellen der Slack-App erhalten haben.
Sie können diese Werte auf der Seite "Settings" der Slack-App abrufen.
- Wenn Sie den Kanal für Gruppenchats einrichten und Nachrichten an die Gruppe senden möchten, ohne den Namen der Slack-App zu nennen, wählen Sie Nachrichten ohne App-Achtung im Gruppenchat zulassen aus.
-
Klicken Sie auf Erstellen.
-
Kopieren Sie die WebHook-URL auf der Seite "Kanäle", und fügen Sie sie an einer geeigneten Stelle in Ihrem System ein. Sie benötigen diese Angabe, um die Einrichtung der Slack-App abzuschließen.
-
Klicken Sie auf
, und wählen Sie den digitalen Assistenten oder Skill aus, den Sie mit dem Kanal verknüpfen möchten.
-
Wählen Sie in der Dropdown-Liste Weiterleiten an den digitalen Assistenten oder den Skill aus, den Sie dem Kanal zuordnen möchten.
- Aktivieren Sie das Steuerelement Kanal aktiviert.
Schritt 6: Webhook-URL in der Slack-App konfigurieren
-
Wählen Sie in der linken Navigationsleiste der Webkonsole für die Slack-App die Option Interactivity & Shortcuts aus.
-
Setzen Sie den Schalter Interactivity auf EIN.
-
Fügen Sie in die Felder Request URL und Options Load URL die Webhook-URL ein, die generiert wurde, als Sie den Kanal in Digital Assistant erstellt haben.
-
Klicken Sie auf Änderungen speichern.
-
Wählen Sie in der linken Navigationsleiste die Option OAuth & Permissions aus.
-
Klicken Sie im Feld Redirect URLs auf Add New Redirect URL.
-
Fügen Sie die Webhook-URL ein, hängen Sie
/authorizeV2
an, und klicken Sie auf Add. -
Klicken Sie auf Save URLs.
-
Wählen Sie in der linken Navigationsleiste die Option App Home aus.
-
Aktivieren Sie im Abschnitt Your App’s Presence in Slack den Schalter Always Show My Bot as Online.
-
Scrollen Sie auf der Seite nach unten zum Abschnitt Registerkarten anzeigen, und aktivieren Sie den Schalter Registerkarte "Nachrichten".
-
Aktivieren Sie das Kontrollkästchen Senden von Schrägstrichbefehlen und Nachrichten über die Registerkarte "Nachrichten" durch Benutzer zulassen.
-
Wählen Sie in der linken Navigationsleiste Event Subscriptions aus.
-
Setzen Sie den Schalter Enable Events auf EIN.
-
Fügen Sie im Feld Request URL die Webhook-URL ein.
Nachdem Sie die URL eingegeben haben, wird ein grünes Label Verified neben dem Label "Request URL" angezeigt.
-
Blenden Sie den Abschnitt Abonnement für Botereignisse der Seite ein, klicken Sie auf Add Bot User Event, und fügen Sie das folgende Ereignis hinzu:
message.im
- Wenn Sie den Bot in Gruppenchats verfügbar machen möchten, fügen Sie auch die folgenden Ereignisse hinzu:
app_mention
message.mpim
message.channels
-
Klicken Sie auf Änderungen speichern.
-
Wählen Sie in der linken Navigationsleiste die Option Manage Distribution aus.
-
Klicken Sie auf die Schaltfläche Add to Slack und dann auf Allow.
An dieser Stelle sollten Sie folgende Meldung erhalten: You've successfully installed your App in Slack.
Schritt 7: Bot in Slack testen
Wenn der Slack-Kanal und die Messagingkonfiguration abgeschlossen sind, können Sie Ihren Bot (digitalen Assistenten oder Skill) in Slack testen.
-
Öffnen Sie den Slack-Workspace, in dem Sie die App installiert haben.
-
Wählen Sie in der linken Navigationsleiste die App aus, die mit Ihrem digitalen Assistenten verknüpft ist.
- Geben Sie im Nachrichtenfeld Text ein, um mit der Kommunikation mit dem digitalen Assistenten zu beginnen.
Wenn die Meldung "Nachrichten an diese App gesendet wurde deaktiviert" in Ihrem Slack-Client angezeigt wird, starten Sie die Slack-App neu. Wenn dies das Feld nicht aktiviert, prüfen Sie, ob Sie alle erforderlichen Berechtigungen erteilt haben.
"Neue" und "klassische" Slack-Apps im Vergleich
Ab Version 20.6 von Oracle Digital Assistant basiert das Erstellen von Slack-Kanälen auf einem aktualisierten OAuth-Fluss in Slack-Apps. Dieser aktualisierte Fluss ermöglicht feiner abgestimmte Geltungsbereiche. Die Anweisungen für das Kanalsetup in dieser Dokumentation basieren auf dem neuen OAuth-Fluss.
Weitere Einzelheiten zum aktualisierten OAuth-Fluss finden Sie unter https://api.slack.com/authentication/oauth-v2.
Alle vorhandenen Kanäle, die vor Digital Assistant 20.6 erstellt wurden und auf "klassischen" Slack-Apps basieren, funktionieren weiterhin. Sie sollten diese klassischen Slack-Apps jedoch in neue Slack-Apps migrieren. Weitere Einzelheiten finden Sie unter https://api.slack.com/authentication/migration.
Unterstützte Funktionen
Slack-Kanäle in Digital Assistant unterstützen die folgenden Funktionen:
- Text (Senden und Empfangen)
- Bilder (Senden und Empfangen)
- Dateien (Senden wird teilweise, Empfangen vollständig unterstützt)
- Emojis (Senden wird teilweise, Empfangen vollständig unterstützt)
- Links
- Postbacks
- Benutzerdefinierte Eigenschaften
- Karussellkomponenten (werden jedoch vertikal anstatt horizontal gerendert)
- Listenkomponenten
Mit Slack können Sie Nachrichten mit Markdown formatieren. Siehe https://api.slack.com/reference/surfaces/formatting in der Slack-API-Dokumentation.
Wenn Sie Ihren Skill auf mehrere Kanäle mit unterschiedlichen Formatierungsfunktionen und Syntax ausrichten, können Sie grundlegende HTML-Markups in Ihren Nachrichten verwenden. Wenn Sie dies tun, wird dieses Markup automatisch in das Preisabschriftformat von Slack konvertiert, wenn die Nachricht an den Kanal übertragen wird. Dies ist besonders nützlich, wenn Sie Ihre Fähigkeiten zusätzlich zu Slack auf andere Kanäle ausrichten. Siehe Rich-Text-Formatierung in Kanälen.
Nachrichten-Constraints
Für Slack-Kanäle in Digital Assistant gelten die folgenden Nachrichten-Constraints:
- Textnachrichten
- Maximale Länge der Textnachricht: 3.000 Zeichen. Wenn die Länge 3000 überschreitet, wird der Text auf mehrere Nachrichten aufgeteilt.
- Maximale Länge des Textaktionslabels: 30 Zeichen
- Zulässige Textaktionen: Postback, URL
- Horizontale Karten
- Unterstützt? Nein. Das Layout der Karte wird in vertikal konvertiert.
- Vertikale Karten
- Maximale Länge des Titels: 3.000 Zeichen
- Maximale Länge der Beschreibung: 3.000 Zeichen
- Maximale Länge des Kartenaktionslabels: 30 Zeichen
- Maximale Anzahl der Karten: 100
- Zulässige Arten von Kartenaktionen: Postback, URL
- Zulässige Arten von Kartenlistenaktionen: Postback, URL
- Anhangsnachrichten
- Unterstützt? Ja
- Zulässige Aktionen: Postback, URL
- Aktionsschaltflächen
- Maximale Länge des globalen Aktionslabels: 30 Zeichen
- Zulässige globale Aktionen: Postback, URL
Slack-Kanalerweiterungen
Bei Slack-Channels können Sie die Funktionalität von Common Response-Komponenten um spezifische Slack-Funktionen erweitern.
Sie können auf die Erweiterungen zugreifen, indem Sie das Element channelCustomProperties
in den Metadaten der Common Response-Komponente und die entsprechenden Eigenschaften festlegen. Der Code hat das folgende Format:
...
channelCustomProperties:
- channel: "slack"
properties:
PROPERTY_NAME: "PROPERTY_VALUE"
...
Nachfolgend finden Sie die verfügbaren benutzerdefinierten Eigenschaften für Slack-Kanäle:
Name | Zulässige Werte | Gültig für... | Beschreibung |
---|---|---|---|
dropDownPlaceholder |
|
Antwortelemente | Mit dieser Eigenschaft können Sie den Platzhaltertext angeben, der in der Dropdown-Liste angezeigt wird. |
ephemeral |
|
Antwortelemente | Kann in Gruppenchats verwendet werden, um eine Nachricht nur für einen Benutzer anzuzeigen, z.B. wenn dieser Benutzer versucht, sich zu authentifizieren. |
fields |
|
Antwortelemente vom Typ text .
|
Die in dieser Eigenschaft angegebenen Zeichenfolgenwerte werden als Felder in einem Layout mit zwei Spalten (Desktop) oder in einem Layout mit einer einzelnen Spalte (Mobilgerät) angezeigt. |
renderActionsAsDropDown |
|
Antwortelemente | Standardmäßig (wenn Sie diese Eigenschaft nicht festlegen) werden Aktionen folgendermaßen angezeigt:
Wenn Sie Aktionen in einer Dropdown-Liste anzeigen möchten, setzen Sie diese Eigenschaft auf Wenn Sie Aktionen als Schaltflächen anzeigen möchten, setzen Sie diese Eigenschaft auf Wenn Sie für verschiedene Typen von Postback-Aktionen unterschiedliche Verhaltensweisen definieren möchten, können Sie ein verschachteltes Objekt mit booleschen Werten für jeden der folgenden Aktionstypen verwenden:
Zum Rendering von Aktionen in einem Dropdown-Menü verwendet Slack ein Auswahlmenü mit statischen Elementen. Siehe https://api.slack.com/reference/messaging/block-elements#static-select. |
showDatePicker |
|
Antwortelemente vom Typ text .
|
Setzen Sie diese Eigenschaft auf true , um eine Datumsauswahl neben der Textnachricht anzuzeigen.
Im Dialogfeld Status hinzufügen können Sie die Vorlage Slack-Datumsauswahl auswählen, um Beispielcode für die bedingte Anzeige einer Datumsauswahl abzurufen. Siehe auch https://api.slack.com/reference/messaging/block-elements#datepicker. |
showImageInAccessory |
|
Antwortelemente vom Typ cards .
|
Setzen Sie diese Eigenschaft auf true , um das Kartenbild auf der rechten Seite als kleines Bild und nicht als größeres zentriertes Bild anzuzeigen.
|
Im Folgenden finden Sie ein Beispiel für die Verwendung der benutzerdefinierten Eigenschaft renderActionsAsDropDown
.
responseItems:
- type:
"text"
text: "Here is a list of the UI features of the Common Response Component:"
actions:
- ...
channelCustomProperties:
- channel: "slack"
properties:
renderActionsAsDropDown: false
Im Folgenden finden Sie ein Beispiel für die Verwendung der benutzerdefinierten Eigenschaft renderActionsAsDropDown
mit verschachtelten Eigenschaften für postbackActions
, cardPostbackActions
und globalPostbackActions
.
responseItems:
- type: "text"
text: "Here is a list of the UI features of the Common Response Component:"
actions:
- ...
channelCustomProperties:
- channel: "slack"
properties:
renderActionsAsDropDown:
postbackActions: false
cardPostbackActions: true
globalPostbackActions: true
Allgemeine Informationen zu channelCustomProperties
finden Sie unter Kanalspezifische Erweiterungen.
Slack-Modale
Sie können eine Schaltfläche erstellen, um ein Slack-Modal in einer Komponente "Allgemeine Antwort" aufzurufen. Dazu setzen Sie die Aktionseigenschaft der Schaltfläche auf system.openModal
und nehmen eine Variable namens system.dialogPayload
vom Typ map
auf. Die Aktionsmetadaten sehen in etwa wie das folgende Snippet aus:
actions:
- label: "Open Dialog"
type: "postback"
payload:
action: "system.openModal"
variables:
system.dialogPayload: ${dialogPayload}
Der Freemarker-Ausdruck zur Referenzierung der Variable
system.dialogPayload
endet nicht auf .value
. Dies liegt daran, dass die Variable ein JSON-Objekt enthält und Freemarker-Ausdrücke immer als Zeichenfolge ausgewertet werden müssen. Bei Verwendung des Ausdrucks ${dialogPayload.value}
wird ein Fehler ausgelöst. Die Konvertierung eines JSON-Objekts in eine Zeichenfolge erfolgt, wenn Sie .value
weglassen.
Der Wert von system.dialogPayload
wird in der Regel in einer benutzerdefinierten Komponente festgelegt, kann aber auch inline definiert oder mit einer Komponente "Variable festlegen" verwendet werden.
Wenn Sie die Variable
system.dialogPayload
in einer benutzerdefinierten Komponente festlegen, müssen Sie die Entitywerte nicht als Optionen hartcodieren. Stattdessen können Sie über alle Entitywerte eines bestimmten Elements iterieren und dynamisch einen ausgewählten Elementtyp mit einem Optionsarray für die zulässigen Werte erstellen.
Wenn der Benutzer die Eingabe im Slack-Dialogfeld sendet, legt die Komponente "Allgemeine Antwort" den system.dialogSubmitted
-Übergang so fest, dass in einen Status übergegangen wird, in dem die übergebenen Werte verarbeitet werden. Die übermittelten Werte werden in Variablen mit demselben Namen gespeichert.
Sie können festlegen, wie die weitergeleiteten Feldwerte verarbeitet werden sollen. Die Komponente "Allgemeine Antwort" führt keine automatischen Aktualisierungen von Entitywerten durch. Sie speichert die Werte lediglich in Variablen. Sie verarbeiten diese Werte in der Regel in einer benutzerdefinierten Komponente, sodass Sie bei Bedarf zusätzliche Validierungen durchführen können. Am einfachsten ist es, wenn Sie die weitergeleiteten Feldwerte in einer Zeichenfolgenvariable speichern und die Entitywerte dann mit der Komponente "Entity abgleichen" aktualisieren.
Tipp:
Im Dialogablaufeditor (sowohl im visuellen als auch im YAML-Dialogmodus) befindet sich eine Slack-Blockkit-Vorlage mit einem stark verschachtelten Metadatenbeispiel, das für die Ausgabe vom Kit Builder typisch ist. Wenn Sie komplexe Metadaten für einen solchen Status benötigen und das Lesen vereinfachen möchten, können Sie Kartenvariablen auf Flow-Ebene verwenden, ganze JSON-Objekte, die vom Kit Builder generiert wurden, als Standardwerte in diese einfügen und die Variablen in die Metadaten integrieren.Die vollständige Dokumentation zu den Elementtypen, die in der Payload des Slack-Dialogfelds unterstützt werden, finden Sie unter https://api.slack.com/reference/block-kit/block-elements. Die in der Dialog-Payload angegebene Struktur muss mit der in der Slack-Dokumentation beschriebenen Struktur identisch sein.
Das Slack-Dialogfeld unterstützt auch das Zurücksenden eines Fehlerarrays als Antwort, wenn das Modal weitergeleitet wird. Diese Funktion wird jedoch derzeit in Common Response-Komponenten nicht unterstützt. Stattdessen sollten Sie benutzerdefinierte Validierung und mit Validierungsfehlern verknüpftes Benutzerfeedback in einer benutzerdefinierten Komponente verarbeiten.
Slack-Dialogfenster
Slack empfiehlt jetzt, Slack-Modale anstelle von Slack-Dialogfeldern zu verwenden. Weitere Informationen zum Einbinden von Slack-Modalen in den Dialogablauf finden Sie unter Slack-Modale und unter https://api.slack.com/block-kit/dialogs-to-modals.
Sie können eine Schaltfläche erstellen, um ein Slack-Dialogfenster in einer Komponente "Allgemeine Antwort" aufzurufen. Dazu setzen Sie die Aktionseigenschaft der Schaltfläche auf system.openDialog
und nehmen eine Variable namens system.dialogPayload
auf. Die Aktionsmetadaten sehen in etwa wie das folgende Snippet aus:
actions:
- label: "Edit"
type: "postback"
payload:
action: "system.openDialog"
variables:
system.dialogPayload: ${dialogPayload}
Der Freemarker-Ausdruck zur Referenzierung der Variable
system.dialogPayload
endet nicht auf .value
. Dies liegt daran, dass die Variable ein JSON-Objekt enthält und Freemarker-Ausdrücke immer als Zeichenfolge ausgewertet werden müssen. Bei Verwendung des Ausdrucks ${dialogPayload.value}
wird ein Fehler ausgelöst. Die Konvertierung eines JSON-Objekts in eine Zeichenfolge erfolgt, wenn Sie .value
weglassen.
Der Wert von system.dialogPayload
wird in der Regel in einer benutzerdefinierten Komponente festgelegt, kann aber auch inline definiert oder mit einer Komponente "Variable festlegen" verwendet werden.
Wenn Sie die Variable
system.dialogPayload
in einer benutzerdefinierten Komponente festlegen, müssen Sie die Entitywerte nicht als Optionen hartcodieren. Stattdessen können Sie über alle Entitywerte eines bestimmten Elements iterieren und dynamisch einen ausgewählten Elementtyp mit einem Optionsarray für die zulässigen Werte erstellen.
Wenn der Benutzer die Eingabe im Slack-Dialogfeld sendet, legt die Komponente "Allgemeine Antwort" den system.dialogSubmitted
-Übergang so fest, dass in einen Status übergegangen wird, in dem die übergebenen Werte verarbeitet werden. Die übermittelten Werte werden in Dialogablaufvariablen mit demselben Namen gespeichert.
Sie können festlegen, wie die weitergeleiteten Feldwerte verarbeitet werden sollen. Die Komponente "Allgemeine Antwort" führt keine automatischen Aktualisierungen von Entitywerten durch. Sie speichert die Werte nur in Dialogablaufvariablen. Sie verarbeiten diese Werte in der Regel in einer benutzerdefinierten Komponente, sodass Sie bei Bedarf zusätzliche Validierungen durchführen können. Am einfachsten ist es, wenn Sie die weitergeleiteten Feldwerte in einer Zeichenfolgenvariable speichern und die Entitywerte dann mit der Komponente "Entity abgleichen" aktualisieren.
Weitere Informationen zu anderen Eigenschaften und Elementtypen, die in der Payload des Slack-Dialogfensters unterstützt werden, finden Sie unter https://api.slack.com/dialogs#top-level_dialog_attributes. Die Struktur der Dialog-Payload muss mit der in der Slack-Dokumentation beschriebenen Struktur identisch sein.
Das Slack-Dialogfenster unterstützt auch das Zurücksenden eines Fehlerarrays als Antwort, wenn das Dialogfenster weitergeleitet wird. Diese Funktion wird jedoch derzeit in Common Response-Komponenten nicht unterstützt. Stattdessen sollten Sie benutzerdefinierte Validierung und mit Validierungsfehlern verknüpftes Benutzerfeedback in einer benutzerdefinierten Komponente verarbeiten.