สร้างแอป Google Chat เป็นเว็บฮุค

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

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

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

แผนภาพต่อไปนี้แสดงสถาปัตยกรรมของเว็บฮุคที่เชื่อมต่อกับ แชท:

สถาปัตยกรรมของเว็บฮุคขาเข้าสำหรับส่งข้อความแบบไม่พร้อมกันไปยัง Chat

ในแผนภาพก่อนหน้านี้ แอป Chat มีคุณสมบัติดังต่อไปนี้ การรับส่งข้อมูล:

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

ข้อกำหนดเบื้องต้น

Python

Node.js

Java

Apps Script

สร้างเว็บฮุค

หากต้องการสร้างเว็บฮุค ให้ลงทะเบียนเว็บฮุคในพื้นที่ใน Chat ที่ต้องการ เพื่อรับข้อความ จากนั้นเขียนสคริปต์ที่ส่งข้อความ

ลงทะเบียนเว็บฮุคขาเข้า

  1. ในเบราว์เซอร์ ให้เปิด แชท คุณจะกำหนดค่าเว็บฮุคจากแอป Chat บนอุปกรณ์เคลื่อนที่ไม่ได้
  2. ไปยังพื้นที่ทำงานที่ต้องการเพิ่มเว็บฮุค
  3. ข้างชื่อพื้นที่ทำงาน ให้คลิก ขยายลูกศรเพิ่มเติม แล้วคลิก แอปและ การผสานรวม
  4. คลิกเพิ่มเว็บฮุค

  5. ในช่อง Name ให้ป้อน Quickstart Webhook

  6. ในช่อง URL รูปโปรไฟล์ ให้ป้อน https://developers.google.com/chat/images/chat-product-icon.png

  7. คลิกบันทึก

  8. หากต้องการคัดลอก URL ของเว็บฮุค ให้คลิก เพิ่มเติม จากนั้นคลิก คัดลอกลิงก์

เขียนสคริปต์เว็บฮุค

ตัวอย่างสคริปต์เว็บฮุคจะส่งข้อความไปยังพื้นที่ทำงานที่เว็บฮุคอยู่ ลงทะเบียนแล้วโดยส่งคำขอ POST ไปยัง URL ของเว็บฮุค Chat API ตอบสนองด้วยอินสแตนซ์ Message

เลือกภาษาเพื่อดูวิธีสร้างสคริปต์เว็บฮุค

Python

  1. สร้างไฟล์ชื่อ quickstart.py ในไดเรกทอรีการทำงาน

  2. ใน quickstart.py ให้วางโค้ดต่อไปนี้

    python/webhook/quickstart.py
    from json import dumps
    from httplib2 import Http
    
    # Copy the webhook URL from the Chat space where the webhook is registered.
    # The values for SPACE_ID, KEY, and TOKEN are set by Chat, and are included
    # when you copy the webhook URL.
    
    def main():
        """Google Chat incoming webhook quickstart."""
        url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN"
        app_message = {"text": "Hello from a Python script!"}
        message_headers = {"Content-Type": "application/json; charset=UTF-8"}
        http_obj = Http()
        response = http_obj.request(
            uri=url,
            method="POST",
            headers=message_headers,
            body=dumps(app_message),
        )
        print(response)
    
    
    if __name__ == "__main__":
        main()
  3. แทนที่ค่าตัวแปร url ด้วย URL ของเว็บฮุคที่ ที่คุณคัดลอกเมื่อลงทะเบียนเว็บฮุค

Node.js

  1. สร้างไฟล์ชื่อ index.js ในไดเรกทอรีการทำงาน

  2. ใน index.js ให้วางโค้ดต่อไปนี้

    node/webhook/index.js
    /**
     * Sends asynchronous message to Google Chat
     * @return {Object} response
     */
    async function webhook() {
      const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages"
      const res = await fetch(url, {
        method: "POST",
        headers: {"Content-Type": "application/json; charset=UTF-8"},
        body: JSON.stringify({text: "Hello from a Node script!"})
      });
      return await res.json();
    }
    
    webhook().then(res => console.log(res));
  3. แทนที่ค่าตัวแปร url ด้วย URL ของเว็บฮุคที่ ที่คุณคัดลอกเมื่อลงทะเบียนเว็บฮุค

Java

  1. สร้างไฟล์ชื่อ pom.xml ในไดเรกทอรีการทำงาน

  2. คัดลอกและวางข้อมูลต่อไปนี้ใน pom.xml

    java/webhook/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.webhook</groupId>
      <artifactId>java-webhook-app</artifactId>
      <version>0.1.0</version>
    
      <name>java-webhook-app</name>
      <url>https://github.com/googleworkspace/google-chat-samples/tree/main/java/webhook</url>
    
      <properties>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
      </properties>
    
      <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.1</version>
        </dependency>
      </dependencies>
    
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
  3. ในไดเรกทอรีที่ใช้งานอยู่ ให้สร้างโครงสร้างไดเรกทอรีต่อไปนี้ src/main/java

  4. ในไดเรกทอรี src/main/java ให้สร้างไฟล์ชื่อ App.java

  5. ใน App.java ให้วางโค้ดต่อไปนี้

    java/webhook/src/main/java/com/google/chat/webhook/App.java
    import com.google.gson.Gson;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.Map;
    import java.net.URI;
    
    public class App {
      private static final String URL = "https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages";
      private static final Gson gson = new Gson();
      private static final HttpClient client = HttpClient.newHttpClient();
    
      public static void main(String[] args) throws Exception {
        String message = gson.toJson(Map.of("text", "Hello from Java!"));
    
        HttpRequest request = HttpRequest.newBuilder(
            URI.create(URL))
            .header("accept", "application/json; charset=UTF-8")
            .POST(HttpRequest.BodyPublishers.ofString(message))
            .build();
    
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    
        System.out.println(response.body());
      }
    }
  6. แทนที่ค่าตัวแปร URL ด้วย URL ของเว็บฮุคที่คุณ คัดลอกเมื่อลงทะเบียนเว็บฮุค

Apps Script

  1. ในเบราว์เซอร์ ให้ไปที่ Apps Script

  2. คลิกโปรเจ็กต์ใหม่

  3. วางโค้ดต่อไปนี้

    apps-script/webhook/webhook.gs
    function webhook() {
      const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages"
      const options = {
        "method": "post",
        "headers": {"Content-Type": "application/json; charset=UTF-8"},
        "payload": JSON.stringify({"text": "Hello from Apps Script!"})
      };
      const response = UrlFetchApp.fetch(url, options);
      console.log(response);
    }
  4. แทนที่ค่าตัวแปร url ด้วย URL ของเว็บฮุคที่คุณ คัดลอกเมื่อลงทะเบียนเว็บฮุค

เรียกใช้สคริปต์เว็บฮุค

เรียกใช้สคริปต์ใน CLI ด้วยคำสั่งต่อไปนี้

Python

  python3 quickstart.py

Node.js

  node index.js

Java

  mvn compile exec:java -Dexec.mainClass=App

Apps Script

  • คลิกเรียกใช้

เมื่อเรียกใช้โค้ด เว็บฮุคจะส่งข้อความไปยังพื้นที่ทำงานที่คุณ ลงทะเบียนไว้แล้ว

เริ่มหรือตอบกลับชุดข้อความ

  1. ระบุ spaces.messages.thread.threadKey เป็นส่วนหนึ่งของเนื้อหาคำขอส่งข้อความ ขึ้นอยู่กับว่าคุณเริ่มต้นหรือ การตอบกลับชุดข้อความ ให้ใช้ค่าต่อไปนี้สำหรับ threadKey

    • หากเริ่มชุดข้อความ ให้ตั้งค่า threadKey เป็นสตริงที่กําหนดเอง จดค่านี้ไว้เพื่อโพสต์ตอบชุดข้อความ

    • หากตอบกลับชุดข้อความ ให้ระบุ threadKey ที่ตั้งค่าไว้เมื่อ เริ่มชุดข้อความแล้ว ตัวอย่างเช่น เพื่อโพสต์การตอบกลับชุดข้อความที่มี ข้อความเริ่มต้นที่ใช้ MY-THREAD ตั้งค่า MY-THREAD

  2. กำหนดลักษณะการทำงานของชุดข้อความหากไม่พบ threadKey ที่ระบุ ดังนี้

    • ตอบกลับชุดข้อความหรือเริ่มชุดข้อความใหม่ เพิ่ม messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD พารามิเตอร์ไปยัง URL ของเว็บฮุค การส่งผ่านพารามิเตอร์ของ URL นี้จะทําให้ Chat เพื่อค้นหาชุดข้อความที่มีอยู่โดยใช้ threadKey ที่ระบุ หากมี ข้อความจะโพสต์เป็นการตอบกลับชุดข้อความนั้น หากไม่มีคือ พบข้อความแล้ว ข้อความจะเริ่มชุดข้อความใหม่ที่สอดคล้องกับ threadKey

    • ตอบกลับชุดข้อความหรือไม่ดำเนินการใดๆ เพิ่ม messageReplyOption=REPLY_MESSAGE_OR_FAIL ไปยัง URL ของเว็บฮุค การส่งผ่านพารามิเตอร์ของ URL นี้จะทําให้ Chat เพื่อค้นหาชุดข้อความที่มีอยู่โดยใช้ threadKey ที่ระบุ หากมี ข้อความจะโพสต์เป็นการตอบกลับชุดข้อความนั้น หากไม่มีคือ พบแล้ว ข้อความก็จะไม่ถูกส่ง

    ดูข้อมูลเพิ่มเติมได้ที่ messageReplyOption

ตัวอย่างโค้ดต่อไปนี้จะเริ่มหรือตอบกลับชุดข้อความ

Python

python/webhook/thread-reply.py
from json import dumps
from httplib2 import Http

# Copy the webhook URL from the Chat space where the webhook is registered.
# The values for SPACE_ID, KEY, and TOKEN are set by Chat, and are included
# when you copy the webhook URL.
#
# Then, append messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD to the
# webhook URL.


def main():
    """Google Chat incoming webhook that starts or replies to a message thread."""
    url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD"
    app_message = {
        "text": "Hello from a Python script!",
        # To start a thread, set threadKey to an arbitratry string.
        # To reply to a thread, specify that thread's threadKey value.
        "thread": {"threadKey": "THREAD_KEY_VALUE"},
    }
    message_headers = {"Content-Type": "application/json; charset=UTF-8"}
    http_obj = Http()
    response = http_obj.request(
        uri=url,
        method="POST",
        headers=message_headers,
        body=dumps(app_message),
    )
    print(response)


if __name__ == "__main__":
    main()

Node.js

node/webhook/thread-reply.js
/**
 * Sends asynchronous message to Google Chat
 * @return {Object} response
 */
async function webhook() {
  const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD"
  const res = await fetch(url, {
    method: "POST",
    headers: {"Content-Type": "application/json; charset=UTF-8"},
    body: JSON.stringify({
      text: "Hello from a Node script!",
      thread: {threadKey: "THREAD_KEY_VALUE"}
    })
  });
  return await res.json();
}

webhook().then(res => console.log(res));

Apps Script

apps-script/webhook/thread-reply.gs
function webhook() {
  const url = "https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?key=KEY&token=TOKEN&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD"
  const options = {
    "method": "post",
    "headers": {"Content-Type": "application/json; charset=UTF-8"},
    "payload": JSON.stringify({
      "text": "Hello from Apps Script!",
      "thread": {"threadKey": "THREAD_KEY_VALUE"}
    })
  };
  const response = UrlFetchApp.fetch(url, options);
  console.log(response);
}