Mengembangkan aplikasi Chat dengan Apps Script

Apps Script adalah salah satu cara tercepat untuk membuat aplikasi Chat untuk Google Chat.

  • Anda dapat menyiapkan dan menjalankan aplikasi hanya dalam beberapa menit langsung di browser.
  • Anda tidak perlu khawatir tentang menjalankan dan mengelola server, biaya pemeliharaan atau operasional yang berkelanjutan, atau bahkan mendownload dan menyiapkan lingkungan pengembangan.
  • Sangat mudah untuk memanggil Google API—terutama Google Workspace API—karena dengan Apps Script tidak ada download atau penyiapan, autentikasi ditangani secara otomatis, dan panggilan Google API seperti panggilan fungsi native.

Panduan ini menjelaskan cara membuat dan mendaftarkan aplikasi menggunakan Apps Script.

Memulai

Bagian ini menunjukkan cara membuat aplikasi Chat dengan cepat menggunakan Apps Script.

Langkah 1: Salin template Apps Script

Cara termudah untuk mulai membuat aplikasi Apps Script adalah menggunakan template Chat. Tindakan ini akan membuat project Apps Script dengan metode yang Anda perlukan. Setelah itu, isi metode yang diperlukan untuk menerapkan logika aplikasi Anda, atau untuk berintegrasi dengan aplikasi yang telah Anda build. Kode berikut menunjukkan contoh template yang diisi untuk aplikasi sederhana.

/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  var name = "";

  if (event.space.type == "DM") {
    name = "You";
  } else {
    name = event.user.displayName;
  }
  var message = name + " said \"" + event.message.text + "\"";

  return { "text": message };
}

/**
 * Responds to an ADDED_TO_SPACE event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onAddToSpace(event) {
  var message = "";

  if (event.space.singleUserBotDm) {
    message = "Thank you for adding me to a DM, " + event.user.displayName + "!";
  } else {
    message = "Thank you for adding me to " +
        (event.space.displayName ? event.space.displayName : "this chat");
  }

  if (event.message) {
    // Bot added through @mention.
    message = message + " and you said: \"" + event.message.text + "\"";
  }

  return { "text": message };
}

/**
 * Responds to a REMOVED_FROM_SPACE event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onRemoveFromSpace(event) {
  console.info("Bot removed from ",
      (event.space.name ? event.space.name : "this chat"));
}


Langkah 2: Edit fungsi onMessage

Secara default, fungsi onMessage di template menampilkan objek Message yang berisi teks dan kartu sederhana. Anda dapat mengedit fungsi ini untuk menampilkan teks atau widget kartu tertentu.

function onMessage(e) {
  return { 'text': 'You said: \`' + e.message.text + '\`' };
}

Langkah 3: Dapatkan ID deployment

Agar dapat mendaftarkan aplikasi, Anda harus mendapatkan deploymentID untuk aplikasi tertentu ini.

  1. Klik Deploy > New deployment.
  2. Di bagian Select type, klik Add-on.
  3. Isi opsi, lalu klik Deploy.
  4. Di bagian "ID Deployment", klik Salin.

Lihat panduan Pengelolaan Rilis untuk mempelajari praktik yang direkomendasikan dalam menggunakan ID deployment.

Langkah 4: Daftarkan aplikasi

Anda dapat mendaftarkan aplikasi dari Google Cloud Console. Di layar pendaftaran aplikasi, masukkan nama aplikasi, URL avatar, dan deskripsi. Untuk pengujian, Anda dapat mengaktifkan 'Aplikasi dapat dikirimi pesan secara langsung' dan 'Aplikasi berfungsi di ruang dengan beberapa pengguna'. Di bagian setelan koneksi, pilih Apps Script dan tempel ID deployment yang disalin pada langkah sebelumnya.

Setelan koneksi untuk mendaftarkan aplikasi Anda.

Langkah 5: Uji aplikasi Anda

Untuk menguji aplikasi, Anda dapat memulai DM dengannya atau @menyebutnya dalam Ruang. Saat Anda berbicara ke fitur tersebut, pesan akan merespons apa pun dari respons Pesan pada Langkah 2. Selesai.

Konsep aplikasi Apps Script

Acara

Apps Script mendukung beberapa fungsi pengendali peristiwa yang dapat diterapkan oleh aplikasi Anda. Setiap fungsi menangani jenis peristiwa yang berbeda dan setiap fungsi menerima satu argumen e, yang merupakan objek Peristiwa.

onAddToSpace(e)
Fungsi ini dijalankan saat aplikasi ditambahkan ke ruang. Aplikasi Anda dapat ditambahkan langsung ke ruang atau ditambahkan melalui @sebutan. Dalam kasus kedua, peristiwa e juga akan memiliki properti message. Fungsi ini akan menampilkan objek Message, yang biasanya merupakan pesan selamat datang untuk memberi tahu pengguna akhir tentang aplikasi Anda atau respons terhadap @sebutan.
onMessage(e)
Fungsi ini dipanggil saat aplikasi sudah ada dalam ruang dan pengguna @sebutan aplikasi. Fungsi ini akan menampilkan objek Message yang berisi respons aplikasi Anda.
onRemoveFromSpace(e)
Fungsi ini dipanggil saat pengguna menghapus aplikasi dari daftar DM atau dari ruang. Nilai yang ditampilkan dari fungsi ini diabaikan karena aplikasi Anda telah dihapus dan tidak dapat memposting pesan lagi.

Contoh berikut mengimplementasikan onAddToSpace dan onRemoveFromSpace:

// onAddToSpace() is invoked when the app is added to a space or when
// a user initiates / re-initiates a direct message with the app.
function onAddToSpace(e) {
  if (!e.space.singleUserBotDm) {
    return { 'text': 'Thanks for adding me to "' +
        (e.space.displayName ? e.space.displayName : "this chat") + '"!' };
  } else {
    return { 'text': 'Thanks for adding me to a DM!' };
  }
}
// onRemoveFromSpace() is invoked when app is removed from a space
// or when a user removes a direct message with the app.
function onRemoveFromSpace(e) {}

Perhatikan bahwa e.space.displayName mungkin tidak ada dalam pesan langsung antar-manusia.

Kartu interaktif

Seperti aplikasi lainnya, aplikasi Apps Script dapat menampilkan kartu yang interaktif. Untuk mempelajari cara membuat kartu menjadi interaktif, baca dokumentasi tentang kartu interaktif. Perbedaan utama untuk aplikasi Apps Script adalah aplikasi ini dapat menentukan metode tertentu untuk dipanggil saat peristiwa onClick dipicu dengan menggunakan key-value pair action.actionMethodName dan action.parameters sebagai parameter metode.

Otorisasi

Aplikasi Apps Script yang mengakses resource yang dilindungi harus meminta pengguna untuk memberi otorisasi akses ini saat pertama kali dijalankan untuk setiap pengguna. Anda tidak perlu melakukan tindakan apa pun, tetapi perlu diketahui bahwa pengguna mungkin melihat dialog otorisasi saat pertama kali mereka menggunakan aplikasi Anda.

Apps Script menangani otorisasi di level skrip. Aplikasi yang memerlukan otorisasi tidak dapat melakukan tindakan apa pun hingga pengguna akhir mengizinkan aplikasi tersebut. Jika ingin aplikasi Anda menampilkan pesan selamat datang saat aplikasi belum diotorisasi dan langsung ditambahkan ke ruang, Anda dapat menentukan pesan penggantian di manifes. Jika aplikasi Anda memerlukan logika inisialisasi, Anda mungkin perlu menduplikasi logika ini dalam tindakan onMessage. Contoh:

function onMessage(event) {
  var userProperties = PropertiesService.getUserProperties();
  if (!userProperties.getProperty('initialized')) {
    // handle the onAddToSpace initialization logic here.
    ...
    userProperties.setProperties({initialized: 'true'});
  }
  // Handle normal onMessage logic.
  ...
}

Pesan asinkron

Beberapa aplikasi mungkin perlu mengirim pesan ke Google Chat berdasarkan pemicu eksternal, seperti Pemicu berbasis waktu di Apps Script.

Kami berencana untuk mengintegrasikan Google Chat API secara native ke dalam Apps Script untuk kasus penggunaan ini. Sementara itu, satu-satunya cara untuk mencapainya saat ini adalah melalui HTTP API eksternal (lihat dokumentasi). Untuk menggunakan akun layanan Cloud, Anda harus menggunakan dokumentasi) melalui library OAuth2 untuk Apps Script.

Contoh aplikasi lengkap berikut yang memposting pesan setiap menit ke setiap ruang tempatnya berada:

// Example app for Google Chat that demonstrates app-initiated messages
// by spamming the user every minute.
//
// This app makes use of the Apps Script OAuth2 library at:
//     https://github.com/googlesamples/apps-script-oauth2
//
// Follow the instructions there to add the library to your script.

// When added to a space, we store the space's ID in ScriptProperties.
function onAddToSpace(e) {
  PropertiesService.getScriptProperties()
      .setProperty(e.space.name, '');
  return {
    'text': 'Hi! I\'ll post a message here every minute. ' +
            'Please remove me after testing or I\'ll keep spamming you!'
  };
}

// When removed from a space, we remove the space's ID from ScriptProperties.
function onRemoveFromSpace(e) {
  PropertiesService.getScriptProperties()
      .deleteProperty(e.space.name);
}

// Add a trigger that invokes this function every minute via the
// "Edit > Current Project's Triggers" menu. When it runs, it will
// post in each space the app was added to.
function onTrigger() {
  var spaceIds = PropertiesService.getScriptProperties()
      .getKeys();
  var message = { 'text': 'Hi! It\'s now ' + (new Date()) };
  for (var i = 0; i < spaceIds.length; ++i) {
    postMessage(spaceIds[i], message);
  }
}
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
// The values below are copied from the JSON file downloaded upon
// service account creation.
// For SERVICE_ACCOUNT_PRIVATE_KEY, remember to include the BEGIN and END lines of the private key
var SERVICE_ACCOUNT_PRIVATE_KEY = '...';
var SERVICE_ACCOUNT_EMAIL = 'service-account@project-id.iam.gserviceaccount.com';

// Posts a message into the given space ID via the API, using
// service account authentication.
function postMessage(spaceId, message) {
  var service = OAuth2.createService('chat')
      .setTokenUrl('https://accounts.google.com/o/oauth2/token')
      .setPrivateKey(SERVICE_ACCOUNT_PRIVATE_KEY)
      .setClientId(SERVICE_ACCOUNT_EMAIL)
      .setPropertyStore(PropertiesService.getUserProperties())
      .setScope(SCOPE);
  if (!service.hasAccess()) {
    Logger.log('Authentication error: %s', service.getLastError());
    return;
  }
  var url = 'https://chat.googleapis.com/v1/' + spaceId + '/messages';
  UrlFetchApp.fetch(url, {
    method: 'post',
    headers: { 'Authorization': 'Bearer ' + service.getAccessToken() },
    contentType: 'application/json',
    payload: JSON.stringify(message),
  });
}

File manifes

Berikut adalah contoh file manifes Apps Script yang harus disertakan dengan skrip.

Jika tidak memulai project dari template Chat, Anda harus mengedit file manifes untuk menambahkan objek "chat": {} ke dalamnya.

Dalam file manifes, setel runtime ke Rhino: "runtimeVersion": "DEPRECATED_ES5". Aplikasi Chat tidak sepenuhnya mendukung runtime Apps Script V8, sehingga jika Anda menentukan "runtimeVersion": "V8", aplikasi Chat mungkin akan mengalami error secara tidak menentu. Misalnya, struktur respons JSON dapat berubah secara situasional dengan cara yang tidak dapat diprediksi untuk aplikasi Chat yang di-build dengan runtime V8.

{
  "timeZone": "America/Los_Angeles",
  "dependencies": {},
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "DEPRECATED_ES5"
}

Pengguna dapat menambahkan aplikasi Anda ke ruang sebelum memberi otorisasi aplikasi. Dalam hal ini, aplikasi tidak dapat merespons peristiwa tambahkan ke ruang. Anda dapat memberikan pesan selamat datang untuk ditampilkan jika hal ini terjadi, menggunakan kolom addToSpaceFallbackMessage.

File manifes akan diberi nama appsscript.json dan merupakan bagian dari project Apps Script Anda. Untuk melihat file manifes di editor Apps Script, pilih Lihat > Tampilkan file manifes.