{"id":43,"date":"2026-08-17T00:34:40","date_gmt":"2026-08-17T03:34:40","guid":{"rendered":"https:\/\/telapreta.dev.br\/blog\/index.php\/bot-resposta-automatica-m365-microsoft-graph\/"},"modified":"2026-08-17T16:44:43","modified_gmt":"2026-08-17T19:44:43","slug":"bot-resposta-automatica-m365-microsoft-graph","status":"publish","type":"post","link":"https:\/\/telapreta.dev.br\/blog\/index.php\/bot-resposta-automatica-m365-microsoft-graph\/","title":{"rendered":"Bot de Resposta Autom\u00e1tica Inteligente no M365 com Microsoft Graph API"},"content":{"rendered":"<div class=\"telapreta-post-body\" style=\"line-height: 1.8;font-size: 1.05rem;color: #e2e8f0\">\n<p><em>Guia Passo a Passo com Microsoft Graph API \u2014 Por <strong>Fabio Silva<\/strong><\/em><\/p>\n<hr style=\"border-color: #1e293b;margin: 30px 0\" \/>\n<h2 style=\"color: #10b981;margin-top: 30px\">\ud83d\udccc Por que automatizar o atendimento no M365?<\/h2>\n<p>Em ambientes corporativos com milhares de emails e mensagens di\u00e1rias no Microsoft Teams e Outlook, responder perguntas recorrentes consome horas valiosas das equipes de suporte e TI. Utilizando o Microsoft Graph API, \u00e9 poss\u00edvel interceptar essas mensagens em tempo real e process\u00e1-las com Intelig\u00eancia Artificial.<\/p>\n<h2 style=\"color: #10b981;margin-top: 30px\">\ud83c\udfd7\ufe0f Arquitetura da Solu\u00e7\u00e3o<\/h2>\n<ul style=\"line-height: 1.8\">\n<li><strong>Microsoft Graph Subscriptions (Webhooks):<\/strong> Notificam o bot a cada novo email ou mensagem recebida em caixas compartilhadas.<\/li>\n<li><strong>Azure App Registration:<\/strong> Fornece credenciais OAuth 2.0 (Client ID e Client Secret) com permiss\u00f5es escopadas (<code>Mail.ReadWrite<\/code>, <code>Mail.Send<\/code>).<\/li>\n<li><strong>Motor de IA \/ LLM:<\/strong> Analisa o contexto da mensagem recebida, busca no banco de conhecimento interno e gera uma resposta corporativa adequada.<\/li>\n<li><strong>Microsoft Graph API Dispatcher:<\/strong> Envia a resposta autom\u00e1tica na thread original do usu\u00e1rio.<\/li>\n<\/ul>\n<h2 style=\"color: #10b981;margin-top: 30px\">\ud83d\udcbb Exemplo de C\u00f3digo: Registrando Webhook no Microsoft Graph<\/h2>\n<pre style=\"background: #0f172a;padding: 15px;border-radius: 8px;border: 1px solid #1e293b;color: #10b981;font-family: monospace\">\nPOST https:\/\/graph.microsoft.com\/v1.0\/subscriptions\nContent-Type: application\/json\nAuthorization: Bearer {token}\n\n{\n  \"changeType\": \"created\",\n  \"notificationUrl\": \"https:\/\/api.empresa.com.br\/webhooks\/m365\",\n  \"resource\": \"\/me\/mailFolders('inbox')\/messages\",\n  \"expirationDateTime\": \"2026-08-20T18:23:45.9356913Z\",\n  \"clientState\": \"SecretClientState\"\n}\n<\/pre>\n<h2 style=\"color: #10b981;margin-top: 30px\">\ud83d\udd12 Boas Pr\u00e1ticas de Seguran\u00e7a<\/h2>\n<ul style=\"line-height: 1.8\">\n<li>Sempre valide a assinatura do <code>clientState<\/code> no webhook de retorno.<\/li>\n<li>Use o princ\u00edpio do menor privil\u00e9gio no Azure Active Directory \/ Entra ID.<\/li>\n<li>Mantenha um log audit\u00e1vel no Azure Application Insights para todas as respostas autom\u00e1ticas geradas pela IA.<\/li>\n<\/ul>\n<hr style=\"border-color: #1e293b;margin: 35px 0\" \/>\n<p style=\"color: #94a3b8;font-size: 0.95rem\"><em>Artigo originalmente publicado por <strong>Fabio Silva<\/strong> \u2014 Arquiteto de Solu\u00e7\u00f5es em Cloud, DevOps e IA Generativa.<\/em><\/p>\n<\/div>\n<div class=\"vscode-window-mockup\" style=\"background: #1e1e1e;border-radius: 10px;border: 1px solid #3c3c3c;overflow: hidden;margin: 30px 0;font-family: monospace\">\n<div style=\"background: #252526;padding: 8px 15px;display: flex;align-items: center;justify-content: space-between;border-bottom: 1px solid #333\">\n<div style=\"display: flex;gap: 8px\">      <span style=\"width: 12px;height: 12px;border-radius: 50%;background: #ff5f56;display: inline-block\"><\/span>      <span style=\"width: 12px;height: 12px;border-radius: 50%;background: #ffbd2e;display: inline-block\"><\/span>      <span style=\"width: 12px;height: 12px;border-radius: 50%;background: #27c93f;display: inline-block\"><\/span>    <\/div>\n<div style=\"color: #cccccc;font-size: 12px;font-weight: 500\">      <span>\ud83d\udcc4 app.py \u2014 Visual Studio Code [Linux x64]<\/span>    <\/div>\n<div style=\"color: #10b981;font-size: 11px;font-weight: bold\">Copilot Enabled \ud83e\udd16<\/div>\n<\/p><\/div>\n<div style=\"background: #2d2d2d;display: flex;border-bottom: 1px solid #1e1e1e;font-size: 13px\">\n<div style=\"background: #1e1e1e;color: #ffffff;padding: 6px 16px;border-right: 1px solid #252526;border-top: 2px solid #10b981;display: flex;align-items: center;gap: 8px\">      <span style=\"color: #10b981\">\u26a1<\/span> app.py    <\/div>\n<\/p><\/div>\n<div style=\"padding: 18px;font-size: 13px;line-height: 1.6;color: #d4d4d4;background: #1e1e1e\">\n<pre style=\"margin: 0;background: transparent;padding: 0;border: none;color: inherit;font-family: monospace\"><span style=\"color: #6a9955\"># GitHub Copilot AI Code Execution<\/span>\r\n<span style=\"color: #569cd6\">import<\/span> os\r\n<span style=\"color: #569cd6\">import<\/span> sys\r\n\r\n<span style=\"color: #569cd6\">def<\/span> <span style=\"color: #dcdcaa\">main<\/span>():\r\n    <span style=\"color: #4ec9b0\">print<\/span>(<span style=\"color: #ce9178\">\"Running in VS Code Linux Environment...\"<\/span>)\r\n\r\n<span style=\"color: #569cd6\">if<\/span> __name__ == <span style=\"color: #ce9178\">\"__main__\"<\/span>:\r\n    <span style=\"color: #dcdcaa\">main<\/span>()<\/pre>\n<\/p><\/div>\n<div style=\"background: #181818;border-top: 1px solid #2b2b2b;padding: 12px 16px;font-size: 12px;color: #cccccc\">\n<div style=\"color: #10b981;font-weight: bold;margin-bottom: 6px;display: flex;align-items: center;gap: 8px\">      <span>\ud83d\udda5\ufe0f TERMINAL (bash)<\/span> <span style=\"color: #666;font-weight: normal\">\u2014 ubuntu@telapreta-server:~<\/span>    <\/div>\n<div style=\"color: #4ec9b0;font-family: monospace\">      <span style=\"color: #10b981\">fabio@ubuntu-linux<\/span>:<span style=\"color: #569cd6\">~\/projects<\/span>$ <span style=\"color: #ce9178\">gh copilot explain &quot;def main():&quot;<\/span>    <\/div>\n<\/p><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Guia Passo a Passo com Microsoft Graph API \u2014 Por Fabio Silva \ud83d\udccc Por que automatizar o atendimento no M365? Em ambientes corporativos com milhares de emails e mensagens di\u00e1rias no Microsoft Teams e Outlook, responder perguntas recorrentes consome horas valiosas das equipes de suporte e TI. Utilizando o Microsoft Graph API, \u00e9 poss\u00edvel interceptar &#8230; <a title=\"Bot de Resposta Autom\u00e1tica Inteligente no M365 com Microsoft Graph API\" class=\"read-more\" href=\"https:\/\/telapreta.dev.br\/blog\/index.php\/bot-resposta-automatica-m365-microsoft-graph\/\" aria-label=\"Read more about Bot de Resposta Autom\u00e1tica Inteligente no M365 com Microsoft Graph API\">Ler mais<\/a><\/p>\n","protected":false},"author":1,"featured_media":44,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,3],"tags":[],"class_list":["post-43","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","category-ia-agentes"],"_links":{"self":[{"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":3,"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"predecessor-version":[{"id":228,"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/posts\/43\/revisions\/228"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/media\/44"}],"wp:attachment":[{"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/telapreta.dev.br\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}