본문으로 건너뛰기
버전: 개발 버전 (최신)

관리자 Slack API

참고: 이 문서에 설명된 모든 API는 dta-wi-mono 모노레포의 dta-wi-medi-api 애플리케이션에 구현되어 있습니다.

개요

관리자 Slack API는 Slack을 통한 등록 관리 인터랙티브 기능을 제공합니다.

주요기능

  • Slack 등록 인터랙티브 처리: Slack에서 발생하는 등록 관련 인터랙티브 이벤트 처리
[POST] /v1/slack/interactive/registrations - Slack 등록 인터랙티브 처리

Slack 등록 인터랙티브 처리

Slack에서 발생하는 등록 관련 인터랙티브 이벤트를 처리합니다. 등록 모달 열기 또는 등록 승인 액션을 수행할 수 있습니다.

  • HTTP Method: POST
  • 인증: Slack Signature 검증 필요 (JWT 인증 불필요)

Headers

HeaderTypeDescriptionRequired
Content-Typeapplication/json요청 본문 형식
X-Slack-SignaturestringSlack 서명
X-Slack-Request-TimestampstringSlack 요청 타임스탬프

Request Body

필드타입설명Required
payloadstringSlack 인터랙티브 페이로드 (JSON 문자열)

Payload 구조

payload 필드는 JSON 문자열로, 파싱 후 다음과 같은 구조를 가집니다:

필드타입설명
userobjectSlack 사용자 정보
actionsarray인터랙티브 액션 배열
actions[0].valuestring액션 데이터 (JSON 문자열)
trigger_idstring모달 열기용 트리거 ID
containerobject메시지 컨테이너 정보
container.typestring컨테이너 타입 (예: 'message')
container.channel_idstring채널 ID (container.type이 'message'인 경우)
message.tsstring메시지 타임스탬프 (container.type이 'message'인 경우)

Actions[0].value 구조

actions[0].value는 JSON 문자열로, 파싱 후 다음과 같은 구조를 가집니다:

필드타입설명
actionstring액션 타입 ('open_modal' 또는 'approve')
dataobject액션 데이터

action: 'open_modal'인 경우 data 구조

필드타입설명
viewIdstring뷰 ID
messageDataobject메시지 데이터
doctorsarray의사 정보 배열
...restany기타 등록 관련 데이터

action: 'approve'인 경우 data 구조

필드타입설명
viewIdstring뷰 ID
messageDataobject메시지 데이터
doctorsarray의사 정보 배열
...restany기타 등록 관련 데이터

Request Body 예시

{
"payload": "{\"type\":\"block_actions\",\"user\":{\"id\":\"U12345678\",\"username\":\"john.doe\",\"name\":\"John Doe\"},\"actions\":[{\"action_id\":\"approve_registration\",\"value\":\"{\\\"action\\\":\\\"open_modal\\\",\\\"data\\\":{\\\"siteId\\\":\\\"123e4567-e89b-12d3-a456-426614174000\\\",\\\"doctors\\\":[{\\\"name\\\":\\\"김철수\\\",\\\"email\\\":\\\"doctor@example.com\\\"}],\\\"viewId\\\":\\\"V12345\\\",\\\"messageData\\\":{}}}\"}],\"trigger_id\":\"1234567890.1234567890.abc123def456\",\"container\":{\"type\":\"message\",\"channel_id\":\"C12345678\"},\"message\":{\"ts\":\"1234567890.123456\"}}"
}

Responses

Http Status Code설명Error Code(s)
200 OK처리 성공-
400 Bad Request잘못된 요청-
401 UnauthorizedSlack 서명 검증 실패-
500 Internal Server Error서버 내부 오류1092
200 OK - 성공 (open_modal)

등록 모달이 성공적으로 열렸을 때의 응답입니다. Slack API 응답 형식을 따릅니다.

200 OK - 성공 (approve)

등록 승인이 성공적으로 처리되었을 때의 응답입니다. 커맨드 실행 결과를 반환합니다.

400 Bad Request - 잘못된 액션 타입

알 수 없는 action 타입인 경우, 로그를 남기고 처리를 종료합니다.

401 Unauthorized - Slack 서명 검증 실패

Slack 서명이 유효하지 않은 경우 발생합니다.

처리 흐름

1. open_modal 액션

  1. Slack payload에서 trigger_id, 등록 데이터, 의사 정보 추출
  2. container.type이 'message'인 경우 채널 ID와 메시지 타임스탬프 추출
  3. OpenSheetRegistrationModalCommand 실행하여 Slack 모달 열기

2. approve 액션

  1. Slack payload에서 viewId, 등록 데이터, 의사 정보, 메시지 데이터, 사용자 정보 추출
  2. ApproveSheetRegistrationCommand 실행하여 등록 승인 처리

참고사항

  • 이 API는 Slack Signature 검증을 통해 인증됩니다 (JWT 인증 불필요)
  • Slack 워크스페이스의 'siteRegistration' 설정과 연동되어 작동합니다
  • 알 수 없는 action 타입이 전달되면 경고 로그를 남기고 처리를 종료합니다