Faaaaala chicos!!
Hoy estoy muy emocionado con este post. La primera vez que uso Python en SQL Server 2017, y puedes esperar mucho más por venir... El 4 de febrero de 2017, publiqué la publicación. SQL Server – Cómo integrar la base de datos con Slack y enviar mensajes usando CLR (C#) y esta vez vuelvo aquí para mostrarles cómo realizar esta misma integración utilizando únicamente características nativas de SQL Server 2017.
Introducción
Como sabrá, SQL 2017 trajo una serie de noticias y nuevas características para nuestra vida diaria, y una de ellas era la posibilidad de ejecutar scripts escritos en Python mediante SQL Server, tanto para análisis estadístico (muy utilizado por científicos de datos y estadísticos) como para la realización de tareas del día a día.
No conozco holgura
Ver más informaciónCómo habilitar Python en SQL Server 2017
Para habilitar Python en SQL Server 2017, deberá activar la función scripts externos habilitados, con el siguiente comando:
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.
Una vez ejecutado, deberá reiniciar el servicio SQL Server 2017 en Configuration Manager:

Ahora simplemente reinicie el servicio, como se muestra en la imagen a continuación:

También recomiendo reiniciar el servicio “SQL Server Launchpad”, ya que cuando intenté ejecutar el script Python, recibí este mensaje de error:
Mensaje 39011, Nivel 16, Estado 1, Línea 10
SQL Server no pudo comunicarse con el servicio LaunchPad. Por favor verifique la configuración del servicio.
Cómo instalar la biblioteca Slacker
Para nuestra integración con Slack a través de SQL Server, usaremos la biblioteca Slacker. Para instalarlo, abra el símbolo del sistema como administrador:

Una vez abierto, simplemente escriba el siguiente comando:
cd "C:\Program Files\Microsoft SQL Server\MSSQL14.NOME_DA_SUA_INSTANCIA\PYTHON_SERVICES\Scripts"
pip install slacker
Si no conoce su ruta de instalación, puede averiguarla fácilmente con este comando aquí:
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'
Después de escribir los comandos anteriores, la biblioteca se habrá instalado correctamente:

Cómo habilitar la API de Slack
Para poder enviar mensajes a través de Slack, necesitamos crear una integración personalizada. Para ello acceda a la URL https://api.slack.com/docs/oauth-test-tokens ha iniciado sesión en la cuenta de usuario que servirá como BOT y enviará mensajes automáticos.
Haga clic en el botón "Crear token".
Copie el token generado en su aplicación. Es con este enorme código (76 caracteres en mi caso) que te autenticarás con la API y podrás enviar tus mensajes a través de la API.
Cómo enviar mensajes en Slack a través de SQL Server
Ahora que expliqué qué es Slack, habilitamos los scripts de Python en la instancia y generó su token de acceso, podemos comenzar a enviar mensajes en Slack a través de SQL Server 2017.
Versión simple (solo formateo)
Código de procedimiento almacenado que envía mensajes:
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
Ejemplo de uso para mensaje privado a otro usuario:
EXEC dbo.stpEnvia_Mensagem_Slack
@Ds_Mensagem = N'Teste de integração', -- nvarchar(max)
@Ds_Canal = N'@bot_dirceuresende' -- nvarchar(128)
Ejemplo de uso de un mensaje en un canal:
EXEC dbo.stpEnvia_Mensagem_Slack
@Ds_Mensagem = N'Teste de integração', -- nvarchar(max)
@Ds_Canal = N'#ti' -- nvarchar(128)
Versión completa (con colores, enlaces y formato)
Código de procedimiento almacenado que envía el mensaje:
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
Ejemplos de uso
Enviar mensajes formateados
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)
Envío de mensajes con enlaces externos
Cuando haces clic en el título del mensaje, serás dirigido a la 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)
Enviar un mensaje con saltos de línea
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 obtener más información sobre el formateo en Slack, accede a este enlace.
¡Y eso es todo, amigos!
Espero que hayas disfrutado de esta publicación y ¡hasta la próxima!










Comentários (0)
Carregando comentários…