Notion 任務資料庫自訂排序:用按鈕實現一鍵上移下移

Notion 任務資料庫自訂排序:用按鈕實現一鍵上移下移

發布於 ・閱讀時間約 8 分鐘

目錄

成果預覽#

前言#

使用 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 按「下移」:

  1. Notion 按鈕的 Webhook 把「被點的是 A」送給 Worker。
  2. Worker 拿著 A,回 Notion 查「誰是排在 A 後面、相鄰的那一列」,找到 B。
  3. Worker 發送修改請求,同時把 A 的 Order 改成 200、B 的 Order 改成 100(兩者互換)。
  4. view 依新的 Order 重排,A 落到 B 下面——畫面上就完成了一次「下移」。

「上移」是同樣的道理,只是改成跟「前一列」互換;
「移到最上/最下」則不是互換,而是直接給一個比目前全部都小(或都大)的數字。


開始前準備#

  • 一個 Notion 帳號與一個任務資料庫
  • 一個 Cloudflare 帳號(免費方案即可)
  • 電腦上裝好 Node.js(到 https://nodejs.org 裝 LTS 版)
  • 會終端機基本操作 (還不認識終端機的可以先看這篇簡單介紹:5 分鐘認識終端機和命令列

第一部分:Notion 端設定#

步驟 1:建立 Order 排序屬性#

  1. 打開你的 Notion 任務資料庫
  2. 新增一個屬性,型別選 數字(Number),名稱打 Order
  3. 幫現有任務填上初始數字,留間隔:100、200、300、400、500…

💡 為什麼留間隔?
留間隔之後,未來想在兩列中間插入新任務時不必把全部重編號。本工具也不要求數字連續,只看相對大小。

步驟 2:設定 view 用 Order 排序#

  1. 在資料庫右上角的設定選單 → 排序(Sort)
  2. Order升序(ascending)

步驟 3:建立 Notion Integration#

  1. 前往 https://www.notion.com/my-integrations
  2. 新連接(New integration),建立連接
    • 名稱自訂,待會可以區別出來就好(例如 notion-db-order-changer
    • 驗證方式選擇存取權杖
    • 可以安裝的工作空間選擇任務資料庫所在的工作空間
  3. 建立完成後,停在連接設定的頁面,待會會回來複製 token

步驟 4:把 Integration 連上資料庫#

  1. 回到任務資料庫頁面
  2. 右上角 連接(Connections) → 選擇剛剛建立的 notion-db-order-changer → 新增至頁面

第二部分:部署 Cloudflare Worker#

步驟 5:準備專案檔案#

到這裡下載 Worker 檔案

下載後將 zip 解壓縮。

步驟 6:登入並設定權杖(Token)#

打開終端機,切換到剛剛步驟 5 解壓縮後的資料夾中。

💡 如果不知道怎麼操作,指令是:

Terminal window
cd 剛剛的資料夾路徑

接著依序執行:

  1. 安裝 Cloudflare CLI(若還沒裝)
Terminal window
npm install -g wrangler
  1. 登入 Cloudflare(會跳出瀏覽器授權)
Terminal window
npx wrangler login
  1. 設定 Notion 權杖(Token)
Terminal window
npx wrangler secret put NOTION_TOKEN

終端機會出現 Enter a secret value:
這時回到步驟 3 的連接頁面中,
複製存取權杖(Internal Integration Secret)
回到終端機按 Ctrl/Cmd + V 貼上後按 Enter。

在連接設定頁面,點存取權杖欄位右側的複製按鈕
在連接設定頁面,點存取權杖欄位右側的複製按鈕

⚠️ 這個存取權杖等同密碼,不要貼到公開的地方。

  1. (選用但建議)再設一個密鑰,防止別人亂用你的 Worker:
Terminal window
npx wrangler secret put WEBHOOK_SECRET

跟前面一樣,
出現 Enter a secret value:後,
輸入你自訂的密鑰後,按 Enter。

⚠️ 強烈建議不要填你常用的密碼
因為這裡設定的密鑰只會在這個流程中用到,
待會 Notion 按鈕設定也會「直接顯示你輸入的值」,
不會當作「密碼」處理,
所以如果輸入常用的密碼反而會增添不必要的風險。
可以隨意打一些英數字就好,
只要 Worker 設定的密鑰跟 Notion 按鈕裡設定的密鑰內容相同就好。

步驟 7:部署#

Terminal window
npx wrangler deploy

部署成功後會印出一行網址,像:

https://notion-db-order-changer.你的帳號.workers.dev

這就是你的 Worker 的網址,
把這個網址複製起來,下一個部分會填入。

第三部分:設定四顆按鈕#

回到 Notion 任務資料庫,
加四個 按鈕(Button) 屬性。
編輯自動化,
每顆按鈕都加一個 傳送 Webhook(Send webhook) 動作,
URL 各自不同——靠網址結尾的路徑區分動作:

在按鈕的「新動作」選單中選擇「傳送 Webhook」
在按鈕的「新動作」選單中選擇「傳送 Webhook」
按鈕名稱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 送出。

第四部分:測試#

  1. 在任務資料庫點某一列的「上移」按鈕
  2. 那一列應該在一兩秒內往上移動一格

延伸:解決「新任務怎麼填 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
或在各個社群平台告訴我,
非常感謝!

如果這篇文章對你有幫助,
可以從這裡贊助支持我的創作 🙏

留言