New integration → Internal 선택, 이름 짓기(예: 노닥컴퍼니). 대상 워크스페이스 선택.
생기면 Internal Integration Token(ntn_... 또는 secret_...) 복사.
이 토큰 = 봇의 신분증. 채널·깃에 절대 노출 금지. 어디 저장하는지는 4번에서.
3
페이지에 integration "연결"
⭐ 다들 여기서 빠뜨려. 뽀야가 처음에 막힌 것도 여기
왜 이 단계가 따로 있냐면 — 노션은 신분증이 있다고 아무 페이지나 보여주지 않아. 회사 출입증을 받아도 회의실마다 따로 문을 열어줘야 하는 것과 같아. 그래서 "이 봇은 이 페이지를 봐도 된다"를 페이지 쪽에서 허락해줘야 해.
토큰만 있으면 인증은 되는데, 접근할 수 있는 페이지가 0개야. 그 integration을 볼 페이지마다 손으로 명시적으로 연결해줘야 해.
노션에서 연동할 페이지 열기 → 우상단 ••• → 연결(Connections) → 아까 만든 integration 추가.
상속 규칙 (이거 알면 연결 횟수 확 줄어)
상위 페이지에 연결하면 그 밑 자식 페이지는 전부 자동 상속. → "회사 폴더" 페이지 하나에만 걸고 그 밑에 다 쌓으면 추가 연결 0번.
단, "워크스페이스"는 페이지가 아니야. 워크스페이스 직속 최상위 페이지끼리(형제 관계)는 상속이 안 걸려. 형제는 각각 따로 연결.
즉 "상위→하위 자동"의 그 상위는 워크스페이스가 아니라 페이지여야 해.
뽀야 팁: 검색했는데 페이지 0개면 100% 이 단계 안 한 거야. 토큰을 의심하지 말고 여기로 돌아와.
4
토큰을 env에 저장
시크릿은 한 곳에만 — SSOT
env가 뭐야? 프로그램이 실행될 때 읽는 설정 쪽지야. 토큰 같은 비밀값을 코드에 직접 쓰면 깃에 올라가서 새니까, 코드 바깥의 이 쪽지에 적어두고 코드는 "이름"으로만 불러 쓰는 거야. 우리 집 쪽지는 ~/.openclaw/workspace/.env딱 한 장이고, 사본을 두지 않는 게 규칙이야.
SSOT는 ~/.openclaw/workspace/.env딱 한 곳. 다른 데 사본 두지 마. OpenClaw가 워크스페이스 env를 봇한테 자동 주입해줘.
# Notion (워크스페이스=닿무실, bot=노닥컴퍼니) — 업무용 기본값
NOTION_API_TOKEN=ntn_xxxxxxxx
NOTION_API_VERSION=2026-03-11
# Notion 개인용 (bot=닿무실) — 개인 페이지 만질 때만
NOTION_API_TOKEN_PERSONAL=ntn_yyyyyyyy
토큰 여러 개 관리 방침: 기본 스킬(md2notion 등)은 전부 NOTION_API_TOKEN(업무용)만 자동으로 봐. 개인 노션 만질 때만 NOTION_API_TOKEN_PERSONAL을 명시적으로 export. 같은 워크스페이스라도 integration이 다르면 연결된 페이지 범위가 다르거든 → 그래서 분리해둔 거야.
5
ntn으로 검증
진짜 연결됐는지 눈으로 확인
ntn은 보통 이미 깔려 있어(ntn --version). 없으면 npm install -g ntn. NOTION_API_TOKEN만 있으면 인증 헤더는 알아서 붙여줘.
cd ~/.openclaw/workspace
set -a; source .env; set +a
export NOTION_API_TOKEN NOTION_API_VERSION
# ① 토큰 유효성 + 어느 integration인지
ntn api v1/users/me # → bot.name, workspace_name 확인# ② 접근 가능한 페이지 목록 (연결이 제대로 됐는지)
ntn api v1/search page_size:=10
# ③ 페이지 읽기 (Markdown + frontmatter)
ntn pages get <page-id>
# ④ 하위 페이지 만들기
ntn pages create --parent page:<parent-page-id> --content '# 제목
본문'
# ⑤ 페이지 휴지통으로
ntn pages trash <page-id> --yes