# Slack 3초 타임아웃 해결 및 스킬 호출 문제 **날짜**: 2025-07-23 **작업자**: happybell80 & Claude ## 오전 1시 00분 ### Slack 3초 타임아웃 문제 완전 해결 **배경**: - 이전에 subprocess.run()을 asyncio.create_subprocess_exec()로 변경했으나 - asyncio import 누락으로 실패 **해결**: ```python # gemini_service.py에 asyncio import 추가 import asyncio ``` **결과**: - Slack 재시도 없음 (RETRY, timeout 관련 로그 0건) - 응답 시간: 1.8ms ~ 4.8ms로 즉시 200 OK 반환 - Gemini 처리: 5~6초 소요 (비동기로 정상 작동) ### Slack 메시지 중복 처리 문제 해결 **문제**: - 하나의 메시지가 message와 app_mention 두 번 처리 - 결과적으로 같은 답변 2번 전송 **원인**: - Slack에서 멘션(@로빙)이 포함된 메시지는 두 이벤트 모두 발생 **해결**: ```python # app_mention이거나 DM인 message만 처리 is_dm = event.get("channel_type") == "im" if event_type == "app_mention" or (event_type == "message" and is_dm): # 처리 로직 ``` **결과**: - DM: message 이벤트로 처리 - 채널 멘션: app_mention 이벤트로만 처리 - 중복 응답 방지 완료 ## 오전 1시 10분 ### 이메일 스킬 호출 문제 발견 **증상**: - 사용자: "메일 확인해줘" - Gemini: "로빙은 이메일 서비스를 통해 메일을 확인할 수 있습니다..." - 실제 email_skill 호출 없음 **로그 분석**: ``` 16:08:06 - builtin_skills 2개 설치됨 16:09:43 - Gemini 응답: "메일 확인하겠다" 16:12:03 - Gemini 응답: "읽지 않은 메일 확인하겠다" ``` - email_skill 관련 로그 전무 - skill 호출 로그 없음 **문제점 정리**: 1. **스킬 미설치**: email_skill이 builtin_skills에 포함되지 않음 2. **Gemini만 답변**: 실제 스킬 호출 없이 텍스트 답변만 생성 3. **스킬 라우팅 실패**: RobeingBrain이 스킬로 라우팅하지 않음 **예상 원인**: - email_skill이 builtin_skills에 등록되지 않음 - 또는 스킬 매칭 로직이 작동하지 않음 - Gemini가 단순 텍스트 응답만 생성 ## 교훈 1. **비동기 처리 시 import 확인 필수** - asyncio 등 필요한 모듈 import 누락 주의 - 특히 동기→비동기 변환 시 체크 2. **Slack 이벤트 중복 처리 주의** - 멘션이 있는 메시지는 두 가지 이벤트 발생 - channel_type으로 DM 구분 필요 3. **스킬 시스템 통합 테스트 필요** - 스킬이 실제로 호출되는지 확인 - Gemini 응답과 스킬 실행이 연동되는지 검증 - 내일 email_skill 설치 및 라우팅 문제 해결 예정