You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2024-02-05 15:32:17

ImXcross
Member
Registered: 2024-02-05
Posts: 1

Whatsapp API

Buenos días,

Estoy intentando hacer una bot para whatsapp el cual permita abrir tickets criticos en glpi para ciertos usuarios (solo los que esten en la lista de numeros de telefono permitidos.

La cosa es que me manda el mensaje y el boton de Abrir ticket critico, pero no aparece el ticket, entiendo que no se crea en GLPI.

Aquí está el codigo, me podeis ayudar? Las lineas con "XXXXXX" las he puesto yo por confidencialidad"

<?php
chdir('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_NOTICE);

include("logging.class.php");
$log = new Logging();
$log->info("================================ COMIENZO ================================");

$allowedNumbers = ["+XXXXXXXXXXXXXX"]; // Asegúrate de llenar este array con los números permitidos

function isNumberAllowed($number, $allowedNumbers) {
    return in_array($number, $allowedNumbers);
}

function sendMessage($recipientId, $text, $buttons = null) {
    global $log;

    $url = "XXXXXXXXXXXXXXXXXXXXXX";
    $data = [
        'messaging_product' => 'whatsapp',
        'to' => $recipientId,
        'type' => 'text',
        'text' => ['body' => $text]
    ];

    if ($buttons !== null) {
        $data['type'] = 'interactive';
        $data['interactive'] = [
            'type' => 'button',
            'body' => ['text' => $text],
            'action' => ['buttons' => $buttons]
        ];
    }

    $headers = [
        'Content-Type: application/json',
        'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXX'
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        $log->info('cURL error: ' . curl_error($ch));
    }
    curl_close($ch);

    $log->info("Respuesta: $response");
    return $response;
}

// Funciones getGlpiSessionToken y createGlpiTicket permanecen igual

if (isset($_GET['hub_challenge'])) {
    echo $_GET['hub_challenge'];
    exit;
}

$getContent = file_get_contents('php://input');
$log->info("Contenido: $getContent");

$input = json_decode($getContent, true);

if (isset($input['entry'][0]['changes'][0]['value']['messages'][0])) {
    $messageData = $input['entry'][0]['changes'][0]['value']['messages'][0];
    $senderId = $messageData['from'];

    if (isset($messageData['button']) && $messageData['button'] === 'open_ticket') {
        if (isNumberAllowed($senderId, $allowedNumbers)) {
            $api_url = "XXXXXXXXXXXXXXXXXXXX";
            $app_token = "XXXXXXXXXXXXXXXXXXX";
            $user_token = "XXXXXXXXXXXXXXXXXXX";

            $session_token = getGlpiSessionToken($api_url, $app_token, $user_token);
            if ($session_token) {
                $ticket_details = [
                    'name'                 => 'test critical',  // Título del ticket
                    'content'              => 'test critical2',  // Descripción o contenido del ticket
                    'type'                 => 1,  // Tipo del ticket (1 para incidente, por ejemplo)
                    'status'               => 2,  // Estado del ticket (como nuevo, en curso, cerrado, etc.)
                    'urgency'              => 3,  // Urgencia (1 = baja, 2 = media, 3 = alta)
                    'impact'               => 3,  // Impacto (1 = bajo, 2 = medio, 3 = alto)
                    'priority'             => 3,  // Prioridad (1 = baja, 2 = media, 3 = alta)
                    'itilcategories_id'    => 1,  // ID de la categoría ITIL (si se utiliza)
                    // Puedes agregar más campos según lo que tu configuración de GLPI requiera
                ];

                $ticket_created = createGlpiTicket($api_url, $session_token, $ticket_details);
                if ($ticket_created) {
                    sendMessage($senderId, "Ticket abierto en GLPI con éxito.");
                } else {
                    sendMessage($senderId, "Error al abrir el ticket en GLPI.");
                }
            } else {
                sendMessage($senderId, "Error al obtener token de sesión GLPI.");
            }
        } else {
            sendMessage($senderId, "No tienes permitido abrir un ticket.");
        }
    } else {
        // Crear y enviar el botón "Abrir Ticket Crítico" solo si el mensaje no es una acción de botón
        $buttons = [
            [
                'type' => 'reply',
                'reply' => [
                    'id' => 'open_ticket',
                    'title' => 'Abrir Ticket Crítico'
                ]
            ]
        ];
        sendMessage($senderId, "Bienvenido al servicio de asistencia técnica. Por favor, elige una opción:", $buttons);
    }
}

$log->info("================================ FIN ================================");
?>


Gracias!

Last edited by ImXcross (2024-02-05 15:33:58)

Offline

#2 2024-02-08 16:44:27

mmoral
Member
Registered: 2023-12-28
Posts: 50

Re: Whatsapp API

Pregunta mejor en el foro de API Rest
si con la api crea bien el ticket te devuelve el id del ticket, ¿lo has verificado?
en caso contrario te devuelve mensaje de error
¿has revisado en el directorio de logs el log de api.log?

Offline

#3 2024-08-21 03:14:23

sammirairam
Member
Registered: 2024-08-21
Posts: 2

Re: Whatsapp API

youtube.com/watch?v=y8njLR8TtRM&t=453s

Offline

Board footer

Powered by FluxBB