UserState ändern via Java/UCI-API?

  • Hallo miteinander
    Auch nach längerer Zeit gelingt es mir immer noch nicht, den userState meines Users auf der Starface mit via XMPP zu beeinflussen. Einzig der Request "setChatPresenceMessage" funktioniert wie im DemoClient und gemäss API-Spezifikation!
    Gibt es eine Möglichkeit, auch den Status zu setzen, so wie das der UCC Client (Windows, iOS) auch macht?


    Im UCC-Client-Log sehe ich, dass folgende XMPP-Message abgesetzt wird:

    Code
    -- XMPP --- OUT =>
    <presence id="tO544-4674"><status>Besprechung intern</status><priority>5</priority><show>dnd</show></presence>


    Diese Message kommt dann auch auf meinem JAVA-XMPP-Client an (Smack-Debug-Window):

    Code
    <presence id="tO544-4674" to="uci-user@muster.domain.ch" from="user@muster.domain.ch/StarfaceUcClient-v6.7.0.180-PC-XYZ">
      <status>Besprechung intern</status>
      <priority>5</priority>
      <show>dnd</show>
    </presence>


    Zusätzlich wird auch folgender Event empfangen:

    Code
    <iq id="RKNU2-568728" to="uci-221@voip.fkl.ch/UCI-3.0-Demo-Client-1643228229342" from="starface.xmpp.uci@voip.fkl.ch/STARFACE" type="set">
      <query xmlns="jabber:iq:rpc">
        <methodCall>
          <methodName>ucp.v30.events.userState.userStateChanged</methodName>
          <params>
          ...
          </params>
        </methodCall>
      </query>
    </iq>


    Verschiedene Presence-Messages habe ich schon rausgeschickt um dasselbe zu erreichen - bislang ohne Erfolg...


    Nun meine Frage:
    Ist es möglich, mit dem Starface-UCI-Api oder direkt mit Smack (Presence-Message) dasselbe wie die UCC-Clients zu erreichen?


    Vielen Dank für allfällige Tips!
    Grüsse, Andreas

  • Hallo Andreas


    Ich ändere den Status jeweils via einem Event ab.


    Hier wäre der Java ein Java Code beispiel:


    Code
    UserStateBusinessObject UBO=(UserStateBusinessObject)context.provider().fetch(UserStateBusinessObject.class);
    		UserState US = UBO.getUserState(STARFACE_USER); //Den Aktuellen UserStatus abfragen, STARFACE_USER ==> DB-ID des STARFACE Benutzers.
    		US.setChatPresence(ChatPresence.AVAILABLE); //Den Chatstatus auf Erreichbar setzen
    		US.setChatPresenceMessage("Erreichbar"); //Die Chatmessage auf "Erreichbar" setzen
    		StarfaceEventService ES=(StarfaceEventService)context.provider().fetch(StarfaceEventService.class);
    		NewUserStateEvent Update = new NewUserStateEvent(STARFACE_USER, US); //Ein NewUserStateEvent erstellen
    		ES.publish(Update, context.getLog()); //Event via STARFACE Event Service für die ganze Anlage publishen.


    Es sollte etwas equivalentes im UCI geben.


    Vermutlich: https://api.starface.de/uci-3.0.2/ ==> de.starface.integration.uci.java.v30.messages.requests.getUserState() um das aktuelle Statusobjekt zu erhalten
    Danach das Chatstatus/Statusmessage anpassen
    Un zum schluss vermutlich: https://api.starface.de/uci-3.0.2/ ==> de.starface.integration.uci.java.v30.messages.events.void userStateChanged(UserState state) die neue Version des UserStates publishen.


    MfG


    Fabian

  • Hi Fabian
    Danke für die schnelle Antwort!


    Vielleicht liege ich falsch, aber zu "de.starface.integration.uci.java.v30.ucp.messages.events.UcpUserStateEvents.userStateChanged" steht in der api-dok "This event allows the UCI client to get informed when the state of the current user changes." - damit kann man nichts rausschicken - ich habe den registriert und dann bekomme ich die "userStateChanged" Meldungen wie vorher erwähnt auch mit.


    Gruss, Andreas

  • Hi Fabian
    Danke für die schnelle Antwort!


    Vielleicht liege ich falsch, aber zu "de.starface.integration.uci.java.v30.ucp.messages.events.UcpUserStateEvents.userStateChanged" steht in der api-dok "This event allows the UCI client to get informed when the state of the current user changes." - damit kann man nichts rausschicken - ich habe den registriert und dann bekomme ich die "userStateChanged" Meldungen wie vorher erwähnt auch mit.


    Gruss, Andreas


    Hi,


    mit https://api.starface.de/uci-3.…Message-java.lang.String- kannst du den Status Message setzen ("ich bin grad futtern"). Um den Presence State zu ändern (dass der grüne "Anwesend" Häkchen zu einem roten "Abwesend" Marker wird) brauchst du einen XMPP client der den entsprechenden Presence-State an den XMPP-Dienst schickt. Eine solche Methode hat die UCI leider nicht.

  • Hallo Andreas


    Wie gesagt, das war nur eine Vermutung. Es muss auf jedem fall einen Weg geben, wie die neue Präsenz publiziert wird.


    Im DemoClient finde ich das folgende:


    Code
    public static final String PROPERTY_CHAT_PRESENCE = "chatPresence";
    
    
    	public void setChatPresence(ChatPresence chatPresence) {
    		ChatPresence old = this.chatPresence;
    		this.chatPresence = chatPresence;
    		changeSupport.firePropertyChange(PROPERTY_CHAT_PRESENCE, old, chatPresence);
    	}


    MfG


    Fabian

  • Mit den Presence-Messages habe ich bereits Versuche unternommen (mit dem Smack-Debug-Window lassen sich Adhoc Pakete versenden), kriege aber die Starface nicht dazu, darauf zu reagieren und die Meldung weiterzuverbreiten wie das beim UCC-Client geschieht.
    Gibt es da spezielle Regeln für die from/to-Attribute oder sonstwie einen Kniff, damit das geht?
    NB.: mit dem Spark XMPP Client kann man sich verbinden und es scheint alles zu funtionieren, aber die Status-Aenderungen werden ebenfalls nicht verbreitet.


    Fabian, mit dem Demo-Client kann man nur die ChatPresenceMessage setzen/ändern, der Status/DND wird nur per Events empfangen und laufen aktualisiert...

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!