--- type: workflow tags: [workflow, slack, thread-summary, skill-slack, intent] last_updated: 2026-04-06 --- # slack_thread_summary_request 워크플로우 ## 목적 Slack 메시지에서 "요약/정리/digest/summary" 의도를 감지하면, skill-slack의 요약 API를 호출하여 결과를 반환한다. ## 현행 아키텍처 v2 메시지 흐름(IntentClassifier → executor)을 통해 처리된다. n8n Trigger, 별도 webhook은 사용하지 않는다. ## 흐름 ``` 사용자 발화 ("스레드 요약해줘", "대화 정리해줘") → message_service_v2.route_message() → IntentClassifier.classify() — SKILL.md 본문에서 skill-slack 트리거 매칭 — IntentResult(skill="skill-slack", action="slack_thread", slots=...) → executor.execute() — registry에서 SKILL_SLACK_URL 환경변수 해소 — POST {SKILL_SLACK_URL}/api/v1/summarize (httpx) → _format_as_robeing() — 결과를 자연어로 변환 → 채널 응답 ``` ## 주요 코드 경로 | 단계 | 코드 | |------|------| | 진입 | `app/services/message_service_v2.py:route_message()` | | 의도분류 | `app/services/brain/intent_classifier.py:IntentClassifier.classify()` | | 스킬 실행 | `app/services/skills/executor.py:execute()` | | URL 해소 | `app/services/skills/registry.py:SkillMeta.resolve_url()` | | 스킬 정의 | `DOCS/skills/skill-slack/SKILL.md` (트리거: `slack_thread`) | ## 엔드포인트 - **아웃바운드**: `POST {SKILL_SLACK_URL}/api/v1/summarize` — skill-slack 서비스 - `SKILL_SLACK_URL` 환경변수로 해소. IP 하드코딩 없음 ## 관련 문서 - [message_flow_v2.md](./message_flow_v2.md) — v2 메시지 흐름 - [slack_action_extractor_request.md](./slack_action_extractor_request.md) — 액션 추출 (같은 skill-slack) - [skill-slack SKILL.md](/home/admin/robeing/DOCS/skills/skill-slack/SKILL.md) — 스킬 계약