티스토리 뷰

지난 주에 퇴근하고 심심해서 카카오톡 봇을 만들었다.

친구들 단톡방에 봇을 넣어두면 재밌겠다고 생각은 했는데, 귀찮아서 실천은 안 하고 있었다.

기본 기능은 쉽게 넣을 수 있고, 추가적인 기능은 자바스크립트로 작성하면 된다.

스크립트를 작성해서 몇 가지만 테스트해보고 나중에 더 구현해보려고 한다.

공기계가 있다면 카카오톡 봇을 만드는 것 자체는 상당히 간단한데, 공기계를 사용한다고 가정하고 설명을 적어본다.

크게 세 가지 절차가 필요하다.

 

1. 카카오톡 부계정 만들기

텍스트나우, 텍스트플러스 등 가상 번호를 발급받아 계정을 만들어야한다.

나는 다행히 유럽여행 갈 때 공기계를 사용하느라 부계정을 만들어둔 덕분에 이 절차는 넘어갈 수 있었다.

구글플레이에 textnow, textplus라고 치면 나온다.

부계정을 만들어 공기계로 로그인해준다.

(의외로 귀찮음)

 

2. 채팅 자동 응답 봇 어플리케이션 깔기

블로거 Dark Tornado님이 개발한 앱이 있다.

https://play.google.com/store/apps/details?id=com.darktornado.chatbot

 

채팅 자동응답 봇 - Google Play 앱

단순 자동응답 기능을 사용하거나, 자바스크립트 또는 커피스크립트, 루아, 라코스크립트라는 프로그래밍 언어를 이용하여 직접 프로그래밍을 하여 만들 수 도 있습니다. 상단바 오른쪽에 있는 점 3개가 있는 버튼(?)을 눌러서 봇 추가 등을 하실 수 있습니다. 즉, 기본적인 프로그래밍 지식이 없어도 사용하실 수 있습니다. 상단바에 있는 메신저 앱의 알림을 읽어오는 방식으로 채팅 수신을 인식하기 때문에, 메신저 앱의 알림이 켜져있고, 이 앱이 알림에 접근할 수 있

play.google.com

 

3. 안드로이드 웨어 설치하기

https://play.google.com/store/apps/details?id=com.google.android.wearable.app

 

Wear OS by Google(이전의 Android Wear) 스마트시계 - Google Play 앱

Wear OS by Google 앱(이전의 Android Wear)은 스마트시계와 휴대전화를 동기화하여 시계를 최대한 활용할 수 있게 해 줍니다. Google 어시스턴트의 적극적인 도움을 받고, 중요한 메시지를 확인하고, 건강 및 피트니스 활동을 추적하는 등 다양한 작업을 시계에서 바로 처리해 보세요. • Google 어시스턴트의 적극적인 도움 받기: Google 어시스턴트의 적극적인 맞춤 도움과 유용한 바로가기를 통해 하루를 알차게 보낼 수 있습니다.

play.google.com

 

4. 카카오톡 봇 사용하기

세 가지만 완료해주면 챗봇으로 사용이 가능하다. 부계정이 있을 경우 10분이면 충분하다.

1) 앱을 사용한 챗봇 사용

'채팅 자동 응답 봇'에 들어가면 기본적인 기능(특정 단어에 대한 자동 응답)은 앱에서 설정해줄 수 있기 때문에 소스코드가 필요없다.

자바스크립트를 전혀 몰라도 가능하며, 앱에 들어가서 기본 기능을 설정하고 테스트해본 예시는 아래와 같다.

자동응답은 비속어를 사용한 관계(?)로 모자이크 했다. 친구들아 미안 ^_^

2) 소스코드 작성(javascript)을 통한 챗봇 사용

자바스크립트로 소스를 작성할 경우 추가적인 기능도 구현 가능하다.

날씨 봇을 만들기 위해 제작자 블로그에 있는 소스코드를 참고했는데(https://blog.naver.com/dt3141592/221905385177)

날씨를 입력하면 네이버에서 검색한 날씨 URL을 불러와 해당 지역의 날씨를 알려준다.

Utils.getWeather = function(pos) {
    try {
        var data = org.jsoup.Jsoup.connect("https://m.search.naver.com/search.naver?query=" + pos.replace(/ /g, "+") + "+날씨").get();
        data = data.select("div.weather_info");
        var status = data.select("div.weather_main").get(0).text();
        var temp = data.select("strong");
        var tempCurrent = temp.get(0).text();
        var tempMax = temp.get(1).text();
        var tempMin = temp.get(2).text();
        var tempWind = temp.get(3).text();
        var table = data.select("span.figure_text");
        if (table.size() == 6) {
            var dust = table.get(1).text();
            var hum = table.get(4).text();
        } else {
            var dust = table.get(0).text();
            var hum = table.get(3).text();
        }
        var result = "상태 : " + status + "\n";
        result += tempCurrent.replace("온도", "온도 : ") + "\n";
        result += "체감 온도 : " + tempWind + "\n";
        result += "최고 기온 : " + tempMax + "\n";
        result += "최저 기온 : " + tempMin + "\n";
        result += "습도 : " + hum + "\n";
        result += "미세먼지 : " + hum;
        return result.replace(/°/g, "℃");
    } catch (e) {
        return null;
    }
};

function response(room, msg, sender, isGroupChat, replier) {
    var cmd = msg.split(" ")[0];
    var data = msg.replace(cmd + " ", "");
    if (cmd == "/날씨") {
        var result = Utils.getWeather(data);
        if (result == null) replier.reply(data + "의 날씨 정보를 불러올 수 없습니다.");
        else replier.reply("[" + data + " 날씨 정보]\n" + result);
    }
}

날씨봇!

위에 있는 날씨봇도 오류가 있는데, 네이버 검색 결과를 가져오다보니 검색 결과가 다른 형태인 경우(외국날씨, 광고가 먼저 나오는 등) 정보를 불러오는데 문제가 발생한다.

다른 코드도 앱 제작자의 github 페이지에 많이 있다. 상당히 고마우신 분이다.

https://github.com/DarkTornado

 

DarkTornado - Overview

var dt = new modpe.scripter.DarkTornado(ctx);. DarkTornado has 31 repositories available. Follow their code on GitHub.

github.com

이외에도 소스코드를 직접 작성하면 여러 가지로 활용이 가능하다.

ex) 특정한 친구가 3번 말할 때마다 '닥쳐'라고 응답하기
(소스 코드는 친구의 카톡을 인식하면 두번까지는 '조용히 해', 세번째는 '제발 조용히 좀 하라구'로 순화했습니다)

function response(room, msg, sender, isGroup, replier){
  msg = msg.trim();
  if(sender == "홍길동") {
    if(count<=1){
    replier.reply("길동아 조용히 해"); 
    count+=1;
    }
    else{
    replier.reply("길동아 제발 조용히 좀 하라구!"); 
    count = 0;
    }
  }
} 

ex) 멀리서 일하는 친구가 심심해할까봐 톡방에서 말할 때마다 자동으로 답장해주기

let count = 0;
function response(room, msg, sender, isGroup, replier) {
    if (sender == "홍길동") {
        if (count == 0) {
            replier.reply("길동아 안녕");
            count += 1;
        }
        else if (count == 1) {
            replier.reply("요즘 많이 힘들지?");
            count += 1;
        }
        else if (count == 2) {
            replier.reply("우리가 보고싶지?");
            count += 1;
        }
        else if (count == 3) {
            replier.reply("조금만 참아");
            count += 1;
        }
        else if (count == 4) {
            replier.reply("시간은 금방 지나갈거야");
            count += 1;
        }
        else {
            replier.reply("힘내!!");
            count = 0;
        }
    }
}

단톡방에 있는 친구들이 주식에 관심이 많고 요즘 주식 시장이 워낙 핫해서 날씨봇과 동일한 방법으로 주식 정보를 불러오는 코드를 작성중이다. 심심할 때 구현해서 주식봇으로 써먹으려고 한다.

또 어떤 기능을 추가할 지 고민중인데, 작성할 때마다 적어보려고 한다.

 

* 2020.07.02 수정

원래 네이버 블로그에 적었던 글인데, 의외로 질문이 많아 소스코드와 설명을 일부 추가했습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함