Membangun bot Slack dengan Node.js di Cloud Run

1. Ringkasan

5f529fb87abc11c9.png

Dalam codelab ini, Anda akan mempelajari cara membuat bot Slack menggunakan toolkit Botkit dan menjalankannya di Google Cloud. Anda dapat berinteraksi dengan bot di saluran Slack aktif.

Yang akan Anda pelajari

  • Cara membuat integrasi kustom bot di Slack
  • Cara mengamankan secret Slack Anda dengan Secret Manager
  • Cara men-deploy bot Slack di Cloud Run, platform komputasi terkelola sepenuhnya yang otomatis menskalakan container stateless Anda

Yang Anda butuhkan

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman menggunakan Google Cloud?

Pemula Menengah Mahir

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

98e4187c97cf2e0e.png

37d264871000675d.png

c20a9642aaa18d11.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam tutorial ini, Anda akan menggunakan Cloud Shell, lingkungan command line yang berjalan di Cloud.

Mengaktifkan Cloud Shell

  1. Dari Cloud Console, klik Aktifkan Cloud Shell d1264ca30785e435.png.

84688aa223b1c3a2.png

Jika ini adalah pertama kalinya Anda memulai Cloud Shell, Anda akan melihat layar perantara yang menjelaskan apa itu Cloud Shell. Jika Anda melihat layar perantara, klik Continue.

d95252b003979716.png

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

7833d5e1c5d18f54.png

Virtual machine ini dilengkapi dengan semua alat pengembangan yang diperlukan. VM ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan dengan browser.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda telah diautentikasi dan project telah ditetapkan ke project ID Anda.

  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list

Output perintah

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Mengaktifkan API

Dari Cloud Shell, aktifkan Artifact Registry API, Cloud Build API, Cloud Run API, dan Secret Manager API:

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  run.googleapis.com \
  secretmanager.googleapis.com

Perintah ini akan menampilkan pesan sukses yang mirip dengan yang berikut ini:

Operation "operations/..." finished successfully.

Sekarang, Anda siap menyiapkan dan men-deploy aplikasi...

4. Membuat ruang kerja Slack

Anda memerlukan ruang kerja Slack tempat Anda diizinkan untuk membuat integrasi kustom. Anda dapat membuat ruang kerja secara gratis jika belum memiliki ruang kerja yang ingin digunakan untuk tutorial ini.

aa1f0fda82263bf8.png

5. Membuat pengguna bot Slack

Pengguna bot dapat memproses pesan di Slack, memposting pesan, dan mengupload file. Dalam codelab ini, Anda akan membuat bot untuk memposting pesan ucapan sederhana.

Buat aplikasi Slack baru

  • Buka halaman pengelolaan aplikasi Slack.
  • Klik tombol Buat aplikasi baru di pojok kanan atas.
  • Beri nama aplikasi, misalnya "Kittenbot".
  • Pilih tim Slack tempat Anda ingin menginstalnya.

Membuat pengguna bot

  • Buka Beranda Aplikasi di panel sisi kiri di bagian Fitur

414213b184fcc992.png

  • Tetapkan cakupan ke token bot Anda dengan mengklik Tinjau Cakupan yang Akan Ditambahkan
  • Scroll ke bawah ke Cakupan Token Bot, lalu klik Tambahkan Cakupan OAuth. Pilih chat:write untuk "Kirim pesan sebagai Kittenbot"

74a6fa87c64c2b23.png

  • Scroll ke atas, lalu klik tombol Install App to your Workspace.
  • Tindakan ini akan menginstal aplikasi ke tim Anda, menambahkan pengguna bot yang baru saja Anda buat, dan membuat token bot.
  • Saat diminta, klik "Izinkan" untuk mengizinkan bot melakukan chat di ruang kerja Anda.

Mengaktifkan pesan dan perintah

  • Scroll ke bawah ke Tampilkan Tab dan pastikan kedua opsi diaktifkan:

5ca52f7abbdc15c.png

Mendapatkan rahasia penandatanganan klien

  • Buka Informasi Dasar di bagian Setelan.
  • Scroll ke bawah ke Signing Secret, klik Show, lalu salin secret ke papan klip Anda:

74cfd6616fa71dc4.png

  • Simpan secret dalam variabel lingkungan:
CLIENT_SIGNING_SECRET=PASTE_THE_SIGNING_SECRET

Mendapatkan token bot

  • Buka OAuth & Izin di bagian Fitur.
  • Klik tombol Salin untuk menyalin teks Token Akses OAuth Pengguna Bot ke papan klip Anda.

6f5a18069471101.png

  • Simpan token bot dalam variabel lingkungan:
BOT_TOKEN=PASTE_THE_BOT_TOKEN

Jangan khawatir. Anda dapat kembali ke halaman konfigurasi ini dari halaman pengelolaan aplikasi jika perlu mendapatkan token ini lagi.

6. Mengamankan secret Anda

Kami ingin memastikan bahwa token bot dan rahasia penandatanganan klien Anda disimpan dengan aman. Meng-hardcode-nya dalam kode sumber kemungkinan akan membuat rahasia ini terekspos secara tidak sengaja dengan memublikasikannya ke kontrol versi atau menyematkannya dalam image Docker.

Secret Manager menyediakan metode yang aman dan praktis untuk menyimpan kunci API, sandi, sertifikat, dan data sensitif lainnya. Secret Manager menyediakan tempat terpusat dan single source of truth (SSOT) untuk mengelola, mengakses, dan mengaudit secret di seluruh Google Cloud.

Membuat secret Anda

Simpan rahasia penandatanganan klien dan token bot Anda dengan perintah berikut:

  • Rahasia penandatanganan klien
echo -n $CLIENT_SIGNING_SECRET | gcloud secrets create client-signing-secret \
  --replication-policy automatic \
  --data-file -
  • Token bot
echo -n $BOT_TOKEN | gcloud secrets create bot-token \
  --replication-policy automatic \
  --data-file -

Mengakses Secret Anda

Mari kita konfirmasi bahwa secret Anda telah dibuat dengan benar dan izin Anda berfungsi. Akses secret Anda dengan perintah berikut:

echo $(gcloud secrets versions access 1 --secret client-signing-secret)
echo $(gcloud secrets versions access 1 --secret bot-token)

Anda juga dapat melihat dan mengelola rahasia di Konsol Google Cloud.

7. Mendapatkan kode contoh

Di Cloud Shell pada command line, jalankan perintah berikut untuk meng-clone repositori GitHub:

git clone https://github.com/googlecodelabs/cloud-slack-bot.git

Ubah direktori menjadi cloud-slack-bot/start.

cd cloud-slack-bot/start

Memahami Kode

Buka file kittenbot.js dengan editor command line pilihan Anda (nano, vim, emacs...) atau dengan perintah berikut untuk langsung membuka folder saat ini di Cloud Shell Editor:

cloudshell workspace .

Kode kittenbot memiliki dua fungsi utama. Salah satunya adalah untuk mengambil rahasia, dan yang lainnya adalah untuk menjalankan bot.

Pertama, kita mengimpor dependensi:

kittenbot.js

const { Botkit } = require('botkit');
const {
  SlackAdapter,
  SlackEventMiddleware,
} = require('botbuilder-adapter-slack');
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');

SlackAdapter dan SlackEventMiddleware adalah paket yang memperluas Botkit dan memungkinkan bot menerjemahkan pesan ke dan dari Slack API dengan mudah. Klien Secret Manager akan memungkinkan Anda mengakses secret yang Anda simpan di langkah sebelumnya.

Selanjutnya, kita memiliki fungsi untuk mengambil secret:

/**
 * Returns the secret string from Google Cloud Secret Manager
 * @param {string} name The name of the secret.
 * @return {Promise<string>} The string value of the secret.
 */
async function accessSecretVersion(name) {
  const client = new SecretManagerServiceClient();
  const projectId = process.env.PROJECT_ID;
  const [version] = await client.accessSecretVersion({
    name: `projects/${projectId}/secrets/${name}/versions/1`,
  });

  // Extract the payload as a string.
  const payload = version.payload.data.toString('utf8');

  return payload;
}

Fungsi ini menampilkan nilai string rahasia yang diperlukan untuk mengautentikasi bot.

Fungsi berikutnya menginisialisasi bot:

/**
 * Function to initialize kittenbot.
 */
async function kittenbotInit() {
  const adapter = new SlackAdapter({
    clientSigningSecret: await accessSecretVersion('client-signing-secret'),
    botToken: await accessSecretVersion('bot-token'),
  });

  adapter.use(new SlackEventMiddleware());

  const controller = new Botkit({
    webhook_uri: '/api/messages',
    adapter: adapter,
  });

  controller.ready(() => {
    controller.hears(
      ['hello', 'hi', 'hey'],
      ['message', 'direct_message'],
      async (bot, message) => {
        await bot.reply(message, 'Meow. :smile_cat:');
      }
    );
  });
}

Bagian pertama fungsi mengonfigurasi SlackAdapter dengan rahasia, lalu menentukan endpoint untuk menerima pesan. Kemudian, setelah pengontrol aktif, bot akan membalas setiap pesan yang berisi "halo", "hai", atau "hei" dengan "Meong. 😺".

Lihat bagian tertentu ini di manifes aplikasi:

package.json

{
  // ...
  "scripts": {
    "start": "node kittenbot.js",
    // ...
  },
  "engines": {
    "node": "16"
  },
  // ...
}

Anda dapat men-deploy aplikasi Node.js langsung dari sumber dengan Cloud Run. Hal berikut akan terjadi di balik layar:

  • Cloud Run memanggil Cloud Build untuk membangun image container (lihat Men-deploy dari kode sumber).
  • Jika Dockerfile ada di direktori kode sumber, Cloud Build akan menggunakannya untuk membangun image container.
  • Karena tidak ada, Cloud Build memanggil Buildpack untuk menganalisis sumber dan membuat image yang siap produksi secara otomatis.
  • Buildpack mendeteksi manifes package.json dan membangun image Node.js.
  • Kolom scripts.start menentukan cara aplikasi dimulai.
  • Kolom engines.node menentukan versi Node.js dari image dasar container.
  • Pada waktu deployment, perbaikan keamanan yang diketahui akan diterapkan secara otomatis.

Anda siap men-deploy aplikasi.

8. Men-deploy aplikasi

Slack Events API menggunakan webhook untuk mengirim pesan keluar tentang peristiwa. Saat mengonfigurasi Aplikasi Slack, Anda harus memberikan URL yang dapat diakses secara publik agar Slack API dapat melakukan ping.

Cloud Run adalah solusi yang baik untuk menghosting target webhook. Hal ini memungkinkan Anda menggunakan bahasa atau runtime apa pun yang Anda sukai dan menyediakan konkurensi, yang berarti aplikasi Anda akan dapat menangani volume yang jauh lebih tinggi.

Mendapatkan project ID Anda

Tentukan variabel lingkungan PROJECT_ID:

PROJECT_ID=$(gcloud config get-value core/project)

Tentukan region Cloud Run Anda

Cloud Run bersifat regional, berarti infrastruktur yang menjalankan layanan Cloud Run Anda terletak di region tertentu dan dikelola oleh Google agar tersedia secara redundan di semua zona dalam region tersebut. Tentukan region yang akan Anda gunakan untuk deployment, misalnya:

REGION="us-central1"

Perbarui izin

Agar dapat mengakses secret dari Secret Manager, akun layanan Cloud Run harus diberi peran roles/secretmanager.secretAccessor.

Pertama, simpan akun layanan default ke dalam variabel lingkungan:

SERVICE_ACCOUNT=$(gcloud iam service-accounts list \
  --format "value(email)" \
  --filter "displayName:Compute Engine default service account")

Konfirmasi bahwa Anda telah menyimpan alamat email:

echo $SERVICE_ACCOUNT

Akun layanan memiliki format berikut: PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Setelah Anda memiliki alamat email, aktifkan peran untuk akun layanan:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT \
  --role roles/secretmanager.secretAccessor

Men-deploy aplikasi

Layanan Cloud Run mengekspos endpoint unik dan secara otomatis menskalakan infrastruktur yang mendasarinya untuk menangani permintaan masuk.

Men-deploy aplikasi ke Cloud Run:

gcloud run deploy kittenbot \
  --source . \
  --platform managed \
  --region $REGION \
  --set-env-vars PROJECT_ID=$PROJECT_ID \
  --allow-unauthenticated
  • Tindakan ini akan membuat layanan bernama kittenbot.
  • Opsi --source menggunakan folder saat ini untuk membangun aplikasi dengan Cloud Build. Cloud Build otomatis mendeteksi keberadaan file package.json.
  • Atau, Anda dapat menentukan region default dengan perintah ini: gcloud config set run/region $REGION
  • Anda juga dapat membuat Cloud Run dikelola secara default dengan perintah ini: gcloud config set run/platform managed
  • Opsi --set-env-vars menetapkan variabel lingkungan layanan.
  • Opsi --allow-unauthenticated membuat layanan tersedia secara publik.

Saat pertama kali, Anda akan mendapatkan perintah untuk membuat repositori Artifact Registry. Ketuk Enter untuk memvalidasi:

Deploying from source requires an Artifact Registry Docker repository to store
built containers. A repository named [cloud-run-source-deploy] in region [REGION]
will be created.

Do you want to continue (Y/n)?

Tindakan ini akan meluncurkan upload kode sumber Anda ke repositori Artifact Registry dan build image container Anda:

Building using Dockerfile and deploying container ...
* Building and deploying new service... Building Container.
  OK Creating Container Repository...
  OK Uploading sources...
  * Building Container... Logs are available at ...

Kemudian, tunggu sebentar hingga build dan deployment selesai. Jika berhasil, command line akan menampilkan URL layanan:

...
OK Building and deploying new service... Done.
  OK Creating Container Repository...
  OK Uploading sources...
  OK Building Container... Logs are available at ...
  OK Creating Revision... Creating Service.
  OK Routing traffic...
  OK Setting IAM Policy...
Done.
Service [SERVICE]... has been deployed and is serving 100 percent of traffic.
Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app

Anda bisa mendapatkan URL layanan dengan perintah ini:

SERVICE_URL=$( \
  gcloud run services describe kittenbot \
  --platform managed \
  --region $REGION \
  --format "value(status.url)" \
)
echo $SERVICE_URL

URL memiliki format berikut:

https://kittenbot-PROJECTHASH-REGIONID.a.run.app

URL ini akan menjadi dasar yang digunakan untuk mengaktifkan Slack Events API. Salin ke papan klip Anda untuk digunakan di langkah berikutnya.

Layanan Anda kini aktif dan tersedia secara publik. Buka konsol Cloud Run untuk mengetahui informasi selengkapnya. fee46ea7c8483d56.png

Anda dapat melihat kapan revisi terakhir dibuat, jumlah traffic yang diterima, dan melihat log. Jika kita mengklik log, kita dapat melihat bahwa pengontrol Botkit aktif dan siap menerima pesan.

Sekarang, mari kita mulai mengirim pesan dari saluran Slack.

9. Mengaktifkan peristiwa Slack

Seperti yang kita lihat sebelumnya, kode kittenbot kita menentukan endpoint relatif untuk target webhook kita.

kittenbot.js

 const controller = new Botkit({
    webhook_uri: '/api/messages',
    adapter: adapter,
  });

Artinya, URL lengkap kita akan menjadi bagian dasar dari layanan Cloud Run, ditambah /api/messages.

Mengaktifkan Acara

Di halaman pengelolaan aplikasi, buka bagian Langganan Peristiwa di sidebar, lalu aktifkan Aktifkan Peristiwa. Masukkan URL layanan Anda:

PASTE_THE_SERVICE_URL/api/messages

5179a99339839999.png

Bergantung pada seberapa cepat Anda mengetik URL, URL tersebut mungkin mencoba memverifikasi sebelum Anda selesai. Jika gagal, klik "Coba lagi".

Berlangganan

Berlangganan semua peristiwa bot pesan.

1e8f200390908a9b.png

Klik Simpan Perubahan di bagian bawah laman. Anda akan diminta untuk Menginstal Ulang Aplikasi Anda. Ikuti perintahnya dan klik Izinkan.

Pada tahap ini, bot Anda sudah terintegrasi sepenuhnya. Pesan di ruang kerja akan memicu Slack untuk mengirim pesan ke layanan Cloud Run Anda, yang pada gilirannya akan merespons dengan ucapan sederhana.

10. Menguji bot Anda

Mengirim pesan langsung ke Kittenbot:

1f442dd7fd7b5773.png

Tambahkan kittenbot ke channel Anda dengan memasukkan "@kittenbot", lalu klik "Undang Dia":

9788d2167ce47167.png

Sekarang semua orang di channel Anda dapat berinteraksi dengan Kittenbot.

9c0d1d7907a51767.png

Setiap pesan di Slack memicu peristiwa dan mengirim pesan HTTP POST ke layanan Cloud Run kami. Jika melihat log layanan Cloud Run, Anda akan melihat bahwa setiap pesan sesuai dengan entri POST di log.

1ff0c2347bf464e8.png

Kittenbot merespons setiap pesan dengan "Meong". 😺".

11. Bonus - Memperbarui bot Anda

Bagian opsional ini memerlukan waktu beberapa menit. Anda dapat langsung membuka Pembersihan.

Rangkaian Percakapan

Kita ingin bot melakukan lebih dari sekadar mengucapkan "meong". Namun, bagaimana cara men-deploy versi baru sesuatu yang berjalan di Cloud Run?

Ubah direktori menjadi cloud-slack-bot/extra-credit:

cd ../extra-credit/

Membuka folder saat ini di Cloud Shell Editor:

cloudshell workspace .

Botkit menawarkan kemampuan untuk menangani percakapan. Dengan fitur ini, bot dapat meminta informasi lebih lanjut dan bereaksi terhadap pesan selain balasan satu kata.

Tentukan dialog

Pertama, lihat cara fungsi percakapan ditentukan di akhir file:

// ...
const maxCats = 20;
const catEmojis = [
  ':smile_cat:',
  ':smiley_cat:',
  ':joy_cat:',
  ':heart_eyes_cat:',
  ':smirk_cat:',
  ':kissing_cat:',
  ':scream_cat:',
  ':crying_cat_face:',
  ':pouting_cat:',
  ':cat:',
  ':cat2:',
  ':leopard:',
  ':lion_face:',
  ':tiger:',
  ':tiger2:',
];

/**
 * Function to concatenate cat emojis
 * @param {number} numCats Number of cat emojis.
 * @return {string} The string message of cat emojis.
 */
function makeCatMessage(numCats) {
  let catMessage = '';
  for (let i = 0; i < numCats; i++) {
    // Append a random cat from the list
    catMessage += catEmojis[Math.floor(Math.random() * catEmojis.length)];
  }
  return catMessage;
}

/**
 * Function to create the kitten conversation
 * @param {Object} controller The botkit controller.
 * @return {Object} The BotkitConversation object.
 */
function createKittenDialog(controller) {
  const convo = new BotkitConversation('kitten-delivery', controller);

  convo.ask('Does someone need a kitten delivery?', [
    {
      pattern: 'yes',
      handler: async (response, convo, bot) => {
        await convo.gotoThread('yes_kittens');
      },
    },
    {
      pattern: 'no',
      handler: async (response, convo, bot) => {
        await convo.gotoThread('no_kittens');
      },
    },
    {
      default: true,
      handler: async (response, convo, bot) => {
        await convo.gotoThread('default');
      },
    },
  ]);

  convo.addQuestion(
    'How many would you like?',
    [
      {
        pattern: '^[0-9]+?',
        handler: async (response, convo, bot, message) => {
          const numCats = parseInt(response);
          if (numCats > maxCats) {
            await convo.gotoThread('too_many');
          } else {
            convo.setVar('full_cat_message', makeCatMessage(numCats));
            await convo.gotoThread('cat_message');
          }
        },
      },
      {
        default: true,
        handler: async (response, convo, bot, message) => {
          if (response) {
            await convo.gotoThread('ask_again');
          } else {
            // The response '0' is interpreted as null
            await convo.gotoThread('zero_kittens');
          }
        },
      },
    ],
    'num_kittens',
    'yes_kittens'
  );

  // If numCats is too large, jump to start of the yes_kittens thread
  convo.addMessage(
    'Sorry, {{vars.num_kittens}} is too many cats. Pick a smaller number.',
    'too_many'
  );
  convo.addAction('yes_kittens', 'too_many');

  // If response is not a number, jump to start of the yes_kittens thread
  convo.addMessage("Sorry I didn't understand that", 'ask_again');
  convo.addAction('yes_kittens', 'ask_again');

  // If numCats is 0, send a dog instead
  convo.addMessage(
    {
      text:
        'Sorry to hear you want zero kittens. ' +
        'Here is a dog, instead. :dog:',
      attachments: [
        {
          fallback: 'Chihuahua Bubbles - https://youtu.be/s84dBopsIe4',
          text: '<https://youtu.be/s84dBopsIe4|' + 'Chihuahua Bubbles>!',
        },
      ],
    },
    'zero_kittens'
  );

  // Send cat message
  convo.addMessage('{{vars.full_cat_message}}', 'cat_message');

  convo.addMessage('Perhaps later.', 'no_kittens');

  return convo;
}

Percakapan baru ini mengarahkan rangkaian pesan berdasarkan respons. Misalnya, jika pengguna menjawab "tidak" untuk pertanyaan tentang anak kucing, percakapan akan beralih ke pesan berlabel "no_kittens", yang merupakan akhir dari rangkaian percakapan tersebut.

Menambahkan dialog ke pengontrol

Setelah percakapan ditentukan, lihat cara menambahkannya ke pengontrol:

async function kittenbotInit() {
  // ...
  const controller = new Botkit({
    webhook_uri: '/api/messages',
    adapter: adapter,
  });

  // Add Kitten Dialog
  const convo = createKittenDialog(controller);
  controller.addDialog(convo);

  // Controller is ready
  controller.ready(() => {
    // ...
  });
}

Memicu dialog

Sekarang dialog tersedia untuk digunakan pengontrol, lihat cara memulai percakapan saat chatbot mendengar "anak kucing", "anak-anak kucing", "kucing", atau "kucing-kucing":

  // ...

  controller.ready(() => {
    controller.hears(
      ['hello', 'hi', 'hey'],
      ['message', 'direct_message'],
      async (bot, message) => {
        await bot.reply(message, 'Meow. :smile_cat:');
        return;
      }
    );

    // START: listen for cat emoji delivery
    controller.hears(
      ['cat', 'cats', 'kitten', 'kittens'],
      ['message', 'direct_message'],
      async (bot, message) => {
        // Don't respond to self
        if (message.bot_id !== message.user) {
          await bot.startConversationInChannel(message.channel, message.user);
          await bot.beginDialog('kitten-delivery');
          return;
        }
      }
    );
    // END: listen for cat emoji delivery

    // ...
  });

  // ...

Mengupdate aplikasi

Deploy ulang aplikasi ke Cloud Run:

gcloud run deploy kittenbot \
  --source . \
  --platform managed \
  --region $REGION \
  --set-env-vars PROJECT_ID=$PROJECT_ID \
  --allow-unauthenticated

Coba

eca12b3463850d52.png

Selamat! Anda baru saja mengupdate bot Slack yang berjalan di Cloud Run ke versi baru.

Perintah Garis Miring

Bagaimana jika Anda tidak ingin melakukan percakapan dengan pengguna? Bagaimana jika Anda lebih suka memicu tindakan dengan satu perintah sederhana?

Slack menawarkan fungsi ini melalui perintah garis miring, yang memungkinkan pengguna memanggil aplikasi Anda dengan memasukkan perintah ke dalam kotak pesan.

Mengaktifkan Perintah Garis Miring Slack

  • Buka bagian Perintah Miring di bagian Fitur di Halaman Pengelolaan Aplikasi Anda.
  • Klik Create New Command.
  • Konfigurasi perintah /cats dengan URL layanan kittenbot Anda. Jangan lupa untuk menggunakan endpoint yang sama dengan yang Anda gunakan untuk mengaktifkan Events API. Ini adalah URL Anda, ditambah '/api/messages'.

e34d393c14308f28.png

  • Ikuti perintah untuk mengupdate aplikasi dan izin Anda.

Menambahkan Perintah Slash ke Pengontrol Anda

Lihat cara menambahkan handler untuk perintah garis miring di dalam fungsi controller.ready:

  // ...

  // Controller is ready
  controller.ready(() => {
    // ...

    // START: slash commands
    controller.on('slash_command', async (bot, message) => {
      const numCats = parseInt(message.text);
      const response = makeCatMessage(numCats);
      bot.httpBody({ text: response });
    });
    // END: slash commands
  });

  // ...

Coba

Masukkan /cats ditambah angka untuk mengirim perintah garis miring. Contoh: /cats 8

c67f6fe1ffcafec8.png

Bot akan merespons dengan 8 kucing, yang hanya dapat dilihat oleh Anda:

9c1b256987fd379a.png

12. Pembersihan

Selamat, Anda kini memiliki bot Slack yang berjalan di Cloud Run. Saatnya membersihkan resource yang digunakan (untuk menghemat biaya dan menjadi pengguna cloud yang baik).

Menghapus project

Anda dapat menghapus seluruh project, langsung dari Cloud Shell:

gcloud projects delete $PROJECT_ID

Atau, jika Anda lebih suka menghapus berbagai resource satu per satu, lanjutkan ke bagian berikutnya.

Hapus deployment

gcloud run services delete kittenbot --region $REGION

Output perintah

Service [kittenbot] will be deleted.
Do you want to continue (Y/n)?  y
Deleted service [kittenbot].

Menghapus rahasia penandatanganan klien Anda

gcloud secrets delete client-signing-secret

Output perintah

You are about to destroy the secret [client-signing-secret] and its
[1] version(s). This action cannot be reversed.
Do you want to continue (Y/n)?  y
Deleted secret [client-signing-secret].

Hapus secret token bot Anda

gcloud secrets delete bot-token

Output perintah

You are about to destroy the secret [bot-token] and its [1]
version(s). This action cannot be reversed.
Do you want to continue (Y/n)?  y
Deleted secret [bot-token].

Hapus bucket penyimpanan

Pertama, buat daftar bucket Google Cloud Storage untuk mendapatkan jalur bucket:

gsutil ls

Output perintah

gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/
gs://<PROJECT_ID>_cloudbuild/

Sekarang, hapus bucket artefak:

gsutil rm -r gs://[REGION.]artifacts.${PROJECT_ID}.appspot.com/

Output perintah

Removing gs://[REGION.]artifacts.<PROJECT_ID>.appspot.com/...

Terakhir, hapus bucket cloudbuild:

gsutil rm -r gs://${PROJECT_ID}_cloudbuild/

Output perintah

Removing gs://<PROJECT_ID>_cloudbuild/...

13. Selamat!

528302981979de90.png

Sekarang Anda telah mengetahui cara menjalankan bot Slack di Cloud Run.

Kita baru saja mempelajari bagian awal teknologi ini. Sebaiknya Anda mempelajari lebih jauh menggunakan deployment Cloud Run Anda sendiri.

Yang telah kita bahas

  • Membuat integrasi kustom bot di Slack
  • Mengamankan secret Slack Anda dengan Secret Manager
  • Men-deploy bot Slack Anda di Cloud Run

Langkah Berikutnya

Pelajari Lebih Lanjut