Olá pessoal,
Bom dia!
Neste post vou demonstrar como fazer uma integração do banco de dados com o Telegram e enviar mensagens utilizando CLR (C#), que é o principal concorrente do Whatsapp. Anteriormente, já demonstrei como fazer essa mesma integração nos posts:
- 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 o CLR (C#)
Caso você não conheça ou não saiba utilizar o CLR no SQL Server, descubra como acessando o post Introdução ao SQL CLR (Common Language Runtime) no SQL Server.
O que é o Telegram?
Para quem não conhece, o Telegram é um dos comunicadores mais famosos e utilizados em todo o mundo, principal concorrente do Whatsapp e tem a proposta de permitir uma comunicação rápida, segura e fácil entre pessoas de qualquer parte do mundo.
Você pode criar grupos públicos, onde qualquer pessoa pode entrar e interagir ou grupos privados, onde somente quem está no grupo pode visualizar as mensagens. O Telegram possui uma versão em português, uma API aberta que permite realizar a integração com suas aplicações e o envio de mensagens automatizadas. O seu visual é muito parecido com o Whatsapp e ele é mais seguro, mais rápido e possui mais recursos que o seu principal concorrente e líder de mercado, mas possui uma quantidade de usuários ainda bem menor, principalmente no Brasil.
Onde e como posso usar o Telegram 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 Telegram, é 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 Telegram, 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 Telegram é que ele pode ser enviado de várias formas diferentes (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.
Você pode utilizar o Telegram 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 Telegram, onde chega uma notificação Push no meu celular (igual do Whatsapp) e onde quer que eu esteja, tomo conhecimento dessa falha.
Como desvantagem do Telegram (e Whatsapp) em relação ao Slack e o Ryver, é que os 2 primeiros comunicadores são abertos ao mundo, e podem ser utilizados para conversas pessoais e particulares com qualquer pessoa, podendo gerar uma desconcentração e perda de foco. O Slack e o Ryver são muito mais voltados ao meio corporativo, tanto que as pessoas que vão interagir precisam de convite.
Como ativar a API do Telegram
Para começar a utilizar a API do Telegram você precisará criar um novo BOT, que será o responsável por enviar as mensagens. Para isso, logue na sua conta do Telegram, seja na Web ou no celular, e inicie uma conversa com o usuário @BotFather
Clique no botão “Começar”.
Assim que você clicar no botão “Começar”, o Bot irá enviar uma lista de comandos:
Selecione a opção /newbot e depois escolha o nome do bot e o usuário, conforme print abaixo:
Anote o token gerado, pois ele será utilizado pela Stored Procedure para realizar o envio das mensagens.
Como identificar o ID do canal ou do usuário?
Assim com o Ryver, a API do Telegram exige que você digite o ID do canal ao invés de um nome fácil de decorar e se utilizar, como é a API do Slack. Apesar de ser mais seguro, ter que ficar armazenando os ID’s dos canais e usuários é uma tarefa um pouco chata e improdutiva.
Vou demonstrar aqui como identificar o ID do canal e dos usuários, para enviar mensagens privadas.
Como identificar o ID de um grupo:
Para identificar o ID de um grupo do Telegram, basta acessar o Telegram Web, clicar no grupo desejado e observar a URL do grupo. Lembre-se que o BOT deve ser convidado para o grupo em que você deseja enviar a mensagem.
Se você não convidar o BOT e tentar enviar uma mensagem para o grupo, você verá essa mensagem de erro:
Erro : O servidor remoto retornou um erro: (400) Solicitação Incorreta.
Quando for utilizar o ID do usuário na chamada da sua Stored Procedure, o valor geralmente é NEGATIVO.
Como identificar o ID de um usuário:
Para identificar o ID de um grupo do Telegram é um pouco mais trabalhoso, pois o próprio usuário terá que lhe enviar essa informação. Para isso, ele terá que iniciar uma conversa com o BOT @get_id
Após iniciar a conversa, o BOT já irá enviar o código do usuário para o próprio usuário, e ele deverá lhe informar esse ID para poder enviar as mensagens privadas (DM’s).
Como identificar o ID de um usuário pela API getUpdates
Uma outra forma de se fazer isso, é utilizando o método getUpdates da API do Telegram. Após o usuário iniciar uma conversa com o seu BOT, essa ação fica gravada nessa método, que recuperar todas as “novidades” que interagem com o seu BOT.
Utilizando uma ferramenta como o Postman, você pode utilizar essa API e visualizar facilmente o ID do usuário que iniciou a conversa com o seu BOT.
Lembre-se que a URL desse método é: https://api.telegram.org/botSEU_TOKEN_AQUI/getUpdates
Em qualquer um dos métodos acima, o usuário precisará iniciar uma conversa com o seu BOT, para que ele possa enviar as mensagens para o seu usuário. Essa é uma definição de segurança da API do Telegram para evitar SPAM.
Quando for utilizar o ID do usuário na chamada da sua Stored Procedure, o valor geralmente é POSITIVO.
Como integrar o banco de dados ao Telegram
Uma vez que você já criou sua conta no Telegram e já criou o bot que você irá utilizar para enviar as mensagens para os grupos, vamos à parte interessante: Criar o código .NET (C#) que irá realizar a integração do banco de dados SQL Server com a API do Telegram.
Como pré-requisito para utilizar essa procedure, você precisará criar a classe Retorno, disponível no post SQL Server – Como enviar avisos e mensagens de erro para o banco pelo CLR (C#) para utilizar o método Retorno.Erro e assim, enviar mensagens de erro, caso ocorram. Você também pode optar por comentar o código e remover as chamadas para esse método (e comentar também o using Bibliotecas.Model), mas não aconselho, pois você não saberá quando ocorreu algum erro na sua chamada à SP de envio de mensagens para o Telegram.
Assim como ocorre no Ryver e no Slack, para que seja possível enviar as mensagens, o usuário do BOT tem que ser adicionado em todos os grupos, privados e públicos, pois ele que faz o envio das mensagens e não é possível enviar as mensagens se ele não estiver no grupo.
Agora que já temos a conta criada, o usuário do BOT está nos grupos desejados e já geramos o nosso token, é hora de enviar as mensagens pelo banco de dados com o CLR.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
using System; using System.Data.SqlTypes; using System.IO; using System.Net; using System.Text; using Bibliotecas.Model; public partial class StoredProcedures { [Microsoft.SqlServer.Server.SqlProcedure] public static void stpEnvia_Mensagem_Telegram(SqlString Ds_Canal, SqlString Ds_Mensagem) { const string token = "seu_token_telegram"; try { var mensagem = Ds_Mensagem.Value; var canais = Ds_Canal.Value.Split(';'); foreach (var canal in canais) { var dsScript = $"chat_id={canal.Trim()}&text={mensagem}&parse_mode=Markdown"; var url = $"https://api.telegram.org/bot{token}/sendMessage"; var request = (HttpWebRequest) WebRequest.Create(url); request.Method = "POST"; request.UserAgent = "curl/7.45.0"; request.ContentType = "application/x-www-form-urlencoded"; var buffer = Encoding.GetEncoding("UTF-8").GetBytes(dsScript); using (var reqstr = request.GetRequestStream()) { reqstr.Write(buffer, 0, buffer.Length); using (var response = request.GetResponse()) { using (var dataStream = response.GetResponseStream()) { if (dataStream == null) return; using (var reader = new StreamReader(dataStream)) { var responseFromServer = reader.ReadToEnd(); Retorno.Mensagem(responseFromServer); } } } } } } catch (Exception e) { Retorno.Erro("Erro : " + e.Message); } } }; |
Exemplos de uso
Enviando mensagem para o grupo “Teste Dirceu Resende”
1 2 3 4 5 6 7 |
EXEC CLR.dbo.stpEnvia_Mensagem_Telegram @Ds_Canal = N'-155990210', -- nvarchar(max) | grupos = ID negativo / DM = ID positivo @Ds_Mensagem = N'Teste de *negrito*, _italico_ e Quebra de linha.' -- nvarchar(max) |
Enviando mensagem para o grupo “Teste Dirceu Resende” com URL externa
1 2 3 4 |
-- Enviando mensagem para o grupo "Teste Dirceu Resende" com URL EXEC CLR.dbo.stpEnvia_Mensagem_Telegram @Ds_Canal = N'-155990210', -- nvarchar(max) | grupos = ID negativo / DM = ID positivo @Ds_Mensagem = N'Gostou desse recurso? Veja mais no meu blog: (https://dirceuresende.com/blog)' -- nvarchar(max) |
Enviando mensagem privada (DM)
Uma vez que você tenha o ID do usuário, basta iniciar uma conversa com o BOT para que ele tenha permissão de te enviar mensagens. Se você não fizer isso, irá receber essa mensagem de erro ao tentar enviar a mensagem:
Erro : O servidor remoto retornou um erro: (400) Solicitação Incorreta.
Após iniciar uma conversa com o seu BOT, basta executar a SP abaixo:
1 2 3 |
EXEC CLR.dbo.stpEnvia_Mensagem_Telegram @Ds_Canal = N'191345344', -- nvarchar(max) | grupos = ID negativo / DM = ID positivo @Ds_Mensagem = N'Teste de mensagem *privada*' -- nvarchar(max) |
É isso aí, pessoal!
Espero que tenham gostado desse post.
Um abraço e até a próxima.
sql server clr .net dotnet framework c# csharp integration como criar integração banco de dados database como enviar mensagens how to send messages notifications notificações grupo privada dm Telegram
sql server clr .net dotnet framework c# csharp integration como criar integração banco de dados database como enviar mensagens how to send messages notifications notificações grupo privada dm Telegram
Boa noite, tentei testei o codigo no sql, tento enviar a msg, não da erro, mas nao envia a msg.
a chamada ao @get_id não mostra conforme o exemplo. somente grupos.
Otimo artigo!
Você tem um exemplo com Whatsapp?
Boa tarde,
Testei esse código pelo C# e funciona bem, mas quando jogo no SQL o envio de mensagem fica num loop infinito, simplesmente fica executando a vida toda e nem mensagem de erro gera, alguma dica ?
Me chama no privado pra tentar entender o que está acontecendo
Ótimo artigo.
Você estudos desse artigo na linguagem java?
Obrigada