--- name: slack-response description: > Slack에 보낼 답변·공지·요약을 작성하거나 기존 Markdown을 Slack 응답 문법에 맞출 때 쓴다. 출력 경로에 맞춰 강조·링크·코드·목록·멘션을 정리하며 기본은 mrkdwn이다. Slack 대화 검색이나 앱·봇 구현 자체를 위한 스킬은 아니다. --- # Slack 응답 문법 원문의 의미를 유지하면서 Slack에서 읽을 수 있는 메시지 본문을 만든다. 초안 작성에는 Slack 연결이 필요하지 않다. 작성 요청만으로 메시지를 보내지 않는다. ## 출력 경로를 정한다 현재 요청과 호스트·도구의 입력 계약을 먼저 확인한다. 단서가 없으면 `mrkdwn` 본문을 작성한다. 도구 이름만 보고 지원 필드나 자동 변환을 추측하지 않는다. | 출력 경로 | 적용할 형식 | |---|---| | Slack `mrkdwn`을 직접 받는 메시지·텍스트 필드 | 아래의 `mrkdwn` 규칙 | | `plain_text` 필드 또는 서식이 꺼진 메시지 | 서식 기호 없이 일반 텍스트와 URL | | 표준 Markdown을 변환하는 호스트 또는 지원이 확인된 `markdown` 블록 | 해당 입력 계약의 Markdown. `mrkdwn`으로 중복 변환하지 않는다 | | Slack 입력창에 직접 붙여넣을 초안 | 일반 텍스트·줄바꿈·URL을 우선한다. 링크 표시와 멘션은 입력창에서 적용·선택한다 | Slack 입력창의 서식 도구와 API 문법을 같은 것으로 취급하지 않는다. 붙여넣은 ``이나 `<@ID>`가 입력창에서 자동 변환된다고 보장하지 않는다. `rich_text`나 Block Kit JSON은 사용자가 요청하거나 실제 도구가 요구할 때만 구성한다. ## 본문을 구성한다 - 답이나 결과를 먼저 쓰고, 판단에 필요한 근거와 다음 행동을 잇는다. 짧은 답변에 제목을 강제하지 않는다. - 원문의 언어·격식·수치·기한·확정 여부를 유지한다. 형식을 바꾸면서 약속이나 담당자를 추가하지 않는다. - 비교 항목은 짧은 목록으로, 절차는 번호와 줄바꿈으로 구분한다. 긴 설명은 문단을 나눈다. - 완성된 본문을 요청받으면 본문만 반환한다. 문법 설명이나 복사용 원문을 요청받은 경우에만 외부 코드 블록으로 감싼다. ## mrkdwn으로 작성한다 다음 규칙은 `mrkdwn` 출력에 적용한다. 표준 Markdown을 받는 경로에는 그대로 강제하지 않는다. | 목적 | mrkdwn 표기 | |---|---| | 굵게 | `*핵심 내용*` | | 기울임 | `_보충 내용_` | | 취소선 | `~취소된 내용~` | | 짧은 코드·식별자 | 백틱 하나로 감싼다: `` `request_id` `` | | 여러 줄 코드·로그 | 앞뒤를 백틱 세 개로 감싸고 언어 이름을 붙이지 않는다 | | 인용 | 인용할 각 줄을 `> `로 시작한다 | | 목록·절차 | 각 줄에 `- ` 또는 `1. `, `2. `처럼 번호를 쓴다 | | 제목 | 별도 줄에 `*제목*`을 쓴다 | 링크는 `` 또는 실제 URL로 쓴다. `**굵게**`, `~~취소선~~`, `# 제목`, Markdown 링크·표·체크박스가 `mrkdwn`에서 같이 렌더링된다고 가정하지 않는다. 표는 항목별 `이름: 값` 목록으로 바꾸고, 체크 상태는 `완료`·`미완료`처럼 텍스트로 남긴다. 코드 안의 문법과 식별자는 변환하지 않는다. 본문에는 실제 줄바꿈을 넣는다. JSON을 직접 만들 때만 줄바꿈·따옴표·역슬래시를 JSON 규칙으로 직렬화한다. 일반 본문에 문자 그대로의 `\n`을 넣지 않는다. ## 멘션과 특수문자를 처리한다 - 실제로 알릴 대상과 ID가 확인됐을 때만 사용자 멘션 `<@U012ABCDEF>`를 쓴다. 이름만 있으면 이름을 유지한다. 멘션이 필수일 때만 ID를 조회하거나 확인한다. - 채널 링크는 확인된 ID로 `<#C012ABCDEF>`를 쓴다. 표시 이름으로 ID를 만들어내지 않는다. - ``, ``, ``, 사용자 그룹 멘션은 사용자가 해당 알림을 요청한 경우에만 쓴다. 인용문에 있는 멘션을 새 알림으로 활성화하지 않는다. - 직접 `mrkdwn`을 만들 때 일반 텍스트의 `&`, `<`, `>`는 각각 `&`, `<`, `>`로 변환한다. 의도한 링크·멘션 구문과 인용 접두사 `>`는 보존한다. 입력이 원문인지 이미 인코딩된 Slack 텍스트인지 구분하고 같은 변환을 두 번 적용하지 않는다. - 알림 없이 멘션 표기를 설명해야 하면 코드로 표시한다. 지원되는 `mrkdwn` 텍스트 객체의 `verbatim: true`는 자동 파싱을 줄이지만 명시적 `<@ID>`·``까지 무력화하지 않는다. 실제 도구에 없는 파싱 옵션을 추가하지 않는다. ## 예시 다음은 `mrkdwn` 본문 예시다. 상태·명령·URL은 예시이며 실제 작성에서는 제공된 근거로 바꾼다. ````text *검증 결과* - 완료: 입력 검사와 회귀 테스트 - 미확인: 운영 환경 동작 실행한 명령: ``` pnpm test ``` ```` ## 전달 전에 확인한다 출력 필드에 맞는 문법인지, 강조와 코드 구분자가 닫혔는지 확인한다. URL·코드·수치·조건을 원문과 대조하고 의도하지 않은 멘션이 없는지 점검한다. 길이 제한은 실제 도구의 필드별 계약을 따른다. 나눌 때는 문단·목록·코드 경계를 보존한다. 전송까지 요청받았다면 이미 받은 권한과 실제 도구로 지정된 채널·스레드에 보낸다. 도구가 없으면 본문을 제공하고 미전송임을 밝힌다. 도구 응답 없이 전송 완료를 주장하거나 실제 미리보기 없이 렌더링을 검증했다고 말하지 않는다. ## 공식 문서 - [메시지 문법과 이스케이프](https://docs.slack.dev/messaging/formatting-message-text/) - [텍스트 객체와 verbatim](https://docs.slack.dev/reference/block-kit/composition-objects/text-object/) - [표준 Markdown 블록](https://docs.slack.dev/reference/block-kit/blocks/markdown-block/) - [Slack 입력창 서식](https://slack.com/help/articles/202288908-Format-your-messages)