Membangun bot Slack dengan Node.js di Cloud Run

1. Ringkasan

5f529fb87abc11c9.pngS

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

Yang akan Anda pelajari

  • Cara membuat integrasi kustom bot di Slack
  • Cara mengamankan rahasia 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 Anda menilai pengalaman Anda dengan 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 secara jarak jauh dari laptop Anda, dalam tutorial ini Anda akan menggunakan Cloud Shell, yakni lingkungan command line yang berjalan di Cloud.

Mengaktifkan Cloud Shell

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

84688aa223b1c3a2.pngS

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

d95252b003979716.png

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

7833d5e1c5d18f54.pngS

Mesin virtual ini dimuat dengan semua alat pengembangan yang dibutuhkan. Layanan 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 sudah 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, Cloud Build, Cloud Run, dan Secret Manager API:

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

Perintah ini akan menampilkan pesan berhasil 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 memilikinya untuk digunakan dalam tutorial ini.

aa1f0fda82263bf8.png

5. Membuat pengguna bot Slack

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

Membuat aplikasi Slack baru

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

Membuat pengguna bot

  • Buka Beranda Aplikasi di panel sebelah kiri pada bagian Fitur

414213b184fcc992.pngS

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

74a6fa87c64c2b23.pngS

  • Scroll ke atas, lalu klik tombol Instal Aplikasi ke Workspace Anda.
  • Tindakan ini akan menginstal aplikasi ke tim Anda, menambahkan pengguna bot yang baru saja dibuat, 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.pngS

Mendapatkan rahasia penandatanganan klien

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

74cfd6616fa71dc4.png

  • Simpan rahasia 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.

6f5a18069471101.pngS

  • Simpan token bot di variabel lingkungan:
BOT_TOKEN=PASTE_THE_BOT_TOKEN

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

6. Amankan rahasiamu

Kami ingin memastikan token bot dan rahasia penandatanganan klien Anda disimpan dengan aman. Melakukan hard-coding terhadapnya dalam kode sumber dapat menyebabkannya secara tidak sengaja mengekspos rahasia ini ke kontrol versi atau menyematkannya dalam gambar Docker.

Secret Manager menyediakan metode yang aman dan mudah untuk menyimpan kunci API, sandi, sertifikat, dan data sensitif lainnya. Secret Manager menyediakan tempat terpusat dan satu sumber kebenaran untuk mengelola, mengakses, dan mengaudit secret di seluruh Google Cloud.

Membuat secret Anda

Simpan rahasia penandatanganan klien dan token bot 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 secret Anda 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 menjalankan bot.

Pertama, kita impor 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 mengizinkan Anda mengakses rahasia yang disimpan pada 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 akan 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 dari fungsi mengonfigurasi SlackAdapter dengan secret, lalu menentukan endpoint untuk menerima pesan. Kemudian, setelah pengontrol aktif, bot akan membalas setiap pesan yang berisi kata "halo", "halo", atau "halo" dengan "Meong. Penyesuaian."

Lihat bagian-bagian tertentu ini dalam 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, Cloud Build memanggil Buildpacks untuk menganalisis sumber dan otomatis membuat image siap produksi.
  • Buildpack mendeteksi manifes package.json dan mem-build 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 umum akan otomatis diterapkan.

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. API ini memungkinkan Anda menggunakan bahasa atau runtime apa pun yang Anda sukai dan menyediakan permintaan serentak, yang berarti aplikasi Anda akan mampu menangani volume yang jauh lebih tinggi.

Mengambil project ID

Tentukan variabel lingkungan PROJECT_ID:

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

Menentukan region Cloud Run

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

REGION="us-central1"

Memperbarui izin

Agar dapat mengakses secret dari Secret Manager, akun layanan Cloud Run perlu 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")

Pastikan 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 otomatis menskalakan infrastruktur dasar untuk menangani permintaan yang masuk.

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 yang disebut kittenbot.
  • Opsi --source menggunakan folder saat ini untuk membangun aplikasi dengan Cloud Build. Cloud Build otomatis mendeteksi keberadaan file package.json.
  • Anda juga dapat menentukan region default dengan perintah ini: gcloud config set run/region $REGION
  • Anda juga dapat menjadikan 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 untuk publik.

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 beberapa saat sampai 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 tersebut 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 untuk digunakan pada langkah berikutnya.

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

Anda dapat melihat kapan revisi terakhir dibuat, berapa banyak 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 channel Slack!

9. Aktifkan peristiwa Slack

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

kittenbot.js

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

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

Mengaktifkan Peristiwa

Di halaman pengelolaan aplikasi, buka bagian Langganan Acara 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, Google mungkin mencoba melakukan verifikasi sebelum Anda selesai. Jika gagal, klik "Coba lagi".

Berlangganan

Berlangganan ke semua peristiwa bot pesan.

1e8f200390908a9b.pngS

Klik Simpan Perubahan di bagian bawah laman. Anda akan diminta untuk Menginstal Ulang Aplikasi Anda. Ikuti petunjuknya, lalu 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 kemudian akan merespons dengan sapaan sederhana.

10. Uji bot Anda

Kirim pesan langsung ke Kittenbot:

1f442dd7fd7b5773.pngS

Tambahkan kittenbot ke channel dengan memasukkan "@kittenbot" lalu mengklik "Undang Mereka".:

9788d2167ce47167.pngS

Sekarang semua orang di channel Anda bisa berinteraksi dengan Kittenbot!

9c0d1d7907a51767.pngS

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

1ff0c2347bf464e8.pngS

Anak kucing merespons setiap pesan dengan "Meong. Penyesuaian."

11. Bonus - Update bot Anda

Bagian opsional ini memerlukan waktu beberapa menit. Jangan ragu untuk langsung membuka fitur Pembersihan.

Rangkaian Pesan Percakapan

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

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

cd ../extra-credit/

Buka folder saat ini di Cloud Shell Editor:

cloudshell workspace .

Botkit menawarkan kemampuan untuk menangani percakapan. Dengan demikian, bot dapat meminta lebih banyak informasi dan bereaksi terhadap pesan yang tidak hanya dibalas satu kata.

Menentukan dialog

Pertama, lihat bagaimana 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 merespons "tidak" ke pertanyaan anak kucing, pesan itu akan melompat ke pesan berlabel "no_kittens", yang merupakan akhir dari rangkaian pesan percakapan.

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

Setelah dialog tersedia untuk digunakan pengontrol, lihat cara percakapan dimulai saat chatbot mendengar "kitten", "kittens", "cats", atau "cats":

  // ...

  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 untuk memanggil aplikasi Anda dengan memasukkan perintah ke dalam kotak pesan.

Mengaktifkan Perintah Garis miring Slack

  • Buka bagian Perintah Garis miring pada Fitur di Halaman Pengelolaan Aplikasi.
  • 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.

Menambahkan Perintah Garis miring ke Pengontrol

Lihat cara pengendali untuk perintah garis miring ditambahkan 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 {i> /cats<i} plus angka untuk mengirim perintah garis miring. Misalnya: /cats 8

c67f6fe1ffcafec8.png

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

9c1b256987fd379a.pngS

12. Pembersihan

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

Menghapus project

Anda dapat menghapus seluruh project, langsung dari Cloud Shell:

gcloud projects delete $PROJECT_ID

Atau, jika Anda memilih untuk menghapus resource yang berbeda satu per satu, lanjutkan ke bagian berikutnya.

Menghapus 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

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].

Menghapus rahasia 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].

Menghapus bucket penyimpanan

Pertama, cantumkan 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.pngS

Sekarang Anda tahu cara menjalankan bot Slack di Cloud Run.

Kami baru saja memulai sebagian besar teknologi ini dan sebaiknya Anda mempelajari lebih lanjut dengan 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 di Cloud Run

Langkah Berikutnya

Pelajari Lebih Lanjut