Faaaaala pessoal!!
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.
Não conheço o Slack
Visualizar mais informaçõesComo 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:
USE [dirceuresende]
GO
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:
USE [dirceuresende]
GO
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 = '/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://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://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!










Comentários (0)
Carregando comentários…