Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Estratégias de Resiliência para Microservices: Aplicando Back-pressure e Bulkhead com Eficiência
    • Potencializando o MongoDB com IA: Conheça o MCP Server da MongoDB
    • Guia Completo: Integrando o MCP com Atlassian
    • Model Context Protocol (MCP): O Futuro da Interação com Modelos de IA
    • Processamento Assíncrono: Os Desafios da Escalabilidade
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    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 25mil outros assinantes
    Posts recentes
    • Estratégias de Resiliência para Microservices: Aplicando Back-pressure e Bulkhead com Eficiência
    • Potencializando o MongoDB com IA: Conheça o MCP Server da MongoDB
    • Guia Completo: Integrando o MCP com Atlassian
    • Model Context Protocol (MCP): O Futuro da Interação com Modelos de IA
    • Processamento Assíncrono: Os Desafios da Escalabilidade
    Categorias
    • Arquitetura (16)
      • Microsserviços (1)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (91)
      • NoSql (59)
      • Sql (38)
    • Boas práticas (30)
      • Gestão & Produtividade (2)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (4)
    • 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

    Facebook X (Twitter) Instagram LinkedIn

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

    Vá para versão mobile