카카오톡 봇
게임 캐릭터 정보를 확인하기 위해 따로 인터넷 검색을 해야 하는 번거로운 작업을 줄이고, 간단한 편의성 기능을 제공하기 위해 개인적으로 사용할 목적의 카카오톡 봇을 만들어보기로 결심했습니다.
봇 최초 컴파일(3월 7일) 이후 2주가 지난 지금, 어느정도 봇도 안정화되었고 개발 과정에 대해 궁금해하시는 분들이 있어서 개발 과정을 간단하게 공개해보려 합니다.
작동 원리
지금까지 카카오톡 단체 채팅방이나 오픈 톡방에서 방장봇을 제외한 사설 봇을 보았다면, 아마 99.9% 모두 같은 원리로 동작하는 봇들입니다.
한 때 카카오톡의 통신 프로토콜인 LOCO Protocol
(2011년 10월 13일 릴리즈, 기존 HTTP/TCP 프로토콜에서 자체 개발한 LOCO 프로토콜로 변경)을 통해 카카오톡 클라이언트인 척 메시지를 보내는 봇들도 있었으나, 해당 부분은 보안에 취약하기도 하고 약관에 위배되기 때문에 해당 방법을 이용한 봇들을 사용하면 계정이 정지당할 수 있습니다.
이 때문에 현재 카카오톡 봇 앱을 통해 구동되는 봇들이 대부분이라고 볼 수 있습니다.
봇 구동을 위해 많이 사용하는 앱은 메신저봇 R
, 채팅 자동응답 봇
입니다. 제가 사용한 앱은 메신저봇 R
이며, 앞으로의 설명들은 모두 해당 앱을 기준으로 진행됩니다.
해당 앱의 작동 원리는 아래와 같습니다.
NotificationListenerService
를 통해 알림을 파싱한다.- Rhino JavaScript Engine을 사용하여 사용자가 작성한 자바스크립트로 알림 정보를 전달하여 처리한다.
WearableExtender
를 통해 답장을 전달한다.
1번에서 받게 되는 알림의 내용에는 채팅이 온 방의 이름, 메시지 내용, 전송자의 이름 등의 정보가 있습니다.
해당 정보들을 받으면 2번 과정에서 사용자가 작성한 자바스크립트의 내용에 따라 정보를 처리하게 됩니다. (인터넷에서 해당 정보를 찾아온다던가, 결과값을 더 예쁘게 보일 수 있도록 처리)
그리고 해당 결과를 다시 채팅방에 reply 해주면서 챗봇이 동작하게 됩니다.
준비물
애석하게도, 현재 카카오톡의 정책 때문에 준비할것이 조금 있습니다.
저는 공기계(갤럭시 S9+ 기기)를 통해 봇을 동작시킬것이기 때문에, 하나의 본계정을 두개의 기기에 모두 로그인해서 사용할 수 없는 카카오톡의 정책 상 부계정을 하나 새로 만들었습니다.
(공기계가 아닌 본인의 기기로 본계정을 통해 봇을 구동할 경우, 사용자의 도배나 악용으로 인해 제재를 받는 경우 대처하기가 어려워집니다.)
부계정을 만드는 방법에는 크게 두 가지 정도가 있습니다.
- 통신사의 투넘버 서비스(번호 두개 이용)를 통해 계정을 하나 더 생성한다.
- 가상 해외 번호를 통해 계정을 하나 더 생성한다.
두 방법은 장단점이 있습니다. 1번 방식은 통신사에 추가 비용을 지불해야 한다는 단점이 있으며, 카카오톡 임시조치 제한을 받지 않는다는 장점이 있습니다(계정 바로 이용 가능) 하지만, 2번 방식은 앱을 통해 가상 해외 번호를 받아서 카카오톡 인증만 진행하면 되기 때문에 추가 비용이 들지 않는다는 장점이 있습니다. 하지만, 카카오톡의 정책으로 인한 임시조치 제한을 받습니다.
여기서 임시조치 제한이란?
1) 짧은 기간 다수의 사용자가 카카오톡 친구로 추가되는 경우
2) 서비스 악용 유저가 활동한 서비스 환경과 유사한 환경에서 서비스를 사용한 경우
3) 불법 사행성 사이트 홍보 및 음란물 발송 이력이 있는 서비스 이용 환경에서 카카오톡을 사용한 경우
4) 짧은 기간 동안 채팅방 및 오픈 채팅방을 다수 개설한 경우
5) 오픈 채팅방 참여 속도 및 빈도가 비정상적으로 많을 경우
6) 통신사 확인이 되지 않는 해외 가상번호를 사용하는 경우
7) 메시지 신고 접수가 많이 된 경우
8) 오픈 채팅방 사용자 신고 접수가 증가할 경우
9) PC 에뮬레이터 등 비정상적인 환경에서 카카오톡을 사용할 경우
해당 사례 중 한 가지, 혹은 두 가지 이상 해당되었을 때 적용되는 보호조치로, 오픈채팅을 이용하지 못하며 친구추가 수에 제한이 걸리게 됩니다.
물론 임시로 적용되는 제한이기 때문에 일정 기간 정상적으로 카카오톡을 이용하는 것이 카카오톡 내부 매커니즘(봇에 의해 자동으로 이루어지는 것으로 추정)에 의해 확인이 된다면 해제되긴 합니다만, 언제 풀릴지는 정확히 알 수 없습니다.
가상 해외 번호를 통해 인증한 경우 거의 무조건 임시조치 제한에 걸리게 되니 참고해주세요.(6번 내용에 해당)
저는 급한 프로젝트가 아니었으므로 해외 번호로 가입 후 제한이 풀리기를 기다렸습니다.
공기계와 카카오톡 부계정, 이 두 개가 준비되면 일단 1차적인 준비는 끝입니다. 이제 다음 게시물부터는 본격적으로 봇 구동 과정을 보여드리도록 하겠습니다.