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"
}
]
}