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 [email protected]
# 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.


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.

14 Comentarios

Guillermo Carranza · 13 septiembre, 2015 a las 22:57

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!

Desire · 30 agosto, 2016 a las 08:32

Buenos días. La variable $ticket_id no obtiene ningún valor. Porque podría estar pasando eso?

    angelinux · 31 agosto, 2016 a las 12:33

    Qué tal.
    ¿Qué versión de PHP / osTicker estás utilizando?
    ¿Has podido ver si genera algún error en el log?

    Saludos.

      Desire · 31 agosto, 2016 a las 13:10

      Ya logre resolver. Gracias. Tenia inconvenientes con las librerias

        Armando · 24 abril, 2019 a las 17:30

        Perdona no se si lo veas pero que librerias tengo el mismo problema y no se como resolverlo, soy bastante nuevo en esto de PHP

leo · 18 enero, 2017 a las 08:24

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…

Jonathan · 6 marzo, 2017 a las 13:24

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?

    angelinux · 6 marzo, 2017 a las 15:53

    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.

Enriqur Hernandez · 29 agosto, 2017 a las 21:51

Buenas noches necesito ayuda
me manda error no se que sea
osTicket (v1.10)

Armando · 24 abril, 2019 a las 17:22

Hola perdón por preguntar algo que ya paso bastante tiempo, pero explico soy novato en esto de php, habra forma de que el aviso de: Ticket abierto con número… aparezca sin salir del formulario?

Ahorita tal cual esta llenas el formulario y crea el ticket pero te lleva a la pagina /generarTicket.php, pero si lo agrego a otro sitio por ejemplo mi pagina de contacto no quiero desaparezca toda la pagina solo que aparezca que el ticket fue creado, no se si me di a explicar.

Pablo Musella · 22 julio, 2021 a las 11:39

Pregunta, a uds les pasa que les duplica el usuario al hacer un alta por API? o sea, les queda un mismo nombre, email y teléfono de usuario y lo único que cambia es el ID en la base de datos!!
De esta forma, se complicaría para luego poder hacer un seguimiento por usuario…

Deja un comentario