Ir para conteúdo
Fórum Script Brasil
  • 0

Como criar salas de chat para cada novo usuário?


Ewerton M.

Pergunta

Boa noite galera.

Por favor, gostaria de saber se alguém possui algum script pronto ou saiba como se crie salas de chat para cada novo usuário???

Exemplo:

O "técnico A" se logará no sistema e ficará disponível.

Cliente A entrou no chat, abrirá uma janela para esse cliente com o "técnico A".

Quando cliente B entrar no chat em vez dele entrar numa mesma sala ele entrará numa sala diferente com o "técnica A".

Tornando assim a conversa privativa e se possível limitando a quantidade de clientes. Por exemplo, após entrar 5 clientes, não constará mais ninguém disponível e ele terá uma mensagem(quem sabe uma fila de espera)...

Estou criando um chat para a empresa onde trabalho, como ponto de partida peguei um chat pronto desenvolvido em 3 partes pelo site Video-Aulas Brasil e modificarei ele para se adequar as minhas necessidades...

Um abraço a todos...

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Parte 1:

http://www.videoaulasbrasil.com.br/php/cri...jquery-parte-1/

Parte 2:

http://www.videoaulasbrasil.com.br/php/cri...jquery-parte-2/

Parte 3:

http://www.videoaulasbrasil.com.br/php/cri...jquery-parte-3/

Ele já possui o modelo pronto para download, fato que fiz, para poupar tempo, porém, vou fazer algumas modificações...

Se alguém puder dar uma força...

Ainda não consegui encontrar nenhum material pra desenvolver esse problema, conforme questionei acima...

Link para o comentário
Compartilhar em outros sites

  • 0

Fala galera, segue eu com a minha sina...

Não mexi com o chat nesses últimos dias, mas agora, voltei...

Ontem fuçando na net encontrei um chat de atendimento no qual vou modificar, com isso peço que desconsiderem o chat acima...

Porém, nesse outro script livre que encontrei ainda tenho o mesmo problema...

Vou colocar aqui todo o script do Chat

Segue a parte do cliente...

CHAT.JS

<!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php">//dispara a função  que lê o servidor
window.onload = function(){
                window.setInterval('ChecaMsg()', 2000);
}
//envia uma nova mensagem
function EnviaMsg(msg){
        ExibirMsg("<p><b>Você:</b> "+msg+"</p>");
        var url="novaMsg.php?msg="+encodeURIComponent(msg);
        document.getElementById("msg").value='';
        requisicaoHTTP("GET",url,true);
}
//busca novas mensagens
function ChecaMsg(){
        requisicaoHTTP("GET","checaMsg.php",true);
}
function ExibirMsg(msg){
        var saida = document.getElementById("texto");
        var nova = document.createElement('div');
        nova.innerHTML = msg;
        saida.appendChild(nova);
        saida.scrollTop = 100000; // rolagem da pagina automática.
}
//exibe as novas mensagens
function trataDados(){
                var info = ajax.responseText;
                if(info)
                        ExibirMsg(info);
}
</div><!--php2--></div><!--php3-->
CHECAMSG.PHP
<!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php
$gmtDate = gmdate("D, d M Y H:i:s");
header("Expires: {$gmtDate} GMT");
header("Last-Modified: {$gmtDate} GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: text/html; charset=ISO-8859-1");
include "conecta.php";
$mensagens="";
$res = mysqli_query($con,"select nome,msg from atendimento where origem='A' and msg<>''");
for($i=0;$i<mysqli_num_rows($res);$i++){
        $dados = mysqli_fetch_row($res);
        $nome = $dados[0];
        $msg = $dados[1];
        $mensagens .="<p style="background-color:#E9E9E9"><b>" . ucwords($nome) . ": </b> " . strtoupper($msg) . "</p>";
        $res2 = mysqli_query($con,"delete from atendimento where origem='A' and msg='$msg'");
        }
echo $mensagens;

?>
</div><!--php2--></div><!--php3-->
NOVAMSG.PHP
<!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php
        session_start();
        $idConversa = session_id();
        include "conecta.php";
        import_request_variables("gc");
        if(!empty($msg)){
                //verifica se a sessão ainda está aberta
$res = mysqli_query($con, "select * from atendimento where nome='$idConversa' and msg=''");
if(mysqli_num_rows($res)>0){
        $res = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$nomeCliente','C','$msg')");
        }
else{
        echo "&lt;script>alert('Atendimento já encerrado!'); window.location='indexCliente.php';</script>";
}
}
?>
</div><!--php2--></div><!--php3-->
INDEXCLIENTE.PHP
<!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php
ob_start();
?>
<?php
//inicio dos comandos para o chat.

include "conecta.php"; // incluo a conexão com o banco de dados.

session_start(); //inicio a sessão

$idConversa = session_id(); //obtenho a identificação da sessão iniciada

//verifico se há algum atendente online.

$at = mysqli_query($con,"select nome from atendimento where origem='A' and msg=''");
//usamos as letras A para atendendo e C para mensagens enviadas pelo usuário.

if(mysqli_num_rows($at)==0){
        echo "<html><body>";
        echo "<h2 align=center>No momento não existem usuários onlines.</h2>";
        echo "</body></html>";
        exit();
        }
        else{
                $dados = mysqli_fetch_row($at);
                $atend = $dados[0];
                //verifico se o atendente está ocupado.
                $oc = mysqli_query($con,"select * from atendimento where origem='C' and nome <> '$idConversa'");
                if(mysqli_num_rows($oc)>0){
                        echo "<html><body>";
                        echo "<h2 align='center'>O atendente está ocupado no momento.</h2>";
                        echo "</body></html>";
                        exit();
                        }
                       
        }
        //exibe o formulário de login
        if(!isset($_POST["nome"]) || empty($_POST["nome"])){
        ?>
<!-- inicio aqui o conteudo html -->
<html>
        <head>
                <title>Chat de atendimento Online</title>
        </head>
<body>
        <center>
                <h2 style="color:#CCCCCC">Atendimento Online</h2>
                <form name="login" method="post" action="indexCliente.php">
                        <div style="background-color:#999999; color:#FFFFFF">
                                Seu nome:
                        </div>
                        <div style="background:#CCCCCC">
                        <input type="text" name="nome" maxlength="65" size="50" />
                        <input type="Submit" name="Submit" value="Entrar" />
                        </div>
                </form>
        </center>
</body>
</html>
<!-- aqui termino o mode html do formulário de identificação -->
<?php
        }//fecho o if de verificação de se foi ou não preenchido o login.
       
        else{
                //inicia o chat
                $nome = ucfirst($_POST["nome"]);
                setcookie("nomeCliente", $nome);
                $ins = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$idConversa','C','')");
                $ins = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$nome','C','[entrou no chat]')");
//fecho as linhas em php
?>
<!-- reinicio os codigos html agora do chat -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Chat do atendente</title>
&lt;script src="open.js"></script>
&lt;script src="chat.js"></script>
</head>
<body>


<h2 align="center">Você está no atendimento online</h2>
<table width="100%" border="0" cellpadding="0" cellspacing="3">
        <tr>
                <td bgcolor="#ECFFEC">
                <div id="texto" style="width:100%; height:300px; overflow:auto">
                <p style="background-color:#E9E9E9"><b><?php echo ucwords($nomeAtendente); ?>:</b> Olá
                 <?php echo $nome; ?>, seja bem vindo ao nosso atendimento on-line, em que posso ser util?</p>
                </div>
                 </td>
        </tr>
        <tr>
                <td>
                        <form action="java script:void%200" name="formAjax" onSubmit="EnviaMsg(this.msg.value); return false">
                                Sua Mensagem:
                                <input type="text" name="msg" id="msg" size="50" maxlength="150" />
                                <input type="submit" name="Submit" value="Enviar" />
                                </form>
                </td>
        </tr>
</table>
<p align="right"><a href="java script:window.close();">Sair do Chat</a></p>
</body>
</html>
<?php
        }//fecha o que resta
?>

</div><!--php2--></div><!--php3-->
Agora segue a parte do Atendente
CHAT2.JS
<!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php">// JavaScript Document
//dispara a função  que lê o servidor
window.onload = function(){
                window.setInterval('ChecaMsg()', 2000);
}
//envia uma nova mensagem
function EnviaMsg(msg){
        ExibirMsg("<p><b>Você:</b> "+msg+"</p>");
        var url="novaMsg2.php?msg="+encodeURIComponent(msg);
        document.getElementById("msg").value='';
        requisicaoHTTP("GET",url,true);
}
//busca novas mensagens
function ChecaMsg(){
        requisicaoHTTP("GET","checaMsg2.php",true);
}

function ExibirMsg(msg){
        var saida = document.getElementById("texto");
        var nova = document.createElement('div');
        nova.innerHTML = msg;
        saida.appendChild(nova);
        saida.scrollTop = 100000; //rolagem automatica
}
function NovoAtendimento(){
                var saida = document.getElementById("texto");
                saida.innerHTML = ''; // limpa o texto do chat
                requisicaoHTTP("GET","excluiMsg2.php",true);
               
}
//atualiza texto do chat
function trataDados(){
                var info = ajax.responseText;
                if(info)
                        ExibirMsg(info);
}
</div><!--php2--></div><!--php3-->
CHECAMSG2.PHP
<!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php
ob_start();
$gmtDate = gmdate("D, d M Y H:i:s");
header("Expires:{$gmtDate}GMT");
header("Last-Modified: {$gmtDate}GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: text/html; charset=ISO-8859-1");
include "conecta.php";
$mensagens = "";

$res = mysqli_query($con, "select nome,msg from atendimento where origem='C' and msg <> ''");
        for($i=0;$i<mysqli_num_rows($res);$i++){
                $dados = mysqli_fetch_row($res);
                $nome = $dados[0];
                $msg = $dados[1];
                $mensagens .= "<p style="background-color:#E9E9E9">
                <b>" . ucwords($nome) . ": </b>
                 " . strtoupper($msg) . "
                </p>";
                $res2 = mysqli_query($con, "delete from atendimento where origem='C' and msg='$msg'");
        }
        if($mensagens!=""){
echo "$mensagens
&lt;script>alert('Você recebeu uma mensagem');</script>";
}
else{
echo "";
}
?>
</div><!--php2--></div><!--php3-->
INDEXATENDENTE.PHP
<!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php
ob_start();
?>
<?php
include "conecta.php";

$log = mysqli_query($con,"select nome,email,senha from user where email='" . $_POST["email"] . "' and senha='" . $_POST["senha"] . "'");
$ver = mysqli_num_rows($log);
$row = mysqli_fetch_row($log);
$nomeAtendente = $row[0];
$email = $row[1];
$senhaChat = $row[2];
/* ///////////////////////
        definido aqui o nome
        de atendente e a senha
        essa parte pode ser alterada para
        buscar os dados em uma tabela..
///////////////////////////// */
//exibe o formulário de login caso for verdade.
if(!isset($_POST["senha"]) && !isset($_POST["email"]) || $_POST["senha"]!=$senhaChat && $_POST["email"]!=$email){
?>
<html>
        <body>
                <h2 align="center">Login do atendente</h2>
                <form action="indexAtendente.php" name="login" method="post">
                <div align="center">
                        <p>
                                E-mail: <input type="text" name="email" id="email"
                                size="15"/><br /><br />
                                Senha: <input type="password" name="senha" id="senha"
                                size="15" maxlength="15" />
                        </p>
                        <p>
                                <input name="iniciar" type="submit" id="Iniciar" value="Logar" />
                        </p>
                </div>
                </form>
        </body>
</html>
<?php
}//fehca o if
else{
        ob_start();
        //inicia o chat
        include "conecta.php";
        $res = mysqli_query($con, "insert into atendimento(nome,origem,msg) values('$nomeAtendente','A','')");
        setcookie("nomeAtendente", $nomeAtendente);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Chat do atendente</title>
&lt;script src="open.js"></script>
&lt;script src="chat2.js"></script>
</head>
<body>
        <h2 align="center">Atendimento via Chat</h2>
        <table width="100%" border="0" cellpadding="0" cellspacing="3">
                <tr>
                        <td bgcolor="#FFFF99">
                                <div id="texto" style="width:100%; height:300px; overflow:auto"></div>
                                <div align=center id=sound></div>
                        </td>
                </tr>
                <tr>
                        <td>
                                <form action="java script:void%200" name="formAjax" onSubmit="EnviaMsg(this.msg.value); return false">
                                Sua Mensagem:
                                <input type="text" name="msg" id="msg" size="50" maxlength="150" />
                                <input type="submit" name="Submit" value="Enviar" />
                                </form>
                        </td>
                </tr>
        </table>
        <p align="right">
        <a href="java script:NovoAtendimento();">Finalizar Atendimento atual</a>
         |
         |
         
        <a href="logout.php">Encerrar Chat(Sair)</a>
        </p>
</body>
</html>
<?php
        }//fecha else
?>
</div><!--php2--></div><!--php3-->
EXCLUIRMSG2.PHP
<?php
ob_start();
/*$gmtDate = gmdate("D, d M Y H:i:s");
header("Expires: {$gmtDate} GMT");
header("Last-Modified: {$gmtDate} GMT");
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache");
header("Content-Type: text/html; charset=ISO-8859-1");*/

include "conecta.php";
import_request_variables("c");
$res = mysqli_query($con,"delete from atendimento");
$res = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$nomeAtendente','A','')");

print "<center><img src='load.gif' /></center>";


?>
LOGOUT.PHP
<?php
$gmtDate = gmdate("D, d M Y H:i:s");
header("Expires:{$gmtDate}GMT");
header("Last-Modified: {$gmtDate}GMT");
header("ache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

include "conecta.php";
$res = mysqli_query($con,"delete from atendimento");
header("location:indexAtendente.php");

?>
OPEN.JS
//iniciando a requisição http e criando o obj

var ajax;
var dadosUsuario;

function requisicaoHTTP(tipo,url,assinc){
                if(window.XMLHttpRequest){
                                ajax = new XMLHttpRequest();
                }
                else
                        if(window.ActiveXObject){
                                ajax = new ActiveXObject("Msxml2.XMLHTTP");
                                if(!ajax){
                                        ajax = new ActiveXObject("Microsoft.XMLHTTP");
                                }
                        }
                if(ajax){
                        iniciaRequisicao(tipo,url,assinc);
                }
                        else{
                                alert("Não possui suporte a AJAX");
                        }
}
// inicializao objeto criado e envia os dados 
function iniciaRequisicao(tipo,url,bool){
                ajax.onreadystatechange=trataResposta;
                ajax.open(tipo,url,bool);
                ajax.setRequestHeader("Content-Type", "application/x-www-form-urlecncoded; chanset=UTF-8");
                //ajax.overrideMimeType("text/xml"); /* usado somente com mozila */
                ajax.send(dadosUsuario);
}
function enviaDados(url){
        criaQueryString();
        requisicaoHTTP("POST",url,true);
}

function criaQueryString(){
        dadosUsuario="";
        var frm = document.forms[0];
        var numElementos = frm.elements.length;
        for(var i=0;i<numElementos;i++){
                if(i< numElementos-1){
                dadosUsuario += frm.elements[i].name+"="+
                        encodeURIComponent(frm.elements[i].value)+"&";
                }else{
                        dadosUsuario += frm.elements[i].name+"="+
                                encodeURIComponent(frm.elements[i].value);
                }
                        
        }
}
function trataResposta(){
        if(ajax.readyState==4){
                if(ajax.status ==200){
                        trataDados();
                }else{
                        alert("Problema na requisição com o objeto XMLHttpRequest.");
                        }
                }
        }
CONECTA.PHP
<?php
$host = "localhost"; //servidor de banco de dados
$user = "root"; //usuario do banco de dados
$senha = "xxxxx"; //senha do banco de dados
$db = "sistema_chat"; //banco de dados

$sqlconnect=mysql_connect($host, $user, $senha);
if(!$sqlconnect)
die("Não conectou com o banco de dados.");

$sqldb=mysql_select_db("$db",$sqlconnect);
if(!$sqldb)
die("Não foi possivel selecionar a base de dados.");
?>
Banco de dados...
tabela de Atendimento.
CREATE TABLE `atendimento` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(80) NOT NULL,
`origem` varchar(20) NOT NULL,
`msg` text NOT NULL,
PRIMARY KEY (`id`)
);

tabela de Usuários.
CREATE TABLE `user` (
`iduser` int(4) NOT NULL auto_increment,
`nome` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`senha` varchar(32) NOT NULL,
PRIMARY KEY (`iduser`)
);
insert da tabela user.;
INSERT INTO `user` VALUES (1, 'ewerton', '@', 'teste');
descrição dos arquivos do cliente chat.js // arquivo js que verifica as mensagens do cliente; checaMsg.php //responsavel em verificar se o atendente enviou a resposta novaMsg.php //faz a verificação se ainda está apberta a sessão e fechou informa que o atendimento foi encerrado. indexCliente.php // chat por si, e local de login. Descrição dos arquivos atendente chat2.js // arquivo js que verifica as mensagens do Atendente; checaMsg2.php //responsavel em verificar se o atendente enviou a resposta novaMsg2.php //faz a verificação se ainda está apberta a sessão e fechou informa que o atendimento foi encerrado. indexAtendente.php // chat por si, e local de login. Preciso a cada novo cliente que entrar no chat, que seja aberta uma nova janela... Como fazer isso??? No INDEXCLIENTE.PHP eu encontrei a parte que me possibilita aumentar a quantidade de cliente no chat através da seguinte linha...
if(mysql_num_rows($oc)>3){  // <--- No padrão ele é 0, aqui eu alterei pra 3...
                        
                        echo "<html><body>";
                        echo "<h2 align='center'>O atendente está ocupado no momento.</h2>";
                        echo "</body></html>";
                        exit();
                        }

Testei com essa modificação, porém, do lado do atendente ele recebe a mensagem do cliente 2, porém, ao responder, a mensagem só vai pro cliente 1...

Como alterar isso...

Vou remodelar o banco de dados pra que seja gravada as mensagens conforme cada novo cliente que entrar no chat, dando um ID pra cada um, mas preciso de uma ajuda nessa outra parte...

Um abraço galera, se puderem me ajudar!!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...