나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-09-27 11:11:27

카카오톡 봇/제작법


파일:상위 문서 아이콘.svg   상위 문서: 카카오톡 봇
{{{#!wiki style="margin:-10px"<tablebordercolor=#facc2e><tablebgcolor=#facc2e> 파일:카카오톡 아이콘.svg카카오톡
관련 문서
}}}
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px; word-break: keep-all"
<colbgcolor=#facc2e,#3a212b><colcolor=#3a212b,#facc2e> 기능 단톡방 · 카카오 이모티콘 · 카카오톡 채널 · 샵검색 · 카카오톡 선물하기 · 카카오톡 쇼핑하기 · 카카오쇼핑라이브 · 카카오톡 게임별 · 카카오톡 봇(제작법 · 팬다 Jr. 봇 · 오픈채팅봇) · 카카오톡 지갑
문제점 및 비판 카카오톡 사찰 논란 · 여성가족부 불법촬영물 오픈채팅방 단속 논란 · 인터넷 검열감시법 시행 사태 · 단톡방 성희롱 · 카카오톡 감옥
사건사고 클리앙 오픈채팅 여론조작 사건 · SK C&C 판교 데이터센터 화재로 인한 인터넷 서비스 장애 사건 · 카카오톡 AI 남성혐오 학습 논란
기타 업데이트 내역 · 반톡 · 먹통 논란
}}}}}}}}} ||

1. 개요2. 비공식 카카오톡 봇3. 관련 네이버 카페4. 카카오 공식 지원 봇5. 자바스크립트
5.1. Node.js (node-kakao)5.2. Node.js (remote-kakao)
6. 단순 자동응답7. 일반 자동응답 (IceBlock.js)8. 커피스크립트9. 루아10. Visual Basic11. Python12. 기타13. 기술
13.1. 웹 크롤링 및 파싱13.2. 로컬 DB 접근13.3. 카카오링크13.4. share-Kakao
14. PC에서 제작

1. 개요

이문서에서 공식봇, 비공식봇의 제작방법을 간략하게 설명한다.
따라서 더 자세히 알고싶다면 관련 커뮤니티 또는 다른 봇 문서를 참고하면 좋을 듯하다.

이 문서에서 설명한 방법대로 봇을 사용하다 카카오 약관에 위반하여 걸린 정지에 대해서는 사용한 본인에게 책임이 있다.

2. 비공식 카카오톡 봇

오픈채팅봇, 팬더 Jr과 같은 카카오톡 자체에서 지원하는 봇을 제외한 사용자가 직접 만든 봇을 말한다. 카카오톡 봇을 만들기 위해서는 메신저봇R, 채팅자동응답봇 (줄여서 채자봇) 등을 설치해 사용한다. 구글 플레이스토어에서는 다운로드 할 수 없는 프로그램들도 존재한다.[1]
봇 구동 앱에서는 라이노 자바스크립트 엔진을 사용한다.

자세한 사용법은 밑의 자바스크립트 문서를 보면 된다.

3. 관련 네이버 카페

카카오톡 봇에 관련된 정보들과 사용법을 알 수 있다. 카톡봇 강의, 코드 공유, 여러 꿀팁들을 접해볼 수 있으며, 관련 질문 또한 할 수 있다.

아래는 카카오톡 봇에 관련된 대표적인 카페이다.

https://cafe.naver.com/brown7crfc
https://cafe.naver.com/devlobots
https://cafe.naver.com/msgbot
https://cafe.naver.com/nameyee

또한 카톡봇으로 RPG게임에 관련된 카페도 존재한다.
https://cafe.naver.com/highkrs[2]

4. 카카오 공식 지원 봇

4.1. 오픈채팅봇

카카오톡에서 현재 지원중인 공식 봇이다.

아주 기초적인 환영메세지, 알림메세지, 자동응답 총 3가지를 지원한다. 현재 모든 오픈채팅방에서 활성화시킬 수 있으며 카카오톡 공식 봇답게 UI가 직관적이고 개발하기 편리하다.

예전에는 방장봇이었지만 지금은 오픈채팅봇으로 이름만 바뀌었다. 방장봇 시절에 해당 기능을 활성화시킨 채팅방에는 계속 방장봇으로 존재한다. 방장봇 기능을 비활성화시켰다가 다시 활성화시키면 오픈채팅봇으로 바뀐다.

4.2. 팬다 Jr. 봇

카카오톡에서 지원했던 공식봇이다.

오픈채팅봇/방장봇의 이름이 팬다 Jr.이던 시절에 활성화시킨 오픈채팅방에서는 여전히 팬다 Jr.로 존재하고 있다. 초기에는 /로 시작하면 무조건 반응하는 소위 민폐봇이었으나, 방장봇으로 이름이 바뀐 이후에는 팬다 Jr,도 지정된 키워드에만 가능한다.

이 또한 사용하기에 직관적이고 편리하다.

5. 자바스크립트

가장 기초적이고 비공식봇을 만드는 사람들에게 가장 친숙한 봇을 만드는 방법이다. 거의 모든 봇에서 지원하는 언어이다. 현재 출시된 봇 구동 앱에서는 라이노 자바스크립트 엔진을 사용한다[3]

가장 많은 사람들이 쓰는 언어이다.

이에 대해서는 카카오톡 봇 문서에 많은 방법이 서술되어 있으므로 여기에선 정말 간단하게 소개하겠다. 봇을 만들때 문서를 참고하면 좋을것이다. #

기본적으로 제공되는 response함수는 다음과 같다.[4]
#!syntax javascript
function response (room, msg, sender, isGroupChat, replier, imageDB, packageName) { //packageName 이후의 매개변수는 봇 구동 앱마다 다름
    //여기에 소스를 쓰면 된다.
}

5.1. Node.js (node-kakao)

어떤 비공식봇 개발자가 만든 LOCO Protocol 호환 라이브러리이다.

카카오톡이 사용하는 프로토콜인 LOCO Protocol를 이용하여 봇을 만들 수 있다. 좋게 말해서 호환 라이브러리지, PC카톡인 척 작동하는 위조 클라이언트다. 따라서 카카오 약관에 위배되며[5], 봇 제작자들 내에서도 사용하는 것이 금기시된다.

기존 개발 목적은 오픈채팅방 관리였으나, 사용자들의 끊임없는 악용[6]으로 인해, 버전 4.5.0를 마지막으로 지원이 중단되었다. 지원이 중단된 시점에서 사실상 PC카톡 구버전인 척 작동하는 위조 클라이언트기에, PC카톡 구버전 지원이 끊기면서 작동을 멈췄다. 버전명만 슬쩍 올려서 쓰는 것을 시도하면 빠른 시간 내에 영구정지당한다.

그러나 몇몇 사용자들로 인해 뚫린 개조 버전이 은밀히 거래되고 있다는 소문이 돈다. 악용하는 사람들은 주로 뒷세계와 연관되어 있는 경우가 많으니, 그냥 관심을 가지지 않는 것을 권장한다.

프로젝트 중단
깃허브

그나마 이로운 사용 방식인 리눅스용 카카오톡 클라이언트 개발에도 사용되었으나, 카카오 법무팀 측에서 배포를 중단하고 기여를 삭제하라는 이메일을 기여자들에게 보낸 이후로 개발이 멈췄다.

5.2. Node.js (remote-kakao)

어떤 비공식봇 개발자가 만든 Node.js로 카톡봇을 만드는 라이브러리이다. 이 라이브러리로 카카오링크를 사용할 수 있을 정도로 호환성이 매우 좋은 편이다[7].

여담으로 최근에는 http방식으로 보냈던 기존 방식과 달리 socket.io를 이용하여 카톡봇을 돌리게 해준다

이건 공식 소개 글에 있는 예제 코드이다.
#!syntax javascript
import { RKClient } from 'remote-kakao';

const client = new RKClient();
const prefix = '>';

client.on('login', (port) => {
  console.log(`http://localhost:${port}`);
});

client.on('message', (message) => {
  if (!message.content.startsWith(prefix)) return;

  const args = message.content.split(' ');
  const cmd = args.shift();

  if (cmd === 'add') {
    if (args.length <= 2) return message.reply('최소 두 개의 더할 수를 보내주세요 ㅠㅠ');

    let sum = 0;
    args.forEach((n: string) => {
      if (!isNaN(Number(n))) sum += Number(n);
    });
    message.reply(sum);
  }
});

client.login();


깃허브[8]

6. 단순 자동응답

코딩도 모르고 정말 처음 시작할때 많이들 입문으로 시작하는 봇 제작 방식 중 하나이다.

단순 자동응답은 기능 창시자가 프로그래밍 언어로 인정하지 않는다.[9]
파일:상세 내용 아이콘.svg   자세한 내용은 채팅 자동응답 봇 문서
번 문단을
부분을
참고하십시오.

7. 일반 자동응답 (IceBlock.js)

오직 채자봇에서만 지원하는 기능으로, 블록코딩과 유사한 환경에서 로직을 만들면, 그 로직에 대응되는 자바스크립트 소스를 생성하여, 라이노 엔진에서 구동하는 방식으로 작동한다.
처음에는 IceBlock.js라는 이름으로 추가되었었다.

8. 커피스크립트

오직 채자봇에서만 지원하는 언어이다. 채자봇 내부에 커피스크립트 컴파일러가 내장되어있으며, 해당 컴파일러를 통해 자바스크립트로 트랜스파일한 뒤에 라이노 엔진에서 실행한다.

9. 루아

오직 채자봇에서만 지원하는 언어이다. LuaJ라는 엔진을 통해 구동한다.

10. Visual Basic

오직 채자봇에서만 지원하는 언어이다. vb2js를 통해 자바스크립트로 트랜스컴파일 후 라이노 엔진에서 구동한다.

11. Python

어떤 비공식봇 개발자가 만든 Python으로 카톡봇을 만드는 라이브러리이다.

이 이외에 파이썬으로 개발가능한 봇이 존재한다. #

12. 기타

물론 이것말고도 여러가지로 만들수 있다. 만들어 지지 않았을뿐.
카톡봇의 원리를 이해하면 안드로이드 스튜디오 같은 IDE로 충분히 만들수 있다! [10]

13. 기술

13.1. 웹 크롤링 및 파싱

현재 카카오톡 봇 소스중 상당수를 차지하는 기술이다, 대부분의 파싱은 Jsoup 라이브러리로 이루어지며, 아주 오래전 봇 앱 또는 자바 클래스를 지원하지 않는 엔진[11]이 아닌이상 대다수가 Jsoup라이브러리를 탑재한다.[12]
웹사이트의 HTML 소스를 읽어오는 Utils.getWebText(url);라는 함수도 존재하나, 이 함수 역시 내부적으로는 Jsoup 라이브러리를 통해 GET 요청을 보내고 응답을 받아오는 방식으로 작동한다.

사용방법
#!syntax javascript
org.jsoup.Jsoup.connect("url");

위 방식은 가장 기초적이며, get, post등 여러가지 웹 요청 방식에 따라 뒤에 따라오는 함수가 달라진다. 같은 라이노 엔진을 사용하는 ModPE 스크립트처럼 사용 방법은 자바와 동일하나, 언어만 자바스크립트로 바뀐 것과 같다.

변수나 상수에 클래스 자체를 넣는 방식[13]을 사용하여 마치 자바의 import처럼 사용하는 방법도 있으며, importClass(); 또는 importPackage(); 함수를 사용하는 방법[14]도 존재한다. 후자의 경우, 봇 구동 앱 개발자가 어떻게 어떻게 Scope를 생성하도록 설계했냐에 따라 사용할 수 있을 수도 있고[15], 없을 수도 있다.[16]

13.2. 로컬 DB 접근

스마트폰의 루트 경로에 있는 카카오톡의 DB에 접근하여 정보를 가지고 오는 방식으로, 메세지를 보내는 것과 같이 어떠한 동작을 하는 방법이 아닌 오직 읽기만 하는(read-only) 기법이다. 흔히 DB봇이라고 불린다.

카카오톡 DB에는 입퇴장 기록 및 누가 누구를 강퇴하였는지, 누가 보낸 메시지를 누가 가렸는지, 가려지거나 삭제된 채팅의 원본 메시지 등이 저장[17]되기에 입퇴장 감지 및 강퇴 인식, 가리거나 지운 채팅(미디어 파일 포함[18])이 무엇인지 확인하는 기능을 구현할 수 있다.

추가적으로, 유저아이디 분석이 가능한 점을 이용하여 들낙 감지가 가능하다. 불법은 아니지만 카카오톡 약관에는 위배되기 때문에, DB봇을 구동하는 것을 카카오에게 들키면 영구정지 당한다.

13.3. 카카오링크

카카오링크는 원래 카카오에서 공식적으로 제공하는 API 중 하나로, 다음과 같이 생긴 것을 채팅방에 수동으로[19] 전송하는 것이다.

파일:카카오링크.jpg

위의 과정을 자동화시킨 모듈이 존재하며, 대부분 해당 모듈을 통해 카카오링크를 자동으로 전송하는 방법을 사용하며, 카카오링크에 이미지를 포함시킬 수 있기에 사진 전송 대용으로 사용되곤 한다.
엄밀히 말하면 이 기능은 공식적으로 제공하는 기능이 아니다. 카카오링크 자체는 공식 API가 맞지만, 자동화 봇은 어느 개발자가 프로토콜을 분석하여 개발한 것이다. 따라서 카카오약관을 위반하는 사항이다.
이런 모듈들은 언어마다 존재하는데, python에는 kaling이, javascript에는 kaling.js[20][21]가 존재한다.

13.4. share-Kakao

카카오톡의 공유기능을 사용하여 만들어진 모듈이다. 무려 카카오링크와 달리 그냥 이미지를 보낼수 있다.[22] 동영상, 지도 여러가지 타입을 보낼수 있으며, 맨션도 가능하다![23] 다만 답장은 불가능하다.

이 방법은 위에 설명한 카카오톡 로컬 DB 접근이 가능해야하며[24] 안드로이드 버전 11이상의 디바이스에는 카카오톡의 알림에 channelId가 함께 포함되어 있어 노루팅으로도 사용가능 하나, 비교적 최근에 발견된 방법이기에 곧 막힐수도 있다. 모듈 링크는 여기다. #

이젠 막혀서 작동하지 않는다. 정상적인 클라이언트가 아닌 것이 카카오톡 서버에 요청을 넣는 것이기에, 위에서 언급한 node-kakao와 근본적으로 같다. 따라서, share-kakao 역시 봇 제작자들 내에서도 사용하는 것이 금기시된다. 하지만, 아무튼 본인은 로코 프로토콜을 사용한 적이 없다면서, 또는 아무튼 카카오톡 로컬 DB에서 정보를 얻어오니 DB봇이라고 주장[25]하며 정신승리를 하는 일부 개발자들이 존재한다.

14. PC에서 제작

14.1. FTP

컴파일은 모바일로 하고 소스만 PC에서 제작하는 방식이다. 이런 불편이 있지만 다른 방법보다 연결 등이 너무 쉽기에 많은 사람이 사용한다.

보통 Visual Studio Code를 사용히며, 아톰이나 다른 IDE도 가능하지만 매우 불편하다. 먼저 안드로이드에 'Ftp 서버' 라는 앱을 다운받는다. 그리고 앱을 실행한뒤 빨간 버튼을 누르면 버튼이 초록색으로 변하고 아래에 서버 아이피:포트와 유저네임, 비밀번호가 나온다. 이제 VS Code로 이동한다.

이후 VS Code에도 확장프로그램 'ftp-simple'을 설치한다. 다운로드한 후 F1키를 눌러 ftp를 검색한 후 설정으로 들어가면 json 형식이 나오는데 이때 방금 스마트폰에서 본 아이피와 포트, 닉네임, 비밀번호를 입력하고 저장한 다음 다시 F1키를 눌러 ftp에 접속한다. 그다음 위에 메뉴에서 디렉토리를 정하고 봇 소스를 개발하면 된다.
[1] StarLight과 같은 앱이 예시다.[2] 카톡봇의 대한 이해도가 높을때 가입하는 것을 추천한다.[3] 그런지 ES2015문법도 극히 일부만 지원한다[4] 이는 레거시 API에서만 해당한다.[5] 사실 카카오 측에서는 카카오가 허용하지 않은 api를 모두 금지하고 있기 때문에 대부분 운영정책 위반이다.[6] 오픈채팅방에서 방장/부방장 권한 없이 다른 사람 강퇴. 방장 권한 없이 오픈채팅방 이름 강제 변경, 방에 있는 모든 사람들을 멘션하면서 주식광고방 링크 도배 등. 지금은 전부 막혔다.[7] 정확하게는 remote-kakao 라고 한다.[8] 나중에 밝혀진 사실이지만 소스를 갈아엎고 처음부터 다시 개발해서 파일이 싹 다 없어졌다.[9] 따라서 태그들의 조합 역시 소스 코드로 인정되지 않는다.[10] 앱에서 응답을 처리한다는 것을 생각하면 자바나 코틀린 문법으로 만들 수 있다. 이미 코틀린 봇이 만들어졌다![11] ex) J2V8[12] Jsoup은 JavaScript를 위한 라이브러리가 아닌 자바용으로 제작된 라이브러리이다, 라이노 자바스크립트 엔진에서는 자바스크립트 측에서 앱 내부의 클래스에 접근할 수 있기에, 앱에 포함되어 있는 Jsoup에도 접근하여 사용할 수 있다. 애초에 사용자들이 쓰라고 앱 안에 탑재했던 것이 아니다.[13] 예시) const Jsoup = org.jsoup.Jsoup;[14] 예시) importClass(org.jsoup.Jsoup);[15] ImporterTopLevel 클래스 사용[16] org.mozilla.javascript.Context 인스턴스의 .initStandardObjects(); 메서드 사용[17] 채팅 삭제 기능은 실제로 채팅이 지워지는 것이 아닌, 보이지 않게 처리되는 것이다.[18] 파일의 경우 바로가기 링크 형태로 저장된다.[19] 카카오톡 앱 실행 후 친구 목록 또는 채팅방 목록에서 보낼 곳을 수동으로 선택[20] 단 이 모듈은 구글에서 배포한 crypto.js 라는 모듈이 추가로 필요하다.[21] 카카오링크 방식이 몇개가 변동됨에 따라 그대로 적용하면 작동이 되지 않는다.[22] 하지만 카카오톡 서버안에서 있는거만 가능하다.[23] 이유는 이 방식 어테치멘트를 수정하여 보낼수 있기 때문이다.[24] DB가 안 돼도 가능은 하지만 내부에서 사용하는 키가 매일매일 바뀐다.[25] DB봇은 정보를 읽기만 하는 것까지를 의미한다. share-kakao는 읽어온 정보를 사용하여 카카오 서버와 통신한다.

분류