我的想法是在网站上集成实时支持聊天。使用jabberbot发送者ID将用户文本与xmpphp一起发送到我的jabber客户端,如果我回答,jabber bot会接收我的答案并将文本传输给用户。
只有一个问题。如何分隔不同的用户或不同的聊天?我不希望所有用户都看到答案,但要求的用户。是否有一种独特的聊天ID或其他可能性,我可能只是错过了?
用户=>网站=> Chatbot =>我
我想回答并将其发回给用户,但如何从我的回答中找到正确的用户?
答案 0 :(得分:4)
上次我必须解决这个问题时,我使用了这种架构:
Webserver提供JavaScript / jQuery或flash聊天。
聊天开始后,客户端向服务器询问所有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。
在PHP中,您将连接到PsyBnc,并为您查询来自支持者的消息。
不直接连接到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()));
我们已经完成了与PsyBnc的IRC连接,现在我们需要从IRC发送消息到ICQ,XMPP,GOOGLE TALK,MSN,YAHOO,AOI ......
这是一个名为BitlBee的好方案。 BitlBee提供的IRC服务器可以从几乎所有即时消息传递协议传输消息。通过别名这些帐户。例如,您只需要系统中的1个服务器帐户google talk,icq ...以及所有支持这些帐户的好友列表的人。现在,BitleBee将提供您的boddylist作为irc聊天。
答案 1 :(得分:2)
您的要求相当混乱。正如约书亚所说,你不需要一个Jabber机器人。您只需要一台Jabber服务器 - 您应该拥有它。你做的是,每当使用聊天功能时你创建一个易变的用户帐户 sessionid @ * yourdomain.com *然后你可以回复任何传入的消息,就像你的网站客户端可以获取每当消息都意味着它。
或者,您可以创建一个用户帐户 - qa @ yourdomain.com - 并为路由部分使用XMPP资源标识符。 XMPP允许像qa @ yourdomain.com / * sessionid *这样的东西,你应该能够告诉你的XMPP库只查询特定的资源。大多数XMPP客户端软件也会默认回复特定资源,并在适用时打开新对话。这种方法不像第一种方法那么“干净”,但如果由于某种原因不能随意创建用户帐户,它会更好一些。
答案 2 :(得分:0)
据我所知,您希望在您的网站上设置实时聊天解决方案,以便访问者与您的特定代理商进行一对一聊天。
我建议在您的网站上应用某种Javascript XMPP库。当用户表明他们想要与代理交谈时,建立与面向公众的XMPP服务器的连接。
从那里,您有两种选择:直接聊天或会议室。
通过直接聊天,您的用户可以直接与已登录系统的座席通话。从那里,您的代理人可以照常与访客交谈。这种方法简单明了,但它是一对一的。 (您可能需要在多个代理之间进行负载均衡以获得大量流量。)
通过会议室,您的访客可以加入专用于该主题的特定会议室,您的座席可以在会议室中担任主持人。访问者可以提出问题并与您的代理商协作,或者他们可以与会议室中的代理人直接聊天。
XMPP是一种非常灵活的协议;这真的只是弄清楚你想要实现的目标。
答案 3 :(得分:0)
我不知道您使用的XMPP服务器,但您也可以尝试使用Fastpath plugin and webchat for Openfire。这意味着通过XMPP提供支持团队服务。
话虽这么说,你的问题本身似乎只意味着XMPP的标准聊天功能,它在两个用户之间。这只意味着支持人员与每个用户进行独特的聊天并提出问题。没有其他用户会看到该对话。