Repository navigation
chatbot teams
mobius1qwe edited this page Nov 13, 2026
·
1 revision
Home > Chatbot > Microsoft Teams
Important
Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.
Nível: avançado
Em uma frase: TRALChatTeams liga o robô ao Teams falando o protocolo do
Azure Bot direto, sem SDK: confere o token de cada atividade, pega o token de saída da
Microsoft e responde no endereço que a própria atividade indica.
Você vai precisar: os pacotes RALModuleChatPackage e RALModuleChatTeamsPackage,
um cliente RAL com HTTPS e um TRALChatWebhookModule num servidor com HTTPS público.
- No portal do Azure, crie um Azure Bot single-tenant (a Microsoft não cria mais bots multi-tenant novos). Anote o App ID, crie um segredo e anote o Tenant ID.
-
Messaging endpoint:
https://seu.dominio/teams. - Em Channels, adicione o Microsoft Teams.
- Monte o manifesto de um app do Teams que aponta para o bot e instale (sideload) no Teams.
- No componente:
AppId,TenantIde o segredo como token do canal (TokenSource). O verbo "Testar credenciais" pede um token à Microsoft e diz se deu certo.
- Cada atividade chega com um JWT RS256: o RAL confere a assinatura pelas chaves
publicadas (
OpenIdUrl, guardadas porKeysLife), o emissor, o público (AppId), a validade, oserviceUrle o canal. O que não confere recebe 401. - A resposta vai para o
serviceUrlda atividade (nunca um endereço fixo), só HTTPS (RequireHttps). Para mandar mensagem sem ter recebido nada antes,RememberConversationguarda a conversa e o endereço. - Texto, botões em Adaptive Card (até 6), edição, remoção, "digitando" e imagens pequenas; listas viram lista numerada.
- O token de saída é guardado até vencer e renovado sozinho, e um 401 da Microsoft faz pedir outro.
| sintoma | causa | o que fazer |
|---|---|---|
| toda mensagem recebe 401 |
AppId diferente do registrado |
confira o App ID do Azure Bot |
| "Testar credenciais" falha | segredo vencido ou TenantId errado |
gere outro segredo |
| o robô não responde, sem erro |
serviceUrl sem HTTPS (emulador local) |
RequireHttps := False só em teste |
Começar
Servidor
- Rotas e parâmetros
- Rotas avançadas: tipos, grupos, versões 🚧
- Ler o pedido e responder
- Objetos no corpo 🚧
- Resposta em fluxo 🚧
- Plugins 🚧
- Serviços (contêiner de dependências) 🚧
- Barramento de eventos 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- JSON-RPC 2.0 🚧
- Servidor MCP (IA) 🚧
-
Protocol Buffers 🚧
- gRPC 🚧
- WebSocket 🚧
- Hubs (WebSocket) 🚧
- Swagger e Postman
- Servidor SOAP 🚧
- WS-Security 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
- Testes em memória 🚧
MQTT 🚧
- O que é e quando usar 🚧
- Cliente MQTT 🚧
- Broker MQTT 🚧
- MQTT-SN 🚧
- Ponte REST 🚧
- Segurança 🚧
- Rede ruim 🚧
E-mail 🚧
- Mensagens 🚧
- Enviar 🚧
- Receber 🚧
- Ler a caixa postal 🚧
- Verificar o que chega 🚧
- Servir caixas postais 🚧
- S/MIME 🚧
- OpenPGP 🚧
Chatbot 🚧
- O robô e os canais 🚧
- Telegram 🚧
- Gateways REST (WhatsApp não oficial) 🚧
- Discord 🚧
- Slack 🚧
- Microsoft Teams 🚧
- Conversa em etapas 🚧
Cliente
Motores
- Qual motor escolher?
- Compatibilidade
- Recursos
- QUIC
- Motor NgHttp2 (HTTP/2) 🚧
- Motor XSocket 🚧
- Motor AdvancedHTTP (experimental) 🚧
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar