카카오톡 봇
1. 개요
카카오톡 봇은 스마트폰 메신저 카카오톡에서 사용 가능한 자동 응답 기능을 가리키는 말이다. 줄여서 '카톡봇'. 보통은 카카오톡의 채팅방의 한 종류인 오픈채팅방에서 사용하지만 일반 단체 채팅방이나 1:1 채팅방에서도 사용할 수 있다.
원래는 카카오에서 공식 지원하는 기능이 아닌 사설 앱을 사용하여 유저들이 만들어 쓰던 기능만 존재했는데, 2020년 7월 21일 공식 오픈채팅 봇이 생겼다. 이름은 '''방장봇'''[1] 으로, 아래에 쓰여진 봇 설명의 경우 이 방장봇이 아닌 유저 제작 봇을 주로 설명하니 참고할 것. 주로 카카오톡에서 쓰이지만, 다른 메신저 앱에서 지원하기도 한다.
2. 작동 원리
먼저, 카카오톡과 카카오톡 봇 구동 어플[2] 이 필요하다. 안드로이드 7.0 미만일 경우엔 Wear OS by Google[3] 앱의 설치도 필요.
봇 앱의 (상단바) 알림 읽기 기능을 켜면, 봇 앱은 안드로이드의 'NotificationListener' 기능을 이용해 지정된 패키지의 앱[4] 이 보내는 알림을 읽어온다. 그러면 자바스크립트[5] 로 작성된 스크립트 내부의 'response'라는 이벤트 리스너[6] 가 호출된다. 이때, 알림에서 읽어온 방 제목, 보낸 이, 메시지 등이 매개변수로 넘어오고,[7] 봇 스크립트 'response' 함수 내부에서 채팅 데이터를 처리한다. 자동 응답의 경우 'replier.reply'[8] 함수가 호출되면 봇 앱은 설정된 메시지로 답장한다.[9]
2.1. 제작 팁
제작에 앞서, 카카오톡 봇의 대부분은 자바스크립트[10] 를 사용하기 때문에 되도록이면 자바스크립트의 기본 개념을 학습하고 봇 개발을 시작하는 것을 추천한다. 그러나 코딩 없이 간단하게 봇 기능을 설정할 수 있는 앱도 있기에, 초심자의 경우 이런 류의 앱을 사용해도 나쁘지 않다. 봇 앱의 종류는 후술.
그리고 카카오톡 봇을 개발하는 것은 많이 활성화가 되어 있지 않아서 유튜브에 있는 카카오톡 봇 강좌는 찾아보기 힘들며, 있다고 해도 대부분 매우 기초적인 과정만 강의하고 무엇보다 영상의 품질이 떨어진다. 그러면 영어로 구글링을 하면 되는 거 아닌가? 할 수 있는데, 카카오톡이 해외에서는 듣보이므로 당연히 의미가 없다(...) 구글이나 네이버, 다음과 같은 국내 포털사이트에서 봇 관련 강좌를 검색하면 내용이 일부 존재하므로 이를 따라하며 시작해도 좋다. 하지만 이 역시 정보의 수가 많지 않으므로 복잡한 코딩을 하고자 한다면 자바스크립트에 대한 이해가 필수.
다만, 2020년 초부터 꾸준히 내용이 추가되고 있는 카카오톡 봇을 위한 카카오톡 봇 문서가 존재한다
제작 방법의 경우 봇 구동 앱별로 차이가 있지만, 대부분 앱 내에서 스크립트를 생성하여, 자바스크립트를 통해 코딩하고, 이를 활성화하면 된다. 코딩 방법의 경우도 앱마다 차이가 있으므로, 앱의 이름을 확인하고 강좌를 찾아보기 바란다.
2.1.1. 카카오톡 봇 앱
단순 자동응답[12] , 자바스크립트, 커피스크립트, 루아, 라코스크립트[13] , Visual Basic, IceBlock.js[14] 를 사용하여 개발할 수 있는 카카오톡 봇 앱이다. 특이점으로는 단순 자동응답 기능만을 사용할 경우 자체적인 UI 및 API를 통한 개발환경을 지원하므로, 프로그래밍 지식이 없어도 카카오톡 봇을 개발할 수 있다. 때문에 카카오톡 봇에 처음 입문하는 사람들이 사용하기에 편리하다.
메신저봇을 만든 개발자가 후속작으로 제작한 카카오톡 봇 앱이다. 메신저봇보다 더 많은 기능을 지원하며, 현재 가장 많이 쓰이는 봇 앱이다.
자바스크립트를 사용하여 개발할 수 있는 카카오톡 봇 앱이다. 이 앱 개발자가 만든 자동 응답기 앱도 있다.
위에 나열된 앱 말고도 지금은 더 이상 한국 Play 스토어에 뜨지 않거나, Play 스토어에 업로드되지 않은 앱 등이 존재한다.
3. 봇 목록
3.1. 팬다 Jr. 봇 및 방장봇
상술했듯이 카카오톡 앱 내에 리소스로 존재하며 공식적으로 운영하는 봇이다. 앱 내에 내장되어 있기 때문에 반응속도가 굉장히 빠르며 유저들의 디컴파일도 이뤄지고 있다. 2018년부터 5년 전(2020년 7월)까지는 당시에는 정식으로 추가된 기능은 아니었으며, 오픈채팅 방들 중에 랜덤으로 등장하다가 7월 21일부터는 신설방 포함 모든 오픈채팅 방에서 활성화 가능 버튼이 등장한다. 기존에는 팬다 Jr. 봇이 등장했는데, 패치 이후 봇 활성화 시 방장봇이 대신 등장한다. 단, 팬다 Jr. 봇을 미리 활성화해둔 상태라면 계속 팬다 Jr. 봇을 이용할 수 있다. 기능으로는 반응할 메세지와 그에 대한 답변을 설정하는 기능과 시간 알림, 환영 메시지만 존재한다. 이마저도 10개 제한이 있으며, 개마다도 글자 수 제한이 있다. 환영메세지에는 공지 글 바로가기 버튼을 넣을 수 있는 기능이 있다. 이 점을 제외하면 현재는 유저 제작 봇의 기능이 훨씬 뛰어난 셈.
4. 제작법
5. 유의사항
위의 작동방식에서 알 수 있다시피 카카오톡의 상단바 알림을 읽어와 작동하기에, 카카오톡의 알림을 끄거나 봇이 구동 중인 기기로 카카오톡 채팅방에 접속하고 있으면 알림이 표시되지 않아 작동하지 않는다.
카카오톡 본계정으로 봇을 돌리기엔 무리가 있으므로 공기계나 노트북에서 봇을 돌리거나, 삼성 듀얼메신저[16] 나 보안폴더 앱 또는 App Cloner 등의 앱 복제 앱으로 동일한 기기에서 돌리는 등의 방법등이 있다. 단 복제된 카톡의 패키지명이 기존의 카톡 앱 패키지 명과 동일할 경우, 봇 구동 앱이 원본 카톡과 복제된 카톡을 구분하지 못하여, 두 카톡 모두 봇으로 구동되는데, 이는 봇을 구동할 계정의 카카오톡 채팅방 이름을 특수하게 변경한 후, 그 이름을 가진 방에서만 작동하도록 코딩하거나, 아예 본계정쪽의 카톡 알림을 꺼버리는 방법이 있다. 부계정을 사용할 경우 투폰 서비스 등으로 번호 하나를 발급받거나, 기상번호 사이트나 Talkatone 등의 앱을 이용해 인증용으로 해외 가상번호를 발급받아 계정을 만들면 된다. 해외 가상번호의 경우 계정 생성 시 이용자 보호조치에 걸릴 수 있는데, 이 경우에는 다른 사람들로부터 선 채팅을 여러번 받으면 해결된다.
그리고 '''절대로''' eval 함수를 봇 안에 쓰지 말자. 정 쓰고 싶다면 기능으로 만들더라도 자신만 쓸 수 있게 만들거나, 구동 기기에 영향을 줄 요소를 싹 다 막아놓고 만들는 것이 좋다. 자세한건 eval 문서 참조.
6. 논란 및 사건사고
6.1. 나는 원숭이다. 사건
2020년 5월 22일 여러 카카오톡 오픈채팅방에서 카카오링크 이루어진 어떤 메시지가 전달된다.
'''우와 ㄷㄷ 이거 눌러봐요'''
문제는 그 메세지에 있는 버튼을 누르면 자기는 메세지를 보내지 않았지만, '''나는 원숭이다.''' 라는 메세지가 자동으로 보내진다는 것이다. 잘 모르는사람들이 보면 자기가 계정을 해킹당했다고 생각을 했을것이다.
카카오톡에서 재빨리 이에 대해서 사실이 아니라고 반박하였다. #
하지만, 카카오톡의 취약점을 이용한 해킹 기반으로 만들어진 카카오링크가 맞다. 해당 취약점은 현재 보완되었다.[17]
이것이 정체는 카카오톡에서 사용하는 프로토콜인 LOCO 프로토콜과 호환되는 라이브러리를 사용하여, 정상적인 카카오톡 클라이언트인 척 카카오 서버를 속이는 방식으로 전송된채팅이다.
그중 채팅 강제 전송 부분은 카카오톡 내부 파일에 있는 scheme[18] 을 이용한 것이다. 물론 '''지금은 막혔다.'''
이 사건으로 많은 사람들이 카카오톡 봇에 흥미를 느끼기 시작하였고[19] , 카카오톡 봇에 대한 부정적인 인식이 나온것이다.
지금도 가끔씩 LOCO 프로토콜 해킹 기반으로 전송된 이용한 메세지가 돌아다니고는 있다. 심지어, 이를 이용하여 금전적 이익을 취하는 사람들까지 존재한다.
하지만 여러 커뮤니티에서 이를 엄격히 금지해 예전보다는 나아졌다.
지금도 가끔 코무에서 비판을 받곤 하다.
7. 여담
- 카카오톡 봇은 모질라 재단에서 개발한 Rhino 엔진을 이용하여 자바스크립트를 실행하는데, 블록런처의 ModPE 스크립트도 동일한 엔진을 사용한다.
- 커피스크립트의 경우는 커피스크립트 컴파일러를 내장시켜놓고 자바스크립트로 컴파일시키는 방법으로, Lua의 경우는 LuaJ를 사용한다.
- 이 때문에 봇 스크립트에 순수 자바스크립트 뿐만 아니라, 안드로이드 어플 개발시 사용되는 Java API를 사용할 수 있다.
[1] 베타 테스트 당시 이름은 '''팬다 Jr.'''이다.[2] 여러 어플이 있었으나, 현재는 대부분의 어플이 카카오톡 측에서 이름 등에 'Kakao'가 들어갔다는 이유로 구글에 신고되어 내려간 상황이다. 정확히는 어플은 남아있으나, 한국 Google Play 에서는 검색이 되지 않는다.[3] 또는 삼성 웨어러블도 가능하다[4] 안드로이드는 각 앱마다 '패키지명'이라는 고유한 이름이 있다. 이 패키지명이 같은 앱은 내부 구조가 완전히 달라도 동일한 앱으로 인식하기에, 어떤 앱에서 알림을 전송했는지 구분이 가능하다.
예로 카카오톡의 패키지명은 'com.kakao.talk' 이다.[5] 정확하게는, 모질라 재단에서 개발한 자바 기반 자바스크립트 구현 라이브러리인 'Rhino' 엔진을 사용한다.[6] 대다수의 봇 어플에서 response라는 이름을 사용한다.[7] 자바스크립트가 아닌 다른 언어를 지원하거나, 초심자용으로 아예 코딩 없이 사용할 수 있는 봇 구동 앱도 존재한다.[8] 앱마다 다를 수 있으나, 보통 답장 메소드의 경우 이를 사용한다.[9] 이때 봇 앱에서 Wear OS 관리 앱을 사용하여 답장을 보낸다.[10] 정확하게는, 모질라 재단에서 개발한 자바 기반 자바스크립트 구현 라이브러리인 'Rhino' 엔진을 사용한다.[11] 채자봇, 초록봇이라고도 하며, 제작자의 닉네임을 따서 닼토봇이라고도 한다. 당시에는 봇 제작자의 닉네임 뒤에 -봇을 붙이는 방법으로 봇 구동 앱을 구분하였었다.[12] 지원 종료가 계획되어 있어, 신규 태그가 추가될 가능성은 몹시 낮다.[13] 채팅 자동응답 봇에서만 존재하고, 자바스크립트로 컴파일되는 언어이며 한국어로 코드를 작성할 수 있다는 특징이 있다. 단계적으로 지원중단 중이다.[14] 블록코딩과 유사한 환경, 다만 단순 자동응답 수준의 낮은 난이도는 아니다.[15] 메봇R이라고 줄여서 불리기도 한다.[16] 삼성 듀얼메신저는 기본 카카오톡 패키지명이 같으니 참고[17] 해킹 기반으로 전송된 채팅은 맞지만, 스니핑은 아니며, 오히려 스니핑보다는 스푸핑에 더 가깝다.[18] 원래는 챗봇에서 사용하는 방식이다.[19] 어느 봇 구동 앱 개발자의 블로그에 있던 카카오링크 자동 전송을 성공했다는 게시글이 중간에 그 글을 비공개로 돌렸음에도 그날 3000 조회수를 돌파했다
예로 카카오톡의 패키지명은 'com.kakao.talk' 이다.[5] 정확하게는, 모질라 재단에서 개발한 자바 기반 자바스크립트 구현 라이브러리인 'Rhino' 엔진을 사용한다.[6] 대다수의 봇 어플에서 response라는 이름을 사용한다.[7] 자바스크립트가 아닌 다른 언어를 지원하거나, 초심자용으로 아예 코딩 없이 사용할 수 있는 봇 구동 앱도 존재한다.[8] 앱마다 다를 수 있으나, 보통 답장 메소드의 경우 이를 사용한다.[9] 이때 봇 앱에서 Wear OS 관리 앱을 사용하여 답장을 보낸다.[10] 정확하게는, 모질라 재단에서 개발한 자바 기반 자바스크립트 구현 라이브러리인 'Rhino' 엔진을 사용한다.[11] 채자봇, 초록봇이라고도 하며, 제작자의 닉네임을 따서 닼토봇이라고도 한다. 당시에는 봇 제작자의 닉네임 뒤에 -봇을 붙이는 방법으로 봇 구동 앱을 구분하였었다.[12] 지원 종료가 계획되어 있어, 신규 태그가 추가될 가능성은 몹시 낮다.[13] 채팅 자동응답 봇에서만 존재하고, 자바스크립트로 컴파일되는 언어이며 한국어로 코드를 작성할 수 있다는 특징이 있다. 단계적으로 지원중단 중이다.[14] 블록코딩과 유사한 환경, 다만 단순 자동응답 수준의 낮은 난이도는 아니다.[15] 메봇R이라고 줄여서 불리기도 한다.[16] 삼성 듀얼메신저는 기본 카카오톡 패키지명이 같으니 참고[17] 해킹 기반으로 전송된 채팅은 맞지만, 스니핑은 아니며, 오히려 스니핑보다는 스푸핑에 더 가깝다.[18] 원래는 챗봇에서 사용하는 방식이다.[19] 어느 봇 구동 앱 개발자의 블로그에 있던 카카오링크 자동 전송을 성공했다는 게시글이 중간에 그 글을 비공개로 돌렸음에도 그날 3000 조회수를 돌파했다