Slack에서 승인하기
n8n v2.34요약
미리보기 기능은 향후 릴리스에서 변경될 수 있습니다. Message > Send and Wait for Response 작업을 사용하면, 승인자는 Slack 안에서 직접 승인하거나 거부할 수 있습니다. Slack 내에서 승인하려면 다음이 필요합니다:
이 기능은 미리보기 상태입니다
미리보기 기능은 향후 릴리스에서 변경될 수 있습니다. 프로덕션 워크플로에서는 의존하지 마세요. n8n이 이 기능을 점진적으로 출시하고 있으므로, 아직 인스턴스에서 사용할 수 없을 수도 있습니다.
Message > Send and Wait for Response 작업을 사용하면, 승인자는 Slack 안에서 직접 승인하거나 거부할 수 있습니다. 브라우저 페이지가 열리지 않습니다: 누군가 응답하는 즉시 워크플로가 재개되며, 출력에는 누가 응답했는지가 기록됩니다.
링크 버튼과의 차이점#
| 항목 | 링크 버튼(기본값) | Slack에서 승인하기 |
|---|---|---|
| 결정이 이루어지는 곳 | 브라우저에서 n8n 페이지를 엽니다 | Slack 안에서 클릭 한 번 |
| 누가 응답할 수 있는지 | 링크를 클릭할 수 있는 모든 사람 | 지정한 승인자만 가능(목록이 비어 있으면 메시지를 볼 수 있는 모든 사람이 응답 가능). 그 외의 사람에게는 직접 작성할 수 있는 비공개 알림이 표시되며, 워크플로는 계속 대기합니다. |
| 출력 | approved와 respondedAt |
응답자 정보(ID, 이름, 사용자 이름, 이메일)와 채널 및 메시지를 추가로 포함 |
| 결정 이후 메시지 | 변경 없음. 버튼은 계속 클릭 가능한 상태로 남지만, 이후 클릭 시 "조치가 필요하지 않습니다" 페이지가 표시됩니다. 첫 번째 결정이 유지됩니다. | 선택 가능: 결과를 표시하고 버튼 제거(기본값), 버튼만 제거, 또는 메시지를 그대로 유지 |
| 보안 | 서명된 링크: 아무도 URL이나 동작을 변조할 수 없지만, 링크를 가진 사람은 누구나 응답할 수 있으며 n8n은 누가 클릭했는지 알 수 없습니다 | n8n은 모든 콜백이 Slack에서 왔는지 검증하고(Slack의 요청 서명 사용), 응답자를 승인자 목록과 대조해 확인합니다 |
요구 사항#
Slack 내에서 승인하려면 다음이 필요합니다:
- Slack에서 공개 HTTPS로 접근할 수 있는 n8n 인스턴스. 누군가 응답하면 Slack이 인스턴스를 다시 호출하므로, localhost에서 실행 중인 인스턴스는 작동하지 않습니다.
- API 액세스 토큰이나 OAuth2를 사용하는 Slack 자격 증명.
- Slack 자격 증명의 Signature Secret 필드에는 Settings > Basic Information에서 확인할 수 있는 Slack 앱의 서명 비밀(signing secret)이 있어야 합니다. 이것이 없으면 버튼은 표시되지만 클릭해도 워크플로가 재개되지 않습니다.
- Response Type을 Approval로 설정.
users:read및users:read.email스코프. 응답자의 ID, 이름, 사용자 이름은 Slack의 인터랙션 페이로드에서 가져오고, 이메일은 Slack API에서 가져오며 이 스코프가 필요합니다. 스코프가 없으면 출력에서 이메일이 생략될 뿐입니다. 이 기능이 존재하기 전에 생성된 OAuth2 자격 증명을 사용한다면,users:read.email스코프를 적용받도록 다시 연결하세요.
승인 설정하기#
1. Slack 앱 및 자격 증명 생성하기#
API 액세스 토큰 사용하기 또는 OAuth2 사용하기를 따라 Slack 앱을 생성하고 자격 증명을 설정하세요. 앱의 스코프를 설정할 때, 출력에 응답자의 이메일이 포함되도록 users:read와 users:read.email을 추가하세요.
2. Interactivity 켜기#
- Slack에서 Your Apps로 이동해 사용할 앱을 선택합니다.
- Features > Interactivity & Shortcuts로 이동해 Interactivity를 켭니다.
- Request URL에
https://<your-n8n-instance>/webhook-waiting-slack을 입력합니다. 인스턴스의 모든 워크플로는 이 하나의 URL을 공유합니다.N8N_ENDPOINT_WEBHOOK_WAIT환경 변수를 변경했다면, 경로를 그에 맞게 조정하세요. - Save Changes를 선택합니다.
Slack은 앱당 하나의 Request URL만 허용하므로, 하나의 Slack 앱은 하나의 n8n 인스턴스를 지원합니다.
3. 자격 증명에 서명 비밀 추가하기#
- Slack 앱에서 Settings > Basic Information으로 이동해 App Credentials 섹션에서 Signing Secret을 복사합니다.
- n8n에서 Slack 자격 증명의 Signature Secret 필드에 이를 붙여넣습니다.
n8n은 서명 비밀을 사용해 각 콜백이 Slack에서 왔는지 검증합니다. 검증에 실패한 콜백은 n8n이 거부하며, 워크플로는 계속 대기합니다.
4. 노드 설정하기#
Slack 노드에서 Send and Wait for Response 작업과 함께 Message 리소스를 선택하고, Response Type을 Approval로 설정합니다. 그러면 아래 설정이 Advanced Interactivity 섹션 헤더 아래에 나타납니다.
- Capture Who Responded: 이를 켜면 승인 버튼이 Slack 인터랙티브 버튼으로 전환되고 누가 응답했는지 기록됩니다. 켜면 나머지 설정이 나타납니다.
- Restrict Who Can Approve: 조치를 취할 수 있는 사용자를 선택합니다. 표현식으로 사용자 ID를 지정할 수도 있습니다. 목록에 없는 사람이 클릭하면 비공개 알림을 받으며, 워크플로는 계속 대기합니다.
- Unauthorized Reply: 클릭했지만 승인자 목록에 없는 사람에게 표시되는 비공개(임시) 메시지입니다. 기본값은
You are not authorized to respond to this request.입니다. - After Decision: 누군가 승인하거나 거부한 후 원본 Slack 메시지에 어떤 일이 일어나는지입니다.
- Show Outcome and Remove Buttons(기본값): 버튼을 제거하고 결정과 응답자를 명시하는 줄을 추가합니다.
- Remove Buttons Only: 결과 줄을 추가하지 않고 버튼만 제거합니다.
- Keep Message Unchanged: 버튼을 포함해 메시지를 전송된 그대로 유지합니다. 이후 클릭은 기록된 결정(첫 번째 결정)을 바꾸지 않습니다.
승인자 목록을 비워두면, 메시지를 볼 수 있는 모든 사람이 승인하거나 거부할 수 있습니다. 채널에서는 모든 멤버가 여기에 해당합니다. 이 목록은 누가 요청을 볼 수 있는지가 아니라 누가 응답할 수 있는지를 제어하므로, 민감한 승인 요청은 비공개 채널이나 다이렉트 메시지로 게시하세요.
5. 테스트하기#
워크플로를 실행하고, Slack에서 Approve를 선택한 다음, 노드 출력을 확인하세요.
노드 출력#
Slack에서 누군가 응답하면, 노드는 결정과 응답자를 출력합니다:
{
"data": {
"approved": true,
"respondedAt": "2025-07-13T12:34:56.000Z",
"channel": "C0123ABC456",
"messageId": "1752407696.123456",
"responder": {
"id": "U0123ABC456",
"name": "Jo Doe",
"username": "jo.doe",
"email": "jo@example.com",
"source": "slack"
}
}
}
링크 버튼을 사용하면, 출력에는 approved와 respondedAt만 포함됩니다.
대신 링크 버튼을 받는 경우#
다음 중 하나라도 해당되면, 노드는 이전과 동일하게 동작하여 n8n 확인 페이지를 여는 버튼을 전송합니다:
- 아직 인스턴스에서 이 기능이 활성화되지 않았습니다.
- Response Type이 Free Text 또는 Custom Form입니다.
- Capture Who Responded가 꺼져 있습니다.
기존 워크플로는 변경 없이 계속 작동합니다.
문제 해결#
- 버튼을 눌러도 아무 일도 일어나지 않거나 Slack에 경고가 표시됨: Request URL이 잘못되었거나, 인스턴스가 HTTPS로 공개적으로 접근 가능하지 않거나, Signature Secret이 없거나 잘못되었습니다. Slack은 거부된 콜백과 접근 불가능한 URL에 대해 동일한 경고를 표시합니다.
- 누군가 "not authorized" 응답을 받음: 해당 사용자가 Restrict Who Can Approve에 나열되어 있지 않습니다. 문구는 Unauthorized Reply에서 가져옵니다.
- 누군가 응답했는데도 워크플로가 재개되지 않음: Signature Secret이 없거나 앱의 Signing Secret과 일치하지 않습니다. n8n은 검증할 수 없는 콜백을 거부하며, 워크플로는 계속 대기합니다.