7.7 KiB
Starface Modul "Busylight 2" → Umbau auf HTTP-Webhook
Übersicht
Das bestehende Modul "Busylight 2" schreibt Telefonstatus in eine MS SQL Datenbank. Wir bauen es so um, dass es stattdessen HTTP-Requests an den Busylight-Webhook sendet.
Vorher: Starface → MS SQL DB → altes Python-Script → WLED Nachher: Starface → HTTP-Webhook → Busylight-Server → WLED
Was wir ändern
- Die Funktion
UpdateDBdurch eine neue FunktionCallWebhookersetzen - Die GUI-Variablen vereinfachen (kein DB-Server/User/Passwort mehr)
- Im switch/case nur noch INCOMING/OUTGOING/CONNECTED → callstart und HANGUP → callend
Schritt-für-Schritt Anleitung
Schritt 1: Modul im Modulcreator öffnen
- Starface Admin → Module → Modulcreator
- Modul "Busylight 2" öffnen
- Tab Development auswählen
Schritt 2: GUI-Tab anpassen
-
Tab GUI öffnen
-
Folgende Felder löschen (werden nicht mehr gebraucht):
- GUI_SERVER
- GUI_PORT
- GUI_USERNAME
- GUI_PASSWORT
- GUI_RINGING (brauchen wir nicht für Webhook)
- GUI_RINGBACK
- GUI_PARKED
- GUI_CONFERENCE_ACTIVE
- GUI_LOGIN_LOGOUT
- GUI_MUSICONHOLD_TEST
- GUI_VOICEMAIL_MAIN
- GUI_VOICEMAIL_LINKED
- GUI_CONSULT
- GUI_CONFERENCE_CONSULT
- GUI_CONFERENCE_INACTIVE
- GUI_CCBS
-
Neues Feld hinzufügen:
- Name:
GUI_WEBHOOK_URL - Typ: String
- Standardwert:
http://100.95.224.14:8081 - Beschreibung:
URL des Busylight Webhook-Servers (ohne / am Ende)
- Name:
-
Die verbleibenden Felder behalten:
GUI_INCOMING=1(aktiv)GUI_OUTGOING=1(aktiv)GUI_CONNECTED= leer (nicht nötig, da INCOMING/OUTGOING schon callstart senden)GUI_HANGUP=0(aktiv, sendet callend)
Schritt 3: Neue Funktion "CallWebhook" erstellen
-
Tab Development → Links unter "Functions" auf + klicken
-
Name:
CallWebhook -
Function Settings → Input-Variablen anlegen:
loginId(Typ: String) – Die Durchwahl des Usersaction(Typ: String) – "callstart" oder "callend"
-
In den Edit-Bereich wechseln und folgende Bausteine nacheinander einfügen:
Baustein 1: Append (URL zusammenbauen)
- Aus Components → String → Append in den Edit-Bereich ziehen
- Konfiguration der Input-Variable "Strings" (mehrere Werte):
- Wert 1:
GUI_WEBHOOK_URL(By Reference ✓ – auf die Modul-Variable zeigen) - Wert 2:
/(By Reference ✗ – fester Text) - Wert 3:
loginId(By Reference ✓ – auf die Input-Variable der Funktion zeigen) - Wert 4:
/(By Reference ✗ – fester Text) - Wert 5:
action(By Reference ✓ – auf die Input-Variable der Funktion zeigen)
- Wert 1:
- Output:
result→ wird die URL z.B.http://100.95.224.14:8081/222/callstart
Baustein 2: CreateHttpUrlWithParams (URL-Objekt erstellen)
- Aus Components → Net.HTTP → CreateHttpUrlWithParams in den Edit-Bereich ziehen
- Input "url":
result(By Reference ✓ – Output vom Append) - Output:
httpUrl
Baustein 3: HttpRequest (HTTP-Request senden)
- Aus Components → Net.HTTP → HttpRequest in den Edit-Bereich ziehen
- Input "httpUrl":
httpUrl(By Reference ✓ – Output von CreateHttpUrlWithParams) - Input "method":
GET(By Reference ✗ – fester Text) - Die anderen Inputs (body, headers etc.) leer lassen
Baustein 4: Log (optional, zum Debuggen)
- Aus Components → System → Log in den Edit-Bereich ziehen
- Log Level:
INFO - Message (mehrere Werte):
Busylight Webhook:(fester Text)result(By Reference ✓ – die URL die aufgerufen wurde)
Die fertige Funktion sieht so aus:
CallWebhook(loginId, action):
1. Append([GUI_WEBHOOK_URL, "/", loginId, "/", action]) → result
2. CreateHttpUrlWithParams(result) → httpUrl
3. HttpRequest(httpUrl, "GET")
4. Log("INFO", ["Busylight Webhook: ", result])
Schritt 4: Funktion "UpdateDB" löschen
- Links unter "Functions" die Funktion UpdateDB auswählen
- Löschen (X-Button)
Schritt 5: Call-Funktion anpassen
In der Funktion Call den switch(_uciCallState) Block anpassen:
case 'INCOMING' ändern:
- Den alten
UpdateDB(_loginId, GUI_INCOMING)Aufruf löschen - Stattdessen: CallWebhook reinziehen
loginId=_loginId(By Reference ✓)action=callstart(By Reference ✗, fester Text)
case 'OUTGOING' ändern:
- Den alten
UpdateDB(_loginId, GUI_OUTGOING)Aufruf löschen - Stattdessen: CallWebhook reinziehen
loginId=_loginId(By Reference ✓)action=callstart(By Reference ✗, fester Text)
case 'CONNECTED' ändern:
- Den alten
UpdateDBAufruf löschen - Diesen case kann man auch komplett löschen (INCOMING/OUTGOING decken den Start ab)
- ODER: CallWebhook mit
callstarteinsetzen (schadet nicht, ist idempotent)
case 'HANGUP' ändern:
- Den alten
UpdateDB(_loginId, GUI_HANGUP)Aufruf löschen - Stattdessen: CallWebhook reinziehen
loginId=_loginId(By Reference ✓)action=callend(By Reference ✗, fester Text)
Alle anderen cases löschen:
- case 'RINGING' → löschen (wird nicht gebraucht)
- case 'RINGBACK' → löschen
- case 'PARKED' → löschen
- case 'CONFERENCE_ACTIVE' → löschen
- case 'LOGIN_LOGOUT' → löschen
- case 'MUSICONHOLD_TEST' → löschen
- case 'VOICEMAIL_MAIN' → löschen
- case 'VOICEMAIL_LINKED' → löschen
- case 'CONSULT' → löschen
- case 'CONFERENCE_CONSULT' → löschen
- case 'CONFERENCE_INACTIVE' → löschen
- case 'CCBS' → löschen
Ergebnis nach Umbau:
switch(_uciCallState):
case 'INCOMING':
CallWebhook(_loginId, "callstart")
case 'OUTGOING':
CallWebhook(_loginId, "callstart")
case 'HANGUP':
CallWebhook(_loginId, "callend")
Schritt 6: if-Bedingungen in den cases vereinfachen
Im alten Modul steht vor jedem UpdateDB ein if(!empty(GUI_xxx)).
Das kann vereinfacht werden zu einem einzigen Check:
case 'INCOMING':
CallWebhook(_loginId, "callstart")
Die if-Abfrage ist nicht mehr nötig, da wir keine GUI-Variablen mehr pro Status haben.
Wenn du die if-Abfragen drin lassen willst, ändere sie auf if(!empty(GUI_WEBHOOK_URL)).
Schritt 7: Register/Unregister Funktionen
Die Funktionen Register und Unregister (links unter Functions) bleiben unverändert. Sie registrieren den Call-Event-Listener beim Aktivieren/Deaktivieren des Moduls.
Schritt 8: Speichern und Testen
- Save klicken
- Apply klicken
- Unter Module → Modulinstanzen die Instanz öffnen
GUI_WEBHOOK_URLaufhttp://100.95.224.14:8081setzen- Aktivieren
- Testanruf machen und im Busylight-Dashboard prüfen ob der Telefon-Badge erscheint
Zusammenfassung der Änderungen
| Vorher | Nachher |
|---|---|
| UpdateDB → MS SQL Server | CallWebhook → HTTP GET |
| GUI_SERVER, GUI_PORT, GUI_USERNAME, GUI_PASSWORT | GUI_WEBHOOK_URL |
| 16 switch-cases | 3 switch-cases (INCOMING, OUTGOING, HANGUP) |
SQL: UPDATE [Users] SET [StatusStarface] = ... |
HTTP: GET /222/callstart |
Fehlerbehebung
Webhook kommt nicht an
- Log File im Modulcreator prüfen (Tab "Log File")
- Die URL im Log muss so aussehen:
http://100.95.224.14:8081/222/callstart - Vom Starface-Server testen:
curl http://100.95.224.14:8081/222/callstart
Falscher User wird rot
_loginIdprüfen - das ist die Starface Login-ID (= Durchwahl)- Diese muss im Busylight-Portal unter "Benutzer" → "Durchwahl" eingetragen sein
Türschild bleibt rot nach Anruf
- HANGUP-Event prüfen - wird
callendaufgerufen? - Manuell zurücksetzen:
curl http://100.95.224.14:8081/222/callend