Application Slack simple pour publier du contenu à partir de Google Sheets

Nous aimons essayer de nouvelles choses et partageons donc souvent des liens vers des informations intéressantes du monde de l'informatique et de la programmation avec nos collègues. Nous sommes des utilisateurs de longue date de slack et pour de tels liens, nous avons un canal éducatif séparé où chacun peut trouver quelque chose d'intéressant pour lui-même. Mais comme nous sommes des gens ordinaires, périodiquement dans le feu de l'action, nous oublions que nous devons partager ces liens, et l'activité dans la chaîne s'estompe, même si beaucoup d'entre nous ont quelque chose à partager.

Nous avons été confrontés à une tâche intéressante: développer un «bot» qui pourrait automatiquement prendre des informations pré-collectées et partager régulièrement des liens vers celles-ci. Nous cherchions une solution toute faite sur Internet, et maintenant elle est apparue comme une intégration de zapier et de slack .

image

Cependant, nous n'avons pas trouvé une telle intégration avant et avons décidé d'écrire notre propre petit vélo. Ci-dessous, nous décrirons comment nous l'avons fait exactement.

En pensant au problème, la solution suivante m'est venue à l'esprit:
Code Javascript qui reçoit des informations sur les liens utiles pertinents de la table google et les envoie à Slack. Appel d'un script à partir du premier élément d'un programme à l'aide de cron. Commençons dans l'ordre.

Obtenir un jeton pour Slack.


Tout est simple ici et il a été décrit à plusieurs reprises dans d'autres articles, je ne donnerai donc qu'une brève description.

Il existe deux options: créer votre propre application Slack ou utiliser des jetons hérités, la première option est un peu plus compliquée, mais elle est recommandée par Slack, la seconde est plus simple et tout à fait adaptée à nos besoins, en raison de sa simplicité, nous la choisirons.

Nous ouvrons un lien pour générer un nouveau token et créer un nouveau token pour l'espace de travail souhaité (n'oubliez pas de le copier, le token est émis une fois).

image

À l'avenir, lors de la mise en œuvre de code qui interagit avec l'API Slack et Google Sheets, nous serons en mesure d'utiliser ce jeton aux fins prévues.

Vous devez maintenant obtenir le jeton pour Google Sheets. Tout d'abord, ouvrez Node.js Quickstart pour Google Sheetset activez l'API Google Sheets. Ensuite, nous copions le code index.js de l'exemple et l'exécutons, passons par le processus d'autorisation et obtenons les informations d'identification dans le fichier, qui sont utiles pour une utilisation avec notre script.

Implémentation de script


Il est maintenant temps de commencer à développer un script pour publier des messages de Google Sheets vers Slack. Le code de script complet peut être trouvé en cliquant sur le lien .

Tout d'abord, nous analyserons la partie du code qui envoie des messages au canal mou.
Cela se produit en appelant l'API Slack REST.

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();
};

Pour l'autorisation dans l'API Google, deux fonctions sont utilisées (autoriser, getNewToken), dont le code est extrait de Node.js Quickstart, nous ne nous attarderons pas sur celles-ci en détail.

Le prochain bloc de code intéressant consiste à obtenir des informations à envoyer à partir des feuilles de calcul Google, à l'aide de la fonction suivante:

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.');
    }
  });
};

Le tableau avec lequel le script interagit a la forme suivante: En

image

conséquence, pour chaque lien après l'envoi d'un message à Slack, le script met «x». Ainsi, pour trouver le message que vous souhaitez envoyer, vous devez sélectionner la première ligne, qui n'a pas encore de «x», prendre le message, l'envoyer et marquer la ligne sélectionnée.

Le script que nous venons de démonter est assez simple et confirme ses performances depuis plusieurs années dans notre équipe. Il suffit de déployer ce script sur le serveur et de profiter de son utilisation.

Pour cela, dans notre entreprise, nous utilisons le VPS Ubuntu habituel sur Digital Ocean (même le plus faible fera l'affaire).

Tout d'abord, vous devez configurer l'environnement pour exécuter le code javascript, pour cela, vous devez installer node.js (guide d'installation )

Après cela, configurez la tâche cron pour appeler le script selon un calendrier:

crontab -e

#### 

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

En utilisant ces paramètres, notre script du dossier / root / sera appelé quotidiennement du lundi au vendredi à 14:24.

La configuration est terminée, mais le lecteur attentif doit avoir remarqué quelques défauts dans le script, par exemple, s'il y a une erreur lors de l'appel du script, nous ne le saurons jamais, car il "tombera tranquillement" et c'est tout. Pour résoudre ce problème, vous pouvez ajouter la gestion des erreurs et la sortie du résultat de l'appel de script dans la même feuille de calcul ou fichier journal Google.

De plus, au lieu d'envoyer un message à une heure fixe, vous pouvez l'envoyer avec un retard aléatoire, de sorte que notre message ressemble plus à un message d'un utilisateur «en direct».

Une autre idée intéressante de l'un de nos collègues était de créer une deuxième table à partir de laquelle les messages seraient envoyés exclusivement le vendredi et seraient plus divertissants.

En général, nous voyons d'innombrables idées de raffinement et nous les mettrons progressivement en œuvre, mais sous la forme existante, ce script est apparu très utilisable.

Un exemple de tableau utilisable est disponible ici .

Merci d'avoir lu et profitez de l'utilisation.

All Articles