เอกสารนี้อธิบายวิธีใช้การแจ้งเตือนแบบ Push ที่แจ้งให้แอปพลิเคชันของคุณทราบเมื่อทรัพยากรมีการเปลี่ยนแปลง
ภาพรวม
Google ปฏิทิน API มีการแจ้งเตือนแบบ Push ที่ช่วยให้คุณตรวจสอบ การเปลี่ยนแปลงในทรัพยากรได้ คุณสามารถใช้ฟีเจอร์นี้เพื่อปรับปรุงประสิทธิภาพของ แอปพลิเคชัน ซึ่งจะช่วยลดค่าใช้จ่ายด้านเครือข่ายและการประมวลผลเพิ่มเติม ที่เกี่ยวข้องกับการโพลทรัพยากรเพื่อตรวจสอบว่ามีการเปลี่ยนแปลงหรือไม่ เมื่อใดก็ตามที่ทรัพยากรที่เฝ้าดูมีการเปลี่ยนแปลง Google ปฏิทิน API จะแจ้งให้แอปพลิเคชันของคุณทราบ
หากต้องการใช้การแจ้งเตือนแบบ Push คุณต้องดำเนินการ 2 อย่างต่อไปนี้
ตั้งค่า URL ที่รับหรือตัวรับการเรียกกลับ "Webhook"
ซึ่งเป็นเซิร์ฟเวอร์ HTTPS ที่จัดการข้อความการแจ้งเตือน API ที่ ทริกเกอร์เมื่อทรัพยากรมีการเปลี่ยนแปลง
ตั้งค่า (ช่องทางการแจ้งเตือน) สำหรับปลายทางทรัพยากรแต่ละรายการที่ต้องการ เฝ้าดู
ช่องทางจะระบุข้อมูลการกำหนดเส้นทางสำหรับข้อความการแจ้งเตือน คุณต้องระบุ URL ที่ต้องการรับการแจ้งเตือนเป็นส่วนหนึ่งของการตั้งค่าช่องทาง เมื่อใดก็ตามที่ทรัพยากรของช่องทางมีการเปลี่ยนแปลง Google Calendar API จะส่งข้อความการแจ้งเตือนเป็นคำขอ
POSTไปยัง URL นั้น
ปัจจุบัน Google Calendar API รองรับการแจ้งเตือนสำหรับการเปลี่ยนแปลงทรัพยากร ACL, CalendarList, Events และ Settings
สร้างช่องทางการแจ้งเตือน
หากต้องการขอการแจ้งเตือนแบบ Push คุณต้องตั้งค่าช่องทางการแจ้งเตือน สำหรับทรัพยากรแต่ละรายการที่ต้องการตรวจสอบ หลังจากตั้งค่าช่องทางการแจ้งเตือนแล้ว Google Calendar API จะแจ้งให้แอปพลิเคชันของคุณทราบเมื่อทรัพยากรที่เฝ้าดูมีการเปลี่ยนแปลง
ส่งคำขอเฝ้าดู
ทรัพยากร Google Calendar API ที่เฝ้าดูได้แต่ละรายการจะมีเมธอด
watch ที่เกี่ยวข้องที่ URI ในรูปแบบต่อไปนี้
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
หากต้องการตั้งค่าช่องทางการแจ้งเตือนสำหรับข้อความเกี่ยวกับการเปลี่ยนแปลงทรัพยากรที่เฉพาะเจาะจง ให้ส่งคำขอ POST ไปยังเมธอด watch ของทรัพยากร
ช่องทางการแจ้งเตือนแต่ละช่องทางจะเชื่อมโยงกับผู้ใช้และ
ทรัพยากร (หรือชุดทรัพยากร) ที่เฉพาะเจาะจง คำขอ watch จะไม่สำเร็จหากผู้ใช้ปัจจุบันไม่ได้เป็นเจ้าของหรือไม่มีสิทธิ์เข้าถึงทรัพยากรนี้
ตัวอย่าง
เริ่มเฝ้าดูการเปลี่ยนแปลงคอลเล็กชันกิจกรรมในปฏิทินที่กำหนด
POST https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json
{
"id": "01234567-89ab-cdef-0123456789ab",
"type": "web_hook",
"address": "https://mydomain.com/notifications",
...
"token": "target=myApp-myCalendarChannelDest",
"expiration": 1426325213000
}ในส่วนเนื้อหาของคำขอ ให้ระบุ id ของช่องทาง type เป็น web_hook และ URL ที่รับใน address
นอกจากนี้ คุณยังระบุข้อมูลต่อไปนี้ได้ด้วย (ไม่บังคับ)
tokenที่จะใช้เป็นโทเค็นของช่องทาง- เวลา
expirationเป็นมิลลิวินาทีสำหรับเวลาหมดอายุของช่องทางที่คุณขอ
พร็อพเพอร์ตี้ที่จำเป็น
คุณต้องระบุฟิลด์ต่อไปนี้ในคำขอ watch แต่ละรายการ
-
สตริงพร็อพเพอร์ตี้
idที่ระบุช่องทางการแจ้งเตือนใหม่นี้ อย่างไม่ซ้ำกันภายในโปรเจ็กต์ เราขอแนะนำให้ใช้ ตัวระบุที่ไม่ซ้ำกับผู้อื่น (UUID) หรือสตริงที่ไม่ซ้ำกันที่คล้ายกัน ความยาวสูงสุด 64 อักขระระบบจะแสดงค่า ID ที่คุณตั้งค่าไว้ในส่วนหัว HTTP
X-Goog-Channel-Idของข้อความการแจ้งเตือนทุกข้อความที่คุณได้รับสำหรับช่องทางนี้ -
สตริงพร็อพเพอร์ตี้
typeที่ตั้งค่าเป็นweb_hook -
สตริงพร็อพเพอร์ตี้
addressที่ตั้งค่าเป็น URL ที่รับฟัง และตอบสนองต่อการแจ้งเตือนสำหรับช่องทางการแจ้งเตือนนี้ ซึ่งเป็น URL เรียกกลับของ Webhook และต้องใช้ HTTPSโปรดทราบว่า Google Calendar API จะส่งการแจ้งเตือนไปยัง ที่อยู่ HTTPS นี้ได้ก็ต่อเมื่อมีการติดตั้งใบรับรอง SSL ที่ถูกต้องในเว็บเซิร์ฟเวอร์ ใบรับรองที่ไม่ถูกต้องมีดังต่อไปนี้
- ใบรับรองแบบ Self-signed
- ใบรับรองที่ลงนามโดยแหล่งที่มาที่ไม่น่าเชื่อถือ
- ใบรับรองที่เพิกถอนไปแล้ว
- ใบรับรองที่มีเรื่องไม่ตรงกับชื่อโฮสต์เป้าหมาย
พร็อพเพอร์ตี้ที่ไม่บังคับ
นอกจากนี้ คุณยังระบุฟิลด์ที่ไม่บังคับต่อไปนี้ด้วย
watch คำขอได้ด้วย
-
พร็อพเพอร์ตี้
tokenที่ระบุค่าสตริงที่กำหนดเอง เพื่อใช้เป็นโทเค็นของช่องทางการแจ้งเตือน คุณสามารถใช้โทเค็นของช่องทางการแจ้งเตือน เพื่อวัตถุประสงค์ต่างๆ ได้ เช่น คุณสามารถใช้โทเค็นเพื่อยืนยันว่าข้อความขาเข้าแต่ละข้อความมีไว้สำหรับช่องทางที่แอปพลิเคชันของคุณสร้างขึ้น เพื่อให้แน่ใจว่าการแจ้งเตือนไม่ได้เป็นการหลอกลวง หรือเพื่อกำหนดเส้นทางข้อความไปยังปลายทางที่ถูกต้องภายในแอปพลิเคชันตามวัตถุประสงค์ของช่องทางนี้ ความยาวสูงสุด 256 อักขระโทเค็นจะรวมอยู่ในส่วนหัว HTTP
X-Goog-Channel-Tokenในข้อความการแจ้งเตือนทุกข้อความที่แอปพลิเคชันของคุณได้รับสำหรับช่องทางนี้หากคุณใช้โทเค็นของช่องทางการแจ้งเตือน เราขอแนะนำให้คุณดำเนินการดังนี้
ใช้รูปแบบการเข้ารหัสที่ขยายได้ เช่น พารามิเตอร์การค้นหา URL ตัวอย่าง:
forwardTo=hr&createdBy=mobileอย่าใส่ข้อมูลที่ละเอียดอ่อน เช่น โทเค็น OAuth
-
สตริงพร็อพเพอร์ตี้
expirationที่ตั้งค่าเป็นการประทับเวลา Unix (เป็นมิลลิวินาที) ของวันที่และเวลาที่ต้องการให้ Google ปฏิทิน API หยุดส่งข้อความสำหรับช่องทางการแจ้งเตือนนี้หากช่องทางมีเวลาหมดอายุ ระบบจะรวมเวลาดังกล่าวเป็นค่าของ ส่วนหัว HTTP
X-Goog-Channel-Expiration(ในรูปแบบที่มนุษย์อ่านได้ ) ในข้อความการแจ้งเตือนทุกข้อความที่ แอปพลิเคชันของคุณได้รับสำหรับช่องทางนี้
ดูรายละเอียดเพิ่มเติมเกี่ยวกับคำขอได้ที่เมธอด watch สำหรับทรัพยากร ACL, CalendarList, Events และ Settings ในเอกสารอ้างอิง API
การตอบกลับของคำขอเฝ้าดู
หากคำขอ watch สร้างช่องทางการแจ้งเตือนได้สำเร็จ ระบบจะแสดงรหัสสถานะ HTTP 200 OK
ส่วนเนื้อหาข้อความของการตอบกลับการเฝ้าดูจะให้ข้อมูลเกี่ยวกับช่องทางการแจ้งเตือนที่คุณเพิ่งสร้าง ดังที่แสดงในตัวอย่างด้านล่าง
{
"kind": "api#channel",
"id": "01234567-89ab-cdef-0123456789ab",
"resourceId": "o3hgv1538sdjfh",
"resourceUri": "https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events",
"token": "target=myApp-myCalendarChannelDest",
"expiration": 1426325213000
}
ส่วนเนื้อหาของการตอบกลับจะให้รายละเอียดของช่องทาง เช่น
kind: ระบุว่านี่คือทรัพยากรช่องทาง APIid: รหัสที่คุณระบุสำหรับช่องทางนี้resourceId: รหัสของทรัพยากรที่เฝ้าดูresourceUri: รหัสเฉพาะเวอร์ชันของทรัพยากรที่เฝ้าดูtoken: โทเค็นที่ระบุในส่วนเนื้อหาของคำขอexpiration: เวลาหมดอายุของช่องทางเป็นการประทับเวลา Unix ในหน่วยมิลลิวินาที
นอกเหนือจากพร็อพเพอร์ตี้ที่คุณส่งเป็นส่วนหนึ่งของคำขอแล้ว ข้อมูลที่แสดงผลยังรวมถึง resourceId และ
resourceUri เพื่อระบุทรัพยากรที่กำลังเฝ้าดูในช่องทางการแจ้งเตือนนี้
คุณสามารถส่งข้อมูลที่แสดงผลไปยังการดำเนินการอื่นๆ ของช่องทางการแจ้งเตือน เช่น เมื่อต้องการหยุดรับ การแจ้งเตือน
ดูรายละเอียดเพิ่มเติมเกี่ยวกับการตอบกลับได้ที่เมธอด watch
สำหรับทรัพยากร ACL, CalendarList, Events และ Settings ในเอกสารอ้างอิง API
ข้อความซิงค์
หลังจากสร้างช่องทางการแจ้งเตือนเพื่อเฝ้าดูทรัพยากรแล้ว
Google ปฏิทิน API จะส่งข้อความ sync เพื่อระบุว่า
การแจ้งเตือนกำลังจะเริ่มขึ้น ค่าส่วนหัว X-Goog-Resource-State HTTP
สำหรับข้อความเหล่านี้คือ sync เนื่องจากปัญหาการกำหนดเวลาของเครือข่าย คุณจึงอาจได้รับข้อความ sync แม้ว่าจะยังไม่ได้รับการตอบกลับของเมธอด watch ก็ตาม
คุณสามารถละเว้นการแจ้งเตือน sync ได้อย่างปลอดภัย แต่ก็ใช้การแจ้งเตือนนี้ได้เช่นกัน เช่น หากตัดสินใจว่าไม่ต้องการเก็บช่องทางไว้ คุณสามารถใช้ค่า X-Goog-Channel-ID และ X-Goog-Resource-ID ในการเรียกเพื่อ หยุดรับการแจ้งเตือน นอกจากนี้ คุณยังใช้การแจ้งเตือน
sync เพื่อทำการเริ่มต้นบางอย่างเพื่อเตรียมพร้อมสำหรับ
เหตุการณ์ในภายหลังได้ด้วย
รูปแบบของข้อความ sync ที่ Google ปฏิทิน API ส่งไปยัง
URL ที่รับของคุณแสดงไว้ด้านล่าง
POST https://mydomain.com/notifications // Your receiving URL. X-Goog-Channel-ID: channel-ID-value X-Goog-Channel-Token: channel-token-value X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires. X-Goog-Resource-ID: identifier-for-the-watched-resource X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource X-Goog-Resource-State: sync X-Goog-Message-Number: 1
ข้อความซิงค์จะมีค่าส่วนหัว X-Goog-Message-Number HTTP
เป็น 1 เสมอ การแจ้งเตือนที่ตามมาแต่ละรายการสำหรับช่องทางนี้มี
หมายเลขข้อความที่มากกว่ารายการก่อนหน้า แม้ว่าหมายเลข
ข้อความจะไม่เรียงตามลำดับก็ตาม
ต่ออายุช่องทางการแจ้งเตือน
ช่องทางการแจ้งเตือนอาจมีเวลาหมดอายุ โดยมีค่าที่กำหนดโดยคำขอของคุณหรือโดยขีดจำกัดหรือค่าเริ่มต้นภายในของ Google ปฏิทิน API (ระบบจะใช้ค่าที่จำกัดมากกว่า) เวลาหมดอายุของช่องทาง (หากมี) จะรวมอยู่เป็นการประทับเวลา Unix (เป็นมิลลิวินาที) ในข้อมูลที่เมธอด watch แสดงผล นอกจากนี้ วันที่และเวลาหมดอายุจะรวมอยู่ (ในรูปแบบที่มนุษย์อ่านได้) ในข้อความการแจ้งเตือนทุกข้อความที่แอปพลิเคชันของคุณได้รับสำหรับช่องทางนี้ในส่วนหัว HTTP X-Goog-Channel-Expiration
ปัจจุบันยังไม่มีวิธีต่ออายุช่องทางการแจ้งเตือนโดยอัตโนมัติ เมื่อช่องทางใกล้หมดอายุ คุณต้องแทนที่ช่องทางนั้นด้วยช่องทางใหม่โดยเรียกเมธอด watch และเช่นเคย คุณต้องใช้ค่าที่ไม่ซ้ำกันสำหรับ
พร็อพเพอร์ตี้ id ของช่องทางใหม่ โปรดทราบว่าอาจมีช่วงเวลา "ทับซ้อน" ที่ช่องทางการแจ้งเตือน 2 ช่องทางสำหรับ
ทรัพยากรเดียวกันทำงานอยู่
รับการแจ้งเตือน
เมื่อใดก็ตามที่ทรัพยากรที่เฝ้าดูมีการเปลี่ยนแปลง แอปพลิเคชันของคุณจะได้รับข้อความการแจ้งเตือนที่อธิบายการเปลี่ยนแปลง Google ปฏิทิน API จะส่งข้อความเหล่านี้
เป็นคำขอ HTTPSPOST ไปยัง URL ที่คุณระบุเป็น
addressพร็อพเพอร์ตี้สำหรับช่องทางการแจ้งเตือน
นี้
ทำความเข้าใจรูปแบบข้อความการแจ้งเตือน
ข้อความการแจ้งเตือนทั้งหมดจะมีชุดส่วนหัว HTTP ที่มี
X-Goog- คำนำหน้า
การแจ้งเตือนบางประเภทอาจมีส่วนเนื้อหาของข้อความด้วย
ส่วนหัว
ข้อความการแจ้งเตือนที่ Google ปฏิทิน API โพสต์ไปยัง URL ที่รับของคุณจะมีส่วนหัว HTTP ต่อไปนี้
| ส่วนหัว | คำอธิบาย |
|---|---|
| มีอยู่เสมอ | |
|
UUID หรือสตริงที่ไม่ซ้ำกันอื่นๆ ที่คุณระบุเพื่อระบุช่องทางการแจ้งเตือนนี้ |
|
จำนวนเต็มที่ระบุข้อความนี้สำหรับช่องทางการแจ้งเตือนนี้
ค่าจะเป็น 1 เสมอสำหรับข้อความ sync หมายเลขข้อความ
จะเพิ่มขึ้นสำหรับข้อความที่ตามมาแต่ละข้อความในช่องทาง แต่จะไม่เรียงตามลำดับ
|
|
ค่าทึบแสงที่ระบุทรัพยากรที่เฝ้าดู รหัสนี้จะ เสถียรใน API เวอร์ชันต่างๆ |
|
สถานะทรัพยากรใหม่ที่ทริกเกอร์การแจ้งเตือน
ค่าที่เป็นไปได้ ได้แก่
sync, exists หรือ
not_exists.
|
|
ตัวระบุเฉพาะเวอร์ชัน API สำหรับทรัพยากรที่เฝ้าดู |
| มีอยู่บางครั้ง | |
|
วันที่และเวลาหมดอายุของช่องทางการแจ้งเตือนในรูปแบบที่มนุษย์อ่านได้ จะมีอยู่ก็ต่อเมื่อมีการกำหนดไว้ |
|
โทเค็นของช่องทางการแจ้งเตือนที่แอปพลิเคชันของคุณตั้งค่าไว้ และ คุณสามารถใช้เพื่อยืนยันแหล่งที่มาของการแจ้งเตือน จะมีอยู่ก็ต่อเมื่อมีการกำหนดไว้ |
ข้อความการแจ้งเตือนที่ Calendar API โพสต์ไปยัง URL ที่รับของคุณจะไม่มีส่วนเนื้อหาของข้อความ ข้อความเหล่านี้ไม่มีข้อมูลที่เฉพาะเจาะจงเกี่ยวกับทรัพยากรที่อัปเดต คุณต้องทำการเรียก API อีกครั้งเพื่อดูรายละเอียดการเปลี่ยนแปลงทั้งหมด
ตัวอย่าง
ข้อความการแจ้งเตือนการเปลี่ยนแปลงสำหรับคอลเล็กชันกิจกรรมที่แก้ไข
POST https://mydomain.com/notifications Content-Type: application/json; utf-8 Content-Length: 0 X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66 X-Goog-Channel-Token: 398348u3tu83ut8uu38 X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT X-Goog-Resource-ID: ret08u3rv24htgh289g X-Goog-Resource-URI: https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events X-Goog-Resource-State: exists X-Goog-Message-Number: 10
ตอบสนองต่อการแจ้งเตือนต่างๆ
หากต้องการระบุว่าสำเร็จ คุณสามารถแสดงรหัสสถานะใดรหัสหนึ่งต่อไปนี้:
200, 201, 202, 204, หรือ
102
หากบริการของคุณใช้ ไลบรารีของไคลเอ็นต์ API ของ Google
และแสดง 500,502, 503 หรือ 504 Google ปฏิทิน API
จะลองอีกครั้งโดยใช้ Exponential Backoff
ระบบจะถือว่ารหัสสถานะที่แสดงผลอื่นๆ ทั้งหมดเป็นการส่งข้อความล้มเหลว
ทำความเข้าใจเหตุการณ์การแจ้งเตือนของ Google ปฏิทิน API
ส่วนนี้ให้รายละเอียดเกี่ยวกับข้อความการแจ้งเตือนที่คุณอาจได้รับเมื่อใช้การแจ้งเตือนแบบ Push กับ Google ปฏิทิน API
| ส่งเมื่อ | ||
|---|---|---|
sync |
ACL, รายการปฏิทิน, กิจกรรม, การตั้งค่า | สร้างช่องทางใหม่ได้สำเร็จ ตอนนี้คุณรับการแจ้งเตือนได้แล้ว |
exists |
ACL, รายการปฏิทิน, กิจกรรม, การตั้งค่า | ทรัพยากรมีการเปลี่ยนแปลง การเปลี่ยนแปลงที่เป็นไปได้ ได้แก่ การสร้างทรัพยากรใหม่ หรือการแก้ไขหรือลบทรัพยากรที่มีอยู่ |
ปิดการแจ้งเตือน
พร็อพเพอร์ตี้ expiration จะควบคุมเวลาที่การแจ้งเตือนจะหยุดโดยอัตโนมัติ คุณเลือกหยุดรับการแจ้งเตือนสำหรับช่องทางที่เฉพาะเจาะจงก่อนที่ช่องทางจะหมดอายุได้โดยเรียกเมธอด stop ที่ URI ต่อไปนี้
https://www.googleapis.com/workspace/calendar/api/v3/reference/channels/stop
เมธอดนี้กำหนดให้คุณระบุพร็อพเพอร์ตี้ของช่องทางอย่างน้อย 1 รายการ
id และ resourceId ดังที่แสดงใน
ตัวอย่างด้านล่าง โปรดทราบว่าหาก Google Calendar API มีทรัพยากรหลายประเภทที่มี
เมธอด watch จะมี
เมธอด stop เพียงเมธอดเดียว
เฉพาะผู้ใช้ที่มีสิทธิ์ที่เหมาะสมเท่านั้นที่จะหยุดช่องทางได้ โดยเฉพาะอย่างยิ่งฟีเจอร์ต่อไปนี้
- หากช่องทางสร้างขึ้นโดยบัญชีผู้ใช้ทั่วไป เฉพาะผู้ใช้รายเดียวกันจากไคลเอ็นต์เดียวกัน (ตามที่ระบุโดยรหัสไคลเอ็นต์ OAuth 2.0 จากโทเค็นการให้สิทธิ์) ที่สร้างช่องทางเท่านั้นที่จะหยุดช่องทางได้
- หากช่องทางสร้างขึ้นโดยบัญชีบริการ ผู้ใช้จากไคลเอ็นต์เดียวกันจะหยุดช่องทางได้
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีหยุดรับการแจ้งเตือน
POST https://www.googleapis.com/workspace/calendar/api/v3/reference/channels/stop
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json
{
"id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
"resourceId": "ret08u3rv24htgh289g"
}