Aplikasi Slack Sederhana untuk Menerbitkan Konten dari Google Sheets

Kami senang mencoba hal-hal baru, dan karenanya sering membagikan tautan ke informasi menarik dari dunia TI dan pemrograman dengan rekan-rekan kami. Kami adalah pengguna lama slack dan untuk tautan semacam itu kami memiliki saluran pendidikan terpisah di mana setiap orang dapat menemukan sesuatu yang menarik untuk diri mereka sendiri. Tetapi karena kita adalah orang biasa, secara berkala dalam panasnya pekerjaan kita lupa bahwa kita perlu membagikan tautan ini, dan aktivitas di saluran tersebut memudar, meskipun banyak dari kita memiliki sesuatu untuk dibagikan.

Kami menghadapi tugas menarik untuk mengembangkan "bot" yang dapat secara otomatis mengambil informasi yang telah dikumpulkan sebelumnya dan membagikan tautan ke sana secara berkala. Kami mencari solusi yang sudah jadi di Internet, dan sekarang telah muncul sebagai integrasi zapier dan slack .

gambar

Namun, kami tidak menemukan integrasi seperti itu sebelumnya dan memutuskan untuk menulis sepeda kecil kami sendiri. Di bawah ini kami akan menjelaskan bagaimana tepatnya kami melakukannya.

Ketika memikirkan masalah ini, solusi berikut muncul di benak saya:
Kode Javascript yang menerima informasi tentang tautan berguna yang relevan dari tabel google dan mengirimkannya ke Slack. Memanggil skrip dari item pertama di jadwal menggunakan cron. Mari kita mulai.

Mendapatkan token untuk Slack.


Semuanya sederhana di sini dan telah berulang kali dijelaskan dalam artikel lain, jadi saya hanya akan memberikan deskripsi singkat.

Ada dua opsi: buat aplikasi Slack Anda sendiri atau gunakan legacy token, opsi pertama sedikit lebih rumit, tetapi direkomendasikan oleh Slack, yang kedua lebih sederhana dan sangat cocok untuk kebutuhan kita, karena kesederhanaannya kita akan memilihnya.

Kami membuka tautan untuk membuat token baru dan membuat token baru untuk ruang kerja yang diinginkan (jangan lupa menyalinnya, token itu dikeluarkan sekali).

gambar

Di masa mendatang, ketika menerapkan kode yang berinteraksi dengan Slack API dan Google Sheets, kami akan dapat menggunakan token ini untuk tujuan yang dimaksud.

Sekarang Anda perlu mendapatkan token untuk Google Sheets. Pertama, buka Node.js Quickstart untuk Google Sheetsdan aktifkan Google Sheets API. Kemudian kita menyalin kode index.js dari contoh dan menjalankannya, melalui proses otorisasi dan mendapatkan kredensial dalam file, yang berguna untuk digunakan dengan skrip kami.

Implementasi skrip


Sekarang saatnya untuk mulai mengembangkan skrip untuk mempublikasikan pesan dari Google Sheets ke Slack. Kode skrip lengkap dapat ditemukan dengan mengklik tautan .

Pertama-tama, kita akan menganalisis bagian dari kode yang mengirim pesan ke saluran slack.
Ini terjadi dengan memanggil Slack REST API.

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

Untuk otorisasi di Google API, dua fungsi digunakan (otorisasi, getNewToken), kode yang diambil dari Node.js Quickstart, kami tidak akan membahasnya secara rinci.

Blok kode berikutnya yang menarik adalah mendapatkan informasi untuk dikirim dari Google spreadsheet, ini dilakukan dengan menggunakan fungsi berikut:

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

Tabel di mana skrip berinteraksi memiliki bentuk berikut:

gambar

Dengan demikian, untuk di sebelah setiap tautan setelah mengirim pesan ke Slack, skrip menempatkan "x". Jadi, untuk menemukan pesan yang ingin Anda kirim, Anda harus memilih baris pertama, yang belum memiliki "x", ambil pesan, kirim dan tandai baris yang dipilih.

Skrip yang baru saja kami bongkar cukup sederhana dan telah mengkonfirmasi kinerjanya selama beberapa tahun di tim kami. Kami hanya perlu menyebarkan skrip ini ke server dan menikmati menggunakannya.

Untuk ini, di perusahaan kami, kami menggunakan VPS Ubuntu yang biasa di Digital Ocean (bahkan yang berdaya rendah sekalipun).

Pertama-tama, Anda perlu mengkonfigurasi lingkungan untuk mengeksekusi kode javascript, untuk ini Anda perlu menginstal node.js (panduan instalasi )

Setelah itu, konfigurasikan tugas cron untuk memanggil skrip sesuai jadwal:

crontab -e

#### 

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

Dengan menggunakan pengaturan ini, skrip kami dari folder / root / akan dipanggil setiap hari dari Senin hingga Jumat pukul 14:24.

Penyiapan sudah selesai, tetapi pembaca yang penuh perhatian harus memperhatikan beberapa kekurangan dalam skrip, misalnya, jika ada kesalahan saat memanggil skrip, kita tidak akan pernah mengetahuinya, karena itu akan "diam-diam jatuh" dan itu saja. Untuk mengatasi masalah ini, Anda dapat menambahkan penanganan kesalahan dan output dari hasil panggilan skrip ke Google spreadsheet atau file log yang sama.

Selain itu, alih-alih mengirim pesan pada waktu yang tetap, Anda dapat mengirimnya dengan penundaan acak, sehingga pesan kami lebih seperti pesan dari pengguna "langsung".

Gagasan lain yang menarik dari salah satu kolega kami adalah membuat tabel kedua dari mana pesan akan dikirim secara eksklusif pada hari Jumat dan akan lebih menghibur.

Secara umum, kami melihat banyak sekali ide untuk penyempurnaan dan kami akan secara bertahap mengimplementasikannya, tetapi dalam bentuk yang ada skrip ini keluar cukup bermanfaat.

Contoh tabel yang dapat digunakan tersedia di sini .

Terima kasih telah membaca dan menikmati menggunakan.

All Articles