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'
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)
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)
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!