Integración de WordPress y Redmine Helpdesk
En mi post anterior describí el proceso de cómo crear una tarea en Redmine desde tu sitio web WordPress, utilizando Gravity Forms.
Hoy, vamos a dar un paso más allá revisando cómo integrar tu sitio web de WordPress con el famoso plugin Redmine UP Helpdesk. Queremos crear un ticket de helpdesk con los datos que recogemos del Gravity Form en WordPress.
API de Gravity Forms y Redmine UP
Para crear tareas e incidencias en Redmine utilizando Gravity Forms e incluir adicionalmente los datos dedicados para el ticket del helpdesk necesitarás utilizar un fragmento de código como el que se proporciona a continuación. Este fragmento de código utiliza la API de Gravity Forms para recuperar los valores de ciertos campos de tu formulario y luego los envía a la API de Redmine para crear un nuevo ticket. La API del Helpdesk de Redmine UP también está involucrada. En este caso no utilizaremos el método JSON, sino un archivo xml.
// Substitute form id=109 by your form id
add_action( 'gform_after_submission_109', 'send_data_to_helpdesk', 10, 2 );
function send_data_to_helpdesk( $entry, $form ) {
// Get the values of fields 1, 3, 4, 5 and 6 - Substitute by your field ids
$contact_name = rgar( $entry, '1' );
$contact_email = rgar( $entry, '3' );
$subject = rgar( $entry, '4' );
$description = rgar( $entry, '5' );
$custom_field_value = rgar( $entry, '6' );
// URL of your Redmine instance
$redmine_url = 'https://hereyourredmineurl.com';
// Your Redmine API key (substitute by your user's API; more info below this code snippet)
$redmine_api_key = '12345678901234567890';
// Tracker ID for the issue
$tracker_id = 4; //Redmine tracker to be created
// Project ID for the issue
$project_id = 18; //Redmine project that will contain the issue
// Prepare the data for the ticket
$ticket_data = '<?xml version="1.0"?>
<ticket>
<issue>
<project_id>' . $project_id . '</project_id>
<tracker_id>' . $tracker_id . '</tracker_id>
<author_id>1</author_id>
<subject>' . $subject . '</subject>
<description>' . $description . '</description>
<status_id>1</status_id> //change by the status you want the issue to be created in
<priority_id>4</priority_id> //change by the priority you want the issue to be created in
<assigned_to_id>1</assigned_to_id> //change by the user id you want the issue to be assigned to
<custom_fields type="array">
<custom_field id="75">
<value>' . $custom_field_value . '</value>
</custom_field>
</custom_fields>
</issue>
<contact>
<email>' . $contact_email . '</email>
<first_name>' . $contact_name . '</first_name>
</contact>
</ticket>';
// Use cURL to send the data to the Redmine Helpdesk API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $redmine_url . '/helpdesk/create_ticket.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $ticket_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/xml',
'X-Redmine-API-Key: ' . $redmine_api_key
));
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Check if the API call was successful
if($httpcode != 201) {
// The API call failed, log the error and return
error_log("Failed to create Redmine UP's Helpdesk ticket. HTTP code: " . $httpcode . ", Response: " . $response);
return;
}
// The API call was successful, continue with other actions if needed
}
Instrucciones
Aunque el fragmento de código incluye comentarios explicativos, daré algunas pautas para su uso:
- sustituye los ids indicados en el snippet por tus trackers, campos, etc, id
- puedes obtener el id del Gravity Form en la lista de formularios y puedes obtener los ids de los campos del formulario comprobando la configuración de cada campo.
- para obtener el id de tu proyecto deberás seguir los siguientes pasos:
- vaya a esta página: https://hereyourredmineurl.com/projects.xml (probablemente tendrá que iniciar sesión en Redmine como administrador)
- busca los detalles del proyecto en el que quieres que se cree la tarea
- anota el “id” correspondiente a ese proyecto
- para obtener los ids de trackers, prioridades o campos, sólo tienes que ir a Administración y pasar el cursor por encima de las distintas entidades. En la URL que te indicará el navegador, verás el id de cada valor.
- sustituye el falso código API del snippet por el valor API correcto. Para obtener la clave API, sigue estos pasos:
- elige qué usuario de Redmine será el autor de los tickets creados desde el formulario. También puedes crear un usuario genérico para este fin.
- El usuario tiene que iniciar sesión en Redmine, ir a “Mi Cuenta”. En la barra lateral izquierda verás la función de clave API. Crea una nueva y copia el resultado.
- Una vez creado el ticket en Redmine todos los feeds (como las notificaciones de Redmine o el acuse de recibo automático al cliente) se activarán como un ticket normal del Helpdesk de Redmine.