Problem Darstellung extern verschickte Chat Nachricht im Windows UCC Client

  • Hallo zusammen,


    wir haben ein Problem mit der Darstellung von extern verschickten Chat Nachrichten im Windows UCC Client.


    Hintergrund ist Folgender:
    Wir möchten den Starface Chat gerne für Notifications verwenden, dazu haben wir einen einfachen Bot programmiert (basiert auf http://errbot.io/), der sich unter einem dedizierten Benutzeraccount am XMPP-Server unserer Starface anmeldet.


    Grundsätzlich funktioniert das auch sehr gut, alle Clients (Win und Mac) empfangen die vom Bot verschickten Nachrichten, nur der Windows Client zeigt die Nachrichten nicht an, nur ein leeres Fenster.
    Wenn der Bot einen Benutzer mit Windows Client neu anschreibt, öffnet sich auch das Chat Fenster mit der Meldung einer neuen Nachricht, aber es ist kein Inhalt zu sehen.
    Die Mac Clients und auch andere XMPP-Clients (z.B. Adium) zeigen die vom Bot verschickten Nachrichten ohne Probleme an. Über diese Clients kann man auch mit dem Bot interagieren (Befehl => Antwort), bei den Windows Clients wird die Antwort nicht angezeigt.


    Die Logs im Openfire Server der Starface sehen ok aus. Also der Server scheint die Nachrichten normal zu verarbeiten, sonst hätten die anderen Clients wahrscheinlich auch Probleme.


    Screenshots:


    Interaktion mit dem Bot:
    Die Ausgabe des Mac Clients ist erwartet (Ausgabe eines Textes als Antwort auf Befehl !help)


    Mac Client
    starface_mac-02.png


    Windows Client
    starface_win-01.png


    Weitere Informationen:
    Wir verwenden die aktuellsten Starface-Server (6.4.1.11) und Client Versionen (Win: 6.4.1.13, Mac: 6.4.1.2).
    Unser Bot

    • basiert auf http://errbot.io/ (verwendet die Python SleekXMPP library) - haben auch http://sendxmpp.hostname.sk/ (Perl CLI XMPP Client) ausprobiert (gleiches verhalten)
    • verwendet einen einfachen Starface-Benutzer ohne Premium Lizenz (angelegt über Starface - nicht nur über Openfire)
    • ist dauerhaft am XMPP Server angemeldet und verschickt direkte private Nachrichten an die Benutzer
    • erhält keine Fehlermeldung beim Versand. Der Server zeigt keine Fehler in den Logs
    • schreibt wahlweise alle Nutzer oder nur einen einzelnen im direkten Chat an (nicht über Gruppen)
    • kommt umgekehrt mit den Nachrichten von allen Clients zurecht, es werden alle Nachrichten korrekt empfangen, egal ob von Windows, Mac oder Adium verschickt


    Nachrichten vom alternativen XMPP Client Adium, werden im Windows Client korrekt angezeigt.


    Meine Fragen:

    • Was kann Ursache dieses Problems sein?
    • Benötigt der Windows Client evtl. eine spezielle Formatierung oder ein bestimmtes Encoding der Nachrichten?
    • Weicht der Windows Client evtl. vom XMPP Protokoll ab?
    • Wo können wir noch nach weiteren Fehlerquellen suchen?


    Danke für eure Aufmerksamkeit, über eure Unterstützung würden wir uns freuen!


    Patrick Kaiser

  • Hallo Patrick,


    vielen Dank für die ausführliche Beschreibung. Der UCC Client für Windows hat keine besonderen Anforderungen bzgl. Chat und sollte die Nachrichten auch anzeigen. Erzeug doch mal ein Client Log mit TRACE Level, in dem das Problem enthalten ist. Also: Log auf TRACE stellen. Client neu starten und dann eine solche Nachricht an den Client schicken.



    Gruß Wolfgang

  • Hallo PKaiser


    Ich hatte in Zusammenhang mit der Starface mal ein Problem mit der Kodierung zwischen 2 selbstgeschriebenen Clients.


    Im Code tritt Folgendes Problem auf:


    Mac zu Starface ==>"Hello" ==> if(Command.equals("Hello")) ==> true
    Linux zu Starface ==> "Hello" ==> if(Command.equals("Hello")) ==> true
    Windows zu Starface ==> "Hello" ==> if(Command.equals("Hello")) ==> false


    Und zwar kam das Problem von der Default Codierung der Zeichen unter Windows.


    Also (UTF8) "hello" ist nicht (ANSI (ISO-8859)) "hello".


    Nachdem ich den Zeichensatz unter Windows auf UTF-8 umgestellt hatte Funktionierten die Befehle.


    Wenn er also mit Stringbased equals Funktionen Arbeitet könnte dies eventuell die Problemursache sein.


    Ich würde sonst falls möglich den Bot mal kurz unter Windows installieren, und schauen ob dann der Windows UCC-Client reagiert.


    MfG


    Fabian

  • Hallo Wolfgang,


    vielen Dank für deine Antwort. Hier die relevanten Ausschnitte des Logfiles. 0025@starface.xxx.de/54f49696 ist dabei der Bot, 0001@starface.xxx.de/Starface UCC Client patricks-macbook-pro.local bin ich auf dem Mac-Client. Beide schicken die gleiche Nachricht "XXXTestStarfaceXXX".
    Wir können leider keine wirklichen Unterschiede erkennen (außer dass ich ein Telefon hab und der Bot nicht).


    2017-01-16 08:50:40.6822 | 24 | TRACE | UccAPI.UccChatClient.processPacket | received message 0025@starface.xxx.de/54f49696: XXXTestSta ...
    2017-01-16 08:50:40.6822 | 24 | TRACE | UccAPI.UccChatClient.processPacket | Create new chat session object
    2017-01-16 08:50:40.6822 | 24 | TRACE | UccAPI.UccChatClient.processPacket | Peer name from roster: Oro Bot
    2017-01-16 08:50:40.6822 | 24 | TRACE | UccAPI.UccChatClient.processPacket | Created new session with id 31fa2a70-3043-4391-ad3b-00fe12859db9
    2017-01-16 08:50:40.6822 | 24 | TRACE | UccAPI.UccChatSession.AddReceivedChatMessage | received message 0025@starface.xxx.de/54f49696: XXXTestSta ...
    2017-01-16 08:50:40.6822 | 1 | TRACE | UcClient.WidgetChatManager.GetChatSessionWidgetFor | Create new chat session tab
    2017-01-16 08:50:40.7282 | 1 | TRACE | UccAPI.UccFunctionKeys.SearchFunctionKeys | Search for 0025@starface.xxx.de, id=, type=SearchByJabberId
    2017-01-16 08:50:40.7672 | 1 | TRACE | UccAPI.UccFunctionKeySearchResult..ctor | Term: 0025@starface.xxx.de, search ID: 64882c0b-baf2-417a-8bd8-598c54d0bd15
    2017-01-16 08:50:40.7672 | 1 | TRACE | UccAPI.UccFunctionKeySearchResult..ctor | Term: 0025@starface.xxx.de, search ID: 64882c0b-baf2-417a-8bd8-598c54d0bd15, result count: 1
    2017-01-16 08:50:40.7672 | 1 | TRACE | UccAPI.UccFunctionKey..ctor | Key a1211, name: Bot, Oro, type: TypeBusyLampField, state: FunctionKeyStateUnavailable
    2017-01-16 08:50:40.7672 | 1 | TRACE | UccAPI.UccFunctionKey..ctor | TelState: Unavailable, XMPP: Available, msg:"", DND: False, Redirect always: False
    2017-01-16 08:50:40.7672 | 1 | TRACE | UccAPI.UccFunctionKeys.GetAvatarFromCacheOrServer | (UccAPI.UccFunctionKey)
    2017-01-16 08:50:40.8012 | 1 | TRACE | UcClient.WidgetChatManager.OnUccEvent | received message 0025@starface.xxx.de: XXXTestSta ...
    2017-01-16 08:50:40.8012 | 1 | TRACE | UcClient.WidgetChatSession.OnUccEvent | received message 0025@starface.xxx.de: XXXTestSta ...
    2017-01-16 08:50:40.8012 | 1 | TRACE | UcClient.WidgetChatSession.OnUccEvent | Add message to control



    2017-01-16 08:50:57.2932 | 24 | TRACE | UccAPI.UccChatClient.processPacket | received message 0001@starface.xxx.de/Starface UCC Client patricks-macbook-pro.local: XXXTestSta ...
    2017-01-16 08:50:57.2932 | 24 | TRACE | UccAPI.UccChatClient.processPacket | Create new chat session object
    2017-01-16 08:50:57.2932 | 24 | TRACE | UccAPI.UccChatClient.processPacket | Peer name from roster: Patrick Kaiser
    2017-01-16 08:50:57.2932 | 24 | TRACE | UccAPI.UccChatClient.processPacket | Created new session with id 3c8bad7b-41f7-443f-8af2-bb6ef6860e93
    2017-01-16 08:50:57.2932 | 24 | TRACE | UccAPI.UccChatSession.AddReceivedChatMessage | received message 0001@starface.xxx.de/Starface UCC Client patricks-macbook-pro.local: XXXTestSta ...
    2017-01-16 08:50:57.2932 | 1 | TRACE | UcClient.WidgetChatManager.GetChatSessionWidgetFor | Create new chat session tab
    2017-01-16 08:50:57.2932 | 40 | TRACE | UccAPI.UccFunctionKeys.SearchFunctionKeys | Search for 0001@starface.xxx.de, id=, type=SearchByJabberId
    2017-01-16 08:50:57.3222 | 1 | TRACE | UccAPI.UccFunctionKeys.SearchFunctionKeys | Search for 0001@starface.xxx.de, id=, type=SearchByJabberId
    2017-01-16 08:50:57.3222 | 40 | TRACE | UccAPI.UccFunctionKeySearchResult..ctor | Term: 0001@starface.xxx.de, search ID: bf93fed7-0682-408d-963d-42b57f0d30ed
    2017-01-16 08:50:57.3222 | 40 | TRACE | UccAPI.UccFunctionKeySearchResult..ctor | Term: 0001@starface.xxx.de, search ID: bf93fed7-0682-408d-963d-42b57f0d30ed, result count: 1
    2017-01-16 08:50:57.3222 | 40 | TRACE | UccAPI.UccFunctionKey..ctor | Key a1000, name: Kaiser, Patrick, type: TypeBusyLampField, state: FunctionKeyStateInactive
    2017-01-16 08:50:57.3222 | 40 | TRACE | UccAPI.UccFunctionKey..ctor | TelState: Available, XMPP: Available, msg:"", DND: False, Redirect always: False
    2017-01-16 08:50:57.3222 | 40 | TRACE | UccAPI.UccFunctionKeys.GetAvatarFromCacheOrServer | (UccAPI.UccFunctionKey)
    2017-01-16 08:50:57.3442 | 1 | TRACE | UccAPI.UccFunctionKeySearchResult..ctor | Term: 0001@starface.xxx.de, search ID: e75db7a8-2137-4401-a991-74126291688e
    2017-01-16 08:50:57.3442 | 1 | TRACE | UccAPI.UccFunctionKeySearchResult..ctor | Term: 0001@starface.xxx.de, search ID: e75db7a8-2137-4401-a991-74126291688e, result count: 1
    2017-01-16 08:50:57.3442 | 1 | TRACE | UccAPI.UccFunctionKey..ctor | Key a1000, name: Kaiser, Patrick, type: TypeBusyLampField, state: FunctionKeyStateInactive
    2017-01-16 08:50:57.3442 | 1 | TRACE | UccAPI.UccFunctionKey..ctor | TelState: Available, XMPP: Available, msg:"", DND: False, Redirect always: False
    2017-01-16 08:50:57.3442 | 1 | TRACE | UccAPI.UccFunctionKeys.GetAvatarFromCacheOrServer | (UccAPI.UccFunctionKey)
    2017-01-16 08:50:57.3692 | 1 | TRACE | UcClient.WidgetChatManager.OnUccEvent | received message 0001@starface.xxx.de: XXXTestSta ...
    2017-01-16 08:50:57.3692 | 1 | TRACE | UcClient.WidgetChatSession.OnUccEvent | received message 0001@starface.xxx.de: XXXTestSta ...
    2017-01-16 08:50:57.3692 | 1 | TRACE | UcClient.WidgetChatSession.OnUccEvent | Add message to control



    Danke für weitere Ideen, beste Grüße,


    Patrick

    Einmal editiert, zuletzt von pkaiser ()

  • Hallo Fabian,


    danke auch für deine Antwort. Encoding-Probleme hatten wir auch gleich im Verdacht. In unserem Fall ist jedoch alles bereits UTF8 (gemäß XMPP Spezifikation).
    Wir verwenden für den Bot das folgende Docker Image: https://github.com/rroemhild/docker-errbot. Basiert auf Debian Jessie, für locale und locale_gen wird utf8 verwendet, im bot sourcecode sowieso.


    Noch en Idee? Gruß,


    Patrick

  • Hallo Patrick,


    aus dem Log kann ich erst mal kein Problem erkennen. Die Nachricht wird ja empfangen und auch versucht, darzustellen. Kannst Du die Nachricht vielleicht per Wireshark aufzeichnen und in eine Datei schreiben? Dafür TLS für XMPP im Client ausschalten.


    Gruß Wolfgang


  • Kannst Du die Nachricht vielleicht per Wireshark aufzeichnen und in eine Datei schreiben?


    Danke für den Tipp, unten die relevanten Mitschnitte aus Wireshark.
    Daraus ist ersichtlich, dass Errbot die Attribute CHATSTATE und ID weglässt (werden die vom Windows Client zwingend benötigt?) und das xml:lang attribut zusätzlich schickt.
    Ferner verschicken die anderen Clients jeweils 2 Nachrichten, die erste mit chatstate=composing ohne body.


    Errbot:
    =============================
    Transmission Control Protocol, Src Port: 5222, Dst Port: 61044, Seq: 319, Ack: 196, Len: 145
    XMPP Protocol
    MESSAGE [type='chat']
    from: 0025@starface.xxx.de/54f49696
    to: 0017@starface.xxx.de
    type: chat
    xml:lang: en
    BODY [value='XXXTestStarfaceXXX']
    value: XXXTestStarfaceXXX




    Mac Client:
    =============================
    Transmission Control Protocol, Src Port: 5222, Dst Port: 61044, Seq: 464, Ack: 196, Len: 196
    XMPP Protocol
    MESSAGE [type='chat' chatstate='composing']
    from: 0001@starface.xxx.de/Starface UCC Client patricks-macbook-pro.local
    to: 0017@starface.xxx.de
    type: chat
    CHATSTATE: composing



    Transmission Control Protocol, Src Port: 5222, Dst Port: 61044, Seq: 660, Ack: 196, Len: 266
    XMPP Protocol
    MESSAGE [id='93130038-39B5-4C62-8864-80D2308ED89E' type='chat' chatstate='active']
    from: 0001@starface.xxx.de/Starface UCC Client patricks-macbook-pro.local
    id: 93130038-39B5-4C62-8864-80D2308ED89E
    to: 0017@starface.xxx.de
    type: chat
    CHATSTATE: active
    BODY [value='XXXTestStarfaceXXX']
    value: XXXTestStarfaceXXX



    Adium Client:
    =============================
    Transmission Control Protocol, Src Port: 5222, Dst Port: 61044, Seq: 1, Ack: 1, Len: 173
    XMPP Protocol
    MESSAGE [id='purple6c09a49d' type='chat' chatstate='composing']
    from: 0026@starface.xxx.de/mb2
    id: purple6c09a49d
    to: 0017@starface.xxx.de
    type: chat
    CHATSTATE: composing


    Transmission Control Protocol, Src Port: 5222, Dst Port: 61044, Seq: 174, Ack: 1, Len: 201
    XMPP Protocol
    MESSAGE [id='purple6c09a49e' type='chat' chatstate='active']
    from: 0026@starface.xxx.de/mb2
    id: purple6c09a49e
    to: 0017@starface.xxx.de
    type: chat
    CHATSTATE: active
    BODY [value='XXXTestStarfaceXXX']
    value: XXXTestStarfaceXXX



    Danke für deine Hilfe! Gruß, Patrick

  • Treffer versenkt:


    if (chatMessage.PacketId == null)
    {
    return;
    }




    Die ID verwende ich hier um sicherzustellen, dass ich eine Message nur einmalig anzeige. Im Falle einer Fehlermeldung beim Senden einer Chat-Nachricht verwende ich die ID, um die angezeigte gesendete Message zu finden und um die Fehlermeldung zu ergänzen.


    Kannst Du die ID noch reinbasteln?


    Die ID ist sonst nicht relevant. Für das Laden von Chat-Nachrichten aus der History erzeuge ich sowie schon lokal dynamische IDs. Archivierte Nachrichten, die ich vom Openfire lade, haben nämlich auch keine IDs mehr. Ich könnte also auch beim Empfang von Nachrichten ohne ID lokal eine Dummy ID erzeugen.



    Gruß Wolfgang

    Development


    STARFACE GmbH | Adlerstraße 61 | 76137 Karlsruhe | www.starface.com

    Einmal editiert, zuletzt von Wolfgang ()

  • Hallo Wolfgang,


    1000 Dank für deine Antwort!
    Die von Errbot verwendete XMPP Library (sleekxmpp) hat die Option zur Erzeugung von Message-IDs (aber leider default none - http://sleekxmpp.readthedocs.i….BaseXMPP.use_message_ids).
    Werden morgen versuchen ob man das irgendwo setzen/übergeben kann und werde berichten ob das klappt.


    Die Idee mit den lokalen Dummy-IDs finde ich unabhängig davon sehr gut, dann würde es ja in jedem Fall funktionieren. Der Mac Client scheint das ja jetzt auch bereits so zu machen?


    Nochmals vielen Dank für deine Mühe!
    Gruß, Patrick

  • Habens jetzt hinbekommen.
    Also falls noch jemand anderes auf die Idee kommt Errbot mit der Starface zu integrieren, mit dem folgenden Code im Plugin werden alle Bot messages mit IDs versehen:


    def __init__(self, bot):
    # Enable message ids for the xmpp client. This is required for starface windows client.
    bot.conn.client.use_message_ids = True
    ...
    super().__init__(bot)


    Schöner Gruß, Patrick

    Einmal editiert, zuletzt von pkaiser ()

Jetzt mitmachen!

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