Human-in-the-loop no Copilot Studio com custom connector
Como criar human-in-the-loop no Copilot Studio com custom connector e webhook action, sem depender de e-mail ou card no Teams. OpenAPI, fila e riscos do notificationUrl.

Se você já colocou um assistente de IA dentro de um Canvas App usando o controle nativo de Copilot, sabe como era simples: arrastar, soltar, configurar o agente e seguir em frente. Esse caminho está fechado para apps novos. A partir de 2 de fevereiro de 2026, o controle nativo não pode mais ser adicionado a Canvas Apps criados depois dessa data. Apps que já usam o controle continuam funcionando por um tempo, mas a Microsoft já deixou claro que essa é uma peça em fim de vida útil.
A recomendação oficial é migrar para o Microsoft 365 Copilot em Canvas Apps, o substituto nativo que a Microsoft está lançando. O problema prático é que esse recurso ainda não está disponível em todos os ambientes, e o cronograma de rollout varia conforme tenant, região e licenciamento. Se você tem um app em produção que precisa de um agente embutido agora, esperar não é uma opção realista.
É nesse intervalo que entra o ChatControl, um componente PCF publicado no repositório de exemplos do Copilot Studio no GitHub. Ele não é apenas um substituto temporário: traz recursos que o controle antigo nunca teve, como estilização própria e comunicação bidirecional entre o app e o agente.
Antes de entrar na configuração, vale alinhar dois conceitos para quem não trabalha com isso todos os dias.
Canvas Apps são um dos tipos de aplicativo do Power Apps, construídos em um editor visual de arrastar e soltar, com controle de layout no nível do pixel. Você posiciona controles no canvas, conecta fontes de dados e escreve a lógica em Power Fx. É o formato típico para ferramentas de campo, telas de consulta de cliente, painéis de aprovação e qualquer app de propósito específico que não justifique um desenvolvimento code-first completo.
PCF é a sigla para Power Apps Component Framework. Ele permite construir controles customizados e reutilizáveis usando TypeScript, HTML e CSS, e depois usá-los dentro do Power Apps como qualquer controle nativo. Quando o catálogo de controles padrão não cobre o que você precisa, PCF é o mecanismo de extensão da plataforma. Os controles são empacotados como soluções do Power Platform, o que permite importar e distribuir o mesmo componente entre ambientes diferentes.
O ChatControl é exatamente isso: um componente PCF que empacota o Bot Framework WebChat e o M365 Agents SDK dentro de um controle que você arrasta para o Canvas App. Por trás da superfície de chat, ele fala com o Copilot Studio usando a mesma stack de comunicação que sustenta implementações web de agentes fora do Power Apps.
Um detalhe operacional que costuma pegar quem nunca usou PCF: componentes desse tipo precisam estar habilitados no ambiente antes de aparecerem como opção dentro do Canvas App. Se você é administrador de um ambiente restritivo, essa é a primeira verificação a fazer antes de importar a solução.
É uma pergunta justa. Se a Microsoft já anunciou o caminho recomendado, por que não aguardar o rollout completo? Três motivos práticos costumam pesar mais do que a preferência por ficar no trilho oficial.
O controle usa o M365 Agents SDK para TypeScript para estabelecer a conexão com o agente do Copilot Studio, com suporte a single sign-on de fábrica. Na prática, o usuário que já está autenticado no Microsoft 365 não vê um segundo prompt de login ao abrir o chat dentro do Canvas App.
Esse comportamento não é automático de instalação. Exige um registro de aplicativo no Azure AD com as permissões corretas, além de configuração equivalente no lado do Copilot Studio para que o agente aceite o token emitido por esse registro. É trabalho de plataforma, feito uma vez por ambiente, não por app, e deve ser tratado como parte da esteira de governança de identidade da organização, não como um ajuste isolado feito pelo criador do Canvas App.
Como o ChatControl é construído sobre o Bot Framework WebChat, ele herda as mesmas opções de estilo que o WebChat expõe nativamente: cores, tipografia, layout de bolha de mensagem, cabeçalho. Isso significa que o chat pode seguir o guia de marca da organização em vez de aparecer como um widget genérico colado na tela. Para quem já trabalhou com WebChat fora do Power Apps, a curva de aprendizado aqui é praticamente zero, porque as propriedades de estilo são as mesmas.
Este é o ponto que separa um chat embutido de uma integração real. O ChatControl permite que o Canvas App envie mensagens e eventos customizados diretamente para o agente, sem depender do usuário digitar o contexto manualmente.
Um exemplo simples ilustra o ganho. Em um app que exibe registros de clientes, o usuário seleciona um cliente e abre o chat. Em vez de o usuário precisar escrever “estou olhando o cliente X”, o app dispara esse contexto automaticamente no momento em que a conversa começa. O agente já sabe de quem se trata antes da primeira pergunta e pode buscar informações relevantes sem interrogatório prévio.
Esse tipo de passagem de contexto transforma o agente de um assistente genérico em algo que se comporta como parte do próprio app.
A comunicação funciona nas duas direções. O Canvas App pode capturar respostas do agente e agir sobre elas, fora da janela de chat. Alguns padrões que essa capacidade viabiliza:
Essa troca em duas vias é o que diferencia um chat simplesmente embutido de uma experiência de fato integrada. App e agente passam a colaborar dentro do mesmo fluxo de trabalho, em vez de existirem como vizinhos na mesma tela.
Antes de importar a solução, valide estes pontos:
O ChatControl é distribuído como um arquivo de solução do Power Platform. Você importa essa solução no ambiente e depois adiciona o componente ao Canvas App como faria com qualquer controle nativo. As propriedades de configuração incluem o client ID do app Azure, o tenant ID, o ID do ambiente e o identificador do agente. Um exemplo simplificado de como essas propriedades costumam ser referenciadas em uma fórmula do Canvas App:
// Definindo o contexto do cliente selecionado antes de abrir o chat
Set(
varContextoAgente,
{
tipo: "SelecaoCliente",
clienteId: ThisItem.ID,
clienteNome: ThisItem.Nome
}
);
// Disparando o evento customizado para o ChatControl
ChatControl1.EnviarEvento(JSON(varContextoAgente, JSONFormat.Compact))
O nome exato da propriedade e do método de envio de evento varia conforme a versão da solução importada, então trate o trecho acima como ilustrativo da lógica, não como sintaxe fixa. O guia de configuração publicado junto ao componente no GitHub detalha cada etapa, incluindo o registro do app no Azure, o ajuste do limite de tamanho de arquivo para importação da solução (um detalhe que trava silenciosamente a importação em vários tenants) e a ligação das propriedades no Canvas App.
| Cenário | Recomendação |
|---|---|
| Precisa de um agente embutido em Canvas App agora | Use o ChatControl PCF |
| Precisa de estilização alinhada à marca da empresa | Use o ChatControl PCF |
| Precisa de troca de contexto entre app e agente | Use o ChatControl PCF |
| Ambiente não permite uso de controles PCF | Espere o Microsoft 365 Copilot nativo em Canvas Apps |
| O app em questão é model-driven, não canvas | Use o Microsoft 365 Copilot em model-driven apps |
| É um app web fora do Power Apps | Avalie embedding direto de WebChat |
Adotar um componente de amostra da comunidade, ainda que publicado oficialmente pela equipe de Copilot Studio, é diferente de adotar um recurso nativo suportado por SLA. Vale registrar isso na decisão:
O ChatControl PCF resolve um problema real de calendário: o controle antigo sai, o novo ainda não chegou para todo mundo, e a operação não pode esperar. Mas a decisão de arquitetura vai além de tapar essa lacuna, porque as capacidades de contexto bidirecional que ele traz mudam o tipo de experiência que um Canvas App pode oferecer, com ou sem substituto nativo no horizonte.
Se sua organização está avaliando onde embutir agentes do Copilot Studio, seja em Canvas Apps, portais ou outros pontos do ecossistema Microsoft 365, essa é justamente a conversa que costuma abrir um projeto bem desenhado com a Trinapse.
Como criar human-in-the-loop no Copilot Studio com custom connector e webhook action, sem depender de e-mail ou card no Teams. OpenAPI, fila e riscos do notificationUrl.
Entenda a base de ALM para Copilot Studio: ambientes Dev/Test/Prod, solutions gerenciadas, variáveis de ambiente, pipelines e avaliações de agentes de IA.
Skills no Copilot Studio carregam instruções sob demanda. Entenda quando usar instrução fixa, Skill ou agente separado, e como escrever a descrição que roteia.