Kirim pesan ke Google Chat menggunakan REST API (contoh Google tidak berfungsi pada tahun 2020)

Aug 19 2020

Di mana saya bahkan mulai ... (Google, mengapa Anda harus menyakiti saya seperti ini?)

Info Latar Belakang

Saya telah membuat chatbot baru menggunakan Google Apps Script , yang menerima pesan dari pengguna di Google Chat dan menanggapi secara sinkron dengan satu pesan (setiap pesan hanya dapat memiliki satu tanggapan dari chatbot).

Sekarang saya memerlukan cara untuk mengirim pesan asinkron sehingga bot dapat mengirim pesannya sendiri, atau mengirim beberapa tanggapan terpisah sekaligus.

Masalah

The Google Chat SISA API memiliki metode untuk membuat pesan asynchronous , tetapi metode ini ( spaces.messages.create) tidak bekerja! Tidak ada contoh yang berfungsi dari metode ini mulai tahun 2020.

Berikut adalah contoh kode Google untuk membuat pesan menggunakan REST API.

Masalahnya adalah bahwa dalam contoh mereka, SCOPEdisetel ke URL yang tidak lagi keluar :

var SCOPE = 'https://www.googleapis.com/auth/chat.bot';

Jika Anda menavigasi ke URL itu, Anda akan melihat kesalahan 404 ini:

Not Found
Error 404

Selain itu, jika Anda memeriksa daftar cakupan OAuth2 yang tersedia , Anda akan melihat bahwa tidak ada cakupan yang terkait dengan Hangouts atau Chat, dan tidak disebutkan chat.botcakupan yang digunakan dalam kode contoh.

Apa yang sudah saya coba?

Saya telah membaca setiap pertanyaan di StackOverflow yang terkait dengan Chat API ini, ditambah setiap tutorial untuk REST API.

  • Tutorial Apps Script resmi dari Google tidak berfungsi karena chat.botcakupannya sudah tidak ada:
    • Pesan Asinkron menggunakan Apps Script
  • Semua solusi StackOverflow ini menggunakan chat.botcakupan tidak ada yang sama :
    • Kirim pesan pribadi tanpa acara
    • Tanggapi secara Asinkron di Obrolan Hangout baru menggunakan API lainnya
    • 404 respons server terpotong pada Apps Script Bot
  • Pengguna StackOverflow ini mengatakan bahwa mereka dapat menggunakan chatruang lingkup (yaitu googleapis.com/auth/chat), tetapi ruang lingkup itu juga tidak ada:
    • Kesalahan 400: invalid_scope

Kesimpulannya

Bagaimana cara mengirim pesan dari Google Apps Script ke Google Chat menggunakan REST API Google Chat ?

Tampaknya dokumentasi Google sudah usang, dan tidak ada contoh untuk API ini yang berfungsi sejak Agustus 2020. Mereka tidak menyadari bahwa REST API mereka tidak berfungsi, atau mereka menghentikan REST API tanpa memberi tahu siapa pun.

Jawaban

5 RafaGuillermo Aug 20 2020 at 09:25

Menjawab:

Saya dapat mengkonfirmasi bahwa chat.botruang lingkup memang ada. Untuk mengatur bot obrolan dengan REST API, Anda harus menggunakan akun layanan .

Informasi Lebih Lanjut:

Sesuai dokumentasi yang Anda tautkan di Mengembangkan bot dengan Apps Script , untuk mengirim pesan asinkron pada pemicu:

... satu-satunya cara untuk mencapai ini saat ini adalah melalui API HTTP eksternal (lihat dokumentasi ). Ini memerlukan penggunaan akun layanan Cloud (lihat dokumentasi) melalui OAuth2 untuk pustaka Apps Script .

Artinya, Anda harus menyiapkan akun layanan di GCP Console terlebih dahulu agar chat.botcakupannya dapat digunakan untuk pesan ini. Seluruh proses bisa sangat sulit bagi yang belum tahu, jadi saya akan memberikan langkah-langkah dari awal hingga akhir di sini.

Proses:

Membuat Akun Layanan:

  • Buka Google Cloud Console dan buat Proyek GCP baru. Tekan Select a projectdi bagian atas halaman dan klik NEW PROJECT.
    • Anda harus memberikan Project name, bidang lainnya harus diisi untuk Anda secara otomatis.
  • Tekan CREATE- pop-up baru akan muncul di kanan atas layar yang mengonfirmasi bahwa proyek baru sedang dibuat. Setelah dimuat, Anda dapat mengklik VIEW.
  • Klik ikon di kiri atas, dan ikuti APIs & Services > Credentialsitem menu.
  • Di bagian atas halaman ini, klik + CREATE CREDENTIALS > Service Account.
    • Berikan nama dan deskripsi pada akun layanan tersebut, dan tekan CREATE, diikuti oleh CONTINUE, dan terakhir DONE.

Akun layanan Anda sekarang telah dibuat.

Membuat Kredensial Akun Layanan:

Ini akan diperlukan untuk kode yang diberikan dalam contoh dari halaman Developing bots with Apps Script .

  • Setelah membuat Akun Layanan, Anda akan dialihkan kembali ke daftar Kredensial yang dapat Anda gunakan untuk Project GCP. Di bawah Service Accountsbagian tersebut, klik akun layanan Anda yang baru dibuat. Ini akan dipanggil[email protected]
  • Klik ADD KEY > Create new key
  • Tetap JSONdipilih, dan tekan CREATE.
    • Ini akan memulai pengunduhan file kredensial yang akan Anda perlukan untuk mengakses API sebagai akun layanan ini. JANGAN KEHILANGAN ATAU BAGIKAN FILE INI. Jika hilang, Anda perlu menghapus dan membuat kredensial baru untuk akun ini.

Mengaktifkan API Hangouts Chat:

  • Kembali ke ☰ > APIs & Services, dan pilih Library.
  • Cari Hangouts Chat APIdan klik satu-satunya hasil.
  • Klik ENABLE. Ini akan mengaktifkan API untuk proyek Anda.

Catatan: Jangan tutup tab ini dulu! Kami masih perlu menggunakan GCP Console nanti.

Menyiapkan Proyek Apps Script:

  • Buat proyek Apps Script baru.
  • Sekarang, Anda dapat menyalin + menempelkan contoh dari halaman pesan Async ke dalam proyek baru.
  • Buka file kredensial yang Anda download dari GCP Console.
    • Salin private_keynilai (yang dimulai dengan -----BEGIN PRIVATE KEY-----dan tempelkan ke nilai SERVICE_ACCOUNT_PRIVATE_KEYdi proyek Apps Script.
    • Salin juga client_emailnilai dari file kredensial, dan tempelkan ke SERVICE_ACCOUNT_EMAILdalam proyek Apps Script.

Untuk menggunakan pustaka OAuth2 Skrip Google Apps seperti pada contoh, Anda perlu menambahkan pustaka ke proyek menggunakan ID skrip pustaka.

  • Di UI proyek Apps Script, ikuti Resources > Libraries...item menu, dan salin tempel ID skrip OAuth2 ke dalam Add a librarykotak
    • ID skripnya adalah 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
    • Ini, dan pustaka lainnya dapat ditemukan di repositori GitHub OAuth2 for Apps Script
  • Pastikan untuk memilih versi stabil terbaru dari pustaka (pada saat penulisan, ini adalah versi 38)
  • Tekan Save.

Selanjutnya, Anda perlu menautkan project Apps Script ke project GCP yang Anda buat sebelumnya.

  • Kembali ke tab GCP Console, dan ikuti ☰ > IAM & Admin > Settingsitem menu.
  • Salin yang Project numberditentukan di halaman ini.
  • Dalam Proyek Skrip Aplikasi Anda, ikuti Resources > Cloud Platform project...item menu, dan tempel nomor Proyek ke dalam Enter Project Number heredialog.
  • Klik Set Project.

Menyiapkan Manifes Proyek: Untuk menggunakan bot obrolan di Apps Script, Anda harus menyertakan chatkunci dalam manifes proyek.

  • Di UI Apps Script, klik View > Show manifest file.
  • Setelah pasangan nilai kunci terakhir, tambahkan yang berikut ini:
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }

File manifes lengkap Anda sekarang akan terlihat seperti ini:

{
  "timeZone": "Europe/Paris",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Drive",
      "serviceId": "drive",
      "version": "v2"
    }],
    "libraries": [{
      "userSymbol": "OAuth2",
      "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF",
      "version": "38"
    }]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }
}
  • Simpan proyek Anda.

Langkah Terakhir:

Anda hampir selesai! Sekarang, Anda perlu menghentikan bot dari manifes, dan menyiapkan konfigurasi di GCP serta menyiapkan pemicu yang akan membuat panggilan sebenarnya.

Menerapkan bot:

  • Di UI Apps Script, buka Publish > Deploy from manifest...dan tekan Createdi dialog yang baru dibuka.
    • Catatan: Anda tidak dapat menggunakan penyebaran Head jika Anda ingin menggunakan ini untuk seluruh domain Anda, jadi penerapan baru harus dibuat.
  • Beri nama dan deskripsi penyebaran, dan tekan Save.
  • Setelah ini selesai menyimpan, tekan di Get IDsebelah penerapan yang baru saja Anda buat, dan salin Deployment ID.

Menyiapkan konfigurasi GCP:

  • Kembali ke konsol Cloud, Anda sekarang harus menavigasi ke ☰ > APIs & Services > Dashboard.
  • Di daftar API yang diaktifkan di bagian bawah halaman ini, pilih Hangouts Chat API.
  • Di menu sebelah kiri, pilih Configuration.
  • Siapkan konfigurasi bot Anda. Anda akan perlu untuk memberikan Bot name, Avatar URLdan Description. Siapkan pengaturan fungsionalitas agar berfungsi di ruangan.
  • Di bawah Connection Settings, pilih Apps Script project, dan tempel ID penerapan Anda dari bagian sebelumnya.
  • Berikan bot Apps Script Anda izin yang relevan, dan tekan Save.

The Elusive Trigger:

  • Satu-satunya hal yang sekarang perlu Anda lakukan adalah mengatur pemicu Anda. Ini dilakukan seperti pemicu Apps Script biasa - dari Edit > Current project's triggersitem menu di Apps Script. Untuk menyelesaikan contoh, klik tombol + Tambahkan Pemicu di kanan bawah dan siapkan setelan pemicu sebagai berikut:

  • Pilih fungsi mana yang akan dijalankan: onTrigger

  • Pilih penerapan mana yang harus dijalankan: Kepala

  • Pilih sumber acara: Berdasarkan waktu

  • Pilih jenis pemicu berbasis waktu: Minutes timer

  • Pilih interval menit: Every minute

Dan tekan simpan.

Dan Anda Selesai! Bot yang dibuat ini sekarang akan memposting ke semua ruang yang ada dalam waktu saat ini, setiap menit.

Semoga penjelasan ini bermanfaat bagi Anda!

Referensi:

  • Akun layanan | Dokumentasi Cloud IAM
  • Memahami akun layanan | Dokumentasi Cloud IAM
  • Mengembangkan bot dengan Apps Script | Google Chat API | Pengembang Google
  • Pesan yang dimulai bot - Membuat bot baru | Google Chat API | Pengembang Google
  • GitHub - gsuitedevs / apps-script-oauth2: Pustaka OAuth2 untuk Google Apps Script.

  • Google Cloud Console