소개
여러 스터디 채널에서 활약하는 카톡봇들을 보며
저희 스터디에도 활동하는 카톡봇을 만들어서
17기 사업계획서&PPT 스터디 카톡방에도
도입하여 활동하게 하고 싶다는 마음에
스터디를 신청하고 카톡봇을 만들게 됐습니다.
스터디장을 하면서 하려니 시간이 잘 안나서
이제서야 막차타고 실습하고 따라해 보면서
간신히 만들어봤습니다.
아직 스터디 카톡방에 도입해서 활동할 수준은 아니지만,
좀 더 발전하면서 이번 스터디 기간 끝나기 전에는
도입할 수 있게 해 보겠습니다.
아자~!
✅ 진행 방법 1. 서브폰 + 번호 개통
수다맨봇을 만들기 위한 첫 번째 준비물은
‘봇 전용 안드로이드폰’과 ‘전화번호(유심)’이었어요.
이 부분은 닿 님의 사례를 그대로 따라하면서 진행했습 니다.
(송다혜님 만세~!)
유심 구입:
편의점에서 KT M모바일 유심 구매 (약 4,500원)
전용폰 구입:
쿠팡 중고폰으로 갤럭시 A라인 구매 (약 5~6만원 정도)
요금제 개통:
KT M모바일 공식 웹사이트에서 셀프개통 (신규 가입)
요금제: 월 2,900원 (통화 100분 / 데이터 1GB)
2. 메신저R 설치, 카톡 알림 ON: 수다맨봇의 작동 조건 만들기
안드로이드 폰을 처음 쓰는 관계로 인터페이스나 작동법 등이 생소하기 그지 없어서
많이 헤맸습니다.
그래도 Naver, Perplexity 등에 물어물어 가면서 진행했고,
메신저R과 카톡을 설치했고, 메신저R은 거의 모든 것을 on 시켰습니다.
(알림 권한 등등)
카카오톡 알림도 on으로 확인했고,
하여간 다 돌아다니면서 거의 무조건 다 on 시켰습니다.
trigger가 잘 인식되어서 작동할 수 있도록!
3. 첫 작동 실험: 스터디장님 가이드대로 에코봇으로!
일단 아장아장 첫걸음을 떼는 단계이니 가장 간단한 에코봇으로 실습 진행
예를 들어 '따라해 토끼' 그러면 '토끼' 값을 반환하는 형태입니다.
즉 '따라해'를 인식하여 따라해 다음에 나오는 문자열을 돌려주는 형태의 봇입니다.
그래서 에코봇!
안드로이드 Studio와 Emulator가 생소하기 그지 없어서
처음에는 적응하는데 애를 좀 먹었습니다.
emulator를 찾아보니 뭔지는 알 것 같은데, 막상 사용해보니
가상이 아니라 진짜인 것 같은 느낌도 들어서 많이 헷갈리더군요
카카오톡 로그인도 진짜처럼 엄밀하게 해야 하고 그래서
이게 가상이 아니라 진짜 아닌가? 하는 생각이 들기도...
하여간 적응하느라 씨름하다가 좀 감이 잡히는 것 같기도 하고 그러네요
에코봇의 코드는 스터디장님이 제공해주신 그대로 복붙!
// 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);
}
});이를 echobot에 넣어주고 컴파일 해줍니다.
컴파일이 무엇인지 몰라서 물어보고 배웁니다.
컴파일(compile)은
사람이 쓴 프로그램 코드를
**컴퓨터가 이해할 수 있는 “0과 1”의 신호(기계어)**로 바꿔주는 과정이에요.
🔁 비유로 다시 설명하면:
사람이 하는 말
컴파일을 통해
컴퓨터가 이해하는 말
ctx.sendMessage("안녕!")
🧠 컴파일러가 번역함
101010011101001...
설치하기와 환경 구축까지 애를 먹으면서 상당한 시간을 사용했는데,
echobot을 만들어서 emulator에서 작동시키니 의외로 이건 금방 성공했습니다.
그런데 다시 복병을 만납니다.
카톡에서는 안되더라고요.....
이건 뭐지? 살짝 멘붕......
밥 먹으러 가서 머리 좀 식히고 와서 다시 이리저리 궁리하다가
결국에는 원리를 알아내고 성공했습니다.
안되던 이유가 내가 나 자신에게 메시지를 보내는 형태로 test해서 안됐던거였더군요
그래서 다른 사람이 수다맨봇에게 말을 거는 형태로 바꾸니
한방에 됩니다. 드디어 성공!
이제서야 좀 감을 잡습니다.
그리고 뒤늦게 catch up한 지진아이지만 그래도 진도는 맞추었습니다. ^^
1주차 스터디장님의 OT와 다른 스터디원들의 조언,
Perplexity, Bot Father 메신저봇 GPT의
도움으로 잘 따라잡을 수 있었던 것 같습니다.
감사합니다.
4. 이제 무엇인지 알것 같으니 좀 더 나의 사례로 연습을 해봅니다
스터디장님의 요청이자 숙제를 하기 위해
Bot Father GPT와 대화를 하면서 새로 봇을 하나 만들어봅니다.
서버 없이 돌아가며 java script(Rhino JS)만으로 작동하는 봇을 만들어 봅니다.
사용자의 감정 표현에 반응하여 대답해 주는 봇을 만들어보기로 합니다.
외부 Perplexity API까지 끌고 와서 답변을 잘 만들게 하고 싶은데,
그러려면 서버가 필요하다고 하는 것 같아서 포기합니다.
5개의 감정 관련한 키워드가 나오면 그에 반응해서 대답을 해주고
그렇지 않으면 그냥 가만히 있는 카톡봇을 만들기로 결정합니다.
GPT랑 대화 좀 하다가 최종 코드를 만들었습니다.
GPT에 들어가는 md 파일들도 스터디장님께서 공유해 주신 것을 봤는데,
개발자 관점으로 잘 만들어진 지침들이다라는 생각이 들었고,
GPT 제작하는 노하우 측면에서도 많이 배웠습니다.
최종 코드를 이모션이라는 봇을 만들어서 넣어주고 run했는데
먹통입니다.
응? 하다가 닿님의 기존에 작동하는 코드를 주고
GPT가 참고해서 문법을 올바른 것을
적용하게 하는 방법을 떠올리고
바로 스터디장님의 헬로봇 코드를 주고 참고하라고 시킨 후
다시 전체 코드를 뽑아냈습니다.
// 02_hellobot.js
var bot = BotManager.getCurrentBot();
bot.on("message", function(msg) {
if (msg.content == "안녕" || msg.content == "하이" || msg.content == "안녕하세요" || msg.content == "굿모닝" || msg.content == "반갑습니다") {
var hour = new Date().getHours();
var greeting = "";
if (hour < 12) greeting = "좋은 아침이에요!";
else if (hour < 18) greeting = "좋은 오후에요!";
else greeting = "좋은 저녁이에요!";
msg.reply(msg.author.name + "님, " + greeting);
}
});그랬더니 한 번에 바로 성공입니다. ^^
// 감정 공감 메신저봇 (메신저R API2 구조 기반)var bot = BotManager.getCurrentBot();bot.on("message", function(msg) { var emotionMap = { "우울": "우울하구나, 힘드나 보네. 내가 이야기를 들어줄게, 그리고 힘이 되도록 응원할게.", "짜증": "많이 짜증났구나. 네 마음 충분히 이해해. 잠시 숨 돌리는 것도 좋을 것 같아.", "행복": "와, 정말 기쁜 일이 있었구나! 너의 행복이 나에게 도 전해져.", "외로": "외로운 기분이구나. 내가 여기 있어줄게. 혼자가 아니야.", "불안": "불안한 마음이 드는구나. 같이 이겨낼 수 있어. 괜찮아, 내가 응원할게." }; var content = msg.content; for (var keyword in emotionMap) { if (content.indexOf(keyword) !== -1) { msg.reply(emotionMap[keyword]); return; } } // 키워드 없으면 응답 없음});잘 작동하는 것을 확인했습니다~~~
오전부터 지금까지 대부분의 시간을 쓰면서 여기까지 따라 왔습니다.
힘들긴 했는데 되니까 재미있습니다 ㅎㅎ
질문 1:
새로 만든 카카오톡 계정은 수다맨이고
emulator에서 만든 봇은 현재 echobot, 이모션 2개입니다.
앞으로 더 많은 봇이 추가가 될 것이고요
그러면 수다맨으로 참여하는 오픈카톡방에서
여러 개의 봇이 다 작동하는 것이라고 이해하면 되나요?
방마다 작동하는 봇을 설정하는 방법이 있나요?
이 방에서는 봇 1,2,3만 작동하고 다른 방에서는 봇 2,3,5만 작동한다....
뭐 이런식으로요...
질문 2:
앞으로 모든 작업은 컴퓨터 화면에서만 하면 되나요?
실제 안드로이드 휴대폰에서 무엇을 해야 할 일은 없는 것인가요?
즉, emulator로 만들기만 하면 모든 일이 다 되는 것인지?
질문 3:
Perplexity API 연결 시도했는데 여러 LLM에서 실패했습니다.
해결 방안 좀 알려주시면 좋겠습니다.
질문 4:
emulator에 넣는 코드는 통으로 1개인 것 같은데 (즉, 파일은 1개)
8시 특강에서 여러 개의 py 파일들을 보여주셨는데
어떤 차이가 있는 것인가요?
감사합니다.