Note
Devido ao numero crescente de comentários e dúvidas nesse simples Gist, decidi organizar melhor as principais funções da API REST do GLPI em https://glpi-rest-api.surge.sh/
Para obter um token de API no GLPI, você precisa seguir os seguintes passos:
- Habilitar a API REST no GLPI Primeiro, verifique se a API REST está habilitada:
Faça login no GLPI como administrador
- Vá para Configuração > Geral > APIs
- Certifique-se de que a opção "Habilitar API REST" esteja ativada
- Criar um token de API para um usuário
- Vá para Administração > Usuários
- Selecione o usuário para o qual deseja criar o token
- Vá para a seção "Chaves de acesso remoto"
- Marque a opção "re-gerar" e clique em "Salvar"
- Copie a chave gerada
- Token da aplicação:
- Vá para Configuração > Geral > APIs
- Clique no botão "Adicionar clientes da API"
- Insira um nome
- Marque a opção "Ativo" como "Sim"
- Preencha os campos "Início do intervalo de endereços IPv4" e "Fim do intervalo de endereços IPv4"
- Clique no botão "Adicionar"
- Selecione o cliente criado e copie o token.
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: user_token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
"https://glpi.exemplo.com.br/apirest.php/initSession"
Vincular arquivo PDF ao ticket
O endpoint
Document_Iteme o payload que você está usando estão corretos. O erro "Você não tem permissão para executar essa ação" indica um problema de permissão do perfil do usuário no GLPI, não um erro na chamada da API.As causas mais prováveis são:
Permissão de vinculação ao Ticket: O usuário precisa ter permissão de escrita no Ticket ao qual está tentando vincular o documento. Se o ticket pertence a outra entidade ou o perfil não permite editar aquele ticket, a vinculação será recusada.
Entidade diferente: Se o documento e o ticket estão em entidades diferentes e o perfil não é recursivo, a vinculação será bloqueada.
Lembre-se também de seguir os passos:
1) Iniciar Sessão
GET /apirest.php/initSessionHeaders:
2) Criar o ticket
POST /apirest.php/TicketHeaders:
Body (JSON):
{ "input": { "name": "Ticket de teste - Upload PDF via API", "content": "Ticket criado via API para testar vinculacao de documento PDF.", "type": 1, "urgency": 3, "priority": 3 } }3) Upload do Documento
POST /apirest.php/DocumentHeaders:
Body (multipart/form-data):
Requisição em formato CURL
Os pontos-chave:
-F(não-d): indica `multipart/form-dataP , necessário para envio de arquivo bináriouploadManifest: é o JSON de metadados enviado como parte do form, com;type=application/jsonno final para indicar o content-type desse campofilename[0]=@: o@faz o curl ler o conteúdo do arquivo e enviá-lo como binary uploadContent-Type: application/json. O curl define automaticamentemultipart/form-dataquando se usa-F.4) Vincular Documento ao Ticket
POST /apirest.php/Document_ItemHeaders:
Body (JSON):
{ "input": { "documents_id": 1, "itemtype": "Ticket", "items_id": 3 } }