Notion 任務資料庫自訂排序:用按鈕實現一鍵上移下移
目錄
- 成果預覽
- 前言
- 本篇適合對象
- 本篇學習目標
- 提示詞
- 運作原理
- 排序的實踐方式
- 架構與流程
- 開始前準備
- 第一部分:Notion 端設定
- 步驟 1:建立 Order 排序屬性
- 步驟 2:設定 view 用 Order 排序
- 步驟 3:建立 Notion Integration
- 步驟 4:把 Integration 連上資料庫
- 第二部分:部署 Cloudflare Worker
- 步驟 5:準備專案檔案
- 步驟 6:登入並設定權杖(Token)
- 步驟 7:部署
- 第三部分:設定四顆按鈕
- 第四部分:測試
- 延伸:解決「新任務怎麼填 Order」與「數字越用越亂」的問題
- 麻煩一:新增任務時 Order 要填什麼?
- 麻煩二:數字缺口越來越大
- 其他問題
- 怎麼修改 Worker 的名稱?
- 結語
成果預覽#
前言#
使用 Notion 作為任務資料庫,
一直有一個痛點是「不能快速地調整自己想要的任務排序」。
實作的困難點在於,
Notion 原生的按鈕和自動化,
沒有辦法做到「根據現在按下按鈕的資料庫項目內容,來判斷要修改其他哪些項目」,
也就是當我要讓任務 1 的排序往下掉(在實務上是增加排序用的數字屬性裡的數字),
同時我也要讓任務 2 的排序往上升,
這樣才能做到像影片那樣的上下交換。
2026 年初,
我先在 Notion 建立了一個專案任務管理系統,
但我想做的附加功能很多,
所以兩週後我就決定改用 Vibe coding 打造更符合需求的系統。
在這之後撞了很多牆,
發現自己還是比較習慣 Notion 在專案跟任務領域的使用體驗,
最近便開始打一個主意:
本來就喜歡在 Notion 做的事,我還是在 Notion 做,
而 Notion 不好做的事,用 Vibe coding 做,
然後用 API 跟 Notion 溝通。
於是我想到,前面提到的任務排序問題,好像可以試著這樣解決。
Notion 按鈕中有一個 Webhook 功能,
可以發送請求出去,
所以只要在 Cloudflare 這類可以部署 Worker 的平台上部署一個 Worker,
在 Notion 用按鈕送請求到 Worker,
Worker 拿著任務 1 的資料,
發請求回 Notion 問「誰在任務 1 後面」,找到任務 2,
再發請求同時改任務 1 和任務 2 的排序值,
就實現這個功能啦!
本篇適合對象#
- 用 Notion 管理任務,想要實現用按鈕上下移動排序操作的人
本篇學習目標#
讀完這篇教學你會學到:
- 如何使用 Notion 資料庫按鈕的 Webhook 功能,搭配外部 Worker,實現 Notion 原生無法做到的操作
提示詞#
如果你想用 AI 全程輔助你完成這件事,可以直接複製以下提示詞貼給 AI。
它包含了整個方案的概念與步驟,AI 會一步步引導你做完,你就不一定要讀完整篇教學:
我想用按鈕來調整 Notion 任務資料庫的自訂排序:在某一列點「上移/下移/移到最上/移到最下」,那一列就會即時改變順序。請當我的教練,一步一步帶我從零完成並引導我,每一步先說明、等我做完回報後再進到下一步,遇到我卡住的地方就幫我排查。我可能不熟技術,請用白話解釋,必要時提供可直接複製的指令。
【這件事的核心概念(請先讓我理解再開始)】- Notion 原生拖拉一旦 view 設了排序規則就會失效,而 Notion API 也沒有「把某列移到某位置」的功能, 原生自動化又做不到「找出跟我相鄰的那一列、只改它和我」。所以做法是:- 在資料庫建一個 Number 屬性(例如叫 Order)當排序依據,view 用它升序排序; 順序的調整改成「修改 Order 的數字大小」來間接達成。- 用一個外部的 Cloudflare Worker 補上 Notion 缺的能力: Notion 按鈕的 Webhook 把「被點的那一列」送給 Worker, Worker 用 Notion API 找出相鄰/目標列,再同時改它們的 Order 值,完成「移動」。- 初始數字留間隔(100、200、300…),日後插入新列才不用整批重編;只看相對大小,不要求連續。
【請依序帶我完成這些階段】1. Notion 端:建立 Number 屬性 Order、設定 view 用 Order 升序排序、幫現有任務填上留間隔的初始數字。2. 建立 Notion Integration 取得存取權杖(token),並把這個 Integration 連上我的資料庫(否則 Worker 會沒權限)。3. Cloudflare Worker: - 幫我產生 Worker 程式碼與 wrangler 設定檔。 - 排序屬性名稱不要寫死,改用 Webhook 網址的 query 參數 ?prop=屬性名 傳入(例如 ?prop=Order),讓同一個 Worker 能服務多個資料庫。 - 提供這些動作(用網址結尾路徑區分): /order/up(與前一列互換)、/order/down(與後一列互換)、 /order/top(移到最前)、/order/bottom(移到最後,且 Order 留空的新任務也要能用)、 /order/normalize(把整個資料庫依現有順序重編成 100、200、300… 用來整平數字)。 - 安全性:支援選用的 WEBHOOK_SECRET,若有設定就檢查請求標頭 X-Webhook-Secret 是否相符,不符回 401。 - token 要用機密值方式交給 Cloudflare(wrangler secret),不要寫進任何檔案或貼到網頁。 - 教我用 wrangler 登入、設定機密值(NOTION_TOKEN、WEBHOOK_SECRET)並部署,最後給我 Worker 的網址。4. Notion 按鈕:教我在資料庫加上「上移/下移/移到最上/移到最下」四顆 Button, 每顆加一個「傳送 Webhook」動作,URL 用上面對應的路徑+?prop=Order; 若有設 WEBHOOK_SECRET,再各加一個自訂標頭 X-Webhook-Secret 填同樣的值。5. 測試:帶我點按鈕驗證順序有正確變化,沒反應時協助我排查(權限、屬性名、機密值、網址路徑)。6. 日常維護:說明新任務「Order 留空再點移到最下」即可自動補數字, 以及數字缺口越用越大時用 normalize 重新編號。
請先用兩三句話確認你理解我要做的事,然後從階段 1 開始帶我。(以上提示詞由 AI 根據這篇教學內容產出)
運作原理#
排序的實踐方式#
在任務資料庫中建立一個 Number 屬性(以下以 Order 作為示範),設定瀏覽模式按照這個屬性來排序。
架構與流程#
- 部署一個能夠接受請求的 Worker,使其能接受請求並發送請求回 Notion,更改需要更改的項目的 Order 屬性。
- 用 Notion 資料庫按鈕 中的 Webhook 功能,發送請求到 Worker,完成整個流程。
舉例來說:
任務 A 的 Order 是 100,任務 B 的 Order 是 200,
view 升序排序,所以畫面上 A 在 B 上面。
這時在任務 A 按「下移」:
- Notion 按鈕的 Webhook 把「被點的是 A」送給 Worker。
- Worker 拿著 A,回 Notion 查「誰是排在 A 後面、相鄰的那一列」,找到 B。
- Worker 發送修改請求,同時把 A 的 Order 改成 200、B 的 Order 改成 100(兩者互換)。
- view 依新的 Order 重排,A 落到 B 下面——畫面上就完成了一次「下移」。
「上移」是同樣的道理,只是改成跟「前一列」互換;
「移到最上/最下」則不是互換,而是直接給一個比目前全部都小(或都大)的數字。
開始前準備#
- 一個 Notion 帳號與一個任務資料庫
- 一個 Cloudflare 帳號(免費方案即可)
- 電腦上裝好 Node.js(到 https://nodejs.org 裝 LTS 版)
- 會終端機基本操作 (還不認識終端機的可以先看這篇簡單介紹:5 分鐘認識終端機和命令列)
第一部分:Notion 端設定#
步驟 1:建立 Order 排序屬性#
- 打開你的 Notion 任務資料庫
- 新增一個屬性,型別選 數字(Number),名稱打
Order - 幫現有任務填上初始數字,留間隔:100、200、300、400、500…
💡 為什麼留間隔?
留間隔之後,未來想在兩列中間插入新任務時不必把全部重編號。本工具也不要求數字連續,只看相對大小。
步驟 2:設定 view 用 Order 排序#
- 在資料庫右上角的設定選單 → 排序(Sort)
- 選
Order、升序(ascending)
步驟 3:建立 Notion Integration#
- 前往 https://www.notion.com/my-integrations
- 點 新連接(New integration),建立連接
- 名稱自訂,待會可以區別出來就好(例如
notion-db-order-changer) - 驗證方式選擇存取權杖
- 可以安裝的工作空間選擇任務資料庫所在的工作空間
- 名稱自訂,待會可以區別出來就好(例如
- 建立完成後,停在連接設定的頁面,待會會回來複製 token
步驟 4:把 Integration 連上資料庫#
- 回到任務資料庫頁面
- 右上角 ⋯ → 連接(Connections) → 選擇剛剛建立的
notion-db-order-changer→ 新增至頁面
第二部分:部署 Cloudflare Worker#
步驟 5:準備專案檔案#
到這裡下載 Worker 檔案下載後將 zip 解壓縮。
步驟 6:登入並設定權杖(Token)#
打開終端機,切換到剛剛步驟 5 解壓縮後的資料夾中。
💡 如果不知道怎麼操作,指令是:
Terminal window cd 剛剛的資料夾路徑
接著依序執行:
- 安裝 Cloudflare CLI(若還沒裝)
npm install -g wrangler- 登入 Cloudflare(會跳出瀏覽器授權)
npx wrangler login- 設定 Notion 權杖(Token)
npx wrangler secret put NOTION_TOKEN終端機會出現 Enter a secret value:,
這時回到步驟 3 的連接頁面中,
複製存取權杖(Internal Integration Secret),
回到終端機按 Ctrl/Cmd + V 貼上後按 Enter。

⚠️ 這個存取權杖等同密碼,不要貼到公開的地方。
- (選用但建議)再設一個密鑰,防止別人亂用你的 Worker:
npx wrangler secret put WEBHOOK_SECRET跟前面一樣,
出現 Enter a secret value:後,
輸入你自訂的密鑰後,按 Enter。
⚠️ 強烈建議不要填你常用的密碼,
因為這裡設定的密鑰只會在這個流程中用到,
待會 Notion 按鈕設定也會「直接顯示你輸入的值」,
不會當作「密碼」處理,
所以如果輸入常用的密碼反而會增添不必要的風險。
可以隨意打一些英數字就好,
只要 Worker 設定的密鑰跟 Notion 按鈕裡設定的密鑰內容相同就好。
步驟 7:部署#
npx wrangler deploy部署成功後會印出一行網址,像:
https://notion-db-order-changer.你的帳號.workers.dev這就是你的 Worker 的網址,
把這個網址複製起來,下一個部分會填入。
第三部分:設定四顆按鈕#
回到 Notion 任務資料庫,
加四個 按鈕(Button) 屬性。
編輯自動化,
每顆按鈕都加一個 傳送 Webhook(Send webhook) 動作,
URL 各自不同——靠網址結尾的路徑區分動作:

| 按鈕名稱 | Webhook URL(結尾路徑不同) |
|---|---|
| 上移 | https://notion-db-order-changer.你的帳號.workers.dev/order/up?prop=Order |
| 下移 | https://notion-db-order-changer.你的帳號.workers.dev/order/down?prop=Order |
| 移到最上 | https://notion-db-order-changer.你的帳號.workers.dev/order/top?prop=Order |
| 移到最下 | https://notion-db-order-changer.你的帳號.workers.dev/order/bottom?prop=Order |
💡
?prop=Order是什麼?
告訴 Worker「這個資料庫的排序屬性叫 Order」。如果你的排序屬性叫別的名字,換成那個名字即可(但建議用英文,並且不要有空格)。
如果在步驟 6 有設 WEBHOOK_SECRET,
每顆按鈕要再新增一個自訂標頭:金鑰填 X-Webhook-Secret、值填你設的那串密鑰。
內容(Content)區塊不用特別勾選——Worker 需要的 page ID 會自動隨 Webhook 送出。
第四部分:測試#
- 在任務資料庫點某一列的「上移」按鈕
- 那一列應該在一兩秒內往上移動一格
延伸:解決「新任務怎麼填 Order」與「數字越用越亂」的問題#
你可能會遇到兩個小麻煩,
目前的檔案中提供了一些解決方法:
麻煩一:新增任務時 Order 要填什麼?#
不用自己想數字。新增任務時 Order 留空,然後點一次「移到最下」(或「移到最上」),Worker 會自動給它一個適當的數字,排到清單尾端(或開頭)。
麻煩二:數字缺口越來越大#
「移到最上/最下」每用一次,就會讓數字往兩端擴張(例如一直按「移到最上」,數字會變成 -100、-200、-300…)。這不會出錯(順序永遠正確),只是數字變得不好看。
解法:加一顆 「重新編號」按鈕,Webhook URL 設為:
https://notion-db-order-changer.你的帳號.workers.dev/order/normalize?prop=Order按下去,Worker 會把整個資料庫依現有順序重新編成 100、200、300…,數字一次整平。
💡 建議偶爾操作即可
因為它會一次重寫整個資料庫的排序屬性的數值,如果資料庫越大,修改時間會越長。
其實排序數字屬性可以隱藏,所以這個功能不做也沒關係。
其他問題#
怎麼修改 Worker 的名稱?#
修改 wrangler.toml 檔案中的 name。
所以在這裡要留意,如果要做多個 Worker,記得名字要修改,不然部署時會直接覆蓋掉同名的 Worker。
結語#
其實我一開始不太想花太多時間在這篇教學上,
結果我還是花了很多時間 🙈
因為我覺得只要把重點概念提出來,
剩下的大家可以跟 AI 配合完成。
這篇的做法,其實是同一套概念的其中一種形式:
資料留在 Notion,畫面和操作自己另外做。
我把這套概念整理成了 Notion 擴增術,
想看更多形式的話,可以從那裡開始。
我不太確定這篇能不能真的幫到需要的人,
如果有任何反饋,歡迎來信 hey@hwahii.tw,
或在各個社群平台告訴我,
非常感謝!
如果這篇文章對你有幫助,
可以從這裡贊助支持我的創作 🙏