ユーザーアイコン

mizuko

26日前

0
0

Gmail Watch APIとHistory APIのラベルフィルタリングの違い

Google
TypeScript

Gmail APIでWatch登録とHistory取得を実装する際の重要な仕様について。

Watch登録時のlabelIdsとHistory APIの動作は独立している。Watch登録で特定のラベル(例:INBOX のみ)を指定していても、実際には全体のhistoryId更新時にWebhook通知は送信される。

具体的な動作:

  1. ユーザーがメールを送信するとGmail全体のhistoryIdが更新される
  2. Watch登録があればWebhook通知が送信される(labelIds設定に関わらず)
  3. History.list APIを呼び出すと、Watch登録時のlabelIdsフィルタに基づいて結果が返される

この仕様により、以下のような現象が発生する:

  • Watch登録で labelIds: ['INBOX'] のみを指定
  • 送信メールを送るとWebhook通知は受信する
  • しかしHistory APIでメッセージを取得しようとすると0件になる

解決方法:

// 送信メールも取得したい場合 labelIds: ['INBOX', 'SENT'], labelFilterAction: 'include'

labelFilterActionの使い分け:

  • include: 指定したラベルが含まれるメールのみを監視
  • exclude: 指定したラベルが含まれないメールを監視