안녕하세요! AI Think Lab입니다!
오늘은 “디스코드 음성채팅에서 말한 내용을 텍스트로 바꿔(OpenClaw로 전달) → 답변을 다시 음성으로 읽어주는” 파이프라인을 실제로 구현한 과정을, 시행착오까지 포함해서 정리해볼게요.
🎯 목표 (한 줄 요약)
디스코드 음성 채널에서 대화하듯이, 사용자 발화를 인식(STT)하고 OpenClaw에서 답변을 만든 뒤, 음성(TTS)으로 자연스럽게 응답하는 보이스봇을 만든다.
🧩 전체 아키텍처 (흐름)
1) Discord Voice Receiver → Opus 디코딩 → PCM
2) PCM → 16kHz mono WAV 변환
3) STT(whisper.cpp) → 텍스트 추출
4) OpenClaw Gateway로 질문 전달
5) 답변 텍스트 → TTS(Windows SAPI) → 음성 채널 재생
🛠️ 구현 단계 (핵심만 딱)
① 디스코드 봇 기본 뼈대
• prefix 커맨드 기반으로 시작: !talk / !stop
• !talk: 음성 대화 루프 시작
• !stop: 대화 모드 종료 + 음성채널 퇴장
② TTS 무료 구성 (Windows SAPI)
• OpenAI 키 없이 돌리기 위해 로컬 TTS로 전환
• System.Speech로 WAV 생성 → data chunk(PCM) 추출 → 디스코드 보이스 플레이어에 전달
③ STT 무료 구성 (whisper.cpp)
• Opus 수신 → PCM 디코딩 → 16k WAV 변환 후 whisper-cli 실행
• 모델은 ggml 계열을 사용했고, 환경/버전 이슈가 있어 모델/옵션 튜닝 포인트가 생김
④ OpenClaw 브리지
• STT 텍스트를 OpenClaw Gateway로 전달
• 응답 텍스트를 받아서 TTS로 읽어주며, “음성 ↔ OpenClaw” 브리지 완성
🧯 트러블슈팅 모음 (여기서 시간 제일 씀)
1) !join / !talk 무반응
원인: “@봇 !talk”처럼 멘션이 앞에 오면 파서가 커맨드로 인식 못 하는 케이스
해결: 멘션 prefix도 제거/정규화해서 커맨드로 처리
2) 음성 연결이 안 되거나 바로 끊김
원인: DAVE 프로토콜 의존성 누락(@snazzah/davey), 또는 네트워크에서 IP discovery 단계 이슈
해결: 누락 패키지 설치 + 에러 핸들링/로그 강화
3) FFmpeg not found
원인: 재생 소스가 변환을 요구할 때 내부에서 ffmpeg를 찾으면서 터짐
해결: 변환 없이 바로 재생 가능한 PCM/WAV 기반으로 맞추거나, 사전에 WAV로 생성
4) 프로세스가 여러 개 떠서 “수정이 안 먹는 느낌”
원인: node 프로세스 중복 실행으로 로그/상태가 섞임
해결: 단일 프로세스 유지 + 재시작 루틴 통일
5) 에코 루프 (봇이 자기 목소리 다시 듣기)
해결: 봇이 말하는 동안에는 STT 처리를 무시하는 플래그(isSpeaking) 적용
6) !stop을 쳐도 음성 채널에 남아있음
원인: 상태만 종료되고 실제 VoiceConnection이 살아있는 경우
해결: leaveVoiceChannel + getVoiceConnection(guildId).destroy()로 강제 정리
💡 운영 팁 (체감 퀄리티 올리는 포인트)
• 대화 모드는 “짧게 끊어서 여러 번”보다 “한 번 켜고 또박또박 한 문장”이 인식률이 더 좋음
• 너무 짧은 오디오/노이즈는 초반에 필터링하는 게 안정적
• STT가 연속으로 비면 자동으로 “다시 말해줘” 안내를 넣으면 UX가 좋아짐
✅ 마무리
이번 구현은 상용 통화 품질을 목표로 하기보단, 로컬 무료 구성으로도 음성 → 에이전트 → 음성 파이프라인을 충분히 만들 수 있다는 걸 증명하는 데 초점을 뒀어요.
다음 확장 아이디어
• /talk /stop 같은 슬래시 커맨드
• 안정적인 프로세스 매니저(pm2) 적용
• STT 모델/옵션 튜닝 및 발화 합치기(buffering)
읽어줘서 고마워요!
'AI > AI 관련 팁' 카테고리의 다른 글
| 💡 생성형 AI를 진짜 업무에 쓰는 12가지 팁 (실수 줄이는 프롬프트/검증 루틴) (0) | 2026.02.15 |
|---|---|
| [AI 팁] 프롬프트가 갑자기 좋아지는 ‘5문장 템플릿’ + 실전 예시 10개 (바로 복붙용) (0) | 2026.02.14 |
| 🎬 편집은 AI가, 감동은 내가! 2026년 숏폼 자동 제작의 세계 🚀 (0) | 2026.02.12 |
| 🚀 2026년 AI 프롬프트 엔지니어링 꿀팁: 10배 더 스마트하게 대화하는 법 (0) | 2026.02.10 |
| 🚀 생성형 AI 200% 활용을 위한 프롬프트 작성 실전 팁 7가지 (0) | 2026.02.10 |