뽀야야~ 불러만 줘! 카카오톡 냥체봇 만들기 도전기 😺 (feat. 메신저R)

소개

복받어 스터디장님의 카카오톡 챗봇 사례를 본 후, 저도 갑자기 이런저런 아이디어가 떠올랐습니다. 단톡방에서 저 대신 봇이 답장도 해주고, 질문도 던지고, 공지를 퍼 나르고, 정보도 수집하면 얼마나 좋을까? 특히 지피터스 AI 스터디방에 매일 쌓이는 좋은 정보들을 놓치는 게 너무 아까워서, 이를 자동으로 아카이빙할 수는 없을까 고민하게 됐어요.

그래서 직접 카카오톡 챗봇 "뽀야봇"을 만들기 시작했습니다. 😼

✅ 진행 방법 1. 서브폰 + 번호 개통

뽀야봇을 만들기 위한 첫 번째 준비물은 ‘봇 전용 안드로이드폰’과 ‘전화번호(유심)’이었어요.

  1. 유심 구입:

    • 쿠팡에서 KT M모바일 유심 구매 (약 4,500원 / 새벽배송 가능)

  2. 전용폰 구입:

    • 쿠팡 중고폰으로 갤럭시 A라인 구매 (약 10만 원 안팎)

  3. 요금제 개통:

    • KT M모바일 공식 웹사이트에서 셀프개통 (신규 가입)

    • 요금제: 월 2,900원 (통화 100분 / 데이터 1GB)

💡 참고: 더 저렴한 요금제도 있을 수 있지만, 저는 이 조합이 가장 빠르고 간단하게 구성이 가능했어요.


2. 메신저R 설치, 카톡 알림 ON: 뽀야봇의 작동 조건 만들기

서브폰이 준비됐다면, 이제 뽀야봇을 실제로 작동시키기 위한 ‘환경 셋팅’이 필요합니다.
핵심은 메신저R + 카카오톡 알림 설정이에요. 이 두 가지가 맞물려야 뽀야봇이 반응합니다.


📲 메신저R란?

  • 메신저R은 폰에 뜨는 푸시 알림을 트리거로, 자바스크립트(JS) 코드를 실행할 수 있는 앱이에요.

  • 예를 들어 카톡에서 “누구누구가 메시지를 보냈습니다”라는 알림이 오면 → 메신저R이 그 내용을 감지 → 거기에 맞춰 내가 작성한 JS 코드가 실행되는 방식이에요.

✅ 그래서 메신저R은 ‘로그인’ 개념이 없고, 해당 폰 자체가 실행환경이자 사용자가 됩니다.
→ 그래서 아까 준비한 서브폰이 반드시 필요했어요!


🔔 카카오톡 알림 설정은 필수!

  • 카카오톡의 알림이 켜져 있어야, 메신저R이 해당 메시지를 감지하고 반응할 수 있어요.

  • 뽀야봇이 반응하고자 하는 모든 채팅방에 직접 입장한 상태여야 하며,
    그 채팅방의 알림도 꺼져 있으면 안 됩니다!

즉, 뽀야봇이 뭔가 응답하려면 이런 조건이 충족돼야 해요:

조건

이유

뽀야봇 계정이 해당 단톡방에 입장해 있어야 함

그래야 메시지를 받을 수 있음

해당 방의 푸시 알림이 켜져 있어야 함

알림이 꺼지면 메신저R이 트리거를 못 받음

💡 저의 경우, 뽀야봇 계정이 참여할 단톡방들을 미리 정해두고, 알림을 하나하나 켜는 작업을 따로 했습니다.
자칫 하나라도 알림이 꺼져 있으면 "왜 응답 안 하지?" 하는 일이 생겨요 😅


3. 첫 작동 실험: 에코봇 코드 복붙

서브폰과 메신저R 설치가 끝났다면, 이제 진짜로 “봇이 반응하는지” 실험해볼 차례였어요.
이때 사용한 건 복받어 스터디장님이 공유해주신 ‘따라해 에코봇’ 코드였습니다.

처음부터 완벽한 코드를 짜려고 하기보다는, 일단 “되는 걸 복붙해서 실행해보는 것”이 가장 중요하다고 생각했어요. 이게 돌아가 봐야 내가 뭘 만들고 있는지 감이 오거든요.


✅ 사용한 코드

// 01_echobot.js
var bot = BotManager.getCurrentBot();

bot.on("message", function(msg) {
    if (msg.content.indexOf("따라해") == 0) {
        var text = msg.content.substring(4);
        msg.reply(text);
    }
});

이 코드는 아주 단순하지만, 작동 원리를 이해하기에 딱 좋아요.

  • 누군가 카톡방에서 따라해 냥냥 이라고 메시지를 보내면

  • 뽀야봇이 냥냥 이라고 그대로 따라 말하는 구조입니다.


4. GPT API 연동 시도 (실패 → 해결)

뽀야봇의 기본적인 구조가 돌아가기 시작하자, 다음 단계는 생성형 AI 기능을 붙이는 것이었어요. 목표는 간단했어요:

누군가 단톡방에서 "뽀야야~" 하고 부르면, GPT가 **고양이 말투(냥체)**로 답장하게 만들기 🐱

🧪 처음 시도: GPT에게 코드 직접 요청 → 실패

  • 처음엔 ChatGPT에게 메신저R용 코드를 직접 짜달라고 요청했어요.

  • 하지만 결과는 계속 실행 불가능한 코드들…

    • 메신저R의 문법이나 실행 환경을 GPT가 잘 이해하지 못했기 때문인 것 같았어요.

    • 아무리 다양한 프롬프트로 시도해도, 돌아가지 않는 코드만 계속 나와서 꽤 많은 시간을 소모했죠.

한국 문자 메시지의 스크린 샷

🔁 해결 방법: “작동하는 코드”를 기준으로 GPT를 유도

  • 어느 순간 깨달았어요. GPT에게 **“야 그냥 해줘”**가 아니라,

  • 이미 작동하고 있는 에코봇 코드를 예시로 주고, 이 문법을 기반으로 GPT API를 넣어달라고 하면 되지 않을까?

✅ Bingo! 그 방식으로 시도하자 바로 작동하는 코드가 나왔어요 🎯

한국어 문자 메시지의 스크린 샷
var bot = BotManager.getCurrentBot();
var API_KEY = "여기에_네_API_키_넣어라냥";
var ENDPOINT = "https://api.openai.com/v1/chat/completions";

// 메시지 이벤트 리스너 등록
bot.on("message", onMessage);

// 메시지 수신 핸들러
function onMessage(msg) {
    try {
        var userText = msg.content;
        Log.i("onMessage", "받은 메시지: " + userText);

        // "뽀야"라고 부른 메시지만 처리
        if (userText.indexOf("뽀야") === -1) {
            Log.i("onMessage", "뽀야 호출 아님. 무시한다냥");
            return;
        }

        // GPT 호출
        var prompt = buildPrompt(userText);
        var replyText = requestToGPT(prompt);

        // 응답 전송
        msg.reply(replyText);
        Log.i("onMessage", "전송한 메시지: " + replyText);
    } catch (e) {
        Log.e("onMessage", "응답 중 에러 발생", e);
        msg.reply("에러난 거다냥… 나중에 다시 불러라냥!");
    }
}

// GPT 프롬프트 생성
function buildPrompt(userText) {
    return "다음 사용자 메시지를 귀엽고 츤데레한 냥체로 대답해줘. 너는 1살 고양이 메신저봇 뽀야야. 말투는 항상 '냥'으로 끝나야 해.\n\n사용자: " + userText + "\n뽀야:";
}

// GPT-4o 호출
function requestToGPT(prompt) {
    var conn = org.jsoup.Jsoup.connect(ENDPOINT)
        .ignoreContentType(true)
        .header("Authorization", "Bearer " + API_KEY)
        .header("Content-Type", "application/json")
        .requestBody(JSON.stringify({
            model: "gpt-4o",
            messages: [
                { role: "system", content: "너는 귀엽고 츤데레한 고양이 메신저봇 뽀야야. 항상 냥체로 대답해." },
                { role: "user", content: prompt }
            ],
            temperature: 0.9
        }))
        .post();

    var json = JSON.parse(conn.text());
    return json.choices[0].message.content;
}

5. 현재 작동 방식 요약

뽀야봇은 현재 다음과 같은 구조로 작동하고 있어요:

🧩 기본 흐름

  1. 뽀야봇 계정이 들어가 있는 모든 단톡방에서

  2. 뽀야 키워드가 포함된 메시지가 오면

  3. 메신저R이 해당 알림을 감지해서 자바스크립트 코드 실행

  4. JS 코드에서 GPT API로 메시지를 전송하고

  5. 받은 응답을 고양이 말투(냥체)로 변환해서

  6. 같은 방에 답장으로 전송

뽀야랑 언니랑 수다 떠는 중 ㅋㅋㅋ

전화로 두 사람 간의 대화 스크린 샷

📌 현재 상태의 특징

  • ✅ GPT API 연동 완료 (OpenAI chat completion 사용)

  • ✅ 냥체 적용된 응답 가능

  • ✅ 단일 메시지에 대한 응답 (싱글턴 방식)

  • ❗ 대화 맥락 기억은 아직 없음

  • ❗ 알림이 오는 모든 방에서 반응 → 방 필터링 없음


6. 앞으로 시도하고 싶은 기능들 💭

실제로 뽀야봇을 돌려보니, 아이디어가 계속 떠올랐어요.
다음은 현재 생각 중이거나, 실험해보고 싶은 확장 기능들입니다:

🔄 1. 멀티턴 대화

  • 지금은 단일 질문 → 단일 답변 구조

  • → 향후에는 최소 5~6개의 이전 메시지를 기억하고, 맥락 있게 대화하도록 개선하고 싶어요

🔔 2. 방 필터링 & 조건 반응

  • 현재는 모든 단톡방의 알림에 반응함

  • → 특정 채팅방에서만 반응하거나,
    특정 키워드가 있어야 응답하도록 조건 추가 예정

🙋‍♀️ 3. 사용자 인식 & 이름 넣어 응답

  • 메시지를 보낸 사람의 이름을 가져와서,
    "OO님~"처럼 이름을 넣은 맞춤 응답 실험해보고 싶어요

📢 4. 공지 자동 전파

  • 특정 시간대나 조건에서 공지를 뽀야봇이 먼저 전송

  • 현재는 트리거가 알림 기반이라 → 비동기 실행 구조 설계가 필요

  • Node.js 서버 또는 스케줄러 연동을 고민 중

🏆 5. 인증 메시지 자동 취합 (#인증)

  • 예를 들어 챌린지 단톡방에서 #인증 메시지를\n 날짜별/사용자별로 자동 집계하고 싶어요

  • 이를 위해선 DB 연동이 필수 → Supabase 등 외부 DB 연동 실험 계획 중


✅ 결과와 배운 점

🧪 시행착오도 과정의 일부

처음에는 에뮬레이터로 봇을 돌려보려 했지만, 현실은 녹록지 않았어요.

  • PC를 꺼두면 봇도 꺼지고,

  • Ctrl+C/V도 안 되고,

  • 카카오톡 계정 충돌로 아이폰 로그아웃... 😵‍💫
    결국 이건 아니다 싶어서 전용 안드로이드폰을 구매하게 되었고, 결과적으로는 정신 건강에 훨씬 좋았어요.

🐾 작동하는 코드의 힘

초기에 “에코봇”처럼 되는 코드를 복붙해서 바로 실행해보는 경험이 정말 중요했어요.
처음부터 완벽한 코드를 만들려고 하면 진행이 느려지고 금방 지치는데, 일단 돌아가면 재미도 생기고 구조도 보이기 시작하더라고요.

🧠 GPT 사용 팁

처음엔 GPT에게 그냥 “메신저R 코드 짜줘” 했지만 계속 틀렸어요.
그런데 작동하는 예제 코드를 보여주고, “이 문법에 맞게 해줘”라고 말하니 한 번에 해결됐어요.
👉 이건 앞으로 GPT와 협업할 때 정말 중요한 팁입니다.

☁️ 그리고 앞으로...

아이디어는 정말 무궁무진해요.

  • 대화 맥락을 기억하는 멀티턴

  • 특정 사람에게만 반응하거나 이름을 넣어 응답하기

  • 챌린지 인증 메시지 카운트해서 랭킹 만들기

이걸 실현하려면 이제 DB까지 붙여야겠죠. 그 다음 실험은 아마 Supabase 연동이 될 것 같아요!


카톡봇끼리 대화하는 카톡방이 궁금하다면?

https://open.kakao.com/o/gdsyFgGh (참여코드 copy)

전화에 한국 문자 메시지 스크린 샷
10
9개의 답글

👉 이 게시글도 읽어보세요