0

私の考えは、Web サイトにライブ サポート チャットを統合することです。ユーザーのテキストは、xmpphp を使用して jabberbot 送信者 ID を使用して jabber クライアントに送信されます。私が応答すると、jabber ボットが応答を受け取り、テキストをユーザーに転送します。

問題は 1 つだけです。異なるユーザーまたは異なるチャットを分離するにはどうすればよいですか? すべてのユーザーに答えを見てもらいたいのではなく、質問したユーザーに見てもらいたいのです。私が見逃した可能性のある、ユニークなチャット ID や別の可能性はありますか?

ユーザー => ウェブサイト => チャットボット => 私

回答してユーザーに送り返したいのですが、回答から正しいユーザーを見つけるにはどうすればよいですか?

4

4 に答える 4

4

前回、この問題を解決するために、次のアーキテクチャを使用しました。

ここに画像の説明を入力

画像を拡大

Web サーバーは、JavaScript / jQuery またはフラッシュ チャットを提供します。

チャットが開始された後、クライアントはサーバーに新しいメッセージを 1 秒間要求します。

1 秒ポーリングの代替

それが遅い場合は、websocketsをご覧ください。

http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial

http://demo.cheyenne-server.org:8080/chat.html

しかし、Websockets は php では提供できませんでした。php + apchache agaist node.jsまたはjavaを変更する必要があります。

プレーン HTTP PHP メソッド

PHP では、サポーターからのメッセージをポーリングしてPsyBncに接続します。

PsyBncはIRCボットです

XMPP や BitlBee に直接接続しない理由は、これらのプロトコルが PHP からのフラッピング接続、切断を好まないためです。セッションを維持することはできないため、頻繁に短い接続用に作成されたものが必要です。これが PsyBnc です。

私は次のようなものを使用します:

http://pear.php.net/package/Net_SmartIRC/download

<?php
session_start();

$message = $_GET['message'];
$client_name = $_GET['client_name'];

if (empty($_SESSION['chat_id'])) {
    $_SESSION['chat_id'] = md5(time(). mt_rand(0, 999999));
}

if (empty($_SESSION['supporter'])) {
    // how do you select the supporter? 
    // only choose a free?
    // We send first message to all supporter and the first who grapped got the chat (where only 3 gues)
}

$irc_host = "127.0.0.1";
$irc_port = 6667; // Port of PsyBnc
$irc_password = "password_from_psy_bnc";
$irc_user = "username_from_psy_bnc";

include_once('Net/SmartIRC.php');

class message_reader
{
    private $messages = array();

    public function receive_messages(&$irc, &$data)
    {
        // result is send to #smartirc-test (we don't want to spam #test)
        $this->messages[] = array(
            'from' => $data->nick, 
            'message' => $data->message,
        );  
    }

    public function get_messages() {
        return $this->messages;
    }
}

$bot = &new message_reader();
$irc = &new Net_SmartIRC();
$irc->setDebug(SMARTIRC_DEBUG_ALL);
$irc->setUseSockets(TRUE);
$irc->registerActionhandler(SMARTIRC_TYPE_QUERY|SMARTIRC_TYPE_NOTICE, '^' . $_SESSION['chat_id'], $bot, 'receive_messages');
$irc->connect($irc_host, $irc_port);
$irc->login($_SESSION['chat_id'], $client_name, 0, $irc_user, $irc_password);
$irc->join(array('#bitlbee'));
$irc->listen();
$irc->disconnect();

// Send new Message to supporter
if (!empty($message)) {
    $irc->message(SMARTIRC_TYPE_QUERY, $_SESSION['supporter'], $message);
}

echo json_encode(array('messages' => $bot->get_messages()));

サポート インスタント メッセンジャーを PHP に接続する

PsyBnc への IRC 接続はすでに確立されています。次に、IRC から ICQ、XMPP、GOOGLE TALK、MSN、YAHOO、AOI にメッセージを送信する必要があります。

ここにBitlBeeという名前の優れたソリューションがあります。BitlBee は、ほぼすべてのインスタント メッセージ プロトコルとの間でメッセージを転送できる IRC サーバーを提供します。それらのアカウントにエイリアスを設定します。たとえば、あなたのシステムには google talk や icq で 1 つのサーバー アカウントだけが必要です。これで BitleBee はあなたのボディリストを IRC チャットとして提供します

于 2013-01-17T08:41:37.627 に答える
2

あなたの要件はかなり混乱しています。ジョシュアが言ったように、これには Jabber ボットは必要ありません。必要なのは Jabber サーバーだけです。これは既に持っているはずです。あなたがすることは、チャット機能が使用されるときはいつでも揮発性のユーザー アカウントsessionid @*yourdomain.com* を作成することです。その後、通常のように受信メッセージに返信するだけで、Web サイト クライアントはいつでも目的のメッセージを取得できます。

別の方法として、1 つのユーザー アカウント (qa@ yourdomain.com ) を作成し、ルーティング部分に XMPP リソース識別子を使用することもできます。XMPP は qa@ yourdomain.com /*sessionid*のようなものを許可し、XMPP ライブラリに特定のリソースのみを照会するように指示できるはずです。また、ほとんどの XMPP クライアント ソフトウェアは、デフォルトで特定のリソースに応答し、該当する場合は新しい会話を開きます。この方法は最初の方法よりも「クリーン」ではありませんが、何らかの理由でユーザー アカウントを任意に作成できない場合は、多少はうまくいくでしょう。

于 2013-01-14T14:20:54.410 に答える
0

私が理解しているように、訪問者があなたの側で特定のエージェントと1対1でチャットできるようにするライブチャットソリューションをWebサイトに配置したいと考えています。

Web サイトに何らかの Javascript XMPP ライブラリを適用することをお勧めします。ユーザーがエージェントと会話したいことを示したら、公開されている XMPP サーバーへの接続を確立します。

そこから、ダイレクト チャットまたは会議室の 2 つのオプションがあります。

直接チャットを使用すると、ユーザーは、システムに既にサインオンしているエージェントと直接話すことができます。そこから、エージェントは訪問者と通常どおり会話できます。このアプローチはシンプルで簡単ですが、1 対 1 です。(おそらく、大量のトラフィックを処理するために、複数のエージェント間で負荷を分散する必要があります。)

会議室を使用すると、訪問者はトピック専用の特定の部屋に参加でき、エージェントは部屋のモデレーターになることができます。訪問者は質問をしたり、エージェントと協力したり、部屋でエージェントと直接チャットを開いたりできます。

XMPP は非常に柔軟なプロトコルです。それは本当にあなたが達成したいことを理解することの問題です.

于 2013-01-14T01:16:40.217 に答える
0

使用している XMPP サーバーはわかりませんが、Fastpath プラグインと Openfire の Web チャットを試すこともできます。これは、XMPP を介してサポート チーム サービスを提供するためのものです。

そうは言っても、あなたの質問自体は、2 人のユーザー間で行われる XMPP の標準のチャット機能にすぎないようです。これは、サポート担当者が質問をする各ユーザーと独自のチャットを行うことを意味します. 他のユーザーはその会話を見ることはありません。

于 2013-01-14T15:35:59.500 に答える