커뮤니티 버디봇 구축기 2편: 환영 인사봇 구현 여정

👋 자기 소개

안녕하세요! 이유식 초보맘들을 돕는 커뮤니티 리더, 지니 K입니다.

17기 카톡봇 스터디를 통해 현재 운영 중인 이유식 중심 육아 커뮤니티에서 단순 업무들을 대신 처리해 줄 버디봇인 '잇다봇(EatdaBot)'을 만들고자 합니다.

1차 사례글에서는 개발 환경 세팅과정을 담았고, 이번 사례글에서는 봇 기획 및 개발 과정과 함께 시행착오를 통해 얻은 인사이트를 정리해보겠습니다.

전화에 한국 문자 메시지 스크린 샷


🛠️ 사용한 도구

도구

용도

활용도

Claude

봇 기획 및 코드 개발

⭐⭐⭐⭐⭐

Cursor AI

코드 수정 및 디벨롭

⭐⭐⭐

MessengerBot

봇 생성 및 테스트

⭐⭐⭐⭐⭐

ChatGPT (BotFather)

디버깅 및 문제 해결

⭐⭐⭐⭐


👩🏻‍💻 진행 방법

1) 사전 학습 단계

스터디장님 가이드라인 정독

  • 봇 개발 지침 및 가이드라인 학습

  • 방대한 내용이지만 전체적인 개발과정 이해에 큰 도움

핵심 개념 학습

  • 생소한 개념들(API2, PRD, ES5 등)을 LLM을 통해 비유와 예시로 학습

  • 효과: 어려운 개념들이 친숙한 이미지로 그려져 심리적 허들 낮춤


2) 봇 기획 단계

1단계: 목표 설정

  • 초기 구상: '출석/참여도 체크봇'

  • 변경된 목표: '환영 인사 및 커뮤니티 안내봇'

2단계: PRD 기획

  • 클로드와 요구사항 정리를 위한 질의응답

  • 개념 설계 단계에서 지속적인 프롬프팅

  • 단계별 기능 분화 및 우선순위 설정

3단계: 구현 로직 설계

새 멤버 입장 → 환영 인사 → 닉네임 변경 + 자기소개 유도 메시지 전송

3) 코드 개발 단계

1단계: 기본 인사봇 구현

var bot = BotManager.getCurrentBot();

bot.on("message", function(msg) {
    if (msg.author.name === "오픈채팅봇" &&
        msg.content.indexOf("안녕하세요! 오래 함께 할") !== -1) {
        msg.reply("환영합니다! 👋");
        msg.reply("커뮤니티 안내에 따라 닉네임을 변경해주세요.");
        msg.reply("자기소개와 함께 이유식 단계나 고민을 공유해주시면 도움을 드릴 수 있어요!");
    }
});

2단계: 복잡한 조건 추가

  • 여러 채팅방, 여러 발신자 대응 시도

  • 문제 발생 ⚠️ : 코드가 길어질수록 작동 오류 발생

3단계: 디버깅 단계

  • ChatGPT BotFather에게 피드백 요청 및 테스트

  • msg.room 값 확인이 관건임을 깨달음 💡

if (msg.content === "!방이름") {
    msg.reply("이 채팅방의 이름은: " + msg.room);
}
전화 화면의 한국 문자 메시지
  • 실제 방 이름 착각 → '잇다봇'이 아닌 '유주맘'

  • 봇의 시각에서 환경을 이해하는 것이 핵심‼️

4단계: 로깅 시스템 도입

function log(tag, message) {
    java.lang.System.out.println("[DEBUG-" + tag + "] " + message);
}
  • 각 조건마다 로그 삽입하여 문제 지점 추적 시도

  • 하지만, 이로써 근본적 해결책을 찾지는 못 함

5단계: 최종 해결

  • 핵심 발견: 타겟룸 제한 코드 제거 시 정상 작동 (스터디장님의 조언 적용)

if (targetRooms.indexOf(msg.room) === -1) {
    return;
} // 제거함

✅ 최종 구현 결과

var bot = BotManager.getCurrentBot();

var targetRooms = ["유주맘", "잇다봇", "커뮤니티 이유잇다", "카톡봇 모임"];
var welcomeSenders = ["유주맘", "오픈채팅봇", "지니K"];

function log(tag, message) {
    java.lang.System.out.println("[DEBUG-" + tag + "] " + message);
}

bot.on("message", function(msg) {
    log("ALL", "메시지: " + msg.author.name + " - " + msg.room + " - " + msg.content.substring(0, 30));

    if (msg.content === "!테스트") {
        msg.reply("테스트 성공!");
        return;
    }

    if (welcomeSenders.indexOf(msg.author.name) !== -1 &&
        msg.content.indexOf("안녕하세요! 오래 함께 할") !== -1) {

        log("ACTION", "환영 메시지 감지! 응답 시작...");

        try {
            msg.reply("어서오세요~🤗 이유잇다의 버디, 잇다봇이에요!");
            java.lang.Thread.sleep(2000);
            msg.reply("원활한 커뮤니티 참여를 위해 안내에 따라 닉네임을 변경해주세요.");
            java.lang.Thread.sleep(2000);
            msg.reply("간단한 자기소개와 함께 이유식/육아 관련 고민을 공유해주시면 저희가 도와드릴게요!");
        } catch (e) {
            log("ERROR", "메시지 전송 중 오류: " + e.message);
            msg.reply("원활한 커뮤니티 참여를 위해 안내에 따라 닉네임을 변경해주세요.");
            msg.reply("간단한 자기소개와 함께 이유식/육아 관련 고민을 공유해주시면 저희가 도와드릴게요!");
        }
    }
});

log("INIT", "인사봇 시작됨 - 대상 방: " + targetRooms.join(", ") + ", 발신자: " + welcomeSenders.join(", "));

전화에 한국 문자 메시지 스크린 샷

💡 배운 점 & 인사이트

1) 기술적 학습

  1. msg.author.name , TARGET ROOM 조건 정확성이 핵심

  2. 필요하지 않은 조건 제거가 오히려 해결책이 될 수 있음

  3. 로깅 시스템 도입은 디버깅 효율을 높일 수 있음

2) 개발 프로세스 학습

  1. 생소한 개념은 기획 전 반드시 AI나 검색을 통해 익히기

  2. AI 협업 시, 설명을 맹신하지 않고 꼼꼼하게 검토할 것

📌 인사이트 요약

  • 당연한 것은 없다: 필수라 여긴 타겟룸 조건이 오히려 방해요소였음을 발견

  • 봇의 관점에서 보기: 봇이 인식하는 값이 내가 보는 값과 다를 수 있음

  • 로깅은 문제 추적의 시작점: 지나간 길을 기억하기 위해선 발자국을 남겨야 함

  • 사람이 때론 AI보다 낫다: 멘토의 풍부한 경험과 조언은 여전히 중요함


🚀 다음 단계

  • 7/31 3차 발표 준비: Open AI API 기반 멀티턴 대응 챗봇 구현

  • 최종 목표: 커뮤니티 운영의 50% 자동화 목표!

지난 글
https://www.gpters.org/chatbot/post/community-buddy-dabot-construction-GEsOsnFOCzIxfl5

4
1개의 답글

👉 이 게시글도 읽어보세요