Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Structured Prompt-Driven Development: quando o prompt deixa de ser conversa e vira artefato de engenharia
    • Observabilidade para agentes: por que logs e traces tradicionais já não bastam
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    • Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis
    • A Anatomia de um Prompt: Como Falar com a IA Como um Profissional de Tecnologia
    • Conheça os tipos de registros DNS: o guia completo sobre A, AAAA, NS, CNAME, MX, PTR, SOA, TXT, SRV, SPF e muito mais
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Banco de dados»Sql»SQL Server – Como fazer uma integração do banco de dados com o Slack e enviar mensagens utilizando Python e sp_execute_external_script

    SQL Server – Como fazer uma integração do banco de dados com o Slack e enviar mensagens utilizando Python e sp_execute_external_script

    Jhonathan SoaresBy Jhonathan Soares11 de novembro de 20196 Mins Read Sql
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    Como vocês devem saber, o SQL 2017 trouxe uma série de novidades e novos recursos para o nosso dia a dia, e uma delas, foi a possibilidade de executar scripts escritos em Python pelo SQL Server, tanto para análises estatísticas (muito utilizado por cientistas de dados e estatísticos), tanto para realizar tarefas do dia a dia, como utilizar API’s para enviar mensagens e alertas pelo Slack.

    Hoje estou bastante animado por causa desse post. Meu primeiro utilizando Python no SQL Server 2017, e podem esperar bem mais por aí.. No dia 04 de fevereiro de 2017, eu havia liberado o post SQL Server – Como fazer uma integração do banco de dados com o Slack e enviar mensagens utilizando o CLR (C#) e desta vez eu volto aqui para lhes mostrar como realizar essa mesma integração utilizando apenas recursos nativos do SQL Server 2017.

    Introdução

    Como vocês devem saber, o SQL 2017 trouxe uma série de novidades e novos recursos para o nosso dia a dia, e uma delas, foi a possibilidade de executar scripts escritos em Python pelo SQL Server, tanto para análises estatísticas (muito utilizado por cientistas de dados e estatísticos), tanto para realizar tarefas do dia a dia.

    O que é o Slack?

    Para quem não conhece, o Slack é um dos comunicadores corporativos mais famosos e utilizados em todo o mundo, principal concorrente do Ryver e tem a proposta de substituir a comunicação via e-mail por grupos privados e públicos (dentro do time) focados em determinadas equipes e/ou assuntos. Você pode criar grupos públicos, onde toda sua equipe pode interagir e colaborar e grupos privados para cada setor, onde somente quem está no grupo pode visualizar as mensagens.

    O Slack permite que você responda e-mails pela própria ferramenta, envio e compartilhamento de arquivos, envio de mensagens privadas, instalação de diversos plugins para adicionar novos recursos e muito mais.

    No plano gratuito, a busca de mensagens recupera apenas as últimas 10 mil mensagens, o limite de armazenamento é de 5 GB e mais algumas limitações que você pode verificar neste link.

    Onde e como posso usar o Slack na minha empresa?

    Esse recurso é especialmente útil para criar equipes na sua empresa e gerar alertas e monitoramentos por equipe, onde cada equipe recebe apenas os alertas referentes às suas atividades. Além disso, você pode utilizar os grupos abertos para enviar informativos e notificações que interessam para a empresa toda. Tudo isso, sem custo algum e você pode receber por e-mail, visualizar na Web e no seu smartphone.

    Uma outra forma legal de se utilizar o Slack, é enviar acompanhamento de metas de vendas para o setor de comercial, de forma que os gerentes regionais e locais possam acompanhar a performance da equipe de vendas em tempo real, sem ter que ficar consultando e abrindo relatórios, onde quer que eles estejam, mesmo fora da empresa.

    Caso sua empresa adote o Slack, o setor de RH pode utilizar o serviço para enviar mensagens e informativos para os colaboradores. Enviar mensagens de natal, uma mensagem especial no aniversário do colaborador, etc.

    Enfim, a vantagem do Slack é que ele pode ser enviado de várias formas diferentes (E-mail, Web, Smartphone), onde quer que você esteja, dentro ou fora da empresa e representa uma grande revolução na forma em que as pessoas interagem com as informações.

    Utilizo o Slack onde eu trabalho como ferramenta de comunicação, monitoramento e alertas das rotinas de TI, como falhas em jobs críticos, problemas em backups, corrupções de bases, queries lentas, locks, etc. Sempre que alguma rotina crítica falha, é enviado um e-mail interno e uma notificação via Slack, onde chega uma notificação Push no meu celular (igual do Whatsapp) e onde quer que eu esteja, tomo conhecimento dessa falha.

    Como adicionar usuários ao Slack

    O primeiro passo para criar a integração, é criar sua conta no Slack, acessando este link. Uma vez criada, você receberá um e-mail para logar na sua conta.

    Tela inicial do Slack, já com alguns grupos que criei para este post

    Para adicionar novos usuários, basta clicar no menu (Seu nome) e selecionar a opção “Invite people”

    Você pode adicionar seus contatos da usa conta do Google, importar vários contatos no formato CSV e outros. Uma vez que você convide outras pessoas, ela receberão um link para se juntar à sua equipe e após finalizar o cadastro, elas já poderão visualizar os dados pelo navegador Web ou aplicativo para celular.

    Como habilitar o Python no SQL Server 2017

    Para habilitar o Python no SQL Server 2017 você irá precisar ativar o recurso external scripts enabled, com o comando abaixo:

    EXEC sp_configure 'external scripts enabled', 1
    GO
    RECONFIGURE WITH OVERRIDE;
    GO

    Resultado:
    Configuration option 'external scripts enabled' changed from 0 to 1. Run the RECONFIGURE statement to install.

    Uma vez executado, você precisará reiniciar o serviço do SQL Server 2017 no Configuration Manager:

    Agora é só reiniciar o serviço, conforme a imagem abaixo:

    Recomendo também reiniciar o serviço “SQL Server Launchpad”, uma vez que quando tentei executar o script Python, recebi essa mensagem de erro:

    Msg 39011, Level 16, State 1, Line 10
    SQL Server was unable to communicate with the LaunchPad service. Please verify the configuration of the service.

    Como instalar a biblioteca Slacker

    Para a nossa integração com o Slack pelo SQL Server, vamos utilizar a biblioteca Slacker. Para a sua instalação, abra o Prompt de comando como Administrador:


    Uma vez aberto, basta digitar o comando abaixo:

    cd "C:\Program Files\Microsoft SQL Server\MSSQL14.NOME_DA_SUA_INSTANCIA\PYTHON_SERVICES\Scripts"
    
    pip install slacker
    


    Caso você não saiba o caminho da sua instalação, você pode descobrir facilmente com esse comando aqui:

    SELECT TOP (1) TRIM(REPLACE(B.[value], 'MSSQL\Binn\sqlservr.exe', '')) + 'PYTHON_SERVICES\Scripts'
    FROM sys.dm_server_registry A
    CROSS APPLY STRING_SPLIT(REPLACE(CAST(value_data AS VARCHAR(MAX)), '"', ''), '-') B
    WHERE A.registry_key LIKE 'HKLM\SYSTEM\CurrentControlSet\Services\MSSQL%'
    AND A.value_name = 'ImagePath'
    

    Resultado:

    Após digitar os comandos acima, a biblioteca terá sido instalada com sucesso:

    Como ativar a API do Slack

    Para que seja possível enviar as mensagens pelo Slack, precisamos criar uma integração customizada. Para isso acesse a URL https://api.slack.com/docs/oauth-test-tokens logado na conta do usuário que servirá como BOT e fará o envio das mensagens automáticas.

    Clique no botão “Create token”.

    Copie o token gerado para a sua aplicação. É com esse código enorme (76 caracteres no meu caso) que você será fará a autenticação com a API e poderá enviar suas mensagens através da API.

    Como enviar mensagens no Slack pelo SQL Server

    Agora que já expliquei o que é o Slack, habilitamos os scripts Python na instância e você já gerou o seu token de acesso, podemos começar a enviar mensagens no Slack através do SQL Server 2017.

    Versão simples (apenas formatação)

    Código da Stored Procedure que faz o envio das mensagens:

    CREATE OR ALTER PROCEDURE dbo.stpEnvia_Mensagem_Slack (
        @Ds_Mensagem NVARCHAR(4000),
        @Ds_Canal NVARCHAR(256)
    )
    AS 
    BEGIN
    
        DECLARE @SlackToken NVARCHAR(100) = 'seu token aqui' -- https://api.slack.com/docs/oauth-test-tokens
        DECLARE @Script NVARCHAR(MAX) = '
    from slacker import Slacker
    slack = Slacker("' + @SlackToken + '")
    slack.chat.post_message(channel, text)'
    
    
        EXEC sys.sp_execute_external_script 
            @language = N'Python',
            @script = @Script,
            @params = N'@channel nvarchar(256), @text nvarchar(max)',
            @channel = @Ds_Canal,
            @text = @Ds_Mensagem
    
    
    END
    

    Exemplo de uso para mensagem privada para outro usuário:

     EXEC dbo.stpEnvia_Mensagem_Slack
        @Ds_Mensagem = N'Teste de integração', -- nvarchar(max)
        @Ds_Canal = N'@bot_dirceuresende' -- nvarchar(128)
    

    Resultado:

    Exemplo de uso para mensagem em um canal:

    EXEC dbo.stpEnvia_Mensagem_Slack
        @Ds_Mensagem = N'Teste de integração', -- nvarchar(max)
        @Ds_Canal = N'#ti' -- nvarchar(128)
    

    Resultado:

    Versão completa (com cores, links e formatações)

    Código da Stored Procedure que faz o envio da mensagem:

     
    
    
    CREATE OR ALTER PROCEDURE dbo.stpEnvia_Mensagem_Slack_Completa (
        @Ds_Mensagem NVARCHAR(4000),
        @Ds_Canal NVARCHAR(256),
        @Ds_Cor_Hexa NVARCHAR(10) = '',
        @Ds_Titulo NVARCHAR(128) = '',
        @Ds_Link NVARCHAR(256) = '',
        @Ds_Mensagem_Interna NVARCHAR(4000) = ''
    )
    AS 
    BEGIN
    
    
        DECLARE 
            @SlackToken NVARCHAR(100) = 'seu token aqui', -- https://api.slack.com/docs/oauth-test-tokens
            @ConteudoTexto NVARCHAR(MAX) = '[
        {
            "fallback": "' + @Ds_Mensagem + '",
            "color": "#' + @Ds_Cor_Hexa + '",
            "pretext": "' + @Ds_Mensagem + '",
            "title": "' + @Ds_Titulo + '",
            "title_link": "' + @Ds_Link + '",
            "text": "' + @Ds_Mensagem_Interna + '",
            "mrkdwn_in": ["text", "pretext"]
        }
    ]'
    
    
        DECLARE 
            @Script NVARCHAR(MAX) = '
    from slacker import Slacker
    slack = Slacker("' + @SlackToken + '")
    slack.chat.post_message(channel, text, username, as_user, parse, link_names, attachments, unfurl_links, unfurl_media, icon_url, icon_emoji, thread_ts)'
        
        
        EXEC sys.sp_execute_external_script 
            @language = N'Python',
            @script = @Script,
            @params = N'@channel nvarchar(256), @text nvarchar(max), @username nvarchar(128), @as_user nvarchar(10), @parse nvarchar(100), @link_names nvarchar(10), @attachments nvarchar(max), @unfurl_links nvarchar(10), @unfurl_media nvarchar(10), @icon_url nvarchar(255), @icon_emoji nvarchar(100), @thread_ts nvarchar(100)',
            @channel = @Ds_Canal,
            @text = @Ds_Mensagem,
            @as_user = 'false',
            @attachments = @ConteudoTexto,
            @icon_emoji = '',
            @icon_url = 'https://www.dirceuresende.com/wp-content/uploads/2018/01/cropped-Azure-SQL-Database-generic_COLOR-2-180x180.png',
            @link_names = 'true',
            @parse = 'none',
            @thread_ts = '',
            @unfurl_links = 'true',
            @unfurl_media = 'true',
            @username = 'BOT Dirceu Resende'
    
    
    END
    

    Exemplos de uso

    Envio de mensagens com formatação

    EXEC dbo.stpEnvia_Mensagem_Slack_Completa 
        @Ds_Canal = N'informativos', -- nvarchar(max)
        @Ds_Mensagem = N'Teste de Mensagem', -- nvarchar(max)
        @Ds_Cor_Hexa = N'ff0000', -- nvarchar(max)
        @Ds_Titulo = N'Título da Mensagem com Borda Vermelha', -- nvarchar(max)
        @Ds_Link = N'', -- nvarchar(max)
        @Ds_Mensagem_Interna = N'Essa é a mensagem do Slack. Aceita *negrito*, _italico_ e ~sublinhado~' -- nvarchar(max)
    

    Envio de mensagens com Links externos
    Ao clicar no título da mensagem, você será direcionado para a URL https://www.dirceuresende.com/blog ?

    EXEC dbo.stpEnvia_Mensagem_Slack_Completa 
        @Ds_Canal = N'informativos', -- nvarchar(max)
        @Ds_Mensagem = N'', -- nvarchar(max)
        @Ds_Cor_Hexa = N'00ff00', -- nvarchar(max)
        @Ds_Titulo = N'Título da Mensagem com Borda Verde', -- nvarchar(max)
        @Ds_Link = N'https://www.dirceuresende.com/blog', -- nvarchar(max)
        @Ds_Mensagem_Interna = N'Essa é a mensagem do Slack. Aceita *negrito*, _italico_ e ~sublinhado~' -- nvarchar(max)
    

    Envio de mensagem com quebra de linha

    EXEC dbo.stpEnvia_Mensagem_Slack_Completa 
        @Ds_Canal = N'informativos', -- nvarchar(max)
        @Ds_Mensagem = N'', -- nvarchar(max)
        @Ds_Cor_Hexa = N'0000ff', -- nvarchar(max)
        @Ds_Titulo = N'', -- nvarchar(max)
        @Ds_Link = N'', -- nvarchar(max)
        @Ds_Mensagem_Interna = N'Essa é a mensagem do Slack com Borda Azul.\n\nAceita *negrito*\nAceita_italico_\nAceita ~sublinhado~' -- nvarchar(max)
    

    Para saber mais sobre formatação no Slack, acesse este link. E é isso aí, pessoal!

    Espero que tenham gostado desse post e até a próxima!

    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL

    NoSql Sql 14 de janeiro de 20257 Mins Read

    Entendendo os diferentes tipos de locks em bancos de dados e como evitá-los

    NoSql Sql 2 de julho de 20248 Mins Read

    Happy Hour com Dados #14 – Modelagem de Dados

    Dicas NoSql Sql 22 de setembro de 20201 Min Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 24mil outros assinantes
    Posts recentes
    • Structured Prompt-Driven Development: quando o prompt deixa de ser conversa e vira artefato de engenharia
    • Observabilidade para agentes: por que logs e traces tradicionais já não bastam
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    Categorias
    • Arquitetura (32)
      • Microsserviços (3)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (93)
      • NoSql (60)
      • Sql (38)
    • Boas práticas (35)
      • Gestão & Produtividade (5)
      • Metodologias Ágeis (6)
    • Cursos (53)
    • Dicas (108)
    • Front-End (92)
    • IA (9)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Código Simples no Facebook
    Código Simples no Facebook
    • Popular
    • Recente

    1000 livros gratuitos sobre programação!

    12 de fevereiro de 2016

    Google lança versão “invisível” do reCAPTCHA!

    10 de março de 2017

    Mini curso de HTML5 oferecido pela Microsoft

    30 de janeiro de 2014

    O que significa ( !important ) na declaração do CSS ?

    5 de fevereiro de 2014

    Programa para supercompactar arquivos. KGB Archiver.

    6 de fevereiro de 2014

    Structured Prompt-Driven Development: quando o prompt deixa de ser conversa e vira artefato de engenharia

    28 de abril de 2026

    Observabilidade para agentes: por que logs e traces tradicionais já não bastam

    23 de abril de 2026

    Context engineering: quando o problema deixa de ser prompt e vira arquitetura

    16 de abril de 2026

    Clean Code (2ª edição): o que mudou e o que continua valendo

    12 de fevereiro de 2026

    Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha

    4 de fevereiro de 2026
    Nosso Feed
    • RSS - Posts
    Fique por dentro

    Digite seu endereço de email para assinar este blog e receber notificações de novas publicações por email.

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile