Aplicativo Slack simples para publicação de conteúdo do Planilhas Google

Gostamos de experimentar coisas novas e, portanto, geralmente compartilhamos links com informações interessantes do mundo da TI e da programação com nossos colegas. Somos usuários antigos do slack e, para esses links, temos um canal educacional separado, onde todos podem encontrar algo interessante para si. Porém, como somos pessoas comuns, periodicamente no calor do trabalho, esquecemos que precisamos compartilhar esses links e a atividade no canal desaparece, embora muitos de nós tenham algo a compartilhar.

Enfrentamos uma tarefa interessante de desenvolver um "bot" que pudesse pegar automaticamente informações pré-coletadas e compartilhar links regularmente. Estávamos procurando uma solução pronta na Internet, e agora ela apareceu como uma integração de zapier e slack .

imagem

No entanto, não encontramos essa integração antes e decidimos escrever nossa própria bicicleta pequena. Abaixo, descreveremos como exatamente fizemos isso.

Ao pensar sobre o problema, veio à minha mente a seguinte solução:
Código Javascript que recebe informações sobre links úteis relevantes da tabela do Google e as envia para o Slack. Chamando um script do primeiro item em uma agenda usando cron. Vamos começar em ordem.

Obtendo um token para o Slack.


Tudo é simples aqui e foi descrito repetidamente em outros artigos, portanto, darei apenas uma breve descrição.

Existem duas opções: criar seu próprio aplicativo Slack ou usar tokens legados, a primeira opção é um pouco mais complicada, mas é recomendada pelo Slack, a segunda é mais simples e adequada para as nossas necessidades, devido à sua simplicidade, a escolheremos.

Abrimos um link para gerar um novo token e criar um novo token para o espaço de trabalho desejado (não esqueça de copiá-lo, o token é emitido uma vez).

imagem

No futuro, ao implementar o código que interaja com a API do Slack e o Planilhas Google, poderemos usar esse token para a finalidade pretendida.

Agora você precisa obter o token para o Planilhas Google. Primeiro, abra o Início Rápido do Node.js. para o Planilhas Googlee ative a API do Planilhas Google. Em seguida, copiamos o código index.js do exemplo e o executamos, passamos pelo processo de autorização e obtemos as credenciais no arquivo, que são úteis para uso com nosso script.

Implementação de script


Agora é a hora de começar a desenvolver um script para publicar mensagens do Planilhas Google para o Slack. O código completo do script pode ser encontrado clicando no link .

Primeiro, analisaremos a parte do código que envia mensagens para o canal slack.
Isso acontece chamando a API REST do Slack.

const post = async (text, channel = <CHANNEL ID>) => {
  const uri = `https://slack.com/api/chat.postMessage?token=${SLACK_AUTH_TOKEN}&channel=${channel}&text=${text}`;
  const result = await fetch(encodeURI(uri), {
    headers: {
      'Content-Type': 'application/json',
    },
    method: 'POST',
    body: JSON.stringify({
      channel,
      text,
      as_user: true
    })
  });

  await result.json();
};

Para autorização na API do Google, duas funções são usadas (authorize, getNewToken), cujo código é obtido no Início Rápido do Node.js. Não iremos nos aprofundar nelas em detalhes.

O próximo bloco interessante de código é obter informações para enviar das planilhas do Google, isso é feito usando a seguinte função:

const getMessageAndPost = async (auth, spreadsheetId = <ID  Google >) => {
  const sheets = google.sheets({ version: 'v4', auth });
  sheets.spreadsheets.values.get({
    spreadsheetId,
    range: 'Sheet1!A1:B999',
  }, async (err, res) => {
    if (err) return console.log('The API returned an error: ' + err);
    const rows = res.data.values;
    if (rows.length) {
      // Print columns A and E, which correspond to indices 0 and 4.
      const ix = rows.findIndex(r => !r[1]);
      await post(rows[ix][0]);
      sheets.spreadsheets.values.update({
        spreadsheetId: '18VzilQTEDGXBnaH1f_k-uAfa8Mb470gx32Phir6xQT4',
        range: `Sheet1!B${ix + 1}`,
        valueInputOption: 'RAW',
        requestBody: {
          range: `Sheet1!B${ix + 1}`,
          values: [['x']]
        }

      })
    } else {
      console.log('No data found.');
    }
  });
};

A tabela com a qual o script interage tem a seguinte forma:

imagem

Assim, para próximo a cada link após o envio de uma mensagem para o Slack, o script coloca “x”. Assim, para encontrar a mensagem que você deseja enviar, selecione a primeira linha, que ainda não possui um “x”, pegue a mensagem, envie-a e marque a linha selecionada.

O script que acabamos de desmontar é bastante simples e confirma seu desempenho há vários anos em nossa equipe. Nós apenas temos que implantar esse script no servidor e aproveitar o uso.

Para isso, em nossa empresa, usamos o habitual VPS do Ubuntu no Digital Ocean (até o mais baixo consumo de energia).

Primeiro de tudo, você precisa configurar o ambiente para executar o código javascript; para isso, você precisa instalar o node.js (guia de instalação )

Depois disso, configure a tarefa cron para chamar o script em um agendamento:

crontab -e

#### 

24 14 * * 1-5 cd /root/google-sheets-to-slack && node post.js

Usando essas configurações, nosso script da pasta / root / será chamado diariamente de segunda a sexta às 14:24.

A configuração terminou, mas o leitor atento deve ter notado algumas falhas no script, por exemplo, se houver algum erro ao chamar o script, nunca saberemos sobre isso, porque "cairá silenciosamente" e isso é tudo. Para resolver esse problema, você pode adicionar tratamento de erros e saída do resultado da chamada de script à mesma planilha ou arquivo de log do Google.

Além disso, em vez de enviar uma mensagem em um horário fixo, você pode enviá-la com um atraso aleatório, para que nossa mensagem seja mais como uma mensagem de um usuário "ativo".

Outra idéia interessante de um de nossos colegas foi criar uma segunda tabela a partir da qual as mensagens seriam enviadas exclusivamente às sextas-feiras e seriam mais divertidas.

Em geral, vemos inúmeras idéias para aprimoramento e as implementaremos gradualmente, mas, na forma existente, esse script saiu bastante útil.

Uma tabela de exemplo que pode ser usada está disponível aqui .

Obrigado pela leitura e aproveite.

All Articles