Probleme mit Statusabfrage der Starface Anrufe

  • Hallo zusammen,


    ich habe ein Modul im Moduldesigner erstellt, welches bei allen Anrufen die Anrufinformationen ausliest (GetCallee, GetCaller) und diese via HttpRequest an eine Schnittstelle schickt.


    Anschließend läuft eine while-Schleife und prüft den Anrufer und/oder Angerufenen, ob diese noch am telefonieren sind (IsUserBusy()), sollte dies nicht mehr der Fall sein, wird die Info wieder via HttpRequest an die externe Schnittstelle geschickt und das Modul mit exit beendet.


    Dies funktioniert jedoch nicht immer und führt dazu, dass teilweise keine Anrufe mehr getätigt werden können. Im UCC Client wird zwar wie gehabt angezeigt, dass man jemanden anruft und auch die Zeit läuft aktiv (das Modul Log gibt auch entsprechende Meldungen aus, dass ein Anruf getätigt wurde), allerdings kann man weder etwas hören noch gehört werden.


    Hier eine Auszug aus dem Starface Log, das Modul Log funktioniert einwandfrei (z.B. eigene Log-Ausgaben: Call started [...] call ended [duration: x])


    Zitat

    [2021-04-12 08:22:28,923] [0010] ********* Call created *********
    [2021-04-12 08:22:29,835] [0010] <SIP/phonename> Channelstate is Up
    [2021-04-12 08:22:29,849] [0010] Starting call routing : <SIP/phonename> dial number <number> CallerId click2dial: <number> <<number>>
    [2021-04-12 08:22:30,038] [0010] Relevance check in "<Modulname>" on callstage always
    [2021-04-12 08:22:37,207] [0010] <SIP/phonename> Hangup Cause: Normal Clearing
    [2021-04-12 08:22:37,256] [0010] ********* Call finished *********


    Ich vermute mal, dass sich das Modul bei mehreren Anrufen eventuell selbst in die Quere kommt? Wobei ich eigentlich davon ausgegangen bin, dass das Modul für Call-Processing für jeden Anruf als eigene Instanz gestartet wird? Wenn man das ganze mit "fork" in einem eigenen Thread laufen lässt, fehlen die Informationen für den Anruf, das bringt mich also leider nicht weiter.


    Für weitere Ideen oder Hinweise über die Funktionsweise von Call-Processing Modulen, oder die Info warum das Modul einen Einfluss auf das Anrufverhalten der Anlage ausübt, obwohl "nur" Informationen abgefragt werden, wäre ich sehr dankbar.


    MfG
    Daniel

  • Ich vermute mal du meinst das hier:


    Screenshot_1.png


    Ich gehe zumindest mal davon aus, dass "always" sich auf alle ein- sowie ausgehenden Anrufe bezieht.


    Eventuell ist die Variante das ganze auf "Extended" zu stellen und ausgehende sowie eingehende Anrufe einzeln als Call Processing Entry einzustellen sinnvoller?


    Etwa so:
    Screenshot_2.png

  • Hallo Daniel


    Bei "always" kriegst du wirklich alle Anrufe, Auch z.b. wen der Mitarbeiter gerade ein Modul de-aktiviert, eine Voicemailbox Aufruft O.ä.


    Mit Incoming und Outgoing bekommst du diese nicht mit.


    Kannst du mir mal den Inhalt vom "SyncStatus" zeigen?


    MfG


    Fabian

  • Hey Fabian,


    dank für die schnellen Antworten. Ich finde es schon etwas seltsam, dass auch Modul De-/Aktivierungen ebenfalls als Anrufe zählen, aber nun gut, dann wird es einzelne auf eingehende und ausgehende Anrufe gestellt.


    Die SyncStatus Funktion macht in etwa folgendes:
    - GetCallee()
    - GetCaller()
    - HttpRequest (UpdateExternalStatus)
    - IsUserBusy(caller) / IsUserBusy(called)
    - while (calledIsBusy || callerIsBusy)
    --- sleep(1)
    --- counter++
    --- Wenn counter-Bedingung greift -> HttpRequest (UpdateExternalStatus)
    --- IsUserBusy(caller) / IsUserBusy(called)
    - Wenn while-Schleife-Bedingung nicht mehr greift -> HttpRequest (UpdateExternalStatus) -> exit


    Hier und da werden auf Unterfunktionen verwiesen, die die Abfragen usw. aufbereiten, aber die Logik sollte klar sein. Wie gesagt, meine Vermutung war z.B. auch, dass durch die Schleife evtl. andere Prozesse geblockt werden, aber fork ist scheinbar auch keine Alterantive..


    MfG
    Daniel

  • Hallo Daniel


    Wenn du es nicht forkst, hält das Modul den Anruf permanent auf, und du solltest generell nicht mehr Telefonieren können.
    Nach mir sollte es korrekt Funktionieren, wenn du es so machst:


    Im CallEntryPoint ==> SyncStatus
    -GetCallee()
    -GetCaller()
    -fork(WatchUser)
    -exit



    Eine zweite Funktion WatchUser, welche den Caller und Called entgegennimmt


    WatchUser enthält danach:
    - HttpRequest (UpdateExternalStatus)
    - IsUserBusy(caller) / IsUserBusy(called)
    - while (calledIsBusy || callerIsBusy)
    --- sleep(1)
    --- counter++
    --- Wenn counter-Bedingung greift -> HttpRequest (UpdateExternalStatus)
    --- IsUserBusy(caller) / IsUserBusy(called)
    - Wenn while-Schleife-Bedingung nicht mehr greift -> HttpRequest (UpdateExternalStatus) -> exit

  • Hey Fabian,


    das war die entscheidende Info "Eine zweite Funktion WatchUser, welche den Caller und Called entgegennimmt", keine Ahnung warum ich da selbst nicht drauf gekommen bin, dass ich die Anrufdaten ja einfach mitgeben kann.


    Jetzt funktioniert das Modul so wie es soll, super!


    Danke für deine Hilfe!


    MfG
    Daniel

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!