표현 레퍼런스
수신 웹훅 본문에 쓸 수 있는 마크다운 문법, 토큰, 블록, 마크, 색 전량
수신 웹훅 본문에 쓸 수 있는 것을 전부 정리합니다. text 형식은 마크다운과 토큰으로, blocks 형식은 블록 JSON 으로 씁니다. 요청 형식과 상한은 수신 웹훅 문서에 있습니다.
text 와 blocks 로 되는 것
| 표현 | text | blocks |
|---|---|---|
| 굵게 · 기울임 · 취소선 · 밑줄 · 인라인 코드 · 링크 | 예 | 예 |
| 목록 · 할 일 · 인용 · 코드블록 · 표 | 예 | 예 |
| 글자색 · 배경색 | 아니오 | 예 |
| 토글 (접기) | 아니오 | 예 |
| 이슈 · 변경 요청 · 문서 · 프로젝트 · 저장소 · 목표 · 문서 폴더 · 파이프라인 실행 · 채널 참조 | 예 | 예 |
| 스프린트 참조 | 아니오 | 예 |
| 날짜 | 예 | 예 |
| 제목 · 구분선 | 서식 없이 보임 | 서식 없이 보임 |
| 이미지 | 아니오 | 아니오 |
채팅 메시지는 제목을 제목 크기 없이 일반 글로 보여 주고, 구분선은 그리지 않습니다. 눈에 띄게 하려면 제목 대신 굵게를 쓰세요. 이미지는 CollabOps 에 업로드된 이미지를 가리키는 블록이라 웹훅으로는 보낼 수 없습니다. 외부 이미지는 링크로 거세요.
text 형식 — 마크다운
CommonMark 에 표와 취소선을 더한 문법을 해석합니다.
| 쓰는 법 | 결과 |
|---|---|
**굵게** | 굵게 |
*기울임* | 기울임 |
~~취소선~~ | 취소선 |
<u>밑줄</u> | 밑줄. HTML 태그는 이것만 해석하고, 다른 태그는 글자 그대로 보입니다. |
| 백틱 한 쌍으로 감싼 글자 | 인라인 코드 |
[글자](https://collabops.ai) | 링크 |
# ~ ###### 로 시작하는 줄 | 제목 1~6단계. 채팅에서는 일반 글처럼 보입니다. |
- 로 시작하는 줄 | 글머리 목록. 두 칸씩 들여쓰면 한 단계씩 깊어집니다 (최대 5단계). |
1. 로 시작하는 줄 | 번호 목록 |
- [ ] · - [x] 로 시작하는 줄 | 할 일 목록 (체크 안 됨 · 체크됨) |
> 로 시작하는 줄 | 인용 |
--- 만 있는 줄 | 구분선. 채팅에서는 보이지 않습니다. |
| 백틱 세 개로 감싼 블록 | 코드블록. 여는 백틱 뒤에 언어를 적을 수 있습니다. |
| GFM 표 문법 | 표. 구분 줄의 : 로 칸 정렬을 정합니다. |
| 줄바꿈 한 번 | 같은 문단 안에서 줄이 바뀝니다. |
| 빈 줄 | 문단이 나뉩니다. |
 | 이미지는 표시되지 않습니다. |
글자색, 배경색, 토글은 마크다운에 대응하는 문법이 없어서 blocks 형식으로만 쓸 수 있습니다.
토큰
text 안에 토큰을 쓰면 이슈 칩, 날짜 칩이 됩니다. 모양은 모두 같습니다.
{{종류:키=값|키=값}}키 순서는 상관없습니다. 종류나 필수 키가 맞지 않는 토큰은 오류 없이 적은 글자 그대로 보입니다. 새 토큰을 쓸 때는 처음 한 번 채널에서 칩으로 바뀌었는지 확인하세요.
참조 칩 — 이슈 · 변경 요청 · 문서 · 폴더 · 실행 · 채널 등
{{issue:slug=acme|key=42|label=로그인 오류}}
{{cr:slug=acme|key=318|label=세션 만료 수정}}
{{repo:slug=acme|key=7|label=web}}
{{run:slug=acme|key=128|label=nightly}}| 종류 | 가리키는 것 |
|---|---|
issue | 이슈 |
cr | 변경 요청 |
doc | 문서 |
project | 프로젝트 |
repo | 저장소 (repository 가 아닙니다) |
goal | 목표 |
folder | 문서 폴더 |
run | 파이프라인 실행 |
channel | 채팅 채널 |
| 키 | 필수 | 설명 |
|---|---|---|
slug | 예 | 워크스페이스 슬러그. 주소 https://collabops.ai/<슬러그>/… 의 그 값입니다. |
key | 예 | 번호. 이슈 #42 면 42 입니다. channel 만 번호 대신 채널 ID(UUID)를 씁니다. |
label | 권장 | 칩에 보일 제목. 칩은 실제 제목을 불러오지 않고 이 값을 그대로 보여 주므로 넣어 두세요. |
스프린트 참조는 text 토큰으로 만들 수 없습니다. {{sprint:…}} 와 {{repository:…}} 는 글자 그대로 남습니다. 저장소는 repo 로 쓰고, 스프린트가 필요하면 blocks 형식을 쓰세요.
날짜
{{date:iso=2026-09-23|hasTime=0}}
{{date:iso=2026-09-23T15:30:00+09:00|hasTime=1}}| 키 | 필수 | 설명 |
|---|---|---|
iso | 예 | YYYY-MM-DD 또는 ISO 8601 시각. 시각은 시간대를 붙여 쓰세요. 해석할 수 없는 값이면 글자 그대로 남습니다. |
hasTime | 아니오 | 1 이면 시각까지, 없거나 0 이면 날짜만 보입니다. |
토큰을 쓸 때 주의할 것
코드블록 안에는 토큰을 쓰지 마세요. 칩으로 바뀌지 않고 내부 자리표시자 글자가 보입니다.
굵게나 인라인 코드 안에 넣은 토큰도 칩이 되고, 감싼 서식은 사라집니다.
토큰 모양의 글자를 그대로 보여 주려면 여는 중괄호를 역슬래시로 이스케이프합니다. \{\{issue:…}} 는 칩이 되지 않고 {{issue:…}} 로 보입니다.
blocks 형식
blocks 는 블록 객체의 평평한 배열이고 배열 순서대로 그려집니다. 블록을 다른 블록 안에 넣지 않고, 토글은 parentId 로, 표는 tableId 로 관계를 나타냅니다.
| 필드 | 필수 | 설명 |
|---|---|---|
id | 예 | 이 메시지 안에서 겹치지 않는 문자열 |
type | 예 | 블록 종류 (아래 표) |
attrs | 종류마다 다름 | 블록 속성 |
children | 예 | 글 조각 배열. 글이 없는 블록은 빈 배열 [] |
parentId | 아니오 | 토글 안에 넣을 블록이면 그 토글의 id |
블록 종류
type | attrs | 설명 |
|---|---|---|
paragraph | 없음 | 문단 |
heading | level 1~6 (필수) | 제목. 채팅에서는 일반 글처럼 보입니다. |
listItem | kind bullet · ordered · task (필수), indent 0~5 (필수), checked (task), start (번호 목록 첫 항목) | 목록 항목. 들여쓰기가 더 큰 다음 항목이 하위 항목이 됩니다. |
blockquote | 없음 | 인용 |
codeBlock | language (선택) | 코드블록. children 에 서식 없는 텍스트 하나를 넣고 줄은 \n 으로 나눕니다. |
thematicBreak | 없음 | 구분선. children 은 []. 채팅에서는 보이지 않습니다. |
toggle | 없음 | 접기. children 은 접혔을 때 보이는 제목이고, 펼치면 보일 블록은 parentId 로 이 토글을 가리킵니다. 처음엔 접힌 채 보이고 누르면 펼쳐집니다. |
tableCell | tableId · rowIdx · colIdx (필수), colCount · columnAlign (표의 첫 셀에만) | 표의 칸. 같은 tableId 의 셀이 연달아 오면 한 표가 됩니다. 첫 행이 머리글입니다. |
table · image · columnList · column | 문서 편집기용 블록입니다. 표는 tableCell 로 만들고, 이미지는 웹훅으로 보낼 수 없습니다. |
글 조각 (children)
children 에는 텍스트 조각과 칩 조각을 섞어 넣습니다. 텍스트 조각은 marks 로 서식을 입힙니다.
[
{"text": "배포 완료 ", "marks": [{"type": "bold"}]},
{"type": "embed", "embedType": "entityRef",
"attrs": {"kind": "issue", "workspaceSlug": "acme", "entityKey": 42, "title": "로그인 오류"}},
{"type": "embed", "embedType": "date",
"attrs": {"iso": "2026-09-23", "hasTime": false}}
]embedType | attrs |
|---|---|
entityRef | kind · workspaceSlug · entityKey (정수. channel 은 채널 ID 문자열) · title (모두 필수) |
date | iso · hasTime (모두 필수) |
entityRef 의 kind 는 issue · cr · doc · project · repository · goal · sprint · folder · run · channel 10종입니다. 토큰과 달리 저장소는 repository 로 쓰고, 스프린트도 쓸 수 있습니다. 스프린트의 entityKey 는 스프린트 그룹 번호입니다. 칩은 title 을 그대로 보여 줍니다.
마크
type | attrs | 효과 |
|---|---|---|
bold | 굵게 | |
italic | 기울임 | |
strikethrough | 취소선 | |
underline | 밑줄 | |
code | 인라인 코드 | |
link | url (필수) | 링크 |
textColor | color (필수) | 글자색 |
bgColor | color (필수) | 배경색 |
한 조각에 마크 여러 개를 함께 쓸 수 있습니다. 예를 들어 [{"type": "bold"}, {"type": "link", "attrs": {"url": "https://collabops.ai"}}] 는 굵은 링크입니다.
색
color 에는 gray · amber · green · blue · coblue · purple · red 7가지 이름만 씁니다. 라이트·다크 테마에 맞는 실제 색은 화면이 정합니다. hex 값 같은 그 밖의 값은 422 입니다. 색을 빼려면 값을 넣지 않습니다.
블록의 attrs.textColor · attrs.bgColor 는 오류 없이 받지만 채팅 메시지에서는 칠해지지 않습니다. 채팅에서 색을 보이려면 글 조각에 textColor · bgColor 마크를 겁니다. 표 칸을 칠할 때도 칸의 attrs 가 아니라 칸 안 글 조각에 마크를 겁니다.
검증
blocks 는 채널에 올리기 전에 전부 검증합니다. 하나라도 규격에 맞지 않으면 메시지 전체를 422 로 거절하고, error.title 에 blocks.3 rejected 처럼 몇 번째 블록인지(0부터 셈) 적습니다.