Como integrar o bot com um ITSM?

Uso Glpi para gerir os serviços de TI. Criei esse tópico a partir da discussão, no Bots4U, com @GabrielPetrone e @Bruno.

Como integrar o bot com o ITSM? Quais parâmetros de entrada para abrir o chamado? Como configurar? O chatbot pode ser usado também para consultar um ID?

Tudo é novo para mim, espero poder aprender, testar e contribuir! :grinning:

2 Curtidas

Bem vinda à comunidade @DALILA_GIOVANA_PAGNO !

Bom, percebo que você é iniciante por aqui, vamos por partes:
Eu fiz uma integração com o GLPI utilizando API.

  • Você já conhece a API do GLPI?
    http://{endereço_do_seu_GLPI}/apirest.php/

  • Você já sabe fazer Requisições HTTP pelo Builder do BLiP?

1 Curtida

Não conhecia, vou postando o passo a passo que vou seguir aqui para orientar quem estiver com a mesma dúvida.
Acessei o endereço:
http://{meu_endereço_do_glpi/glpi/apirest.php/initSession

E o retorno foi:
“API desativada”

Então, no GLPI, no menu Configurar > Geral > API, habilitei a API.

Depois disso, a mensagem obtida no endereço acima foi:
“Não há um cliente de API ativo que corresponda a seu endereço IP na configuração (xx.xx.xx.xx)”

Então, ainda no menu API, adicionei um cliente de API.

A próxima mensagem obtida foi:
“faltando o parâmetro app_token; ver documentação em seu navegador em https://suporte.pb.utfpr.edu.br/glpi/apirest.php/#ERROR_APP_TOKEN_PARAMETERS_MISSING

E por hora estou analisando esta documentação para saber como prosseguir.

Show, em breve descrevo para você como configurar o seu BLiP.

Por enquanto sobre a API do GLPi, segue um tutorial bacana de como ativar corretamente:

E veja como está configurado o meu:


Repita essa configuração no seu GLPi e vamos partir para você saber como acessar a API através do Builder do BLiP :wink:

Durante minha implementação do GLPI, encontrei algumas dificuldades em relação a API deles:
As Requisições HTTP exige que você gere um Token de início de sessão (https://suporte.pb.utfpr.edu.br/glpi/apirest.php/#init-session) e para gerar esse Token, você tem duas opções:

Recomendo sempre Gerar um Token pois além de ser mais seguro, tem um outro ponto que o GLPI deixou a desejar na chamada de API deles (ou pelo menos eu não achei um jeito), ao abrir chamados via API ele definirá como Requerente o “dono” do token. Ou seja, se você utilizar o seu Token pessoal de API, todos chamados criados pelo BOT serão criados com você como requerente.

Diante disso, precisei que o meu usuário ao conversar com o BOT, digite o seu login e senha do GLPI no chat com o BOT, para gerar o Token temporário e criar o chamado no nome dessa pessoa. Chato né? Fazer o que… Pelo menos aqui no Fórum eu consegui um help para que o usuário ao digitar a senha, ela fique “criptografada” no histórico da conversa (super legal!).

Por fim, eu acabei criando um BOT que apenas faz a abertura do chamado. Ainda não tive tempo de explorar como fazer com que o BOT atualize um chamado ou traga as informações sobre algum chamado específico. Mas veja como eu fiz.

Como fiz isso no Builder e GLPI:
1 - Criei um bloco para receber o usuário para login:


Atenção, armazene a resposta em uma variável tá? Igual eu coloquei a seta ali.

2 - Criei um bloco para receber a senha do usuário para login:


Atenção, armazene a resposta em uma variável tá? Igual eu coloquei a seta ali.
O meu conteúdo dinâmico é o que faz que a senha fique “criptografada”. No caso, a pessoa digita a senha e ao enviar ela é transformada em vários asteríscos:
image
O código que deve ser inserido é:
{
"label":{
"type":"text/plain",
"value":"🔑 Informe sua <b>senha</b>:"
},
"validation":{
"rule":"type",
"type":"application/vnd.lime.sensitive+json"
}
}

3 - Agora você vai pegar esses dados e fazer a chamada no initSession do seu GLPI. Para isso crie um novo bloco com uma Requisição HTTP em Ações de Entrada:


Sua Requisição precisa estar configurada assim:

Método: GET
URL: http://{url_glpi}/apirest.php/initSession?login={{login}}&password={{input.content@value}}
Cabeçalhos:
Key: Authorization | Value: Basic base64({{login}}:{{input.content@value}})

Salve os resultados em variáveis:
image

4 - Feito isso, geramos um token e agora é só pegar a sessão do usuário para usarmos na abertura do chamado. Basta criar um novo bloco e novamente adicionar uma Requisitção HTTP nas Ações de Entrada:
Dessa vez chamando a API Get Full Session do GLPI (https://suporte.pb.utfpr.edu.br/glpi/apirest.php/#get-full-session):


Método: GET
URL: http://{url_glpi}/apirest.php/getFullSession/
Cabeçalhos:
Key: Session-Token | Value: {{glpiSessionResp@session_token}}

Não se esqueça de novamente salvar as respostas em variáveis, tá?
image

SHOW!! :smiley: Agora é só você criar um fluxo com as informações que você deseja do seu usuário. Eu coloquei apenas três coisas:

  1. Categoria do Chamado
  2. Assunto do Chamado
  3. Descrição do Chamado

Meu usuário precisa responder essas três coisas apenas e o chamado é criado. Para a criação do chamado eu utilizei a função Add Item da API do GLPI (https://suporte.pb.utfpr.edu.br/glpi/apirest.php/#add-items).

1 - Crie um novo bloco com uma Requisição HTTP nas Ações de Entrada:

2 - Preencha com os dados:


Método: POST
URL: http://{url_glpi}/apirest.php/Ticket
Cabeçalhos:
Key: Session-Token | Value: {{glpiSessionResp@session_token}}
Key: Content-Type | Value: application/json

3 - No corpo dessa Requisição de POST, eu coloquei apenas:
{
"input":
{
"name":"{{categoria}} | {{resumo}}",
"content":"{{descricao}}",
"status":2,
"urgency":3,
"impact":3,
"priority":3,
"itilcategories_id":0,
"type":2,
"requesttypes_id":10
}
}
Mas vamos lá explicar isso acima :smiley:
Como eu disse, eu peço apenas 3 coisas pros meus usuários, e armazeno as respostas deles em variáveis. Então eu preencho o título (campo “name”) do chamado com o padrão “CATEGORIA | RESMO” e a descrição (campo “content”) do chamado com o que meu usuário relatou.
Os outros campos, eu deixo por padrão onde no meu GLPI:

Status 2 é Processando
Urgency 3 é Médio
Impact 3 é Médio
Priority 3 é Médio
Itilcategories_id 0 é nenhuma categoria (nulo)
Type 2 é Requisição
Requesttypes_id 10 é Chatbot (criei lá nas Listas Suspensas)

No entanto, estes campos são específicos para cada caso e é mais uma da dificuldade que achei no GLPI, como por exemplo, não consegui selecionar a entidade em que o chamado será criado, portanto sempre será a entidade padrão do usuário que iniciou a sessão.

Para descobrir quais campos eu iria inserir e quais valores eu precisaria informar, eu criei um chamado no frontend do GLPI com os campos preenchidos da forma que eu gostaria, depois fiz uma chamada na API Get an Item (https://suporte.pb.utfpr.edu.br/glpi/apirest.php/#get-an-item) do GLPI para visualizar o resultado do chamado.

4 - Por último, não se esqueça de salvar as respostas :wink:
image

Salvar as respostas serve para serem utilizadas em outros blocos do Builder do BLiP, como por exemplo:


Depois do chamado criado, meu BOT retorna o ID do Chamado criado utilizando a variável ( {{glpiTicketResp@id}}) de resposta da API.

Basicamente é isso para fazer abertura de chamado no GLPI utilizando o BLiP Chat.
Caso ainda não conhecer muito bem sobre o BLiP, recomendo assistir ao curso disponível em: https://learn.take.net/courses/criando-chatbots-com-a-plataforma-blip
Esse curso é tudo de bom! <3

Em caso de dúvidas, comente aqui abaixo :smiley:
Ahh, e em caso de implementações/melhorias, também comente aqui abaixo hein! :rocket: