รับและตอบกลับการโต้ตอบกับแอป Google Chat

หน้านี้จะอธิบายวิธีที่แอป Google Chat รับและ ตอบการโต้ตอบของผู้ใช้ หรือที่เรียกว่าเหตุการณ์การโต้ตอบในแอป Google Chat

เหตุการณ์การโต้ตอบในแอป Google Chat แสดงถึงการดำเนินการต่างๆ ที่ผู้ใช้เรียกใช้หรือโต้ตอบกับแอป Chat เช่น การ @พูดถึงแอป Chat หรือการเพิ่มไปยังพื้นที่ทำงาน เมื่อผู้ใช้โต้ตอบกับแอป Chat Google Chat จะส่งเหตุการณ์การโต้ตอบไปให้แอป Chat แอป Chat สามารถใช้เหตุการณ์เพื่อประมวลผลการโต้ตอบและสร้างการตอบกลับ

ตัวอย่างเช่น แอป Chat จะใช้เหตุการณ์การโต้ตอบเพื่อทำสิ่งต่อไปนี้

ตัวอย่างเหตุการณ์การโต้ตอบ การตอบกลับทั่วไปจากแอป Chat
ผู้ใช้เรียกใช้แอป Chat ด้วยการ พูดถึงแอปหรือใช้คําสั่งเครื่องหมายทับ แอป Chat จะประมวลผลสิ่งที่ข้อความระบุไว้เพื่อสร้างข้อความ ตัวอย่างเช่น แอป Chat จะตอบกลับคำสั่ง /about ด้วยข้อความอธิบายงานที่แอป Chat ทำได้
ผู้ใช้เพิ่มแอป Chat ลงในพื้นที่ทำงาน แอป Chat จะส่งข้อความเริ่มต้นใช้งานซึ่งอธิบายหน้าที่และวิธีที่ผู้ใช้ในพื้นที่ทำงานจะโต้ตอบกับแอปได้
ผู้ใช้นำแอป Chat ออกจากพื้นที่ทำงาน แอป Chat จะนำการแจ้งเตือนขาเข้าทั้งหมดที่กำหนดค่าไว้สำหรับพื้นที่ทำงานออก (เช่น การลบเว็บฮุค) และล้างที่จัดเก็บข้อมูลภายในทั้งหมด
ผู้ใช้คลิกปุ่มบนการ์ดหรือกล่องโต้ตอบที่แอป Chat ส่ง แอป Chat จะประมวลผลและจัดเก็บข้อมูลที่ผู้ใช้ส่ง หรือแสดงผลการ์ดหรือกล่องโต้ตอบอื่น

สำหรับการโต้ตอบของผู้ใช้แต่ละประเภท Google Chat จะส่งเหตุการณ์การโต้ตอบคนละประเภท เช่น Google Chat จะใช้ประเภทเหตุการณ์ MESSAGE สําหรับการโต้ตอบที่ผู้ใช้เรียกใช้แอป Chat ในข้อความ โปรดดูรายละเอียดที่ ประเภทเหตุการณ์การโต้ตอบกับแอป Google Chat

หน้านี้จะอธิบายวิธีการดำเนินการต่อไปนี้

  • กําหนดค่าแอป Chat ให้รับเหตุการณ์
  • ประมวลผลเหตุการณ์การโต้ตอบบนโครงสร้างพื้นฐาน
  • ตอบสนองต่อเหตุการณ์การโต้ตอบตามความเหมาะสม

รับเหตุการณ์การโต้ตอบกับแอป Chat

ส่วนนี้จะอธิบายวิธีรับและประมวลผลเหตุการณ์การโต้ตอบสำหรับแอป Chat

กําหนดค่าแอป Chat ให้รับเหตุการณ์การโต้ตอบ

แอปใน Chat บางแอปอาจไม่โต้ตอบกันได้ ตัวอย่างเช่น เว็บฮุคขาเข้าจะส่งได้เฉพาะข้อความขาออกและตอบผู้ใช้ไม่ได้ หากกำลังสร้างแอป Chat แบบอินเทอร์แอกทีฟ คุณต้องเลือกปลายทางที่ให้แอป Chat รับ ประมวลผล และตอบสนองต่อเหตุการณ์การโต้ตอบ ดูข้อมูลเพิ่มเติมเกี่ยวกับการออกแบบแอป Chat ได้ที่สถาปัตยกรรมการติดตั้งใช้งานแอปใน Chat

หากสร้างแอป Chat แบบอินเทอร์แอกทีฟ คุณต้องกำหนดค่า Google Chat API เพื่อให้ Google Chat ส่งเหตุการณ์การโต้ตอบให้คุณได้ โดยทำดังนี้

  1. เปิดหน้า Google Chat API ในคอนโซล Google Cloud โดยทำดังนี้

    ไปที่หน้า Google Chat API

  2. คลิกแท็บ Configuration
  3. ในส่วนฟีเจอร์แบบอินเทอร์แอกทีฟ ให้คลิกปุ่มสลับเปิดใช้ฟีเจอร์แบบอินเทอร์แอกทีฟเป็นเปิด
  4. ในส่วนฟังก์ชัน ให้เลือกช่องทําเครื่องหมาย 1 หรือทั้ง 2 ช่องต่อไปนี้
    1. รับข้อความแบบ 1:1: อนุญาตให้ผู้ใช้โต้ตอบกับแอป Chat ในพื้นที่ข้อความส่วนตัว (DM) แอป Chat จะได้รับเหตุการณ์การโต้ตอบทุกครั้งที่ผู้ใช้ส่งข้อความในพื้นที่ DM
    2. เข้าร่วมพื้นที่ทำงานและการสนทนากลุ่ม: อนุญาตให้ผู้ใช้เพิ่มและนำแอป Chat ออกจากพื้นที่ทำงานที่มีสมาชิกมากกว่า 1 คน แอป Chat จะได้รับเหตุการณ์การโต้ตอบเมื่อใดก็ตามที่มีการเพิ่มหรือนำออกจากพื้นที่ทำงาน และเมื่อใดก็ตามที่ผู้ใช้ @พูดถึง หรือใช้คำสั่งเครื่องหมายทับในพื้นที่ทำงาน
  5. ในการตั้งค่าการเชื่อมต่อ ให้ระบุตำแหน่งที่ Google Chat จะส่งเหตุการณ์การโต้ตอบของแอป Chat
  6. ไม่บังคับ: ในคำสั่งเครื่องหมายทับ ให้เพิ่มและกำหนดค่าคำสั่งเครื่องหมายทับอย่างน้อย 1 รายการ ดูข้อมูลเพิ่มเติมได้ที่ตั้งค่าคําสั่งเครื่องหมายทับ
  7. ไม่บังคับ: ในตัวอย่างลิงก์ ให้เพิ่มและกำหนดค่ารูปแบบ URL อย่างน้อย 1 รูปแบบที่แอป Chat แสดงตัวอย่าง ดูข้อมูลเพิ่มเติมได้ที่แสดงตัวอย่างลิงก์
  8. คลิกบันทึก

แอป Chat ของคุณได้รับการกำหนดค่าให้รับเหตุการณ์การโต้ตอบ จาก Google Chat แล้ว

ตรวจสอบสิทธิ์คําขอจาก Google Chat

สำหรับแอปที่สร้างบนปลายทาง HTTP ส่วนนี้จะอธิบายวิธีตรวจสอบว่าคำขอที่ส่งไปยังปลายทางมาจาก Google Chat

Google จะส่งคำขอไปยังบริการของคุณเพื่อส่งเหตุการณ์การโต้ตอบไปยังปลายทางของแอป Chat Google Chat จะมีโทเค็นสำหรับผู้ถือในส่วนหัว Authorization ของคำขอ HTTPS ทุกรายการที่ส่งไปยังปลายทาง เพื่อยืนยันว่าคำขอดังกล่าวมาจาก Google เช่น

POST
Host: yourappurl.com
Authorization: Bearer AbCdEf123456
Content-Type: application/json
User-Agent: Google-Dynamite

สตริง AbCdEf123456 ในตัวอย่างด้านบนคือโทเค็นการให้สิทธิ์สำหรับผู้ถือ นี่คือโทเค็นการเข้ารหัสที่ Google สร้างขึ้น คุณยืนยันโทเค็นสำหรับผู้ถือได้โดยใช้ไลบรารีของไคลเอ็นต์ Google API แบบโอเพนซอร์ส ดังนี้

สำหรับโทเค็นสำหรับผู้ถือที่ส่งในคำขอ Google Chat ผู้ออกใบรับรองคือ chat@system.gserviceaccount.com และช่อง audience จะตั้งเป็นหมายเลขของโปรเจ็กต์ Google Cloud ที่คุณใช้สร้างแอป Chat เช่น หากหมายเลขโปรเจ็กต์ระบบคลาวด์ของแอป Chat คือ 1234567890 ช่อง audience ในโทเค็นสำหรับผู้ถือจะเป็น 1234567890

หากโทเค็นไม่ยืนยันสำหรับแอป Chat บริการของคุณควรตอบกลับคำขอด้วยโค้ดตอบกลับ HTTPS 401 (Unauthorized)

Java

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.googleapis.auth.oauth2.GooglePublicKeysManager;
import com.google.api.client.http.apache.ApacheHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;

/** Tool for verifying JWT Tokens for Apps in Google Chat. */
public class JWTVerify {
  // Bearer Tokens received by apps will always specify this issuer.
  static String CHAT_ISSUER = "chat@system.gserviceaccount.com";

  // Url to obtain the public certificate for the issuer.
  static String PUBLIC_CERT_URL_PREFIX =
      "https://www.googleapis.com/service_accounts/v1/metadata/x509/";

  // Intended audience of the token, which is the project number of the app.
  static String AUDIENCE = "1234567890";

  // Get this value from the request's Authorization HTTPS header.
  // For example, for "Authorization: Bearer AbCdEf123456" use "AbCdEf123456"
  static String BEARER_TOKEN = "AbCdEf123456";

  public static void main(String[] args) throws GeneralSecurityException, IOException {
    JsonFactory factory = new JacksonFactory();

    GooglePublicKeysManager.Builder keyManagerBuilder =
        new GooglePublicKeysManager.Builder(new ApacheHttpTransport(), factory);

    String certUrl = PUBLIC_CERT_URL_PREFIX + CHAT_ISSUER;
    keyManagerBuilder.setPublicCertsEncodedUrl(certUrl);

    GoogleIdTokenVerifier.Builder verifierBuilder =
        new GoogleIdTokenVerifier.Builder(keyManagerBuilder.build());
    verifierBuilder.setIssuer(CHAT_ISSUER);
    GoogleIdTokenVerifier verifier = verifierBuilder.build();

    GoogleIdToken idToken = GoogleIdToken.parse(factory, BEARER_TOKEN);
    if (idToken == null) {
      System.out.println("Token cannot be parsed");
      System.exit(-1);
    }

    // Verify valid token, signed by CHAT_ISSUER.
    if (!verifier.verify(idToken)
        || !idToken.verifyAudience(Collections.singletonList(AUDIENCE))
        || !idToken.verifyIssuer(CHAT_ISSUER)) {
      System.out.println("Invalid token");
      System.exit(-1);
    }

    // Token originates from Google and is targeted to a specific client.
    System.out.println("The token is valid");
  }
}

Python

import sys

from oauth2client import client

# Bearer Tokens received by apps will always specify this issuer.
CHAT_ISSUER = 'chat@system.gserviceaccount.com'

# Url to obtain the public certificate for the issuer.
PUBLIC_CERT_URL_PREFIX = 'https://www.googleapis.com/service_accounts/v1/metadata/x509/'

# Intended audience of the token, which will be the project number of the app.
AUDIENCE = '1234567890'

# Get this value from the request's Authorization HTTPS header.
# For example, for 'Authorization: Bearer AbCdEf123456' use 'AbCdEf123456'.
BEARER_TOKEN = 'AbCdEf123456'

try:
  # Verify valid token, signed by CHAT_ISSUER, intended for a third party.
  token = client.verify_id_token(
      BEARER_TOKEN, AUDIENCE, cert_uri=PUBLIC_CERT_URL_PREFIX + CHAT_ISSUER)

  if token['iss'] != CHAT_ISSUER:
    sys.exit('Invalid issuee')
except:
  sys.exit('Invalid token')

# Token originates from Google and is targeted to a specific client.
print 'The token is valid'

จัดการการพยายามเรียก HTTP ไปยังบริการของคุณซ้ำ

หากคำขอ HTTPS ไปยังบริการของคุณล้มเหลว (เช่น หมดเวลา เครือข่ายขัดข้องชั่วคราว หรือรหัสสถานะ HTTPS ที่ไม่ใช่ 2xx) Google Chat จะพยายามนำส่งซ้ำ 2 ครั้ง โดยหน่วงเวลาอย่างน้อย 10 วินาทีระหว่างการลองใหม่แต่ละครั้ง ดังนั้นแอป Chat อาจได้รับข้อความเดียวกันสูงสุด 3 ครั้งในบางสถานการณ์ หากคำขอเสร็จสมบูรณ์แต่แสดงผลเพย์โหลดข้อความที่ไม่ถูกต้อง Google Chat จะไม่ส่งคำขอซ้ำ

ประมวลผลหรือตอบสนองต่อเหตุการณ์การโต้ตอบ

ส่วนนี้จะอธิบายวิธีที่แอป Google Chat ประมวลผลและตอบสนองต่อเหตุการณ์การโต้ตอบ

หลังจากที่แอป Chat ได้รับเหตุการณ์การโต้ตอบจาก Google Chat แอปก็จะตอบกลับได้หลายวิธี ในหลายๆ กรณี แอป Chat แบบอินเทอร์แอกทีฟ จะตอบกลับผู้ใช้ด้วยข้อความ แอป Google Chat ยังสามารถค้นหาข้อมูลบางส่วนจากแหล่งข้อมูล บันทึกข้อมูลเหตุการณ์การโต้ตอบ หรือข้อมูลอื่นๆ ได้ โดยพื้นฐานแล้วการประมวลผลนี้จะเป็นตัวกำหนดของแอป Google Chat

สำหรับเหตุการณ์การโต้ตอบแต่ละครั้ง แอป Chat จะได้รับเนื้อหาคำขอซึ่งเป็นเพย์โหลด JSON ที่แสดงเหตุการณ์ดังกล่าว คุณสามารถใช้ข้อมูลนี้ เพื่อประมวลผลการตอบสนอง ดูตัวอย่างเพย์โหลดเหตุการณ์ได้ที่ประเภทของเหตุการณ์การโต้ตอบในแอป Chat

แผนภาพต่อไปนี้แสดงให้เห็นวิธีที่แอป Google Chat ประมวลผลหรือตอบสนองต่อเหตุการณ์การโต้ตอบประเภทต่างๆ ตามปกติ

สถาปัตยกรรมวิธีที่แอป Google Chat ประมวลผลเหตุการณ์การโต้ตอบ

ตอบกลับแบบเรียลไทม์

เหตุการณ์การโต้ตอบช่วยให้แอปใน Chat ตอบกลับได้แบบเรียลไทม์หรือพร้อมกัน การตอบกลับแบบพร้อมกันไม่จําเป็นต้องมีการตรวจสอบสิทธิ์

หากต้องการสร้างการตอบสนองแบบซิงโครนัสสำหรับเหตุการณ์การโต้ตอบ โปรดดูคำแนะนำต่อไปนี้

หากต้องการตอบกลับพร้อมกัน แอป Chat จะต้องตอบกลับภายใน 30 วินาที และต้องโพสต์คำตอบในพื้นที่ทำงานที่มีการโต้ตอบเกิดขึ้น ไม่เช่นนั้น แอป Chat อาจตอบกลับแบบไม่พร้อมกัน

ตอบสนองแบบไม่พร้อมกัน

บางครั้งแอปใน Chat จะต้องตอบสนองต่อเหตุการณ์การโต้ตอบหลังผ่านไป 30 วินาทีหรือทำงานนอกพื้นที่ที่มีการสร้างเหตุการณ์การโต้ตอบนั้น ตัวอย่างเช่น แอป Chat อาจต้องตอบกลับผู้ใช้หลังจากทำงานที่ใช้เวลานานเสร็จแล้ว ในกรณีนี้ แอปใน Chat จะตอบสนองแบบไม่พร้อมกันโดยเรียกใช้ Google Chat API

หากต้องการสร้างข้อความโดยใช้ Chat API โปรดดูหัวข้อสร้างข้อความ ดูคำแนะนำในการใช้เมธอด Chat API เพิ่มเติมได้ที่ภาพรวมของ Chat API