Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Como enviar alterações de documentos do MongoDB para um canal do Slack

Josman Pérez Expóstio6 min read • Published Oct 26, 2023 • Updated Oct 26, 2023
JavaScriptAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
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á:
Diagrama de fluxo de visão geral de alto nível da solução proposta
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.

Criando o aplicativo no Atlas

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.

Atlas trigger

Para este tutorial, criaremos um trigger que monitorará todas as alterações em uma collectiontest para insert, updatee delete operações.
  1. Clique na Serviços de Dados aba na navegação superior da sua tela se você ainda não navegou no Atlas.
  2. Clique Triggers na navegação à esquerda.
  3. Na aba Visão geral da página Triggers , clique em Adicionar trigger para abrir a página de configuração do gatilho.
  4. Insira os valores de configuração para o gatilho e clique Salvar na parte inferior da página.
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:
Captura de tela da visualização da interface do usuário dos gatilhos
Por fim, esse trigger será vinculado a uma funçãoprocessEventque veremos a seguir.

Funções do Atlas

Para criar uma função Atlas usando a UI, precisamos:
  1. Clique na Serviços de Dados aba na navegação superior da sua tela se você ainda não navegou no Atlas.
  2. Clique emFunções no menu de navegação esquerdo.
  3. Clique em Nova Função no canto superior direito da página Funções .
  4. Insira um nome de identificação exclusivo para a função no campoNome .
  5. 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.

"processEvent" function

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:
1exports = 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.
Aqui, usaremos o evento de alteração e suas propriedades para capturar:
  1. _id do objeto que foi modificado/inserido.
  2. Operação que foi executada.
  3. 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çãosendToSlack.

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 WebCliente umaplicativo Slack. Portanto:
  1. 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.
  2. 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 escopochat:write para permitir que seu aplicativo publique mensagens.
Um guia completo sobre como obter esses dois pode ser encontrado na documentação oficial do Slack.
Primeiro, realizaremos a lógica com o objeto recebido para criar uma mensagem adequadas ao evento que ocorreu.
1var message = "";
2if (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 clienteWebClient 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:
1try {
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}
10catch (error) {
11 console.error(error);
12}
O código completo da função será o seguinte:
1exports = 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:
Captura de tela de uma mensagem sendo recebida em um 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".

Conclusão

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çãoprocessEvent, 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!

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

Ouça o Scale Up com os serviços de aplicativos do Atlas


Sep 09, 2024 | 3 min read
Artigo

Dimensões que mudam lentamente e seu uso no MongoDB


Dec 13, 2022 | 7 min read
Tutorial

Introdução ao Atlas Stream Processing: como criar seu primeiro processador de fluxo


Aug 13, 2024 | 4 min read
Início rápido

Introdução ao desenvolvimento do Atlas Stream Processing


Aug 28, 2024 | 7 min read
Sumário
  • Criando o aplicativo no Atlas