1. 개요
이름 | 채팅 자동응답 봇[1] |
개발자 | Dark Tornado |
플랫폼 | 안드로이드 |
Google Play 설치 링크 개발자 블로그 |
카카오톡 봇을 구동할 때 사용할 수 있는 앱들 중 하나로, 단순 자동응답, 자바스크립트, 커피스크립트, 루아,
현재 카카오톡이 알림구조를 변경하여 봇이 작동하지 않게되었으니 베타버전을 쓰길 바란다. 일부 기기에서는 5.0 beta 6이 정상적으로 작동하지 않는 버그가 있다. 이 경우, 임시방편으로 5.0 beta 2를 사용하면 작동한다.
버전 5.0 베타 6 깃허브 링크 | 버전 5.0 베타 2 깃허브 링크 |
2. 제작 방법
우선, 카카오톡 봇의 대부분은 자바스크립트[4]를 사용하기 때문에 자바스크립트의 기본 개념을 학습하고 강좌를 보는 것이 더욱 좋다. 그러니 되도록이면 자바스크립트를 미리 학습하는 것이 효과적이다. 원래, 자바스크립트를 지원하는 카톡봇 구동 앱은 기본적인 프로그래밍 지식이 있는 사람들이 쓰라고 만들어진 것이다.하지만 채팅 자동응답 봇은 단순 자동응답 기능이 있어서 프로그래밍 지식이 없는 사람들도 사용이 가능하기에, 초보자나 처음 시작하는 사람들에게 추천되고는 한다.
유일하게 단순 자동응답 기능을 지원한다고 알려져 있으나, 단순 자동응답 기능만 지원하거나, 자동응답 기능도 지원하는 다른 앱들도 존재한다. 다만, 단순 자동응답 기능에서의 자유도는 채팅 자동응답 봇이 가장 높다고 볼 수도 있다.
2.1. 일반 자동응답[5] 사용
2020년 6월, 비주얼 베이직과 함께 지원하기 시작한 기능으로, 블록코딩과 유사한 환경에서 어떻게 작동할지 작성하면 그에 대응되는 자바스크립트 소스가 생성되고, 생성된 소스를 라이노 엔진에서 구동하는 방식이다.사용법은 개발자가 별도로 만들어놓은 사이트[6]에서 확인할 수 있다. 해당 사이트는 앱 내부에서도 볼 수 있다.
2.2. 자바스크립트 사용
출시 당시[7]에는 단순 자동응답 기능만 지원하였으나, 2018년 4월부터 자바스크립트를 지원하기 시작하였다.지원하는 API 목록은 앱 내부에서 확인할 수 있었으나, 채팅 자동응답 봇 문서라는 별개의 사이트로 분리되었다. 파편화 완화를 위해 메신저봇에서 지원하는 거의 모든 API들이 구현되어 있으니, 메신저봇을 기준으로 작성된 카카오톡 봇 문서를 확인하는 것도 좋은 방법이다.
버전 4.0부터는 API2를 부분적으로 지원하기 시작한다.
2.3. 커피스크립트 사용
채팅 자동응답 봇 내부에 커피스크립트 컴파일러가 내장되어 있으며, 해당 컴파일러를 통해 입력한 커피스크립트 소스를 자바스크립트로 컴파일한 뒤에 라이노 엔진에서 실행하는 방식으로, 사용 가능한 API는 자바스크립트와 동일하다.2018년 6월부터 지원하기 시작했다.
2.4. 루아 사용
LuaJ라는 엔진을 통해 구동하며, 지원하는 API가 자바스크립트에 비해 다소 부실한 편이다. 이 역시 앱 내부에서 API 목록을 확인할 수 있으며, 2018년 7월부터 지원하기 시작했다.2.5. 비주얼 베이직 사용
채팅 자동응답 봇 내부에 vb2js가 내장되어 있으며, 해당 컴파일러를 통해 입력한 비쥬얼 베이직 소스를 자바스크립트로 컴파일한 뒤에 라이노 엔진에서 실행하는 방식으로, 사용 가능한 API는 자바스크립트와 동일하다.2020년 6월부터 지원하기 시작했다.
2.6. 단순 자동응답 사용
기본적인 틀은 A라고 말하면 B라고 답하라와 같은 구조로 설정되며, 채팅방 이름이나 보낸 사람의 이름에 따라 작동 여부를 결정하도록 설정할 수도 있다.앱 내부에서 태그라고 불리는 [\[\이렇게\]\] 생긴 것들이 있는데, 그 태그들을 이용하여 특정 문구를 인용하거나, 특정한 동작을 실행할 수 있다.
예를 들어, \[\[보낸사람\]\]이라고 적어놓으면 단순 자동응답이 처리될 때 \[\[보낸사람\]\]이라고 적힌 부분이 채팅을 보낸 사람의 이름으로 변경되고, \[\[토스트|응답 테스트\]\] 라고 적어놓으면 해당 문구가 지워지고 토스트 메시지로 '응답 테스트'라는 문구가 출력된다.
태그들 중 \[\[만약\]\], \[\[변수\]\] 태그와 같은 프로그래밍적 요소가 있기 때문에, 다른 단순 자동응답 앱들보다는 자유도가 높은 편이다. 예를 들어, 예전부터 사용되었던 \[\[내용\]\] 태그와 \[\[삭제\]\] 태그를 이용하거나 \[\[뒷내용\]\] 태그를 사용하여 따라하기 기능을 만들 수 있다.
2.6.1. 태그 목록
- \[\[보낸사람\]\] : 보낸 사람의 이름 인용.
- \[\[내용\]\] : 수신된 채팅의 내용 인용
- \[\[이전내용\]\] : 직전에 수신된 채팅의 내용 인용
- \[\[방\]\] : 채팅이 수신된 방의 이름 인용
- \[\[전체보기\]\] : 해당 문구 뒤에 나오는 내용을 전체보기 안으로 넣음.[8]
- \[\[다음채팅\]\] : 해당 문구를 기준으로 다른 채팅으로 나누어서 보낸다.
- \[\[다음채팅|딜레이[9]\]\] : 해당 문구를 기준으로 다른 채팅으로 나누어서 보내며, 뒷부분을 전송하기 전에 딜레이를 준다.
- \[\[날짜\]\] : 현재 날짜 인용
- \[\[시간\]\] : 현재 시간 인용
- \[\[월\]\] : 현재 월 인용
- \[\[일\]\] : 현재 날짜(일) 인용
- \[\[시\]\] : 현재 시간(시) 인용
- \[\[분\]\] : 현재 시간(분) 인용
- \[\[초\]\] : 현재 시간(초) 인용
- \[\[랜덤|내용1|내용2...\]\] : 내용1, 내용2, 내용3... 중 하나를 인용
- \[\[변경|대상내용|바꿀내용|바뀔내용\]\] : 대상내용에 들어간 내용 중 특정 내용을 다른 내용으로 변경
- \[\[모두변경|대상내용|바꿀내용|바뀔내용\]\] : 대상내용에 들어간 내용 중 모든 특정 내용을 다른 내용으로 변경
- \[\[삭제|대상내용|지울내용\]\] : 대상내용에 들어간 내용 중 특정 내용 삭제
- \[\[모두삭제|대상내용|지울내용\]\] : 대상내용에 들어간 내용 중 모든 특정 내용 삭제
- \[\[변수|이름|값\]\] : 해당 이름에 값을 저장합니다. 변수는 채팅방마다 따로따로 적용됩니다.
- \[\[변수|이름\]\] : 해당 이름에 저장된 값을 인용합니다. 채팅방마다 따로따로 적용됩니다.
- \[\[변수|이름|더하기|값\]\] : 해당 변수의 값을 증가시킵니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[변수|이름|빼기|값\]\] : 해당 변수의 값을 감소시킵니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[변수|이름|곱하기|값\]\] : 해당 변수에 저장된 값에 해당 값을 곱하고 그 결과를 변수에 저장합니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[변수|이름|나누기|값\]\] : 해당 변수에 저장된 값에 해당 값을 나누고 그 결과를 변수에 저장합니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[변수|이름|붙이기|값\]\] : 해당 변수의 값 뒤에 새로운 값을 붙입니다.
- \[\[전체변수|이름|값\]\] : 해당 이름에 값을 저장합니다. 전체변수는 채팅방 구분을 하지 않습니다.
- \[\[전체변수|이름\]\] : 해당 이름에 저장된 값을 인용합니다. 채팅방 구분을 하지 않습니다.
- \[\[전체변수|이름|더하기|값\]\] : 해당 전체변수의 값을 증가시킵니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[전체변수|이름|빼기|값\]\] : 해당 전체변수의 값을 감소시킵니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[전체변수|이름|곱하기|값\]\] : 해당 전체변수에 저장된 값에 해당 값을 곱하고 그 결과를 전체변수에 저장합니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[전체변수|이름|나누기|값\]\] : 해당 전체변수에 저장된 값에 해당 값을 나누고 그 결과를 전체변수에 저장합니다. 숫자가 저장된 경우에만 작동합니다.
- \[\[전체변수|이름|붙이기|값\]\] : 해당 전체변수의 값 뒤에 새로운 값을 붙입니다.
- \[\[토스트|내용\]\] : 해당 내용을 토스트 메시지로 출력
- \[\[상단바|제목|내용\]\] : 상단바에 해당 제목과 내용을 가진 알림을 띄움
- \[\[상단바|제목|내용|정보\]\] : 상단바에 해당 제목과 내용, 정보를 가진 알림을 띄움
- \[\[알림창|제목|내용\]\] : 해당 제목과 내용을 가진 알림창을 띄움
- \[\[ON\]\] : 봇이 작동하도록 설정
- \[\[OFF\]\] : 봇이 작동하지 않도록 설정
- \[\[만약|조건|참일때|거짓일때\]\] : 실행될 때, 만약 조건이 참이면 참일 때 부분으로, 거짓이면 거짓일 때 부분으로 변경됩니다.
- \[\[같다|값1|값2\]\] : 값1과 값2가 같으면 참, 다르면 거짓이 됩니다. \[\[만약\]\] 태그에서 조건 부분에 넣으면 됩니다.
- \[\[다르다|값1|값2\]\] : 값1과 값2가 다르면 참, 같으면 거짓이 됩니다. \[\[만약\]\] 태그에서 조건 부분에 넣으면 됩니다.
- \[\[이상|값1|값2\]\] : 값1이 값2보다 크거나 같으면 참, 작으면 거짓이 되며, 수만 비교할 수 있습니다. \[\[만약\]\] 태그에서 조건 부분에 넣으면 됩니다.
- \[\[이하|값1|값2\]\] : 값1이 값2보다 작거나 같으면 참, 크면 거짓이 되며, 수만 비교할 수 있습니다. \[\[만약\]\] 태그에서 조건 부분에 넣으면 됩니다.
- \[\[초과|값1|값2\]\] : 값1이 값2보다 크면 참, 작거나 같으면 거짓이 되며, 수만 비교할 수 있습니다. \[\[만약\]\] 태그에서 조건 부분에 넣으면 됩니다.
- \[\[미만|값1|값2\]\] : 값1이 값2보다 작으면 참, 크거나 같으면 거짓이 되며, 수만 비교할 수 있습니다. \[\[만약\]\] 태그에서 조건 부분에 넣으면 됩니다.
- \[\[목록|이름|추가|값\]\] : 해당 이름을 가진 목록에 해당 값을 추가합니다.
- \[\[목록|이름|삭제|값\]\] : 해당 이름을 가진 목록에 해당 값을 삭제합니다.
- \[\[목록|이름|포함|값\]\] : 해당 이름을 가진 목록에 해당 값이 포함되어있으면 참, 아니면 거짓이 됩니다.
- \[\[목록|이름|랜덤\]\] : 해당 이름을 가진 목록에 있는 값들 중 아무거나 하나 가져옵니다.
- \[\[목록|이름|초기화\]\] : 해당 이름을 가진 목록에 있는 값을 모두 삭제합니다.
- \[\[목록|이름|길이\]\] : 해당 이름을 가진 목록에 값이 몇 개 들어가있는지 가지고옵니다.
- \[\[목록|이름|위치\]\] : 해당 이름을 가진 목록에 있는 값들 해당 위치에 있는 값을 가져옵니다.
- \[\[목록|이름\]\] : 해당 이름을 가진 목록의 내용을 출력합니다.
- \[\[파일|이름|값\]\] : 해당 파일에 해당 값 저장
- \[\[파일|이름\]\] : 해당 파일에 저장된 값을 불러옴
- \[\[차단|닉네임\]\] : 해당 닉네임을 가진 사람을 차단.
- \[\[차단해제|닉네임\]\] : 해당 닉네임을 가진 사람의 차단을 해제
- \[\[차단초기화\]\] : 차단 목록을 초기화
- \[\[URL|내용\]\] : 해당 내용을 URL 인코딩시킴
- \[\[클립보드|내용\]\] : 해당 내용을 클립보드로 복사
- \[\[크롤링|url\]\] : 해당 url의 HTML 소스를 가지고 옴
- \[\[태그삭제|내용\]\] : 해당 내용에 있는 HTML 태그들을 삭제합니다.
- \[\[자르기|내용|문자열|위치\]\] : 해당 내용을 해당 문자열을 기준으로 잘라서 목록으로 만든 뒤, 해당 목록에 해당 위치에 있는 내용을 가지고옴
- \[\[날씨|지역\]\] : 해당 지역[10]의 날씨 정보를 인용. 지원하지 않는 지역의 경우는 행정구역코드를 사용하면 된다.
- \[\[날씨|행정구역코드\]\] : 해당 행정구역코드에 대응되는 지역의 날씨 정보를 인용하며, 기상청에서 제공하는 단기예보 조회서비스에서 사용하는 행정구역코드를 사용하면 된다.
2.6.1.1. 삭제된 태그 목록
- \[\[날씨\]\] : 현재 전국 날씨 정보를 인용하는 태그였으나, 버전 3.4에서 삭제되었다. 이후에 지역으로 부활했다.
- \[\[시계\]\] : □, ■ 문자로 구현된 디지털 시계를 인용하는 기능이였으나, 버전 3.3부터 그냥 숫자들로 뜨도록 변경된 후 버전 3.6에서 삭제
2.6.2. 사용 예시
1) /코인 습득 (이) 라고 입력했을때....
다음과 같이 응답...
\[\[변수|코인(여기서는 코인이지만, 변수 이름으로 아무거나 넣을 수 있다.) |더하기|30\]\] 채굴 완료! 30코인을 얻었다!
이러면 /코인 습득 이라고 할 때 마다 코인, 즉 변수 "코인" 값에 30이 더해진다.
\[\[변수|코인(여기서는 코인이지만, 변수 이름으로 아무거나 넣을 수 있다.) |더하기|30\]\] 채굴 완료! 30코인을 얻었다!
이러면 /코인 습득 이라고 할 때 마다 코인, 즉 변수 "코인" 값에 30이 더해진다.
2) /메뉴 추천(이)라고 입력했을때,
다음과 같이 응답....
\[\[랜덤|피자|치킨|탕수육|짬뽕|파스타\]\]
\[\[랜덤|피자|치킨|탕수육|짬뽕|파스타\]\]
이러면 봇이 자동으로 피자, 치킨, 탕수육, 짬뽕, 파스타중에
하나를 골라준다. 이걸로 확률뽑기도 가능한데.....텍스트로 하는 양산형 게임
하나를 골라준다. 이걸로 확률뽑기도 가능한데.....
3) /골라 (a) (b) (이)라고 입력 했을때,
다음과 같이 응답....
\[\[랜덤|[\[자르기|[\[뒷내용]\]| |2]\]|[\[자르기|[\[뒷내용]\]| |1]\]\]\]
\[\[랜덤|[\[자르기|[\[뒷내용]\]| |2]\]|[\[자르기|[\[뒷내용]\]| |1]\]\]\]
" 시작 부분이 일치 "로 선택해야 작동한다.
만약 유저가 /골라 치킨 피자 (이)라고 입력했을 경우,
봇은 " 치킨 ", " 피자 " <= 이 중 하나를 골라서 응답한다.
만약 유저가 /골라 치킨 피자 (이)라고 입력했을 경우,
봇은 " 치킨 ", " 피자 " <= 이 중 하나를 골라서 응답한다.
4) /낚시(이) 라고 입력 했을때,
다음과 같이 응답....
낚시게임을
시작합니다!\[\[다음채팅|5\]\]
\[\[보낸사람\]\]님은 "\[\[랜덤|[9등급]
물고기|[8등급] 열대어|[7등급]
연어|[6등급] 새우|[5등급]
돌고래|[4등급] 문어|[3등급]
킹크랩|[2등급] 고래|[1등급]
백상아리\]\]''를
낚았습니다!\[\[변수|\[\[보낸사람\]\]코인|더하기|\[\[랜덤|1
0|20|20\]\]\]\]
유저가 /낚시 (이)라고 입력했을 경우,
봇은 랜덤으로 물고기,열대어,연어,새우,돌고래,문어,킹크랩,
고래,백상아리 중 1게를 랜덤으로 응답하고 랜덤으로 유저
에게 코인을 지급한다.
낚시게임을
시작합니다!\[\[다음채팅|5\]\]
\[\[보낸사람\]\]님은 "\[\[랜덤|[9등급]
물고기|[8등급] 열대어|[7등급]
연어|[6등급] 새우|[5등급]
돌고래|[4등급] 문어|[3등급]
킹크랩|[2등급] 고래|[1등급]
백상아리\]\]''를
낚았습니다!\[\[변수|\[\[보낸사람\]\]코인|더하기|\[\[랜덤|1
0|20|20\]\]\]\]
유저가 /낚시 (이)라고 입력했을 경우,
봇은 랜덤으로 물고기,열대어,연어,새우,돌고래,문어,킹크랩,
고래,백상아리 중 1게를 랜덤으로 응답하고 랜덤으로 유저
에게 코인을 지급한다.
2.7. 라코스크립트 사용
2019년 3월부터 지원하기 시작한 언어로, 카카오톡 봇 개발만을 위해 개발자가 새로 설계하여 구현한 언어이다.코딩에 대한 진입 장벽을 낮추기 위해 한글로도 코딩이 가능하도록 만들어졌으나, 이를 대체할 일반 자동응답(IceBlock.js)이 탄생하면서 현재 단계적으로 지원 중단중이다.
버전 4.0부터는 기존에 만들었던 라코스크립트 봇들은 계속 작동하지만, 새로운 라코스크립트 봇을 추가할 수 없게 변경되었다.
3. 여담
- 라코스크립트라는 이름은 Laco+Script로, 앞에 붙은 LaCo는 Kakao Bot의 앞 글자 두 개를 따온 뒤, 자음을 다음 글자로 옮기는 방식[11]으로 지어졌다. KakaoBot -> Ko Bo -> La Co (+ Script) -> LacoScript.
- 단순 자동응답 기능에는 동일한 채팅이 연속으로 수신되면 도배로 간주하여 반응하지 않는 기능이 있는데, 종종 이 기능을 버그로 오해하는 경우가 있다.
- 앱 자체에서 기본적으로 지원하는 날씨 정보 관련 기능들[12]은 기상청에서 제공하는 날씨 정보 RSS 서비스를 사용하여 날씨 정보를 가져온다.
- 현재는 개발자가 실수로 앱 프로젝트를 싹 날려먹어서 앱 개발이 중단된 상황이다. 자세한건 여기로
[1] 채자봇, 초록봇이라고도 하며, 제작자의 닉네임을 따서 닼토봇이라고도 한다. 당시에는 봇 제작자의 닉네임 뒤에 -봇을 붙이는 방법으로 봇 구동 앱을 구분하였었다.[2] 채팅 자동응답 봇에서만 존재하는 언어 비스무리한 것으로, 자바스크립트로 컴파일되는 언어이며 한국어로 코드를 작성할 수 있다는 특징이 있다. 단계적으로 지원 중단중이다.[3] 블록코딩과 유사한 환경[4] 정확하게는, 모질라 재단에서 개발한 자바 기반 자바스크립트 구현 라이브러리인 'Rhino' 엔진을 사용한다.[5] 처음 출시 당시에는 'IceBlock.js'이라는 이름이였다.[6] 모바일을 기준으로 제작되어 있다.[7] 이름이 '채팅 자동응답 봇'으로 변경되어 다시 출시되기 전[8] 정확히는 투명문자 1000자를 반환하는 것이며, 카카오톡은 500자(구버전은 1000자)가 넘어가면, 그 뒷부분이 전체보기 처리되는 것을 이용하는 방식[9] 초 단위[10] 지원하는 지역 : 서울, 부산, 대구, 인천, 광주, 대전, 울산, 세종, 수원, 춘천, 강릉, 청주, 홍성, 안동, 포항, 창원, 전주, 군산, 목포, 여수, 독도, 제주[11] K -> L, B -> C[12] \[\[날씨\]\] 태그 및 Utils.getWeatherJSON 메서드