Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XMPPHP作为实时支持聊天_Php_Xmpp_Pidgin_Xmpphp - Fatal编程技术网

XMPPHP作为实时支持聊天

XMPPHP作为实时支持聊天,php,xmpp,pidgin,xmpphp,Php,Xmpp,Pidgin,Xmpphp,我的想法是在网站上集成实时支持聊天。用户文本通过xmpphp发送到我的jabber客户端,并带有jabberbot发送者id,如果我应答,jabber bot将接受我的应答并将文本传输给用户 只有一个问题。如何区分不同的用户或不同的聊天?我不想让所有的用户都看到答案,而是想让提出问题的用户看到答案。是否有一种独特的聊天id或其他可能,我可能只是错过了 用户=>网站=>聊天机器人=>我 我想回答并将其发送回用户,但如何从我的回答中找到正确的用户?据我所知,您希望在您的网站上有一个实时聊天解决方案,

我的想法是在网站上集成实时支持聊天。用户文本通过xmpphp发送到我的jabber客户端,并带有jabberbot发送者id,如果我应答,jabber bot将接受我的应答并将文本传输给用户

只有一个问题。如何区分不同的用户或不同的聊天?我不想让所有的用户都看到答案,而是想让提出问题的用户看到答案。是否有一种独特的聊天id或其他可能,我可能只是错过了

用户=>网站=>聊天机器人=>我


我想回答并将其发送回用户,但如何从我的回答中找到正确的用户?

据我所知,您希望在您的网站上有一个实时聊天解决方案,允许您的访问者与您端的特定代理进行一对一的聊天

我建议在您的网站上应用某种Javascript XMPP库。当用户表示希望与代理对话时,建立到面向公众的XMPP服务器的连接

从那里,你有两个选择:直接聊天室或会议室

通过直接聊天,您的用户将直接与已登录系统的代理交谈。从那里,您的代理可以像平常一样与访客交谈。这种方法简单明了,但却是一对一的。(您可能需要在多个代理之间进行负载平衡,以获得显著的流量。)

有了会议室,您的访客可以加入专门讨论该主题的特定会议室,您的代理人可以在会议室中担任主持人。访客可以提问并与您的代理协作,也可以在房间里与代理直接聊天


XMPP是一个非常灵活的协议;这实际上只是一个弄清楚你想要实现什么的问题。

据我所知,你希望在你的网站上有一个实时聊天解决方案,允许你的访问者与你的特定代理进行一对一的聊天

我建议在您的网站上应用某种Javascript XMPP库。当用户表示希望与代理对话时,建立到面向公众的XMPP服务器的连接

从那里,你有两个选择:直接聊天室或会议室

通过直接聊天,您的用户将直接与已登录系统的代理交谈。从那里,您的代理可以像平常一样与访客交谈。这种方法简单明了,但却是一对一的。(您可能需要在多个代理之间进行负载平衡,以获得显著的流量。)

有了会议室,您的访客可以加入专门讨论该主题的特定会议室,您的代理人可以在会议室中担任主持人。访客可以提问并与您的代理协作,也可以在房间里与代理直接聊天


XMPP是一个非常灵活的协议;实际上,这只是一个弄清楚你想要实现什么的问题。

你的需求相当混乱。正如约书亚所说,你不需要一个喋喋不休的机器人。你所需要的只是一个Jabber服务器——你应该已经拥有了。你要做的是,每当使用聊天功能时,你都会创建一个易失性用户帐户sessionid@*yourdomain.com*,然后你就可以像平常一样回复任何传入的消息,而你的网站客户端则可以在任何时候获取它想要的消息


或者,您可以创建一个用户帐户-qa@yourdomain.com-并为路由部分使用XMPP资源标识符。XMPP允许类似于qa@yourdomain.com/*sessionid*并且您应该能够告诉您的XMPP库只查询特定的资源。默认情况下,大多数XMPP客户端软件也会回复特定的资源,并在适用时打开新的对话。这种方法不如第一种方法“干净”,但如果您出于某种原因不能随意创建用户帐户,它的效果会更好。

您的需求相当混乱。正如约书亚所说,你不需要一个喋喋不休的机器人。你所需要的只是一个Jabber服务器——你应该已经拥有了。你要做的是,每当使用聊天功能时,你都会创建一个易失性用户帐户sessionid@*yourdomain.com*,然后你就可以像平常一样回复任何传入的消息,而你的网站客户端则可以在任何时候获取它想要的消息


或者,您可以创建一个用户帐户-qa@yourdomain.com-并为路由部分使用XMPP资源标识符。XMPP允许类似于qa@yourdomain.com/*sessionid*并且您应该能够告诉您的XMPP库只查询特定的资源。默认情况下,大多数XMPP客户端软件也会回复特定的资源,并在适用时打开新的对话。与第一种方法相比,这种方法“干净”程度较低,但如果出于某种原因不能随意创建用户帐户,则效果会更好。

我不知道您使用的是什么XMPP服务器,但您也可以尝试。这意味着通过XMPP提供支持团队服务


话虽如此,您的问题本身似乎只意味着XMPP的标准聊天功能,即两个用户之间的聊天功能。这只意味着支持人员与每个提出问题的用户进行独特的聊天。没有其他用户会看到该对话。

我不知道您使用的是什么XMPP服务器,但您也可以尝试。这意味着通过XMPP提供支持团队服务


话虽如此,您的问题本身似乎只意味着XMPP的标准聊天功能,即两个用户之间的聊天功能。这只意味着支持人员与每个提出问题的用户进行独特的聊天。没有其他用户会看到该对话。

上次我必须解决此问题时,我使用了此体系结构:

Web服务器提供JavaScript/jQuery或flash聊天

聊天开始后,客户端会在1秒钟内向服务器询问新消息

1秒轮询的备选方案 如果是这样的话
<?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()));