Ir para o conteúdo

API de um chatbot no Serprobots

Endpoint de criação da conversa (conversation)

É o endpoint que cria a conversa, gerando um identificador que será usado nas trocas de mensagens daquela sessão.

POST https://serprobots.estaleiro.serpro.gov.br/web/<IDENTIFICADOR CHATBOT>/api/conversation/

Exemplo de chamada:

curl -X POST 'https://serprobots.estaleiro.serpro.gov.br/web/bot-supai-d/api/conversation/'   

Retorno será um texto informando o UUID da conversa criada (conversationId). Exemplo:

8d19ef24-7433-4262-b9a8-170780723ac7

Endpoint de conversação (message)

É o endpoint que manda uma mensagem para o chatbot e recebe de volta as respostas que o chatbot gerou para aquela pergunta.

POST https://serprobots.estaleiro.serpro.gov.br/web/<IDENTIFICADOR CHATBOT>/api/answer/

Exemplo de chamada:

curl -X POST 'https://serprobots.estaleiro.serpro.gov.br/web/bot-supai-d/api/answer/'\
  -H 'content-type: application/json'\
  --data-raw '{"parameters":{},"conversationId":"de7331b7-9076-4d8f-b473-0e4ca1095b11","text":"olá"}' 

O payload enviado é um JSON informando o valor do conversationId e o texto desejado (text):

{
    "parameters": {},
    "conversationId": "de7331b7-9076-4d8f-b473-0e4ca1095b11",
    "text": "olá"
}

O retorno será um JSON com com um array de respostas (campo contents), já que a resposta pode se tratar de várias partes, ou balões:

{
    "contents": [
        {
            "text": "Olha 👀 que coisa mais linda mais cheia de graça ♫ ♩",
            "type": "TEXT"
        }
    ],
    "conversationId": "de7331b7-9076-4d8f-b473-0e4ca1095b11",
    "empty": false,
    "question": "olá",
    "ui": {
    }
}

Uma resposta no array contents pode ser do tipo TEXT:

{
    "type": "TEXT",
    "text": "Infelizmente não sei responder..."    
}

Há ainda respostas do tipo IMAGE, e nesse caso vai conter a URL da imagem:

{
    "type": "IMAGE",
    "url": "http://url.da/figura.png"    
}

E também existem respostas do tipo OPTIONAL, que contém um título (title) seguido das opções (array options) que o usuário poderá escolher. Cada opção poderá ter um label (valor visível para ser clicado) e um value (valor de fato enviado ao clicar na opção). Já o campo display vai sugerir uma forma de exibição dessas opções, podendo ser button, selection ou dropdown.

{
    "type": "OPTIONS"
    "title": "Você está bem?"
    "display": "button"
    "options": [
        {
            "label": "Sim",
            "showValue": true,
            "value": "yes"
        },
        {
            "label": "Não",
            "showValue": true,
            "value": "no"
        }        
    ]    
}