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 2017-05-20 20:25:29

Shamrockst
Guest
Registered: 2017-05-20
Posts: 7

Comment importer des tickets ?

Bonjour à tous,

Est-il possible d'importer des tickets dans GLPI ? De la même manière qu'avec  le plugin datainjection.  Effet, je tiens à jour un tableau Excel avec tous les incidents et problèmes.
Après de longues recherches, je n'ai rien trouvé ...
merci

Offline

#2 2017-05-21 11:29:35

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

bonjour,
en utilisant l'API REST vous pouvez creer des tickets. il faudra un peu de developpement mais vous pouvez créer une page php qui va lire votre fichier excel et avec les informations du fichier créer les tickets


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#3 2017-05-21 12:48:07

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

un exemple simple si vous avez un csv avec 2 colonnes titre et description.
mais vous pouvez completer comme vous voulez avec d'autre champs

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- la denree -2017-  -->
<head>
    <title>TEST API</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta name="generator" content="Bluefish 2.2.7" />
    <meta name="Keywords" content="GLPI,import API," />
    <meta name="Description" content="imports de tickets via API REST" />
    <meta http-equiv="X-UA-Compatible" content="IE=8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />


</head>
<body>
<h1>import tickets from csv using GLPI API REST</h1>
<?php
 echo "<h2>read csv file</h2>";
//initialisation des variables

$mycsvfile="tickets.csv";
$api_url="http://localhost/glpi/apirest.php";
$user_token="myusertocker";
$app_token ="myapptoken";

//initialisation api glpi
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
$sess_token = $obj[session_token];
$headers = array(
('Content-Type: application/json'),
('App-Token: ' . $app_token),
('Session-Token: '.$sess_token)  
);
if (!file_exists($mycsvfile)){
    die("le fichier n'existe pas");
} 
// lecture des lignes du fichier
$ligne=1;
$fic=fopen($mycsvfile, "r");
while($tab=fgetcsv($fic,1024,','))
{
$titre=$tab[0];
$description=$tab[1];
echo "creation du ticket  ". $titre." ".$description."<br/>";
    $ch = curl_init();
    $url=$api_url . "/Ticket/";
        $fields='{
    "input": {
        "name": "' .$titre. '","requesttypes_id": "8","itilcategories_id": "20","content": "'.$description.'","type": "1",
        "users_id_recipient": "6"
    }
}';

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    $request_result = curl_exec($ch);
    curl_close ($ch);
    $obj = json_decode($request_result,true);
    $ticket_id=$obj['id'];
echo "<br/>$ticket_id<br/>";
}?>

</body>
</html>

Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#4 2017-05-21 23:21:36

Shamrockst
Guest
Registered: 2017-05-20
Posts: 7

Re: Comment importer des tickets ?

Merci pour les infos LaDenrée  :-)

Offline

#5 2017-05-22 12:15:38

Shamrockst
Guest
Registered: 2017-05-20
Posts: 7

Re: Comment importer des tickets ?

re

j'ai activé API REST, la page http://127.0.0.1/glpi/apirest.php/ fonctionne.

ou est-ce que je dois mettre le fichier .php et mon .csv ?
j'avoue que je suis un peu perdu ...
Merci

Offline

#6 2017-05-22 13:55:52

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

le fichier php doit être sur un serveur web.
le plus simple est de le mettre dans /var/www/html/api sur le même serveur que glpi comme ça vous pouvez laisser l'adresse locahost  : $api_url="http://localhost/glpi/apirest.php";

pour le csv il faut le mettre aussi sur le serveur par exemple dans /home ou dans /tmp et il faudra modifier le chemin du fichier en conséquence.

IMPORTANT :  faites un dump préalable de votre base et travaillez sur un serveur de test (j'ai écrit le script en vitesse et je l'ai testé avec un fichier de 2 lignes mais on n'est pas à l'abri d'un bug)


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#7 2017-05-23 09:09:35

Shamrockst
Guest
Registered: 2017-05-20
Posts: 7

Re: Comment importer des tickets ?

J'ai mis le fichier .php sur mon serveur à l'emplacement suivant :
/var/www/html/api/ticket.php

J'ai modifié le chemin du .csv :
$mycsvfile="/home/user/Documents/ticket.csv";

Puis je rentre l' URL :
http://127.0.0.1/api/ticket.php

Voici ce que j'ai à l’écran :

import tickets from csv using GLPI API REST
read csv file
creation du ticket titre description


creation du ticket titre test 1 description test 1


creation du ticket titre test 2 description test 2


creation du ticket titre test 3 description test 3

Par contre les tickets ne s'incrémentent pas dans GLPI

Avez-vous une petite idée ?

Offline

#8 2017-05-23 11:03:18

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

déjà, la lecture du csv fonctionne,
avez vous activé l'API pour 127.0.0.1 ?  avec le apptoken corespondant ?

que vous renvoie votre navigateur si vous tapez en url   http://127.0.0.1/glpi/apirest.php


j'ai modifié le code pour y ajouter des messages qui vont nous aider pour le debug...



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- la denree -2017-  -->
<head>
    <title>TEST API</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta name="generator" content="Bluefish 2.2.7" />
    <meta name="Keywords" content="GLPI,import API," />
    <meta name="Description" content="imports de tickets via API REST" />
    <meta http-equiv="X-UA-Compatible" content="IE=8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />


</head>
<body>
<h1>import tickets from csv using GLPI API REST</h1>
<?php
 echo "<h2>read csv file</h2>";
//initialisation des variables

$mycsvfile="tickets.csv";
$api_url="http://127.0.0.1/glpi/apirest.php";
$user_token="myusertocker";
$app_token ="myapptoken";

//initialisation api glpi
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
// ligne suivante pour debug à commenter en prod;
echo "<br/>url authentification : " . $url . "<br/>" ;

curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
// ligne suivante pour debug à commenter en prod;
print_r($obj);

$sess_token = $obj[session_token];

// ligne suivante pour debug à commenter en prod;
echo " <br/>session token : ". $sess_token ."<br/>";

$headers = array(
('Content-Type: application/json'),
('App-Token: ' . $app_token),
('Session-Token: '.$sess_token)  
);

// ligne suivante pour debug à commenter en prod;
print_r($header);

if (!file_exists($mycsvfile)){
    die("le fichier n'existe pas");
} 
// lecture des lignes du fichier
$ligne=1;
$fic=fopen($mycsvfile, "r");
while($tab=fgetcsv($fic,1024,','))
{
$titre=$tab[0];
$description=$tab[1];
echo "creation du ticket  ". $titre." ".$description."<br/>";
    $ch = curl_init();
    $url=$api_url . "/Ticket/";
        $fields='{
    "input": {
        "name": "' .$titre. '","requesttypes_id": "1","content": "'.$description.'","type": "1"
    }
}';

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    $request_result = curl_exec($ch);
    curl_close ($ch);
    $obj = json_decode($request_result,true);
    $ticket_id=$obj['id'];
echo "<br/>$ticket_id<br/>";
}?>

</body>
</html>

Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#9 2017-05-23 23:19:11

Shamrockst
Guest
Registered: 2017-05-20
Posts: 7

Re: Comment importer des tickets ?

Effectivement, problème au niveau app_token et user_token.
Un GRAND  merci LaDenrée .. ça fonctionne  à merveille  ;-)

Offline

#10 2017-05-24 07:28:06

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

On peut bien évidemment importer plus que titre et description. ...


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#11 2017-05-25 19:52:59

Shamrockst
Guest
Registered: 2017-05-20
Posts: 7

Re: Comment importer des tickets ?

Vu ;-)
je suis entrain d'ajouter des champs pour mon fichier .csv
J'ai donc modifié le .php comme ceci :

// lecture des lignes du fichier
$ligne=1;
$fic=fopen($mycsvfile, "r");
while($tab=fgetcsv($fic,1024,','))
{
$titre=$tab[0];
$dateouverture=$tab[1];
$tempsresolution=$tab[2];
$lieu=$tab[3];
$demandeur=$tab[4];
$categorie=$tab[5];
$description=$tab[6];


echo "creation du ticket  ". $titre." ". $dateouverture." ". $tempsresolution." ". $lieu." ". $demandeur." ". $categorie." ".$description."<br/>";
    $ch = curl_init();
    $url=$api_url . "/Ticket/";
        $fields='{

par contre je bloque sur cette partie....

    "input": {
        "name": "' .$titre. '","requesttypes_id": "8","itilcategories_id": "20","content": "'.$description.'","type": "1",
        "users_id_recipient": "6"
    }
}';

Je ne sais pas ou trouver les informations ... Pouvez-vous me donner une piste  ? 

merci

Last edited by Shamrockst (2017-05-25 19:54:05)

Offline

#12 2017-05-25 21:18:03

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

"itilcategories_id": ".$catégorie." : c'est le N° de ma catégorie de ticket GLPI
"requesttypes_id": "8"  source de la demande ( chez moi 8 c'est API)

"_users_id_requester": "'.$id_demandeur.'"
"locations_id"

vous pouvez mettre presque tous les champs de la table glpi_tickets


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#13 2017-05-25 21:46:29

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

un exemple ci desssous

$fields='{
    "input": {

        "entities_id": "1",
        "name": "    ",
        "date": "2016-10-06 17:34:28",
        "closedate": "2016-10-15 14:50:02",
        "solvedate": "2016-10-08 10:32:47",
        "date_mod": "2016-10-15 14:50:02",
        "users_id_lastupdater": "6",
        "status": "6",
        "users_id_recipient": "9",
        "requesttypes_id": "2",
        "content": "description",
        "urgency": "3",
        "impact": "3",
        "priority": "3",
        "itilcategories_id": "1",
        "type": "2",
        "solutiontypes_id": "0",
        "solution": " solution",
        "global_validation": "1",
        "slts_ttr_id": "0",
        "slts_tto_id": "0",
        "ttr_slalevels_id": "0",
        "_users_id_requester": "'.$id_demandeur.'"
       
        "begin_waiting_date": "2016-10-08 10:32:47",
        "sla_waiting_duration": "0",
        "waiting_duration": "142673",
        "close_delay_stat": "625061",
        "solve_delay_stat": "4826",
        "takeintoaccount_delay_stat": "934",
        "actiontime": "0",
        "is_deleted": "0",
        "locations_id": "1",
        "validation_percent": "0"       
    }
}';

bien sur certains champ n'ont pas de sens lors d'une creation ou import, vous pouvez les supprimer.


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#14 2017-05-30 14:35:31

Shamrockst
Guest
Registered: 2017-05-20
Posts: 7

Re: Comment importer des tickets ?

re ...

Désolé de vous solliciter une fois de plus  mais je n'arrive pas à intégrer toutes les colonnes  de mon fichier .csv, (j'y ai passé de nombreuses heures mais rien à faire :-( )
à savoir  : titre, dateouverture, tempsresolution, demandeur,lieu, categorie, entite et description

Voici mon ticket.php   

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- la denree -2017-  -->
<head>
    <title>TEST API</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta name="generator" content="Bluefish 2.2.7" />
    <meta name="Keywords" content="GLPI,import API," />
    <meta name="Description" content="imports de tickets via API REST" />
    <meta http-equiv="X-UA-Compatible" content="IE=8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="cache-control" content="no-cache" />


</head>
<body>
<h1>import tickets from csv using GLPI API REST</h1>
<?php
 echo "<h2>read csv file</h2>";
//initialisation des variables

$mycsvfile="/home/user/Documents/tickets.csv";
$api_url="http://127.0.0.1/glpi/apirest.php";
$user_token="z0dsfi2r9crs7aiky84zmzmjzbp94mdo9miw7tn8";
$app_token ="heu3wuza8ynsi69g4mg0gilhnr9q4yhegne8s8rc";

//initialisation api glpi
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
// ligne suivante pour debug à commenter en prod;
echo "<br/>url authentification : " . $url . "<br/>" ;

curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
// ligne suivante pour debug à commenter en prod;
print_r($obj);

$sess_token = $obj[session_token];

// ligne suivante pour debug à commenter en prod;
echo " <br/>session token : ". $sess_token ."<br/>";

$headers = array(
('Content-Type: application/json'),
('App-Token: ' . $app_token),
('Session-Token: '.$sess_token)  
);

// ligne suivante pour debug à commenter en prod;
print_r($header);

if (!file_exists($mycsvfile)){
    die("le fichier n'existe pas");
} 
// lecture des lignes du fichier
$ligne=1;
$fic=fopen($mycsvfile, "r");
while($tab=fgetcsv($fic,1024,','))
{
$titre=$tab[0];
$dateouverture=$tab[1];
$tempsresolution=$tab[2];
$demandeur=$tab[3];
$lieu=$tab[4];
$categorie=$tab[5];
$entite=$tab[6];
$description=$tab[7];

echo "creation du ticket  ". $titre." ". $dateouverture." ". $tempsresolution."". $demandeur."". $lieu."". $categorie."". $elementassocie."".$description."<br/>";
    $ch = curl_init();
    $url=$api_url . "/Ticket/";
        $fields='{
    "input": {
"name": "' .$titre. '","requesttypes_id": "1",
"date": "' .$dateouverture. '","2016-10-06 17:34:28",
"closedate": "' .$tempsresolution. '","2016-10-15 14:50:02",
"_users_id_requester": "' .$demandeur. '","'.$id_demandeur.'"
"locations_id": "' .$lieu. '","1",
"itilcategories_id": "' .$categorie. '","1",
"entities_id": "' .$entite. '","1",
"content": "'.$description.'","type": "1"


    }
}';

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    $request_result = curl_exec($ch);
    curl_close ($ch);
    $obj = json_decode($request_result,true);
    $ticket_id=$obj['id'];
echo "<br/>$ticket_id<br/>";
}?>

Merci :-)

Offline

#15 2017-05-30 14:51:10

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

bonjour,
je ne comprends pas bien certaines parties du input :

$fields='{
    "input": {
"name": "' .$titre. '",
"requesttypes_id": "1",
"date": "' .$dateouverture. '","2016-10-06 17:34:28", //pourquoi une date en dur après la variable $dateouverture????
"closedate": "' .$tempsresolution. '","2016-10-15 14:50:02",//pourquoi une date en dur après la variable $tempsresolution????
"_users_id_requester": "' .$demandeur. '","'.$id_demandeur.'"// vous avez 2 variables pour id_requester il ne vous en faut qu'une;
"locations_id": "' .$lieu. '","1",
"itilcategories_id": "' .$categorie. '","1",
"entities_id": "' .$entite. '","1",
"content": "'.$description.'",
"type": "1"


    }
}';

edit : pouvez vous faire un print_r($fields) et poster le resultat  (pour vérifier que les id sont bien des entiers par exemple)


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

#16 2017-05-30 14:57:19

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 3,357

Re: Comment importer des tickets ?

allez y par étape :

$fields='{
        "input": {
    "name": "' .$titre. '",
    "requesttypes_id": "1",
    "date": "' .$dateouverture. '" 
    "content": "'.$description.'",
    "type": "1"
        }
    }';

essayez des descriptions avec des apostrophes et double quote il faudra peut échapper certains caractères...


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+webservices PHP7.0 Mariadb10
*GLPI 9.2(behaviours1.5.2+fusion9.2+1.0+applicatifs2.3.0)hebergé sur serveur mutualisé.

Offline

Board footer

Powered by FluxBB