본문으로 건너뛰기
버전: 0.66.0

관리자 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 타입이 전달되면 경고 로그를 남기고 처리를 종료합니다