← Voltar ao blog

IA & Agentes

Copilot Studio - Tools e Conectores [2] - Tools customizadas com REST e OpenAPI

Copilot Studio - Tools & Connectors [2] - Custom tools with REST and OpenAPI

Copilot Studio - Tools e Conectores [2] - Tools customizadas com REST e OpenAPI

Fala dataholics! Segundo post da série de Tools e, se no post [1] a gente pegou um conector pronto do catálogo, hoje é o cenário oposto: e quando não existe conector pra API que você precisa? Aí você cria o seu, apontando pra qualquer API REST via OpenAPI. E eu não vim só na teoria, criei uma tool do zero em cima da BrasilAPI pra consultar endereço por CEP, testei ao vivo, tomei um erro no caminho e consertei. Vou te levar por todo o fluxo com os prints reais.

O que veremos nesse post:

  • Quando criar sua própria tool REST

  • A API da demo: BrasilAPI (CEP), aberta e sem chave

  • O arquivo OpenAPI que eu subi

  • O wizard passo a passo: upload, plugin, auth, tools, parâmetros, publish

  • A tool no catálogo e o "Dynamically fill with AI"

  • Testando: o erro 404 e o conserto

  • Resumo


Quando criar sua própria tool REST

No catálogo do Copilot Studio, além do filtro de Connector, tem a aba REST API. Ela existe justamente pro caso em que nenhum dos mil conectores prontos serve, tipo uma API interna da sua empresa ou um serviço público que não tem conector dedicado. Em vez de esperar alguém criar o conector, você descreve a API num arquivo OpenAPI (o velho Swagger) e o Copilot Studio monta a tool a partir dele. É código zero também, o que você precisa é do contrato da API.

Uma coisa que reparei e vale registrar: o wizard fala em API plugin e o cabeçalho ainda menciona "to use with Copilot for Microsoft 365". Ou seja, por baixo dos panos a sua tool REST é publicada como um plugin de API, o mesmo formato que o M365 Copilot usa. Bom saber pra não estranhar a nomenclatura.


A API da demo: BrasilAPI

Pra demo eu queria uma API pública, sem autenticação e que fosse a nossa cara. Escolhi a BrasilAPI, que é aberta, não pede chave e tem OpenAPI publicado. Usei o endpoint de CEP:

GET https://brasilapi.com.br/api/cep/v2/{cep}

Ele recebe um CEP de 8 dígitos e devolve estado, cidade, bairro e rua num JSON limpo. Cenário perfeito pra um agente: o usuário manda um CEP e o agente responde o endereço.


O arquivo OpenAPI

Aqui vai um aviso que me poupou tempo depois de apanhar um pouco: aquela tela de upload não aceita colar URL nem texto, ela quer um arquivo OpenAPI 3.0 válido pra dar drag and drop. O spec completo da BrasilAPI é grande e modular, e falhava na validação com um "Invalid OpenAPI specification". Então eu montei um OpenAPI mínimo, só com a operação de CEP, e subi esse. Ficou assim, enxuto:

{
  "openapi": "3.0.3",
  "info": { "title": "BrasilAPI CEP", "version": "1.0.0" },
  "servers": [ { "url": "https://brasilapi.com.br/api" } ],
  "paths": {
    "/cep/v2/{cep}": {
      "get": {
        "operationId": "getCep",
        "summary": "Buscar endereco por CEP",
        "description": "Retorna o endereco de um CEP brasileiro de 8 digitos.",
        "parameters": [
          { "name": "cep", "in": "path", "required": true,
            "schema": { "type": "string" } }
        ],
        "responses": { "200": { "description": "Endereco encontrado" } }
      }
    }
  }
}

Repara em dois campos que fazem diferença: o operationId (o nome interno da operação) e a description, que como a gente viu no post [1] é o que o modelo lê pra decidir quando chamar a tool. Com o arquivo pronto, é só arrastar:


O wizard passo a passo

Depois do upload, o Copilot Studio te leva por um wizard de 8 etapas (aquela trilha na lateral esquerda). Vou pelos que importam.

API plugin details: dou nome e descrição pra tool. Botei "BrasilAPI CEP" e uma descrição do que ela faz. O campo Solution pode deixar em branco que ele cria uma solução automática pra você.

A etapa de Authentication foi a mais tranquila justamente porque a BrasilAPI é aberta: escolhi No authentication e segui. Se fosse uma API com chave, seria aqui que você configuraria o API Key ou o OAuth 2.0.

Select Tools: o Copilot leu meu OpenAPI e listou as operações que encontrou. Como meu arquivo tinha só uma, apareceu a "Buscar endereço por CEP". Marco ela.

Select tool parameters: essa tela é importante. Ele mostra o input (o cep) e os outputs que a API devolve (cep, state, city, neighborhood, street, service), e pede uma descrição pra cada um. De novo, não pule isso: essas descrições ajudam o modelo a entender o que entra e o que sai. Preenchi cada campo com uma frase curta e direta.

Depois do Review, veio a tela que a gente quer ver: Your tool is now published. Ele ainda oferece um "Create connection" ali, que é pra deixar a conexão pronta pro uso.


A tool no catálogo e o "Dynamically fill with AI"

Feito isso, a minha API virou uma tool de verdade. Se eu voltar no catálogo e filtrar por REST API, lá está ela, a BrasilAPI CEP com o tipo REST API, do lado dos conectores prontos:

E abrindo os detalhes da tool tem um detalhe que eu curti muito. Olha o input cep: o "Fill using" está como Dynamically fill with AI. Isso quer dizer que eu não preciso pedir o CEP num campo separado, o próprio modelo extrai o CEP da frase do usuário e preenche o parâmetro sozinho. A conexão aparece com o certinho verde, tudo pronto.


Testando: o erro e o conserto

Bora ao teste, e aqui a coisa ficou real. Fui no Test your agent e perguntei "De onde é esse CEP 18550000?". O agente chamou a tool certinho, mas voltou Failed com um 404: "The connector 'BrasilAPI CEP' returned an HTTP error with code 404. Inner Error: Todos os serviços de CEP retornaram erro".

Reginaldo, quebrou já no primeiro teste?

Calma, esse erro é uma boa notícia disfarçada. Aquela mensagem "Todos os serviços de CEP retornaram erro" é a própria resposta da BrasilAPI, ou seja, minha tool chamou a API real, a API respondeu e o agente ainda mostrou o erro de forma limpa no chat. O problema era só o CEP: o 18550000 não é resolvido pelas bases que a BrasilAPI consulta. Testei na mão e confirmei, esse volta 404 e um CEP de rua conhecida volta 200.

Troquei pro 01310100 (Avenida Paulista) e refiz a pergunta. Dessa vez veio Completed, e o agente montou uma tabela com Street, Neighborhood, City e State, ainda comentando que é a famosa Avenida Paulista:

Fica a dica: pra testar CEP na BrasilAPI, use um CEP de rua conhecida terminado em -000 (01310100, 20040002, 70150900). CEP genérico de cidade pequena às vezes não está nas bases e dá esse 404. E o mais importante do episódio: quando a tool falhar, o mapa de atividade e a mensagem de erro te dizem exatamente onde travou. Nesse caso, não era a minha configuração, era o dado.


RESUMO

  • Quando não existe conector pronto, use a aba REST API do catálogo e crie a tool a partir de um OpenAPI.

  • A tela de upload quer um arquivo OpenAPI 3.0 válido (drag and drop), não URL nem texto. Spec grande demais pode falhar na validação, um OpenAPI mínimo com só a operação que você quer resolve.

  • Por baixo a tool REST vira um API plugin, o mesmo formato do M365 Copilot.

  • No wizard: upload, plugin details, Authentication (No auth na BrasilAPI), Select Tools, parâmetros (capriche nas descrições de input e output), Review e Publish.

  • O input pode ficar como Dynamically fill with AI: o modelo extrai o valor da frase do usuário e preenche sozinho.

  • No teste, o 404 era a resposta real da API pra um CEP inexistente. Com um CEP válido (01310100) veio Completed e o endereço da Av. Paulista.

Com isso você já cria tool de conector pronto (post [1]) e de API própria via REST (esse aqui). No próximo post a gente sobe mais um degrau e conecta o agente a um servidor MCP, que é o padrão que está virando a cola universal entre agentes e ferramentas.

Referências:

https://learn.microsoft.com/en-us/microsoft-copilot-studio/add-tools-custom-agent

https://brasilapi.com.br/docs

Fique bem e até a próxima.

#copilotstudio #restapi #openapi #ia #agentes #datainaction

#copilotstudio#restapi#openapi#ia#agentes#datainaction

Gostou? Tem mais no YouTube e no LinkedIn.

← Voltar ao blog