ส่งข้อความไปยัง Google Chat โดยใช้ REST API (ตัวอย่าง Google ไม่ทำงานในปี 2020)

Aug 19 2020

ฉันจะเริ่มต้นที่ไหน ... (Google ทำไมคุณต้องทำร้ายฉันด้วยวิธีนี้?)

ข้อมูลเบื้องหลัง

ฉันได้สร้าง chatbot ใหม่โดยใช้ Google Apps Scriptซึ่งได้รับข้อความจากผู้ใช้ในGoogle Chatและตอบสนองพร้อมด้วยข้อความเดียว (แต่ละข้อความเท่านั้นที่สามารถมีการตอบสนองจาก chatbot) ที่

ตอนนี้ฉันต้องการวิธีส่งข้อความแบบอะซิงโครนัสเพื่อให้บอทสามารถส่งข้อความได้เองหรือส่งคำตอบแยกทีละหลาย ๆ

ปัญหา

Google Chat REST APIมีวิธีการที่จะสร้างข้อความที่ถ่ายทอดสด , แต่วิธีนี้ ( spaces.messages.create) ไม่ทำงาน! ไม่มีตัวอย่างการทำงานของวิธีนี้ในปี 2020

นี่คือตัวอย่างโค้ดของ Google สำหรับการสร้างข้อความโดยใช้ REST API

ปัญหาคือในตัวอย่างของพวกเขาSCOPEตั้งค่าเป็น URL ที่ไม่ออกอีกต่อไป :

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

หากคุณไปที่ URL นั้นคุณจะเห็นข้อผิดพลาด 404 นี้:

Not Found
Error 404

นอกจากนี้หากคุณตรวจสอบรายการขอบเขต OAuth2 ที่มีอยู่คุณจะสังเกตเห็นว่าไม่มีขอบเขตที่เกี่ยวข้องกับแฮงเอาท์หรือแชทและไม่มีการกล่าวถึงchat.botขอบเขตที่ใช้ในโค้ดตัวอย่าง

ฉันได้ลองทำอะไรบ้าง?

ฉันได้อ่านทุกคำถามเกี่ยวกับ StackOverflow ที่เกี่ยวข้องกับ Chat API นี้รวมถึงบทช่วยสอนสำหรับ REST API ทุกข้อ

  • บทช่วยสอน Apps Script อย่างเป็นทางการจาก Google ไม่ทำงานเนื่องจากchat.botไม่มีขอบเขตอีกต่อไป:
    • Async Messages โดยใช้ Apps Script
  • โซลูชัน StackOverflow เหล่านี้ล้วนใช้ประโยชน์จากchat.botขอบเขตที่ไม่มีอยู่เดิม:
    • ส่งข้อความส่วนตัวโดยไม่มีเหตุการณ์
    • ตอบกลับแบบอะซิงโครนัสใน Hangout Chat ใหม่โดยใช้ Rest API
    • 404 การตอบสนองของเซิร์ฟเวอร์ที่ถูกตัดทอนบน Apps Script Bot
  • ผู้ใช้ StackOverflow รายนี้กล่าวว่าพวกเขาสามารถใช้chatขอบเขต (เช่นgoogleapis.com/auth/chat) ได้ แต่ขอบเขตนั้นไม่มีอยู่:
    • ข้อผิดพลาด 400: invalid_scope

สรุปแล้ว

จะส่งข้อความจาก Google Apps Script ไปยัง Google Chat โดยใช้Google Chat REST API ได้อย่างไร

ดูเหมือนว่าเอกสารของ Google จะล้าสมัยและไม่มีตัวอย่างใดสำหรับ API นี้ที่ใช้งานได้ในเดือนสิงหาคม 2020 พวกเขาไม่รู้ว่า REST API ไม่ทำงานหรือเลิกใช้งาน REST API โดยไม่บอกใคร

คำตอบ

5 RafaGuillermo Aug 20 2020 at 09:25

ตอบ:

ฉันสามารถยืนยันได้ว่าchat.botขอบเขตนั้นมีอยู่จริง การตั้งค่าบอทแชทกับส่วนที่เหลือ API คุณ ต้อง ใช้บัญชีผู้ใช้บริการ

ข้อมูลมากกว่านี้:

ตามเอกสารที่คุณเชื่อมโยงกับการพัฒนาบอทด้วย Apps Scriptสำหรับการส่งข้อความ async เมื่อทริกเกอร์:

... วิธีเดียวที่จะทำได้ในขณะนี้คือผ่าน HTTP API ภายนอก (ดูเอกสารประกอบ ) นี้ต้องใช้บัญชีบริการระบบคลาวด์ (ดูเอกสารประกอบ) ผ่านOAuth2 สำหรับไลบรารี

ซึ่งหมายความว่าคุณต้องตั้งค่าบัญชีบริการในคอนโซล GCP ก่อนจึงchat.botจะสามารถใช้ขอบเขตสำหรับข้อความเหล่านี้ได้ กระบวนการทั้งหมดอาจค่อนข้างลำบากสำหรับผู้ที่ไม่ได้ตั้งใจดังนั้นฉันจะให้ขั้นตอนตั้งแต่ต้นจนจบที่นี่

กระบวนการ:

การสร้างบัญชีบริการ:

  • ไปที่Google Cloud Consoleและสร้างโครงการ GCP ใหม่ กดที่ด้านบนของหน้าและคลิกที่ Select a projectNEW PROJECT
    • คุณจะต้องProject nameกรอกข้อมูลในช่องอื่น ๆ ให้คุณโดยอัตโนมัติ
  • กดCREATE- ป๊อปอัปใหม่จะปรากฏขึ้นที่ด้านบนขวาของหน้าจอเพื่อยืนยันว่ากำลังสร้างโครงการใหม่ VIEWเมื่อโหลดคุณสามารถคลิก
  • คลิกไอคอนที่ด้านบนซ้ายและปฏิบัติตามAPIs & Services > Credentialsรายการเมนู
  • คลิกที่ด้านบนสุดของหน้า+ CREATE CREDENTIALS > Service Accountนี้
    • ให้บัญชีผู้ใช้บริการชื่อและคำอธิบายและกดCREATEตามด้วยและในที่สุดก็CONTINUEDONE

บัญชีบริการของคุณถูกสร้างขึ้นแล้ว

การสร้างข้อมูลรับรองบัญชีบริการ:

เหล่านี้จะต้องใช้สำหรับรหัสที่ให้ไว้ในตัวอย่างจากบอทพัฒนากับ Apps Scriptหน้า

  • หลังจากสร้างบัญชีบริการคุณจะถูกเปลี่ยนเส้นทางกลับไปยังรายการข้อมูลรับรองที่คุณสามารถใช้สำหรับโครงการ GCP ภายใต้Service Accountsส่วนนี้ให้คลิกบัญชีบริการที่คุณสร้างขึ้นใหม่ ซึ่งจะเรียกว่า[email protected]
  • คลิก ADD KEY > Create new key
  • ให้เลือกและกด JSONCREATE
    • การดำเนินการนี้จะเริ่มต้นการดาวน์โหลดไฟล์ข้อมูลรับรองซึ่งคุณจะต้องใช้เพื่อเข้าถึง API เป็นบัญชีบริการนี้ อย่าทำหายหรือแบ่งปันไฟล์นี้ หากสูญหายคุณจะต้องลบและสร้างข้อมูลรับรองใหม่สำหรับบัญชีนี้

การเปิดใช้ Hangouts Chat API:

  • จะกลับไปและเลือก☰ > APIs & ServicesLibrary
  • ค้นหาHangouts Chat APIและคลิกผลลัพธ์เดียว
  • ENABLEคลิก สิ่งนี้จะเปิดใช้ API สำหรับโครงการของคุณ

หมายเหตุ: อย่าเพิ่งปิดแท็บนี้! เรายังคงต้องใช้คอนโซล GCP ในภายหลัง

การตั้งค่าโครงการ Apps Script:

  • สร้างโครงการ Apps Script ใหม่
  • ตอนนี้คุณสามารถคัดลอก + วางตัวอย่างจากหน้าข้อความ Asyncลงในโปรเจ็กต์ใหม่
  • เปิดไฟล์ข้อมูลรับรองที่ดาวน์โหลดจากคอนโซล GCP
    • คัดลอกprivate_keyค่า (ค่าที่ขึ้นต้นด้วย-----BEGIN PRIVATE KEY-----และวางลงในค่าSERVICE_ACCOUNT_PRIVATE_KEYในโครงการ Apps Script
    • คัดลอกclient_emailค่าจากไฟล์ข้อมูลรับรองและวางลงSERVICE_ACCOUNT_EMAILในโครงการ Apps Script

ในการใช้ไลบรารี OAuth2 ของ Google Apps Script ดังในตัวอย่างคุณจะต้องเพิ่มไลบรารีในโปรเจ็กต์โดยใช้รหัสสคริปต์ของไลบรารี

  • ใน UI โครงการ Apps Script ให้ทำตามResources > Libraries...รายการเมนูแล้วคัดลอกวางรหัสสคริปต์ OAuth2 ลงในAdd a libraryช่อง
    • รหัสสคริปต์คือ 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
    • สิ่งนี้และไลบรารีที่เหลือสามารถพบได้ในที่เก็บOAuth2 สำหรับ Apps Script GitHub
  • ตรวจสอบให้แน่ใจว่าได้เลือกไลบรารีเวอร์ชันเสถียรล่าสุดแล้ว (ในขณะที่เขียนนี่คือเวอร์ชัน 38)
  • Saveกด

ถัดไปคุณจะต้องเชื่อมโยงโครงการ Apps Script กับโครงการ GCP ที่คุณสร้างไว้ก่อนหน้านี้

  • กลับไปที่แท็บ GCP Console และทำตาม☰ > IAM & Admin > Settingsรายการเมนู
  • คัดลอกที่Project numberกำหนดไว้ในหน้านี้
  • ในโครงการ Apps Script ให้ทำตามResources > Cloud Platform project...รายการเมนูและวางหมายเลขโครงการลงในEnter Project Number hereกล่องโต้ตอบ
  • Set Projectคลิก

การตั้งค่า Project Manifest:ในการใช้แชทบอทใน Apps Script คุณต้องใส่chatคีย์ในไฟล์ Manifest ของโปรเจ็กต์

  • ใน Apps Script UI View > Show manifest fileคลิก
  • หลังจากคู่คีย์ - ค่าสุดท้ายให้เพิ่มสิ่งต่อไปนี้:
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }

ไฟล์รายการแบบเต็มของคุณจะมีลักษณะดังนี้:

{
  "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!"
  }
}
  • บันทึกโครงการของคุณ

ขั้นตอนสุดท้าย:

เกือบเสร็จแล้ว! ตอนนี้คุณจะต้องปรับใช้บ็อตจากไฟล์ Manifest และตั้งค่าการกำหนดค่าใน GCP และตั้งค่าทริกเกอร์ซึ่งจะทำการโทรจริง

การปรับใช้บอท:

  • ใน UI ของ Apps Script ให้ไปที่Publish > Deploy from manifest...และกดCreateในกล่องโต้ตอบที่เพิ่งเปิดใหม่
    • หมายเหตุ: คุณไม่สามารถใช้การปรับใช้หัวหน้าได้หากคุณต้องการใช้สิ่งนี้กับทั้งโดเมนของคุณดังนั้นจึงต้องสร้างการปรับใช้ใหม่
  • Saveให้ปรับใช้ชื่อและคำอธิบายและกด
  • เมื่อบันทึกเสร็จแล้วให้กดGet IDถัดจากการปรับใช้ที่คุณเพิ่งสร้างขึ้นและคัดลอกไฟล์Deployment ID.

การตั้งค่าการกำหนดค่า GCP:

  • ☰ > APIs & Services > Dashboardจะกลับไปมีเมฆคอนโซลคุณจะต้องตอนนี้ไปที่
  • ในรายการ API ที่เปิดใช้งานที่ด้านล่างของหน้านี้ให้เลือกไฟล์Hangouts Chat API.
  • Configurationในเมนูด้านซ้ายให้เลือก
  • ตั้งค่าการกำหนดค่าบอทของคุณ คุณจะต้องให้Bot name, และAvatar URL Descriptionตั้งค่าการทำงานเพื่อให้ใช้งานได้ในห้อง
  • ภายใต้Connection SettingsเลือกApps Script projectและวาง ID การปรับใช้ของคุณจากส่วนก่อนหน้า
  • ให้ ธ ปท Apps Script Saveของคุณสิทธิ์ที่เกี่ยวข้องและกด

ทริกเกอร์ที่เข้าใจยาก:

  • สิ่งเดียวที่คุณต้องทำตอนนี้คือตั้งค่าทริกเกอร์ของคุณ สิ่งนี้ทำได้เหมือนกับทริกเกอร์ Apps Script - จากEdit > Current project's triggersรายการเมนูใน Apps Script ในการทำตัวอย่างให้สมบูรณ์คลิกปุ่ม + เพิ่มทริกเกอร์ที่ด้านล่างขวาและตั้งค่าการตั้งค่าทริกเกอร์ดังนี้:

  • เลือกฟังก์ชันที่จะเรียกใช้: onTrigger

  • เลือกการปรับใช้ที่ควรรัน: Head

  • เลือกแหล่งที่มาของเหตุการณ์: ตามเวลา

  • เลือกประเภทของทริกเกอร์ตามเวลา: Minutes timer

  • เลือกช่วงเวลานาที: Every minute

แล้วกดบันทึก.

เสร็จแล้ว! บ็อตที่สร้างขึ้นนี้จะโพสต์ไปยังห้องทั้งหมดที่อยู่ในเวลาปัจจุบันทุกนาที

ฉันหวังว่าคำอธิบายนี้จะเป็นประโยชน์กับคุณ!

อ้างอิง:

  • บัญชีบริการ | เอกสาร Cloud IAM
  • การทำความเข้าใจบัญชีบริการ | เอกสาร Cloud IAM
  • การพัฒนาบอทด้วย Apps Script | Google Chat API | Google Developers
  • ข้อความที่เริ่มต้นด้วยบ็อต - การสร้างบ็อตใหม่ | Google Chat API | Google Developers
  • GitHub - gsuitedevs / apps-script-oauth2: ไลบรารี OAuth2 สำหรับ Google Apps Script

  • Google Cloud Console