Gmail Watch APIとHistory APIのラベルフィルタリングの違い
Google
TypeScript
Gmail APIでWatch登録とHistory取得を実装する際の重要な仕様について。
Watch登録時のlabelIdsとHistory APIの動作は独立している。Watch登録で特定のラベル(例:INBOX のみ)を指定していても、実際には全体のhistoryId更新時にWebhook通知は送信される。
具体的な動作:
- ユーザーがメールを送信するとGmail全体のhistoryIdが更新される
- Watch登録があればWebhook通知が送信される(labelIds設定に関わらず)
- History.list APIを呼び出すと、Watch登録時のlabelIdsフィルタに基づいて結果が返される
この仕様により、以下のような現象が発生する:
- Watch登録で
labelIds: ['INBOX']
のみを指定 - 送信メールを送るとWebhook通知は受信する
- しかしHistory APIでメッセージを取得しようとすると0件になる
解決方法:
labelFilterActionの使い分け:
include
: 指定したラベルが含まれるメールのみを監視exclude
: 指定したラベルが含まれないメールを監視