Como enviar alterações de documentos do MongoDB para um canal do Slack
Avalie esse Tutorial
Neste tutorial, exploraremos uma integração perfeita do seu banco de dados com o Slack usando o Atlas Triggers e a API do Slack. Descubra como enviar notificações sem esforço para os canais desejados do Slack, conectando efetivamente as operações que acontecem em suas collection e retransmitindo-as em atualizações em tempo real.
O fluxo geral será:
Dessa forma, toda vez que uma operação que precisamos rastrear for registrada, o conteúdo da própria transação será processado e usado para enviar uma mensagem para um canal específico do Slack.
Para começar, criaremos um novo aplicativo no Atlas. Um guia passo a passo ilustrando este processo está disponível em nossa documentaçãodo.
Feito isso, estamos prontos para começar a criar nosso primeiro gatilho de banco de dados que React toda vez que houver uma operação em uma determinada coleção.
Para este tutorial, criaremos um trigger que monitorará todas as alterações em uma collection
test
para insert
, update
e delete
operações.- Clique na Serviços de Dados aba na navegação superior da sua tela se você ainda não navegou no Atlas.
- Clique Triggers na navegação à esquerda.
- Na aba Visão geral da página Triggers , clique em Adicionar trigger para abrir a página de configuração do gatilho.
Observe que esse trigger usará a ordenação do evento, pois queremos que as operações sejam processadas de acordo com quando foram realizadas.
Os valores de configuração do trigger ficarão assim:
Por fim, esse trigger será vinculado a uma função
processEvent
que veremos a seguir.- Clique na Serviços de Dados aba na navegação superior da sua tela se você ainda não navegou no Atlas.
- Clique emFunções no menu de navegação esquerdo.
- Clique em Nova Função no canto superior direito da página Funções .
- Insira um nome de identificação exclusivo para a função no campoNome .
- Configurar autenticação de usuário. As funções no App Services sempre são executadas no contexto de um usuário específico do aplicativo ou como um usuário do sistema que ignora as regras. Para este tutorial, vamos usar o usuário do sistema.
A função processEvent processará os eventos de alteração toda vez que uma operação que estamos monitorando na coleção fornecida for processada. Dessa forma, vamos criar um objeto que enviaremos para a função responsável por enviar esta mensagem no Slack.
O código da função é o seguinte:
1 exports = function(changeEvent) { 2 3 const docId = changeEvent.documentKey._id; 4 5 const { updateDescription, operationType } = changeEvent; 6 7 var object = { 8 operationType, 9 docId, 10 }; 11 12 if (updateDescription) { 13 const updatedFields = updateDescription.updatedFields; // A document containing updated fields 14 const removedFields = updateDescription.removedFields; // An array of removed fields 15 object = { 16 ...object, 17 updatedFields, 18 removedFields 19 }; 20 } 21 22 const result = context.functions.execute("sendToSlack", object); 23 24 return true; 25 };
Nesta função, criaremos um objeto que enviaremos como parâmetro para outra função que será responsável por enviar para nosso canal do Slack.
_id
do objeto que foi modificado/inserido.- Operação que foi executada.
- Campos do objeto que foram modificados ou excluídos quando a operação era uma
update
.
Com tudo isso, criamos um objeto e usamos as chamadas de função internas para executar nossa função
sendToSlack
.Essa função fará uso do método "chat.postMessage" da API do Slack para enviar uma mensagem para um canal específico.
Para usar a Slack, você deve adicioná-la como uma dependência em sua função Atlas. Portanto, na seçãoFunções, devemos Go para a abaDependências e instalar o
@slack/web-api
.Você precisará ter um token Slack que será usado para criar o objeto
WebClient
e umaplicativo Slack. Portanto:- Criar ou usar um aplicativo Slack existente: isso é necessário, pois o token subsequente de que precisaremos será vinculado a um aplicativo Slack. Para esta etapa, você pode navegar até o aplicativo Slack e usar suas credenciais para autenticar e criar ou usar um aplicativo existente do qual você é membro.
- Nesse aplicativo, precisaremos criar um token de bot que manterá a chave de API de autenticação para enviar mensagens para o canal correspondente no aplicativo Slack criado. Observe que você precisará adicionar quantos escopos de autorizaçãoforem necessários em seu token, mas o mínimo é adicionar o escopo
chat:write
para permitir que seu aplicativo publique mensagens.
Primeiro, realizaremos a lógica com o objeto recebido para criar uma mensagem adequadas ao evento que ocorreu.
1 var message = ""; 2 if (arg.operationType == 'insert') { 3 message += `A new document with id \`${arg.docId}\` has been inserted`; 4 } else if (arg.operationType == 'update') { 5 message += `The document \`${arg.docId}\` has been updated.`; 6 if (arg.updatedFields && Object.keys(arg.updatedFields).length > 0) { 7 message += ` The fileds ${JSON.stringify(arg.updatedFields)} has been modified.`; 8 } 9 if (arg.removedFields && arg.removedFields.length > 0) { 10 message += ` The fileds ${JSON.stringify(arg.removedFields)} has been removed.`; 11 } 12 } else { 13 message += `An unexpected operation affecting document \`${arg.docId}\` ocurred`; 14 }
Depois de termos a biblioteca, devemos usá-la para criar um cliente
WebClient
que usaremos mais tarde para usar os métodos necessários.1 const { WebClient } = require('@slack/web-api'); 2 // Read a token from the environment variables 3 const token = context.values.get('SLACK_TOKEN'); 4 // Initialize 5 const app = new WebClient(token);
Por fim, podemos enviar nossa mensagem com:
1 try { 2 // Call the chat.postMessage method using the WebClient 3 const result = await app.chat.postMessage({ 4 channel: channelId, 5 text: `New Event: ${message}` 6 }); 7 8 console.log(result); 9 } 10 catch (error) { 11 console.error(error); 12 }
O código completo da função será o seguinte:
1 exports = async function(arg){ 2 3 const { WebClient } = require('@slack/web-api'); 4 // Read a token from the environment variables 5 const token = context.values.get('SLACK_TOKEN'); 6 const channelId = context.values.get('CHANNEL_ID'); 7 // Initialize 8 const app = new WebClient(token); 9 10 var message = ""; 11 if (arg.operationType == 'insert') { 12 message += `A new document with id \`${arg.docId}\` has been inserted`; 13 } else if (arg.operationType == 'update') { 14 message += `The document \`${arg.docId}\` has been updated.`; 15 if (arg.updatedFields && Object.keys(arg.updatedFields).length > 0) { 16 message += ` The fileds ${JSON.stringify(arg.updatedFields)} has been modified.`; 17 } 18 if (arg.removedFields && arg.removedFields.length > 0) { 19 message += ` The fileds ${JSON.stringify(arg.removedFields)} has been removed.`; 20 } 21 } else { 22 message += `An unexpected operation affecting document \`${arg.docId}\` ocurred`; 23 } 24 25 try { 26 // Call the chat.postMessage method using the WebClient 27 const result = await app.chat.postMessage({ 28 channel: channelId, 29 text: `New Event: ${message}` 30 }); 31 console.log(result); 32 } 33 catch (error) { 34 console.error(error); 35 } 36 37 };
Observação: o token do bot que usamos deve ter as permissões mínimas para enviar mensagens para um determinado canal. Também devemos ter o aplicativo criado no Slack adicionado ao canal onde queremos receber as mensagens.
Se tudo estiver configurado corretamente, todas as alterações na collection e nas operações monitoradas serão recebidas no canal do Slack:
Observe que este exemplo é um guia simples. Mas, a partir deste guia, ele pode ser ampliado e adaptado a necessidades mais complexas.
Você pode usar expressões $match" para detectar apenas determinadas alterações e, em seguida, adaptar o evento de alteração para receber apenas determinados campos com um "$project".
Neste tutorial, aprenderam como integrar perfeitamente seu banco de dados com o Slack usando o Atlas Triggers e a API do Slack. Essa integração permite que você envie notificações em tempo real para seu Slack, mantendo sua equipe informada sobre operações importantes em suas collections.
Começamos criando um novo aplicativo no Atlas e, em seguida, configuramos um acionador de banco de dados que reage a operações de coleta específicas. Exploramos a função
processEvent
, que processa eventos de alteração e prepara os dados para as notificações do Slack. Por meio de um processo passo a passo, demonstramos como criar uma mensagem e usar a API do Slack para publicá-la em um canal específico.Agora que você já entendeu o básico, é hora de levar suas habilidades de integração para o próximo nível. Aqui estão algumas etapas que você pode seguir:
- Explore casos de uso avançados: considere como você pode adaptar os princípios que aprendeu a cenários mais complexos em sua organização. Quer se trate de notificações personalizadas ou do tratamento de eventos específicos do banco de dados, existem inúmeras possibilidades.
- Mergulhe na documentação da API do Slack: para ter uma compreensão mais profunda do que é possível fazer com a API do Slack, consulte a documentação oficial. Isso ajudará você a aproveitar todo o potencial dos recursos do Slack.
Ao seguir essas etapas, você estará no caminho certo para criar integrações poderosas e personalizadas que podem agilizar seu fluxo de trabalho e manter sua equipe informada com atualizações em tempo real. Boa sorte em sua jornada de integração!