Crear un ticket en osTicket desde PHP

 

osTicket es una solución para la creación, seguimiento y administración de tickets en línea para los clientes. Ésta herramienta es una de las famosas, pero no es muy cómodo para el cliente tener que ir a la página en donde se encuentre almacenado dicho sistema, iniciar sesión, y generar el ticket. Muchos clientes prefieren la comodidad de sus mismos sistemas, que al dar un solo click, aparezca una ventana donde puedan indicar el problema y no tener que mostrar credenciales.

osTicket ofrece la posibilidad de generar un ticket utilizando su API, lo cual permite utilizar una gran variedad de lenguajes de programación para generar la interfaz, pre llenar cierta información, conectarse al sitio donde reside el sistema de gestión de tickets, generarlo, e informarle al usuario qué número de ticket tiene para poder darle seguimiento.

Para ello, primero debemos generar una clave de API.

En el panel de administrador -> pestaña  administrar -> Claves API -> agregue la nueva clave del API.

Se coloca la IP en donde va a estar el formulario, y se habilita la opción “Puede crear tickets”.

Se colocan los siguientes dos archvos en el servidor donde se van a dar de alta los tickets.

Estos archivos contienen un formulario básico, para que el usuario pueda agregarle el framework o las validaciones que necesite, por ejemplo mootools, jquery, ó formcheck, etc.

Archivo soporte.php

<?php
/**
*
* @author Horacio Romero Mendez (angelos)
* @License Copyleft 2015
* @since 07 de Enero de 2015 16:06:16
* @Internal GNU/Linux Mint 16 Petra Desktop
*
*/

?>
<form action="generarTicket.php" method="post" enctype="multipart/form-data" >
<center>
<div style="width: 300px;">
<fieldset>
<legend>Informaci&oacute;n de contacto</legend>
<table>
<tr>
<td align="right">
<b>Correo:</b>
</td>
<td align="left">
<input type="text" name="correo" id="correo" maxlength="60" />
</td>
</tr>
<tr>
<td align="right">
<b>Nombre:</b>
</td>
<td align="left">
<input type="text" name="nombre" id="nombre" maxlength="60" />
</td>
</tr>
<tr>
<td align="right">
<b>Tel&eacute;fono:</b>
</td>
<td align="left">
<input type="text" name="telefono" id="telefono" maxlength="20" />
</td>
</tr>
<tr>
<td align="right">
<b>Extenci&oacute;n:</b>
</td>
<td align="left">
<input type="text" name="extencion" id="extencion" maxlength="5" />
</td>
</tr>
</table>
</fieldset>

<br/><br/>

<fieldset>
<legend>Datos del ticket</legend>
<table>
<tr>
<td align="right">
<b>Resumen del problema:</b>
</td>
<td align="left">
<input type="text" name="resumen" id="resumen" maxlength="60" />
</td>
</tr>
<tr>
<td align="right">
<b>Detalles del problema:</b>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="left" colspan="2">
<textarea name="problema" id="problema" cols="40" rows="10"></textarea>
</td>
</tr>
</table>
</fieldset>
Subir archivos (puede hacer m&uacute;ltiples selecciones): <input type="file" name="archivo" id="archivo" multiple>
<br/><br/>
<input type="hidden" name="sitio" id="sitio" value="elSitioDesdeDondeSeEnvia" />
<input type="submit" value="Generar ticket" />
</div>
</center>
</form>

Archivo generarTicket.php

<?php
/**
*
* @author Horacio Romero Mendez (angelos)
* @License Copyleft 2015
* @since 09 de Enero de 2015 18:10:16
* @Internal GNU/Linux Mint 16 Petra Desktop
*
*/
#
# Configuration: Enter the url and key. That is it.
# url => URL to api/task/cron e.g # http://yourdomain.com/support/api/tickets.json
# key => API's Key (see admin panel on how to generate a key)
# $data add custom required fields to the array.
#
# Originally authored by jared@osTicket.com
# Modified by ntozier@osTicket / tmib.net


//DIRECCIÓN DEL TICKET Y LA CLAVE DE API

$config = array(
'url'=>'http://TuSitioWeb/soporte/api/http.php/tickets.json',
'key'=>'ELAPIQUEHAYASGENERADO'
);

$data = array(
'name' => $_POST["nombre"], //NOMBRE
'email' => $_POST["correo"], //CORREO
'phone' => $_POST["telefono"].", ext ".$_POST["extencion"], //TELEFONO
'subject' => $_POST["resumen"], //TITULO
'message' => $_POST["problema"], //MENSAJE
'ip' => $_SERVER['REMOTE_ADDR'], //IP CLIENTE
'topicId' => '1', //TOPIC
'Site' => $_POST["sitio"], //EJEMPLO DE CAMPO PERSONALIZADO
'attachments' => array() //ARRELGO PARA ARCHIVOS
);

foreach ($_FILES as $file => $f){
if (isset($f) && is_uploaded_file($f['tmp_name'])) {
$nombre = $f["name"];
$tipo = $f["type"];
$ruta = $f['tmp_name'];
$data['attachments'][] = array("$nombre" => 'data: '.$tipo.';base64,'.base64_encode(file_get_contents($ruta)));
}
}

function_exists('curl_version') or die('CURL support required');
function_exists('json_encode') or die('JSON support required');

set_time_limit(30);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config['url']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_USERAGENT, 'osTicket API Client v1.8');
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:', 'X-API-Key: '.$config['key']));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
$result=curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($code != 201)
die('Error al generar el ticket: '.$result);

$ticket_id = (int) $result;

echo "Ticket abierto con n&uacute;mero ".$ticket_id;

?>

Con ello, puede cargar desde el navegador, el archivo soporte.php, llenar los datos, generar y mostrar que ticket se acaba de crear.

Author: angelinux

Desarrollador de páginas web desde el año 2000 y con experiencia en programación de sistemas para empresas desde el 2008; cofundador de CONSoluciones; autor del blog de software libre “Angelinux-slack”; docente en maestría en UPAV y fundador de la distribución Linux Falco que está en desarrollo para la Universidad Veracruzana.
Además, ponente, organizador de congreso, laborista social, impartidor de cursos de programación y servidores Linux, webmaster, y ex invitado en programa de televisión.

11 comentarios sobre “Crear un ticket en osTicket desde PHP

  1. Estimado! qué tal? Tengo un par de inconvenientes respecto a esto, sería tan amable de contactarme vía mail con motivo de brindarme una ayudita? Pago si es necesario! Muchísimas gracias de antemano!

     
  2. buen día una consulta, habra un API o plugin ,que me permita,que a la hora de asignar un ticket abierto a un personal ,envié un correo a la persona que genero el ticket indicándole que personal le va atender y que numero de ticket se genero.Saludos…

     
  3. Buenas tardes, estoy intentando poner en marcah este sistema, pero estoy atorado en una parte.
    Donde tengo que poner la URL del api, no se cual poner.
    En mis directorios de Osticket no encuentro ningun archivo llamado tickets.json.

    Sabe que podría ser?

     
    1. Qué tal, hice un cambio para apuntar directamente al archivo http. Quedaría de la siguiente manera:
      ‘url’=>’http://TuSitioWeb/soporte/api/http.php/tickets.json’,

      Espero te ayude, saludos.

       

Deja un comentario