7
votes

Coldfusion 10 - en direct une discussion avec des webockets

Est-ce que quelqu'un connaît-il des exemples ou des pages que je peux aller à cela implémente une discussion en direct sur une discussion à l'aide des standards CF10? Tous les exemples que j'ai trouvés sur le net étaient ceux des discussions de groupe lorsque les utilisateurs sont souscrites à un certain canal. J'en ai besoin pour qu'il puisse y avoir de nombreux instances d'une autre sur une discussion, comme comment une chatte d'aide en direct fonctionne que vous voyez assez souvent sur des sites Web vous permettant de discuter avec l'un des agents de support. Toute aide est appréciée et, espérons-le, il y aura des exemples (CF et JS).


7 commentaires

Quelqu'un a quelquonque idée? Ma première pensée était de créer une chaîne de discussion et pour chaque chat initié par le client, je crée que sur un sous-canal de discussion comme chat.chat1 ou autre. Ensuite, le côté de l'agent se connecterait à ce canal afin que ce soit comme une conversation en tête-à-tête, mais je ne sais pas si c'est la bonne façon de le faire. Comment vont les autres personnes?


Ouais je fais, mais j'ai besoin de trouver un peu de temps pour associer une preuve du code concept en premier. Donne-pied environ 24h et je te recontacterai.


Super! Merci! Il est vraiment difficile de trouver un bon exemple pour cela là-bas.


Oui, je suis vraiment surpris de trouver la même chose que vous le faites: essentiellement toutes les démonstres de discussion, il y a un peu ... mal : les chats ne sont pas diffusés. Je travaille sur une solution mais je suis hors de temps aujourd'hui et je ne peux y retourner que Jeudi, j'ai peur.


Aucun problème. Merci pour ton aide!


J'essaie de penser à la manière dont l'interface de l'agent fonctionnerait avec WebSockets. Comme une fois qu'un utilisateur initie une discussion, comment un agent serait-il averti à leur fin et initierait la discussion pour se connecter avec cet utilisateur particulier? Un exemple de ce serait incroyable.


Toute chance avec l'exemple? Vous devez travailler avec la méthode de diffusion de générer un sous-canal pour discuter avec un numéro aléatoire lorsque l'utilisateur clique sur le chat. Du côté de l'administrateur, ils sont actuellement abonnés à la chaîne de discussion parent afin que l'utilisateur ouvre une chatille des notifications apparaissent correctement sur le côté administrateur et je suis capable de cliquer sur un lien pour vous connecter à l'utilisateur. Le problème est que l'agent est connecté à la discussion parente, l'utilisateur ne peut pas voir les messages. Si j'essaie de m'abonner au sous-canal, il est dit que je suis déjà souscrit depuis que je suis souscrit au parent. Comment puis-je obtenir un 1 à 1?


3 Réponses :


2
votes

Ben Nadel a un bel article sur l'utilisation de Webockets de CF10 pour appuyant un message à un utilisateur cible . Il a même ajouté une belle vidéo de démonstration. Cela pourrait être ce que vous recherchez ou pourrait au moins vous aider à démarrer.


1 commentaires

Merci Jan! Semble vraiment intéressant et lira là-dessus. J'espère juste que cela fonctionnera dans le scénario de chat d'aide en direct où l'utilisateur est juste une personne aléatoire qui se connecte à l'agent.



1
votes

Voici quelques échantillons de code qui travaille actuellement pour moi.

au lieu d'utiliser l'attribut abonné code>, utilisez la fonction JS pour abonner à l'utilisateur et transmettre certaines valeurs d'en-tête. Ces en-têtes peuvent ensuite être utilisés comme filtres sur l'appel de publication à l'aide de p> p>

Exemple: P>

<cfwebsocket name="ChatSocket" onOpen="openHandler" onMessage="msgHandler" onError="errHandler">

<script>
    function openHandler(){
        //Subscribe to the channel, pass in headers for filtering later
        ChatSocket.subscribe('chatChannel',{name: '#Session.Auth.FirstName#', UserID: '#Session.Auth.UserID#', AccountID: '#Session.Auth.AccountID#' });
    }

    function publish(txt, userID){
        var msg = {
            AccountID: "#Session.Auth.AccountID#",
            publisher: '#Session.Auth.UserID#', 
            id: userID,
            message: converthtml(txt)
        };
        //When including headers, the "selector" is where you will filter who it goes to.
        var headers = {
            AccountID: "#Session.Auth.AccountID#",
            publisher: '#Session.Auth.UserID#', 
            id: userID,
            selector: "UserID eq '"+userID+"' and AccountID eq '#Session.Auth.AccountID#'"
        };
        ChatSocket.publish('chatChannel',msg, headers);

    }

    function msgHandler(message){
        console.log(message);
    }

    function errHandler(err){
        console.log(err);
    }
</script>


0 commentaires

1
votes

Au début, je pensais à mettre en œuvre quelque chose de similaire, mais il y a quelques limitations rudimentaires à CF10 à partir de maintenant, cela me détourne d'enquêter plus loin.

  1. SUPPORT WSS ​​est manquant, voir: CF10 prend en charge Secure WebSocket WSS?
  2. Websocket ne fonctionne pas dans un environnement de cluster, voir: HTTPS: / /groups.google.com/forum/#!topic/houcfug/m7yqqyrbtanq

    Je regarderais ailleurs pour toute solution de chat en direct unique, peut-être socket.io sur Nodejs ou Java

    WSS peut venir en CF11. Je ne suis pas sûr.


0 commentaires