ส่งข้อความไปยัง Google Chat โดยใช้ REST API (ตัวอย่าง Google ไม่ทำงานในปี 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 โดยไม่บอกใคร
คำตอบ
ตอบ:
ฉันสามารถยืนยันได้ว่าchat.bot
ขอบเขตนั้นมีอยู่จริง การตั้งค่าบอทแชทกับส่วนที่เหลือ API คุณ ต้อง ใช้บัญชีผู้ใช้บริการ
ข้อมูลมากกว่านี้:
ตามเอกสารที่คุณเชื่อมโยงกับการพัฒนาบอทด้วย Apps Scriptสำหรับการส่งข้อความ async เมื่อทริกเกอร์:
... วิธีเดียวที่จะทำได้ในขณะนี้คือผ่าน HTTP API ภายนอก (ดูเอกสารประกอบ ) นี้ต้องใช้บัญชีบริการระบบคลาวด์ (ดูเอกสารประกอบ) ผ่านOAuth2 สำหรับไลบรารี
ซึ่งหมายความว่าคุณต้องตั้งค่าบัญชีบริการในคอนโซล GCP ก่อนจึงchat.bot
จะสามารถใช้ขอบเขตสำหรับข้อความเหล่านี้ได้ กระบวนการทั้งหมดอาจค่อนข้างลำบากสำหรับผู้ที่ไม่ได้ตั้งใจดังนั้นฉันจะให้ขั้นตอนตั้งแต่ต้นจนจบที่นี่
กระบวนการ:
การสร้างบัญชีบริการ:
- ไปที่Google Cloud Consoleและสร้างโครงการ GCP ใหม่ กดที่ด้านบนของหน้าและคลิกที่
Select a project
NEW PROJECT
- คุณจะต้อง
Project name
กรอกข้อมูลในช่องอื่น ๆ ให้คุณโดยอัตโนมัติ
- คุณจะต้อง
- กด
CREATE
- ป๊อปอัปใหม่จะปรากฏขึ้นที่ด้านบนขวาของหน้าจอเพื่อยืนยันว่ากำลังสร้างโครงการใหม่VIEW
เมื่อโหลดคุณสามารถคลิก - คลิก
☰
ไอคอนที่ด้านบนซ้ายและปฏิบัติตามAPIs & Services > Credentials
รายการเมนู - คลิกที่ด้านบนสุดของหน้า
+ CREATE CREDENTIALS > Service Account
นี้- ให้บัญชีผู้ใช้บริการชื่อและคำอธิบายและกด
CREATE
ตามด้วยและในที่สุดก็CONTINUE
DONE
- ให้บัญชีผู้ใช้บริการชื่อและคำอธิบายและกด
บัญชีบริการของคุณถูกสร้างขึ้นแล้ว
การสร้างข้อมูลรับรองบัญชีบริการ:
เหล่านี้จะต้องใช้สำหรับรหัสที่ให้ไว้ในตัวอย่างจากบอทพัฒนากับ Apps Scriptหน้า
- หลังจากสร้างบัญชีบริการคุณจะถูกเปลี่ยนเส้นทางกลับไปยังรายการข้อมูลรับรองที่คุณสามารถใช้สำหรับโครงการ GCP ภายใต้
Service Accounts
ส่วนนี้ให้คลิกบัญชีบริการที่คุณสร้างขึ้นใหม่ ซึ่งจะเรียกว่า[email protected]
- คลิก
ADD KEY > Create new key
- ให้เลือกและกด
JSON
CREATE
- การดำเนินการนี้จะเริ่มต้นการดาวน์โหลดไฟล์ข้อมูลรับรองซึ่งคุณจะต้องใช้เพื่อเข้าถึง API เป็นบัญชีบริการนี้ อย่าทำหายหรือแบ่งปันไฟล์นี้ หากสูญหายคุณจะต้องลบและสร้างข้อมูลรับรองใหม่สำหรับบัญชีนี้
การเปิดใช้ Hangouts Chat API:
- จะกลับไปและเลือก
☰ > APIs & Services
Library
- ค้นหา
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