XMPPHP как чат поддержки

Моя идея состоит в том, чтобы интегрировать чат поддержки на веб-сайте. Пользовательский текст отправляется с помощью xmpphp моему клиенту jabber с идентификатором отправителя jabberbot, и, если я отвечаю, бот jabber берет мой ответ и передает текст пользователю.

Есть всего лишь одна проблема. Как разделить разных пользователей или разные чаты? Я не хочу, чтобы все пользователи видели ответ, но пользователь, который спрашивает. Есть ли какой-то уникальный идентификатор чата или другая возможность, которую я мог бы просто упустить?

Пользователь => Сайт => Чатбот => я

Я хочу ответить и отправить его обратно пользователю, но как мне найти правильного пользователя по моему ответу?

4 ответа

Решение

В прошлый раз, когда я должен решить эту проблему, я использовал эту архитектуру:

Увеличить изображение

Веб-сервер предоставляет JavaScript / jQuery или флеш-чат.

После запуска чата клиент запрашивает у сервера все 1 секунду о новых сообщениях.

Альтернатива для 1-секундного опроса

Если это замедляет вас, взгляните на веб-сокеты.

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

У нас уже есть IRC-соединение с PsyBnc, теперь нам нужно отправлять сообщения из IRC в ICQ, XMPP, GOOGLE TALK, MSN, YAHOO, AOI...

Здесь для хорошее решение под названием BitlBee. BitlBee предлагает IRC-сервер с возможностью передачи сообщений практически на все протоколы обмена мгновенными сообщениями. По псевдонимам этих учетных записей. Например, для вашей системы вам нужна только 1 учетная запись сервера на Google Talk, icq ... и вообще ваш сторонник в списке друзей этих учетных записей. Теперь BitleBee предоставит ваш бодилист в виде чата irc.

Ваши требования довольно запутанные. Как сказал Джошуа, вам не нужен бот Jabber для этого. Все, что вам нужно, это сервер Jabber, который у вас уже должен быть. Что вы делаете, вы создаете непостоянную учетную запись пользователя sessionid@ * yourdomain.com * всякий раз, когда используется функция чата, а затем вы можете просто ответить на любое входящее сообщение, как обычно, в то время как ваш веб-клиент может получать сообщения, предназначенные для него, в любое время.

В качестве альтернативы вы можете создать одну учетную запись пользователя - qa @yourdomain.com - и использовать идентификаторы ресурсов XMPP для части маршрутизации. XMPP допускает что-то вроде qa @yourdomain.com/ * sessionid *, и вы должны быть в состоянии указать вашей библиотеке XMPP запрашивать только определенный ресурс. Большая часть клиентского программного обеспечения XMPP также отвечает на определенный ресурс по умолчанию и открывает новый диалог, когда это применимо. Этот метод менее "чистый", чем первый, но он будет работать несколько лучше, если по какой-то причине вы не можете произвольно создавать учетные записи пользователей.

Я не знаю, какой XMPP-сервер вы используете, но вы также можете попробовать плагин Fastpath и веб-чат для Openfire. Который предназначен для предоставления службы поддержки через XMPP.

При этом сам ваш вопрос, похоже, подразумевает не что иное, как стандартную функцию чата XMPP, которая существует между двумя пользователями. Это просто означает, что сотрудник службы поддержки имеет уникальный чат с каждым пользователем, задающим вопрос. Ни один другой пользователь не увидит этот разговор.

Насколько я понимаю, вы хотите иметь на своем веб-сайте решение для чата в режиме реального времени, которое позволит вашим посетителям общаться с определенными агентами с вашей стороны, один на один.

Я бы предложил применить на своем сайте какую-нибудь библиотеку Javascript XMPP. Когда пользователь указывает, что он хотел бы общаться с агентом, установите соединение с общедоступным сервером XMPP.

Оттуда у вас есть два варианта: прямой чат или конференц-залы.

В прямом чате ваш пользователь будет общаться напрямую с агентом, который уже будет зарегистрирован в системе. Оттуда ваш агент может общаться с посетителем как обычно. Этот подход прост и понятен, но он один на один. (Возможно, вам придется балансировать нагрузку между несколькими агентами для значительного трафика.)

В конференц-зале ваш посетитель может присоединиться к определенной комнате, посвященной теме, где ваши агенты могут быть модераторами в этой комнате. Посетители могут задавать вопросы и сотрудничать с вашими агентами, или они могут открыть прямой чат с агентом в комнате.

XMPP - чрезвычайно гибкий протокол; это просто вопрос выяснения того, чего вы хотите достичь.

Другие вопросы по тегам