quinta-feira, 11 de março de 2010

Como abrir chamados por e-mail no Ocomon

Bem, para iniciar meus posts, nada melhor do que resolver um problema que assola os implementadores do Help Desk System Ocomon: Como abrir chamados enviado um simples e-mail. Sigam o passo-a-passo e sejam felizes:

Obs.: Parto do pressuposto de que o S.O. utilizado (como Mail Server) é o Linux.





1. Crie um usuário de e-mail, como <a href="mailto:suporte@suaempresa.com">suporte@suaempresa.com</a>

2. Adicione, no arquivo .forward (no home do usuário de e-mail criado no passo 1), a linha a seguir:

/var/www/html/sdesk/enviaemailocomon.php

Obs.: Esse passo deve ser feito no servidor de e-mail

3. Crie o arquivo enviaemailocomon.php no caminho /var/www/html/sdesk/ e preencha-o com o código abaixo:

<php
#!/usr/bin/php -q
#PEGANDO DA STDIN
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
//Explode
$lines = explode("\n", $email);
//Variaveis
$from = "";
$subject = "";
$headers = "";
$message = "";
$splittingheaders = true;
$outlook=false;
$messageStart=0;
//PEGANDO O EMAIL
for ($i=0; $i<count($lines); $i++) {
if (preg_match("/^From (.*)/", $lines[$i], $matches)) {
$from = $matches[1];
}
if($outlook){
if(strstr($lines[$i],"<html") strstr($lines[$i],"<HTML")){
$messageStart=$i;
break;
}
}else{
if (trim($lines[$i])==""){
$messageStart=$i;
break;
}
}
}
//PEGANDO A MENSAGEM
for ($i=$messageStart; $i<count($lines); $i++) {
if (strstr($lines[$i], "Content-") strstr($lines[$i], "NextPart") strstr($lines[$i], "charset=")){
continue;
}
$message .= $lines[$i]."\n";
if (strstr($lines[$i],"/html>") strstr($lines[$i],"/HTML>")){
break;
}
}
$email=explode(" ",$from);
$de=$email[0];
#GRAVANDO NO BANCO
$host = "x.x.x.x";
$user = "ocomon";
$senha = "senha";
$conexao = mysql_connect($host,$user,$senha);
mysql_select_db("ocomondb");
$descricao=trim($message);
$problema=36; //Nao Identificado
$instituicao=1; //SUA EMPRESA
$equipamento=0; //0
$sistema=1; //Central de Servicos
$contato=$de; //Email do usuario
$telefone="0";
$local=70; //SEU SETOR
$operador=1; //Administrador do Sistema
//INSERINDO A OCORRENCIA
$insert="INSERT INTO ocorrencias (problema, descricao, instituicao, equipamento, sistema, contato, telefone, local, operador,data_abertura, status, aberto_por) values (".$problema.",'".$descricao."',".$instituicao.",".$equipamento.",".$sistema.",'".$contato."','".$telefone."',".$local.",".$operador.",'".date("Y-m-d H:i:s")."',1,".$operador.")";
mysql_query($insert,$conexao) or die(mysql_error());
//INSERCAO PARA ARMAZENAR O TEMPO DO CHAMADO EM CADA STATUS
$numero = mysql_insert_id();
$insert = " insert into tempo_status (ts_ocorrencia, ts_status, ts_tempo, ts_data) values ($numero, 1, 0, '".date("Y-m-d H:i:s")."') ";
mysql_query($insert,$conexao) or die(mysql_error());
mail($contato, "CHAMADO ".$numero." ABERTO", "Ola.\n\nRegistramos seu chamado em nosso Service Desk sob o numero: ".$numero."\n\nSeu problema sera verificado por um de nossos tecnicos.\n\nAguarde nosso contato.\n\nATENCAO: POR FAVOR, NAO RESPONDA A ESSE E-MAIL.","From: Service Desk <>\r\n");
?>
Obs.: Esse passo deve ser feito no servidor de e-mail

4. No diretório ocomon/geral, edite o arquivo "encerramento.php", adicionando as linhas da área //EMAIL ENCERRAMENTO:
if (isset($_POST['mailAR']) ){
$event = 'encerra-para-area';
$qrymsg = "SELECT * FROM msgconfig WHERE msg_event like ('".$event."')";
$execmsg = mysql_query($qrymsg) or die(TRANS('MSG_ERR_MSCONFIG'));
$rowmsg = mysql_fetch_array($execmsg);
send_mail($event, $rowSis['sis_email'], $rowconf, $rowmsg, $VARS);
//EMAIL ENCERRAMENTO
if(strstr($rowfull['contato'],"@")){ //Se for e-mail
$header2 = "From: Service Desk SEAPO <>\r\n";
mail($rowfull['contato'], "CHAMADO ".$rowfull['numero']." ENCERRADO", "Ola.\n\nSeu chamado foi encerrado com sucesso.\n\nNumero do chamado: ".$rowfull['numero']."\nEncerrado por: ".$rowfull['nome']."\nDescricao do problema:\n".$rowfull['descricao'],$header2);
}
//$flag = envia_email_fechamento($numero, $rowSis['sis_email'], $nome, $rowSis['sistema'], $problema, $solucao);
}
Obs.: Com isso, toda vez que encerrar um chamado, o usuário receberá um e-mail

5. No diretório ocomon/geral, edite o arquivo "encaminhar.php", adicionando as linhas da área //ENVIO DE E-MAIL DE ASSENTAMENTOS:
//ENVIO DE E-MAIL DE ASSENTAMENTOS
$headers = "MIME-Version: 1.0\r\nContent-type: text/html; charset=iso-8859-1\r\n";
$Assentamentos = '';
$NumeroChamado = $rowfull['numero'];
$ContatoEmail = $rowfull['contato'];
$QtdAssentamentos=1;
$EAsql = "select a.*, u.* from assentamentos a, usuarios u where a.responsavel=u.user_id and ocorrencia=".$NumeroCha
mado."";
$EAresultado = mysql_query($EAsql);
$EAlinhas = mysql_num_rows($EAresultado);
while ($EArowAssentamento = mysql_fetch_array($EAresultado)){
$Assentamentos = $Assentamentos.$QtdAssentamentos.". Houve alteracao no chamado por ".$EArowAssentamento['no
me']." em ".formatDate($EArowAssentamento['data'])."\n";
$QtdAssentamentos++;
}
if (strpos($ContatoEmail,'@')!=0){
mail($ContatoEmail, "CHAMADO ".$NumeroChamado." ALTERADO", "Ola.\n\nHouve alteracao no chamado ".$NumeroChamado."(aberto por voce) em nosso Service Desk.\n\nAcompanhamento:\n\n".$Assentamentos."\n\nATENCAO: POR FAVOR, NAO RESPONDA A ESSE E-MAIL.","From: Service Desk <>\r\n",$headers);
}
Obs.: As linhas acima devem ser incluídas entre as linhas abaixo:
$resultado3 = mysql_query($queryA) or die(TRANS('MSG_NOT_SAVE_INFO_EDIT_CALL').'<br />'.$queryA);
(as novas linhas devem ser incluídas aqui)
if ($_POST['antes'] != $depois) //Status alterado!! $_POST['antes']: status anterior
Obs.: Com isso, em toda modificação de chamado, o usuário receberá um e-mail

Enfim, é isso.

14 comentários:

  1. Amigo,

    muito interessante o seu projeto, mas pelo o que eu entendi...eu teria que ter o servidor de e-mail na minha estrutura?? pois hoje o meu servidor de e-mail é externo, hospedado em uma empresa...

    mesmo com esse cenário seria possivel implementar essa sua solução???

    abraços

    Augusto Pontin
    augusto@hangarbusiness.com

    ResponderExcluir
  2. Sim, é perfeitamente possível. Faça as adaptações de envio de e-mail baseando-se no meu post Enviando e-mail em PHP com autenticação SMTP.

    Abraço,

    ResponderExcluir
    Respostas
    1. Amigo não tem mais essa pagina voce poderia me passar as instruções ou qto voce me cobraria para deixar o ocomon funcionando via abertura de email.
      andrebento@andrebento.com.br

      Excluir
    2. Amigo não esta mais disponivel esse post, voce poderia me passar o link desse post novamente...

      Excluir
  3. Amigo,

    eu uso o Gmail (Google Apps). É possível adaptar?

    Abraço,

    ResponderExcluir
    Respostas
    1. Sim, é perfeitamente possível. Faça as adaptações de envio de e-mail com autenticação perante o Gmail.

      Excluir
  4. poderia detalhar mais, acehi interessante a solução e meu caso é como o do Augusto, meu servidor esta em um provedor e nele não tem o arquivo .foward, criei um mas não funfou..Obrigado Ronaldo

    ResponderExcluir
    Respostas
    1. Faça as adaptações de envio de e-mail com autenticação perante o seu servidor externo.

      Excluir
  5. alguma novidade quanto a detalhar? não estou conseguindo implementar ...

    ResponderExcluir
    Respostas
    1. Mande suas dúvidas para o cleorbete@gmail.com. Abraço.

      Excluir
  6. Meu servidor de e-mail é o exchange. é possivel?

    ResponderExcluir
  7. Olá, alguém chegou a implementar isso em Windows?
    por favor, mandem mais detalhes sobre isso, marceloluano@gmail.com também tenho esta necessidade!

    Obrigado pelo post.
    Abraços!

    ResponderExcluir
  8. Olá, alguém chegou a implementar isso em Windows?
    por favor, tenho esta necessidade!

    Obrigado..

    ResponderExcluir
  9. Olá, alguém chegou a implementar isso em Windows?
    por favor, tenho esta necessidade!

    Obrigado...

    ResponderExcluir