🙆‍♀️

Notion APIを使って、ページやデータベースが削除を検知する方法

2023/02/24に公開
1

直面した問題

ユーザーによるGUIの操作で削除されたことを検知できず、システムに支障が生じた。

原因

Query Databaseのlast_edited_byでフィルタリングしてデータベースとの差分を検知していたが、削除(=GetPageResponseのarchived=true)はeditに該当しない。

ちなみに、GetPageResponseはこんな感じ。(ChatGPTに作ってもらったので、厳密には違う)

{
    "object": "page",
    "id": "ページID",
    "created_time": "作成日時",
    "last_edited_time": "最終更新日時",
    "parent": {
        "type": "ページ親の種類",
        "page_id": "ページ親のID"
    },
    "properties": {
        "プロパティ名": {
            "id": "プロパティID",
            "type": "プロパティの型",
            "プロパティの値": "値"
        },
        "別のプロパティ名": {
            "id": "別のプロパティID",
            "type": "別のプロパティの型",
            "別のプロパティの値": "値"
        },
        ...
    },
    "archived": boolean
}

対策

archived=trueのページでRetrive a Pageを叩くだけでok。
archived=trueのページでRetrive a Pageを叩くと404が返ってくるので、404をarchive=trueと識別する。
Retrive a Pageのエラーメッセージの意味はこちらだったので、上記に至った。

Returns a 404 HTTP response if the page doesn't exist, or if the integration doesn't have access to the page.

Returns a 400 or 429 HTTP response if the request exceeds the request limits.

困ったこと

2022/2/24時点かつ私の調べでは、GetPageResponseのarchived=trueだけを取得するエンドポイントは存在しなかったこと。
Filter database entriesで対応しているpropertyは👇で、archivedは入っていない。

checkbox
date
files
formula
multi_select
number
people
phone_number
relation
rich_text
select
status
timestamp

Discussion

Naoki SakataNaoki Sakata

すごく間違っていました。

普通にretrive a page叩いたらarchive=trueで返ってきました。
変なことしないようにしましょう。