티스토리 뷰
지난 주에 퇴근하고 심심해서 카카오톡 봇을 만들었다.
친구들 단톡방에 봇을 넣어두면 재밌겠다고 생각은 했는데, 귀찮아서 실천은 안 하고 있었다.
기본 기능은 쉽게 넣을 수 있고, 추가적인 기능은 자바스크립트로 작성하면 된다.
스크립트를 작성해서 몇 가지만 테스트해보고 나중에 더 구현해보려고 한다.
공기계가 있다면 카카오톡 봇을 만드는 것 자체는 상당히 간단한데, 공기계를 사용한다고 가정하고 설명을 적어본다.
크게 세 가지 절차가 필요하다.
1. 카카오톡 부계정 만들기
텍스트나우, 텍스트플러스 등 가상 번호를 발급받아 계정을 만들어야한다.
나는 다행히 유럽여행 갈 때 공기계를 사용하느라 부계정을 만들어둔 덕분에 이 절차는 넘어갈 수 있었다.
구글플레이에 textnow, textplus라고 치면 나온다.
부계정을 만들어 공기계로 로그인해준다.
(의외로 귀찮음)
2. 채팅 자동 응답 봇 어플리케이션 깔기
블로거 Dark Tornado님이 개발한 앱이 있다.
https://play.google.com/store/apps/details?id=com.darktornado.chatbot
3. 안드로이드 웨어 설치하기
https://play.google.com/store/apps/details?id=com.google.android.wearable.app
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
이외에도 소스코드를 직접 작성하면 여러 가지로 활용이 가능하다.
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 수정
원래 네이버 블로그에 적었던 글인데, 의외로 질문이 많아 소스코드와 설명을 일부 추가했습니다.
'IT' 카테고리의 다른 글
컴퓨터공학 논문 검색과 작성 팁 - 해외 학회편 (0) | 2022.09.09 |
---|---|
[Overleaf] 온라인 LaTex 편집기 Overleaf(오버리프) 사용하기 (0) | 2020.12.02 |
[Linux] 우분투(Ubuntu) 크롬 브라우저 설치 및 사용법 (0) | 2020.06.24 |
[ZeroSSL] Letsencrypt Windows Client 설치 (0) | 2020.06.03 |
[OpenSSL] OpenSSL 설치 (0) | 2020.06.03 |