DOCS/workflow/02_skills/slack_direct_api_send.md
happybell80 9cb0145a4e docs: 01_conversation + 02_skills 워크플로우 문서 현행화 — n8n 제거, SKILL.md+executor 기준 재작성
- coldmail_ir_notification_sync: LangGraph+APScheduler 기반으로 전면 재작성
- slack_action_extractor_request: v2 IntentClassifier→executor 흐름 기준 재작성
- slack_thread_summary_request: 동일
- message_flow_v2: _format_as_robeing() 해석 단계 보완
- skill_calendar/email/news_request: SKILL.md→executor 직접 호출 기준 재작성
- skill_slack_send_message_bridge: slack_sdk 직접 호출 + skill-slack HTTP 이중 경로 기술
- slack_direct_api_send: grounding 개선 사항 반영

Refs: DOCS#8

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 07:57:58 +09:00

3.4 KiB
Raw Blame History

type, tags, last_updated
type tags last_updated
workflow
workflow
slack
direct-api
bot-token
grounding
2026-04-06

Slack Direct API 메시지 전송 워크플로우

목적

에이전<EFBFBD><EFBFBD>(23 클로드 등)가 Slack API를 직접 호출하여 특정 워크스페이스 채널에 메시지를 보내는 경로. DB에 저장된 봇 토큰을 사용하여 직접 전송한다.

실측 경로 (260323 검증)

1. DB에서 봇 토큰 조회
   -- slack_workspace 테이블: slack_team_id -> bot_token

2. Slack API 호출
   -- POST https://slack.com/api/chat.postMessage
      Headers: Authorization: Bearer {bot_token}
      Body: { channel, text }

3. 응답 확인
   -- ok: true -> 전송 성공
   -- ok: false -> error 필드 확인

워크스페이스별 봇 토큰 조회

SELECT slack_team_id, bot_token, is_active
FROM slack_workspace;
워크스페이스 slack_team_id 용도
디지털비징_로빙 T0925SXPS4D 내부 테스트
컴퍼니엑스 T09C98KB933 실서비스 (Company X)

메시지 전송

curl -s -X POST \
  -H "Authorization: Bearer $BOT_TOKEN" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{
    "channel": "{channel_id}",
    "text": "메시지 내용"
  }' \
  "https://slack.com/api/chat.postMessage"

봇 토큰은 DB(slack_workspace 테이블)에서 조회한다. 환경변수 또는 코드에 하드코딩하지 않는다.

주의사항

  1. 봇 토큰으로 <20><>내면 발신자가 Robeing -- 봇이 자기 자신에게 보내는 꼴이라 로빙이 응답하지 않음
  2. 사용자에게 메시지를 보내려면 사용자의 user_id로 conversations.open 후 DM 채널 생성 필요
  3. 워크스페이스가 다르면 토큰도 다름 -- 반드시 대상 워크스페이스의 bot_token 사용
  4. channel_not_found 에러 -- 봇이 해당 채널에 접근 권한이 없거나, 다른 워크스페이스의 채널 ID를 사용한 경우

260323 실측 결과

시도 워크스페이스 채널 결과
1차 디지털비징_로빙 (T0925SXPS4D) D09DWLAV88Y channel_not_found (워크스페이스 불일치)
2차 디지털비징_로빙 D0935RJ8LLQ 전송 성공 (CTO DM) -- 단, 로빙 응답 없음 (봇->봇)
3차 컴퍼니엑스 (T09C98KB933) D09DWLAV88Y 전송 성공 -- 로빙 응답함 (grounding 질문만 답, 나머지 무시)

로빙 응답 분석 (260323) 및 이후 개선

질문 6개 중 "컴퍼니엑스가 뭐하<EBAD90><ED9598> 회사야?"만 답변. 나머지 5개(시간/날짜/이름/산수/대화이력) 전부 무시.

  • 원인: "컴퍼니엑스" 마커에 grounding이 트리거되면 RAG 결과만 반환하고 나머지 질문 드랍
  • 현행 개선: companyx_grounding_service.py에서 should_handle_companyx_grounding() 함수가 LLM이 명확한 의도를 이미 확정한 경우 grounding이 덮어쓰지 않도록 개선됨. _looks_like_companyx_grounding_question() 함수가 grounding 대상 여부를 사전 판별한다.
  • team_id 기반 <20><><EFBFBD>: Slack team_id로 워크스페이스를 식별하고, DB team UUID로 매핑한 후 grounding/RAG 검색에 활용

관련 문서