Zum Hauptinhalt springen

Telefoniestatus als Slack-Status

Anforderung​

Kollegen sehen in Slack sofort, wer gerade telefoniert – und schreiben dann lieber eine Nachricht, statt anzurufen. Rückfragen im Chat landen nicht mehr bei jemandem, der gerade ein Kundengespräch führt.

In diesem Beispiel setzt die EventBridge bei Gesprächsbeginn den Slack-Status :telephone_receiver: Im Gespräch. Nach dem Auflegen entfernt sie ihn wieder. Ein manuell gesetzter Slack-Status, etwa „Urlaub“, bleibt dabei unangetastet.

Anwendungsbeispiel

Ein Vertriebsteam mit 25 Mitarbeitern arbeitet in Slack. Statt 25 Handler anzulegen, pflegt der Administrator je Mitarbeiter eine globale Variable mit der Slack-Mitglieds-ID. Zwei Handler übertragen den Status aller Mitarbeiter. Ein neuer Mitarbeiter braucht nur eine weitere Variable.

Voraussetzungen
  • Die Option Unterstützung für verschachtelte Variablen ist aktiv (siehe unten).
  • Ein bezahlter Slack-Plan: Nur dort darf ein Admin-Token den Status anderer Mitglieder setzen. Ohne bezahlten Plan nutzen Sie die Variante mit Token je Mitarbeiter.

Vorbereitung in Slack​

  1. Legen Sie unter api.slack.com/apps eine neue App an (Create New App → From scratch).
  2. Fügen Sie unter OAuth & Permissions bei den User Token Scopes den Scope users.profile:write hinzu.
  3. Installieren Sie die App mit einem Admin- oder Owner-Konto in Ihrem Workspace (Install to Workspace).
  4. Kopieren Sie das angezeigte User OAuth Token. Es beginnt mit xoxp-.

Slack prüft die Rolle: Den Status eines Admins darf nur ein Owner-Token ändern, den eines Owners nur das Token des Primary Owners. Installieren Sie die App deshalb am besten mit dem Konto des Primary Owners.

Die Mitglieds-ID eines Mitarbeiters finden Sie in Slack im Profil unter ⋮ → Mitglieds-ID kopieren. Sie beginnt mit U, z. B. U04ABCDEF12.

EventBridge Konfiguration​

Verschachtelte Variablen aktivieren​

Aktivieren Sie den Expertenmodus. Auf dem Tab erscheint die Karte Einstellungen. Setzen Sie dort den Haken bei Unterstützung für verschachtelte Variablen.

Globale Variablen anlegen​

Legen Sie auf demselben Tab diese globalen Variablen an:

NameWertBedeutung
slackAdminTokenxoxp-…Token aus der Slack-App
slackUser_4508U04ABCDEF12Slack-Mitglieds-ID des STARFACE-Benutzers mit der Account-ID 4508
slackUser_5470U07XYZ98765… eine Zeile je Mitarbeiter

Die Account-ID eines Benutzers sehen Sie im EventBridge-Tab : Telefonieren Sie kurz und lesen Sie accountId im TelephonyStateChangedEvent ab.

Das Event​

Ändert sich der Telefoniestatus eines Benutzers, löst die STARFACE das TelephonyStateChangedEvent aus.

Beispiel: de.starface.ch.processing.bo.api.events.TelephonyStateChangedEvent
{
"accountId": 4508,
"cause": { },
"requesterAccountId": 4508,
"rootCause": { },
"telephonyState": "ACTIVE"
}

Der Wert telephonyState kennt diese Zustände:

WertBedeutung
AVAILABLEfrei
RINGINGklingelt
ACTIVEim Gespräch
QUEUE_PAUSEPause in der Warteschlange
UNAVAILABLEnicht erreichbar, z. B. kein Telefon angemeldet

Über die Schaltfläche im Event Logging übernehmen Sie das Event direkt in die Event Handling Konfiguration.

Handler 1: Status „Im Gespräch“ setzen​

  1. Event: de.starface.ch.processing.bo.api.events.TelephonyStateChangedEvent
  2. Event-Daten/Extraktion:
    • accountId $.accountId
    • telephonyState $.telephonyState
  3. Bedingung: telephonyState == "ACTIVE"
  4. Aktion: Webhook / HTTP-POST-Request
    URL: https://slack.com/api/users.profile.set
    Header:
    Content-Type: application/json; charset=utf-8
    Authorization: Bearer {{slackAdminToken}}
    Body:
{
"user": "{{slackUser_{{accountId}}}}",
"profile": {
"status_text": "Im Gespräch",
"status_emoji": ":telephone_receiver:",
"status_expiration": 0
}
}
  1. Zustand speichern (Tab Zustand-Speicherung):
    • Name slackCallStatus_{{accountId}}
    • Wert {{slackUser_{{accountId}}}}
    • TTL 12 Stunden

Der Zustand merkt sich: Diesen Status hat die EventBridge gesetzt. Handler 2 entfernt nur solche Status.

de.starface.ch.processing.bo.api.events.TelephonyStateChangedEvent
accountId
$.accountId
telephonyState
$.telephonyState
telephonyState == "ACTIVE"
user: {{slackUser_{{accountId}}}} status_text: Im Gespräch

Handler 2: Status nach dem Gespräch entfernen​

  1. Event: de.starface.ch.processing.bo.api.events.TelephonyStateChangedEvent
  2. Event-Daten/Extraktion: wie Handler 1
  3. Bedingung: telephonyState == "AVAILABLE" || telephonyState == "UNAVAILABLE"
  4. Aktion: Webhook / HTTP-POST-Request
    URL und Header: wie Handler 1
    Body:
{
"user": "{{slackCallStatus_{{accountId}}}}",
"profile": {
"status_text": "",
"status_emoji": ""
}
}
  1. Zustand speichern:
    • Name slackCallStatus_{{accountId}}
    • Wert -
    • TTL 1 Minute

Leere Werte für status_text und status_emoji löschen den Slack-Status.

So bleibt ein manueller Slack-Status erhalten​

Handler 2 liest die Mitglieds-ID aus dem Zustand slackCallStatus_<accountId>. Diesen Zustand schreibt nur Handler 1.

  • Status stammt von der EventBridge: Der Zustand enthält die Mitglieds-ID. Slack entfernt den Status.
  • Status wurde manuell gesetzt: Es gibt keinen Zustand, oder er enthält -. Slack lehnt den Aufruf ab, der manuelle Status bleibt stehen.

Handler 2 nutzt für den Request noch den alten Zustand. Das Überschreiben mit - wirkt erst für das nächste Ereignis.

Kein Ersatzwert für die Mitglieds-ID

Verwenden Sie im Feld user keinen Ersatzwert wie {{slackUser_{{accountId}}:-}}. Bei einem leeren user ändert Slack den Status des Token-Inhabers. Ohne Ersatzwert bleibt der Platzhalter für Benutzer ohne Zuordnung stehen, und Slack lehnt den Aufruf ab.

Variante: Token je Mitarbeiter​

Ohne bezahlten Slack-Plan autorisiert jeder Mitarbeiter die Slack-App einmal selbst. Das dabei ausgestellte User-Token (xoxp-…) hinterlegen Sie als globale Variable slackToken_<accountId>.

Passen Sie dann beide Handler an:

  • Header: Authorization: Bearer {{slackToken_{{accountId}}}}
  • Body Handler 1: ohne das Feld user
  • Zustand Handler 1: Wert {{slackToken_{{accountId}}}}
  • Header Handler 2: Authorization: Bearer {{slackCallStatus_{{accountId}}}}
  • Body Handler 2: ohne das Feld user

Hinweise zu Slack​

  • Slack erlaubt höchstens 10 Profiländerungen pro Minute und Mitglied. Die EventBridge wiederholt abgelehnte Aufrufe nicht; Fehler stehen im Modul-Log.
  • Ereignisse von Benutzern ohne Zuordnung, etwa Gruppen, lehnt Slack ab. Das ist erwartet und ohne Folgen.
  • Prüfen Sie die Konfiguration mit der Testfunktion des Handlers. Sie zeigt die aufgelösten Platzhalter, ohne Slack aufzurufen.

Mehr zur Syntax lesen Sie in der Platzhalter-Referenz.