Aplicaci贸n Slack simple para publicar contenido de Google Sheets

Nos encanta probar cosas nuevas y, por lo tanto, a menudo compartimos enlaces con informaci贸n interesante del mundo de TI y programaci贸n con nuestros colegas. Somos usuarios de Slack desde hace mucho tiempo y para dichos enlaces tenemos un canal educativo separado donde todos pueden encontrar algo interesante por s铆 mismos. Pero como somos personas comunes, peri贸dicamente en el calor del trabajo, olvidamos que necesitamos compartir estos enlaces, y la actividad en el canal se desvanece, aunque muchos de nosotros tenemos algo que compartir.

Nos enfrentamos a una tarea interesante de desarrollar un "bot" que pudiera tomar autom谩ticamente informaci贸n recopilada previamente y compartir enlaces a ella de manera regular. Est谩bamos buscando una soluci贸n preparada en Internet, y ahora ha aparecido como una integraci贸n de zapier y holgura .

imagen

Sin embargo, no encontramos tal integraci贸n antes y decidimos escribir nuestra propia bicicleta peque帽a. A continuaci贸n describiremos c贸mo lo hicimos exactamente.

Al pensar en el problema, me vino a la mente la siguiente soluci贸n:
c贸digo Javascript que recibe informaci贸n sobre enlaces 煤tiles relevantes de la tabla de Google y la env铆a a Slack. Llamar a un script desde el primer elemento en un horario usando cron. Comencemos en orden.

Obteniendo una ficha para Slack.


Aqu铆 todo es simple y se ha descrito repetidamente en otros art铆culos, por lo que solo dar茅 una breve descripci贸n.

Hay dos opciones: hacer su propia aplicaci贸n Slack o usar tokens heredados, la primera opci贸n es un poco m谩s complicada, pero es recomendada por Slack, la segunda es m谩s simple y bastante adecuada para nuestras necesidades, debido a su simplicidad la elegiremos.

Abrimos un enlace para generar un nuevo token y crear un nuevo token para el espacio de trabajo deseado (no olvide copiarlo, el token se emite una vez).

imagen

En el futuro, cuando implementemos c贸digo que interact煤a con la API de Slack y las Hojas de c谩lculo de Google, podremos usar este token para el prop贸sito previsto.

Ahora necesita obtener el token para las Hojas de c谩lculo de Google. Primero, abra Node.js Quickstart para Hojas de c谩lculo de Googley habilite la API de Hojas de c谩lculo de Google. Luego copiamos el c贸digo index.js del ejemplo y lo ejecutamos, realizamos el proceso de autorizaci贸n y obtenemos las credenciales en el archivo, que son 煤tiles para usar con nuestro script.

Implementaci贸n de script


Ahora es el momento de comenzar a desarrollar un script para publicar mensajes de Hojas de c谩lculo de Google en Slack. El c贸digo completo del script se puede encontrar haciendo clic en el enlace .

En primer lugar, analizaremos la parte del c贸digo que env铆a mensajes al canal de holgura.
Esto sucede llamando a la API REST de 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 la autorizaci贸n en la API de Google, se utilizan dos funciones (autorizar, getNewToken), cuyo c贸digo est谩 tomado del inicio r谩pido de Node.js, no nos detendremos en ellas en detalle.

El siguiente bloque de c贸digo interesante es obtener informaci贸n para enviar desde las hojas de c谩lculo de Google, esto se hace mediante la siguiente funci贸n:

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

La tabla con la que interact煤a el script tiene la siguiente forma: en

imagen

consecuencia, para al lado de cada enlace despu茅s de enviar un mensaje a Slack, el script pone "x". Por lo tanto, para encontrar el mensaje que desea enviar, debe seleccionar la primera l铆nea, que a煤n no tiene una "x", tomar el mensaje, enviarlo y marcar la l铆nea seleccionada.

El gui贸n que acabamos de desmontar es bastante simple y ha confirmado su rendimiento durante varios a帽os en nuestro equipo. Solo tenemos que implementar este script en el servidor y disfrutar de su uso.

Para esto, en nuestra compa帽铆a usamos el Ubuntu VPS habitual en Digital Ocean (incluso el que tenga la menor potencia).

En primer lugar, debe configurar el entorno para ejecutar el c贸digo javascript, para ello debe instalar node.js (gu铆a de instalaci贸n )

Despu茅s de eso, configure la tarea cron para llamar al script en un horario:

crontab -e

#### 

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

Con esta configuraci贸n, nuestro script de la carpeta / root / se llamar谩 diariamente de lunes a viernes a las 14:24.

La configuraci贸n ha terminado, pero el lector atento debe haber notado algunas fallas en el script, por ejemplo, si hay alg煤n error al llamar al script, nunca lo sabremos, porque se "caer谩 en silencio" y eso es todo. Para resolver este problema, puede agregar el manejo de errores y la salida del resultado de la llamada del script a la misma hoja de c谩lculo o archivo de registro de Google.

Adem谩s, en lugar de enviar un mensaje a una hora fija, puede enviarlo con un retraso aleatorio, de modo que nuestro mensaje se parezca m谩s a un mensaje de un usuario "en vivo".

Otra idea interesante de uno de nuestros colegas fue crear una segunda tabla, desde la cual los mensajes se enviar铆an exclusivamente los viernes y ser铆an m谩s entretenidos.

En general, vemos innumerables ideas para el refinamiento y las implementaremos gradualmente, pero en la forma existente este script result贸 bastante 煤til.

Una tabla de ejemplo que se puede utilizar est谩 disponible aqu铆 .

Gracias por leer y disfrutar usando.

All Articles