หน้านี้อธิบายวิธีสร้างส่วนเสริมของ Google Workspace ที่ทำงานใน Google Chat โดยใช้บริการ HTTP
การเริ่มต้นอย่างรวดเร็วนี้แสดงวิธีสร้างบริการ HTTP โดยใช้บริการของ Google Cloud หากต้องการสร้างแอป Chat คุณต้องเขียนและทำให้ Cloud Function พร้อมใช้งาน ซึ่งแอป Chat จะใช้เพื่อตอบกลับข้อความของผู้ใช้
สถาปัตยกรรม HTTP ช่วยให้คุณกำหนดค่า Chat เพื่อผสานรวมกับ Google Cloud หรือเซิร์ฟเวอร์ในองค์กรโดยใช้ HTTP ได้ ดังที่แสดงใน แผนภาพต่อไปนี้
ในแผนภาพก่อนหน้านี้ ผู้ใช้ที่โต้ตอบกับแอป HTTP Chat จะมีขั้นตอนการไหลของข้อมูลดังนี้
- ผู้ใช้ส่งข้อความใน Chat ไปยัง แอป Chat ไม่ว่าจะในข้อความส่วนตัวหรือใน พื้นที่ใน Chat
- ระบบจะส่งคำขอ HTTP ไปยังเว็บเซิร์ฟเวอร์ซึ่งเป็นระบบคลาวด์หรือระบบในองค์กรที่มีตรรกะของแอป Chat
- ไม่บังคับ: ตรรกะของแอป Chat สามารถผสานรวมกับ บริการของ Google Workspace (เช่น ปฏิทินและ ชีต), บริการอื่นๆ ของ Google (เช่น Maps, YouTube และ Vertex AI) หรือบริการอื่นๆ บนเว็บ (เช่น ระบบ การจัดการโปรเจ็กต์หรือเครื่องมือออกตั๋ว)
- เว็บเซิร์ฟเวอร์จะส่งการตอบกลับ HTTP กลับไปยัง บริการแอป Chat ใน Chat
- ระบบจะส่งคำตอบให้ผู้ใช้
- แอป Chat สามารถเรียกใช้ Chat API เพื่อโพสต์ข้อความแบบไม่พร้อมกันหรือดำเนินการอื่นๆ ได้ (ไม่บังคับ)
สถาปัตยกรรมนี้ช่วยให้คุณมีความยืดหยุ่นในการใช้ไลบรารีและคอมโพเนนต์ที่มีอยู่แล้วในระบบ เนื่องจากแอปแชทเหล่านี้สามารถออกแบบโดยใช้ภาษาโปรแกรมที่แตกต่างกันได้
วัตถุประสงค์
- ตั้งค่าสภาพแวดล้อม
- สร้างและทำให้ Cloud Function ใช้งานได้
- กำหนดค่าส่วนเสริมของ Google Workspace สำหรับแอป Chat
- ทดสอบแอป
ข้อกำหนดเบื้องต้น
- บัญชี Google Workspace สำหรับธุรกิจหรือองค์กร ที่มีสิทธิ์เข้าถึง Google Chat
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน หากต้องการตรวจสอบว่าโปรเจ็กต์ที่มีอยู่เปิดใช้การเรียกเก็บเงินแล้วหรือไม่ โปรดดูยืนยันสถานะการเรียกเก็บเงินของโปรเจ็กต์ หากต้องการสร้างโปรเจ็กต์และตั้งค่าการเรียกเก็บเงิน โปรดดูสร้างโปรเจ็กต์ Google Cloud
ตั้งค่าสภาพแวดล้อม
ก่อนใช้ Google API คุณต้องเปิดใช้ API ในโปรเจ็กต์ Google Cloud คุณเปิด API อย่างน้อย 1 รายการในโปรเจ็กต์ Google Cloud เดียวได้ในคอนโซล Google Cloud ให้เปิดใช้ Cloud Build API, Cloud Functions API, Cloud Pub/Sub API, Cloud Logging API, Artifact Registry API และ Cloud Run API
สร้างและทำให้ Cloud Function ใช้งานได้
สร้างและทำให้ Cloud Function ใช้งานได้เพื่อสร้างการ์ด Chat พร้อมชื่อที่แสดงและรูปโปรไฟล์ของผู้ส่ง เมื่อแอป Chat ได้รับข้อความ แอปจะเรียกใช้ฟังก์ชันและ ตอบกลับด้วยการ์ด
หากต้องการสร้างและทําให้ฟังก์ชันใช้งานได้สําหรับแอป Chat ให้ทําตามขั้นตอนต่อไปนี้
Node.js
ในคอนโซล Google Cloud ให้ไปที่หน้า Cloud Functions โดยทำดังนี้
ตรวจสอบว่าได้เลือกโปรเจ็กต์สำหรับแอป Chat แล้ว
คลิก
Create Functionในหน้าสร้างฟังก์ชัน ให้ตั้งค่าฟังก์ชันดังนี้
- ในสภาพแวดล้อม ให้เลือก Cloud Run Function
- ในชื่อฟังก์ชัน ให้ป้อน
AddOnChatApp
- เลือกภูมิภาคในภูมิภาค
- เลือกต้องมีการตรวจสอบสิทธิ์ในส่วนการตรวจสอบสิทธิ์
- คลิกถัดไป
ในรันไทม์ ให้เลือก Node.js เวอร์ชันล่าสุด
ในซอร์สโค้ด ให้เลือกเครื่องมือแก้ไขในบรรทัด
ในจุดแรกเข้า ให้ลบข้อความเริ่มต้นแล้วป้อน
avatarApp
แทนที่เนื้อหาของ
index.js
ด้วยโค้ดต่อไปนี้/** * Google Cloud Function that responds to messages sent from a * Google Chat space. * * @param {Object} req Request sent from Google Chat space * @param {Object} res Response to send back */ exports.avatarApp = function avatarApp(req, res) { if (req.method === 'GET' || !req.body.chat) { return res.send('Hello! This function is meant to be used ' + 'in a Google Chat Space.'); } // Stores the Google Chat event as a variable. const chatMessage = req.body.chat.messagePayload.message; // Replies with the sender's avatar in a card. const displayName = chatMessage.sender.displayName; const avatarUrl = chatMessage.sender.avatarUrl; res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: { text: 'Here\'s your avatar', cardsV2: [{ cardId: 'avatarCard', card: { name: 'Avatar Card', header: { title: `Hello ${displayName}!`, }, sections: [{ widgets: [{ textParagraph: { text: 'Your avatar picture: ' } }, { image: { imageUrl: avatarUrl } }] }] } }] }}}}}); };
คลิกทำให้ใช้งานได้
Python
ในคอนโซล Google Cloud ให้ไปที่หน้า Cloud Functions โดยทำดังนี้
ตรวจสอบว่าได้เลือกโปรเจ็กต์สำหรับแอป Chat แล้ว
คลิก
Create Functionในหน้าสร้างฟังก์ชัน ให้ตั้งค่าฟังก์ชันดังนี้
- ในสภาพแวดล้อม ให้เลือก Cloud Run Function
- ในชื่อฟังก์ชัน ให้ป้อน
AddOnChatApp
- เลือกภูมิภาคในภูมิภาค
- เลือกต้องมีการตรวจสอบสิทธิ์ในส่วนการตรวจสอบสิทธิ์
- คลิกถัดไป
ในรันไทม์ ให้เลือก Python เวอร์ชันล่าสุด
ในซอร์สโค้ด ให้เลือกเครื่องมือแก้ไขในบรรทัด
ในจุดแรกเข้า ให้ลบข้อความเริ่มต้นแล้วป้อน
avatar_app
แทนที่เนื้อหาของ
main.py
ด้วยโค้ดต่อไปนี้from typing import Any, Mapping import flask import functions_framework @functions_framework.http def avatar_app(req: flask.Request) -> Mapping[str, Any]: """Google Cloud Function that handles requests from Google Chat Args: flask.Request: the request Returns: Mapping[str, Any]: the response """ if req.method == "GET": return "Hello! This function must be called from Google Chat." request_json = req.get_json(silent=True) # Stores the Google Chat event as a variable. chat_message = request_json["chat"]["messagePayload"]["message"] # Replies with the sender's avatar in a card. display_name = chat_message["sender"]["displayName"] avatar_url = chat_message["sender"]["avatarUrl"] return { "hostAppDataAction": { "chatDataAction": { "createMessageAction": { "message": { "text": "Here's your avatar", "cardsV2": [{ "cardId": "avatarCard", "card": { "name": "Avatar Card", "header": { "title": f"Hello {display_name}!" }, "sections": [{ "widgets": [{ "textParagraph": { "text": "Your avatar picture:" } }, { "image": { "imageUrl": avatar_url } }] }] } }] }}}}}
คลิกทำให้ใช้งานได้
Java
ในคอนโซล Google Cloud ให้ไปที่หน้า Cloud Functions โดยทำดังนี้
ตรวจสอบว่าได้เลือกโปรเจ็กต์สำหรับแอป Chat แล้ว
คลิก
Create Functionในหน้าสร้างฟังก์ชัน ให้ตั้งค่าฟังก์ชันดังนี้
- ในสภาพแวดล้อม ให้เลือก Cloud Run Function
- ในชื่อฟังก์ชัน ให้ป้อน
AddOnChatApp
- เลือกภูมิภาคในภูมิภาค
- เลือกต้องมีการตรวจสอบสิทธิ์ในส่วนการตรวจสอบสิทธิ์
- คลิกถัดไป
ในรันไทม์ ให้เลือก Java เวอร์ชันล่าสุด
ในซอร์สโค้ด ให้เลือกเครื่องมือแก้ไขในบรรทัด
ในจุดแรกเข้า ให้ลบข้อความเริ่มต้นแล้วป้อน
AvatarApp
เปลี่ยนชื่อไฟล์ Java เริ่มต้นเป็น
src/main/java/AvatarApp.java
แทนที่เนื้อหาของ
AvatarApp.java
ด้วยโค้ดต่อไปนี้import java.util.List; import com.google.api.services.chat.v1.model.CardWithId; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Card; import com.google.api.services.chat.v1.model.GoogleAppsCardV1CardHeader; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Image; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Section; import com.google.api.services.chat.v1.model.GoogleAppsCardV1TextParagraph; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Widget; import com.google.api.services.chat.v1.model.Message; import com.google.cloud.functions.HttpFunction; import com.google.cloud.functions.HttpRequest; import com.google.cloud.functions.HttpResponse; import com.google.gson.Gson; import com.google.gson.JsonObject; public class AvatarApp implements HttpFunction { private static final Gson gson = new Gson(); @Override public void service(HttpRequest request, HttpResponse response) throws Exception { JsonObject body = gson.fromJson(request.getReader(), JsonObject.class); if (request.getMethod().equals("GET") || !body.has("chat")) { response.getWriter().write("Hello! This function is meant to be used " + "in a Google Chat Space.."); return; } // Stores the Google Chat event as a variable. JsonObject chatMessage = body.getAsJsonObject("chat") .getAsJsonObject("messagePayload").getAsJsonObject("message"); // Replies with the sender's avatar in a card. String displayName = chatMessage.getAsJsonObject("sender").get("displayName").getAsString(); String avatarUrl = chatMessage.getAsJsonObject("sender").get("avatarUrl").getAsString(); Message message = createMessage(displayName, avatarUrl); JsonObject createMessageAction = new JsonObject(); createMessageAction.add("message", gson.fromJson(gson.toJson(message), JsonObject.class)); JsonObject chatDataAction = new JsonObject(); chatDataAction.add("createMessageAction", createMessageAction); JsonObject hostAppDataAction = new JsonObject(); hostAppDataAction.add("chatDataAction", chatDataAction); JsonObject dataActions = new JsonObject(); dataActions.add("hostAppDataAction", hostAppDataAction); response.getWriter().write(gson.toJson(dataActions)); } Message createMessage(String displayName, String avatarUrl) { GoogleAppsCardV1CardHeader cardHeader = new GoogleAppsCardV1CardHeader(); cardHeader.setTitle(String.format("Hello %s!", displayName)); GoogleAppsCardV1TextParagraph textParagraph = new GoogleAppsCardV1TextParagraph(); textParagraph.setText("Your avatar picture: "); GoogleAppsCardV1Widget avatarWidget = new GoogleAppsCardV1Widget(); avatarWidget.setTextParagraph(textParagraph); GoogleAppsCardV1Image image = new GoogleAppsCardV1Image(); image.setImageUrl(avatarUrl); GoogleAppsCardV1Widget avatarImageWidget = new GoogleAppsCardV1Widget(); avatarImageWidget.setImage(image); GoogleAppsCardV1Section section = new GoogleAppsCardV1Section(); section.setWidgets(List.of(avatarWidget, avatarImageWidget)); GoogleAppsCardV1Card card = new GoogleAppsCardV1Card(); card.setName("Avatar Card"); card.setHeader(cardHeader); card.setSections(List.of(section)); CardWithId cardWithId = new CardWithId(); cardWithId.setCardId("avatarCard"); cardWithId.setCard(card); Message message = new Message(); message.setText("Here's your avatar"); message.setCardsV2(List.of(cardWithId)); return message; } }
แทนที่เนื้อหาของ
pom.xml
ด้วยโค้ดต่อไปนี้<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.google.chat</groupId> <artifactId>avatar-app</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.target>17</maven.compiler.target> <maven.compiler.source>17</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>com.google.cloud.functions</groupId> <artifactId>functions-framework-api</artifactId> <version>1.0.4</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-chat --> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-chat</artifactId> <version>v1-rev20230115-2.0.0</version> </dependency> </dependencies> <!-- Required for Java functions in the inline editor --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <excludes> <exclude>.google/</exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
คลิกทำให้ใช้งานได้
หน้ารายละเอียดของ Cloud Functions จะเปิดขึ้น และฟังก์ชันของคุณจะปรากฏพร้อมตัวบ่งชี้ความคืบหน้า 2 รายการ ได้แก่ ตัวบ่งชี้สำหรับการสร้างและตัวบ่งชี้สำหรับบริการ เมื่อตัวบ่งชี้ความคืบหน้าทั้ง 2 รายการหายไปและแทนที่ด้วยเครื่องหมายถูก แสดงว่าฟังก์ชัน ได้รับการติดตั้งใช้งานและพร้อมใช้งานแล้ว
กำหนดค่าส่วนเสริม
หลังจากที่ติดตั้งใช้งาน Cloud Function แล้ว ให้ทำตามขั้นตอนต่อไปนี้เพื่อสร้าง ส่วนเสริมและติดตั้งใช้งานแอป Google Chat
ในคอนโซล Google Cloud ให้คลิกเมนู > Cloud Functions
ตรวจสอบว่าได้เลือกโปรเจ็กต์ที่คุณเปิดใช้ Cloud Functions แล้ว
คลิก AddOnChatApp ในรายการฟังก์ชัน
คลิกแท็บทริกเกอร์
คัดลอก URL ในส่วน HTTPS
ค้นหา "Google Chat API" แล้วคลิก Google Chat API จากนั้นคลิกจัดการ
คลิกการกำหนดค่า แล้วตั้งค่าแอป Google Chat ดังนี้
- ในส่วนชื่อแอป ให้ป้อน
Add-on Chat app
- ใน URL ของรูปโปรไฟล์ ให้ป้อน
https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png
- ในคำอธิบาย ให้ป้อน
Add-on Chat app
- ในส่วนฟังก์ชันการทำงาน ให้เลือกเข้าร่วมพื้นที่ทำงานและการสนทนากลุ่ม
- ในส่วนการตั้งค่าการเชื่อมต่อ ให้เลือก URL ของปลายทาง HTTP แล้ววาง URL สำหรับทริกเกอร์ Cloud Functions ลงในช่อง
- ในกลุ่มเป้าหมายในการตรวจสอบสิทธิ์ ให้เลือก URL ปลายทาง HTTP
- ในส่วนระดับการเข้าถึง ให้เลือก ทำให้แอป Google Chat นี้พร้อมใช้งานสำหรับบุคคลและ กลุ่มที่เฉพาะเจาะจงในโดเมนของคุณ แล้วป้อนอีเมล
- ในส่วนบันทึก ให้เลือกบันทึกข้อผิดพลาดไปยังการบันทึก
- ในส่วนชื่อแอป ให้ป้อน
คลิกบันทึก
จากนั้นให้สิทธิ์แอป Chat เพื่อเรียกใช้ Cloud Function
ให้สิทธิ์ Google Chat ในการเรียกใช้ฟังก์ชัน
หากต้องการให้สิทธิ์ส่วนเสริม Google Workspace ในการเรียกใช้ฟังก์ชัน ให้เพิ่มบัญชีบริการส่วนเสริม Google Workspace ที่มีบทบาทผู้เรียกใช้ Cloud Run
ในคอนโซล Google Cloud ให้ไปที่หน้า Cloud Run โดยทำดังนี้
ในรายการบริการ Cloud Run ให้เลือกช่องทําเครื่องหมายข้างฟังก์ชันที่รับ (อย่าคลิกฟังก์ชันโดยตรง)
คลิกสิทธิ์ แผงสิทธิ์จะเปิดขึ้น
คลิกเพิ่มหลักการ
ในส่วนผู้ใช้หลักรายใหม่ ให้ป้อนอีเมลของ บัญชีบริการของส่วนเสริม Google Workspace ที่เชื่อมโยงกับโปรเจ็กต์ ค้นหาอีเมลของบัญชีบริการในส่วนการตั้งค่าการเชื่อมต่อ > URL ของปลายทาง HTTP > อีเมลของบัญชีบริการในหน้าการกำหนดค่า Chat API ดังนี้
ในเลือกบทบาท ให้เลือก Cloud Run > Cloud Run Invoker
คลิกบันทึก
แอป Chat พร้อมรับและตอบกลับ ข้อความใน Chat แล้ว
ทดสอบแอป Chat
หากต้องการทดสอบแอป Chat ให้เปิดพื้นที่ข้อความส่วนตัวด้วย แอป Chat แล้วส่งข้อความโดยทำดังนี้
เปิด Google Chat โดยใช้บัญชี Google Workspace ที่คุณ ระบุเมื่อเพิ่มตัวเองเป็นผู้ทดสอบที่เชื่อถือได้
- คลิก แชทใหม่
- ในช่องเพิ่มบุคคลอย่างน้อย 1 คน ให้พิมพ์ชื่อแอป Chat
เลือกแอป Chat จากผลการค้นหา ข้อความส่วนตัวจะเปิดขึ้น
- ในข้อความส่วนตัวใหม่กับแอป ให้พิมพ์
Hello
แล้วกดenter
ข้อความของแอป Chat มีการ์ดที่แสดงชื่อและรูปโปรไฟล์ของผู้ส่ง ดังที่แสดงในรูปภาพต่อไปนี้
หากต้องการเพิ่มผู้ทดสอบที่เชื่อถือได้และดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบฟีเจอร์แบบอินเทอร์แอกทีฟ โปรดดูทดสอบฟีเจอร์แบบอินเทอร์แอกทีฟสำหรับ แอป Google Chat
แก้ปัญหา
เมื่อแอป Google Chat หรือการ์ดแสดงข้อผิดพลาด อินเทอร์เฟซของ Chat จะแสดงข้อความว่า "เกิดข้อผิดพลาด" หรือ "ดำเนินการตามคำขอของคุณไม่ได้" บางครั้ง UI ของ Chat อาจไม่แสดงข้อความแสดงข้อผิดพลาดใดๆ แต่แอปหรือการ์ด Chat อาจให้ผลลัพธ์ที่ไม่คาดคิด เช่น ข้อความในการ์ดอาจไม่ปรากฏ
แม้ว่าข้อความแสดงข้อผิดพลาดอาจไม่แสดงใน UI ของ Chat แต่ข้อความแสดงข้อผิดพลาดและข้อมูลบันทึกที่อธิบายไว้จะช่วยคุณแก้ไขข้อผิดพลาดได้เมื่อเปิดการบันทึกข้อผิดพลาดสำหรับแอป Chat หากต้องการความช่วยเหลือในการดู การแก้ไขข้อบกพร่อง และการแก้ไขข้อผิดพลาด โปรดดูหัวข้อ แก้ปัญหาและแก้ไขข้อผิดพลาดของ Google Chat
ล้างข้อมูล
เราขอแนะนำให้คุณลบโปรเจ็กต์ Cloud เพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร คลิก เมนู > IAM และผู้ดูแลระบบ > จัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิก ลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบ โปรเจ็กต์