레플리
글 수 59

PHP로 만든 간단한 카카오톡 챗봇

조회 수 12643 추천 수 0 2017.04.15 04:41:24


카카오톡은 2011년 플러스친구라는 서비스를 출시하였습니다. 기업이 입점을 할 수 있고 친구를 맺은 사용자들에게 다양한 정보를 주는 마케팅 수단이었습니다. 그러다 2014년 옐로아이디라는 비슷한 서비스가 새로 나왔습니다. 플러스친구는 가입하는데 수천만원이 들 정도로 비쌌는데 옐로아이디는 무료로 신청을 할 수 있었고, 다만 메세지를 보내는데 별도로 비용이 들었습니다. 올해 5월에는 두 서비스가 플러스친구로 통합된다고 합니다.

 

옐로아이디에는 자동응답이라는 기능이 있습니다. 키워드형 자동응답은 사이트에서 직접 질문/답변 문장을 등록하는 방식입니다. 간단하지만 단순한 대답밖에 하지 못하는 단점이 있습니다. API 자동응답은 별도의 서버로 입력문장을 전송하고 그에 대한 답변 문장을 받아 카톡 대화로 출력합니다. 서버는 RESTful을 지원하면 어떤 언어라도 상관없는데 여기서는 PHP를 사용해서 구현해보도록 하겠습니다.

 

 

 

옐로아이디 가입

 

옐로아이디 사이트

-> https://yellowid.kakao.com/login

 

 

 

kakao0.jpg

 

화면 상단 오른쪽의 '옐로아이디 만들기'를 선택해 가입을 합니다.

 

 

 

kakao1.jpg

 

프로필 이름은 사람들에게 보여질 옐로아이디 이름이고 옐로아이디는 카카오톡에서 검색할때 사용할 단어입니다. 보통 같은 걸로 만들면 되는데 두개 다 나중에 변경이 불가능하니 주의하시기 바랍니다. 프로필 사진이나 다른 정보들은 등록후에도 수정이 가능합니다. 신청하면 통과되는데 3~5일 정도가 걸리고 카톡으로 가입이 완료되었다는 메시지가 옵니다.

 

 

 

소스 코드

 

옐로아이디 자동응답 API 문서

-> https://github.com/plusfriend/auto_reply

 

위의 API 문서를 보면 여러가지 RESTful 명령어가 있는데 필수적인 것은 keyboard와 message 두가지 입니다. keyboard는 채팅방에 처음 진입할때 호출되고 다음과 같이 하단에 있는 키워드 버튼들을 지정할 수 있습니다.

 

image3.jpg

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
# keyboard.php
 
<?php
 
echo <<< EOD
{
    "type" : "buttons",
    "buttons" : ["시작하기""도움말"]
}
EOD;
 
?>
cs

 

대화방에 진입하면 카톡은 서버에 'http(s)://:your_server_url/keyboard'로 GET 요청을 보내고 위의 keyboard.php 파일에서 버튼들을 정의하여 전송합니다. 

 

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# message.php
 
<?php
 
// 요청을 받아 저장
$data = json_decode(file_get_contents('php://input'), true);
 
// 받은 요청에서 content 항목 설정
$content = $data["content"];
 
 
 
// '시작하기' 버튼 처리
if$content == "시작하기" )
{
echo <<< EOD
    {
        "message": {
            "text""아직 개발중이라 대답을 잘 못해도 이해해줘^^;"
        }
    }
EOD;
}
// '도움말' 버튼 처리
else if$content == "도움말")
{
echo <<< EOD
    {
        "message": {
            "text""이제 곧 정식 버전이 출시될거야. 조금만 기다려~~~"
        }
    }    
EOD;
}
// '안녕'이란 단어가 포함되었을때 처리
else if( strpos($content"안녕"!== false )
{
echo <<< EOD
    {
        "message": {
            "text""안녕~~ 반가워 ㅎㅎ"
        }
    }    
EOD;
}
// 그밖의 문장일때 
else
{
echo <<< EOD
    {
        "message": {
            "text""나랑 놀자 ㅋㅋㅋ"
        }
    }    
EOD;
}
 
?>
cs

 

'https://:your_server_url/message' -d '{ "user_key": "encryptedUserKey", "type": "text", "content": "..." }'로 POST 요청이 오면 message.php가 실행됩니다. user_key는 카톡 유저를 구분할 수 있는 키인데 옐로아이디마다 다르게 발급됩니다. type은 메시지 종류이고 텍스트, 사진, 동영상이 가능합니다. content는 메시지 내용입니다.

 

위의 코드에서는 텍스트 메시지의 content에 따라 대답을 전송합니다. text 형식으로만 보냈는데 사진, 동영상도 가능합니다. 그리고 키보드 버튼 정보도 같이 포함하면 카톡에서 답변 메시지를 받으면 해당 버튼 키보드가 나타납니다. 

 

 

 

PHP 확장자 숨기기

 

카카오톡 요청에서는 keyboard, message 같이 확장자가 없기 때문에 PHP에서도 확장자가 없이 동작하도록 해야합니다. 웹서버의 httpd.conf 파일에 다음과 같이 소스가 있는 폴더의 정보를 추가하고 웹서버를 재시작합니다.

 

1
2
3
4
5
6
7
8
9
10
11
$ nano /etc/httpd/conf/http.conf
 
...
<Directory "/var/www/html/quizbot/">
    Options FollowSymLinks MultiViews
    AllowOverride none
    Order allow,deny
    Allow from all
</Directory>
 
$ sudo service httpd restart
cs

 

 

 

옐로아이디 자동응답 API 설정

 

kakao2.jpg

 

사이트에서 API 자동응답의 설정하기를 선택합니다.

 

 

 

kakao3.jpg

 

앱 이름은 아무거나 상관없고 앱 URL에 PHP 소스가 있는 주소를 입력합니다. 그리고 옆에 있는 API TEST 버튼을 클릭합니다. keyboard.php가 있어야 테스트가 통과되고 설정을 저장할 수 있습니다.

 

 

 

실행 방법

 

image1.jpg

 

카톡 친구목록에서 상단에 있는 검색하기를 누릅니다.

 

 

 

image2.jpg

 

옐로아이디 프로필 이름을 입력하여 챗봇을 찾고 오른쪽에 친구추가를 버튼을 선택합니다.

 

 

 

image4.jpg

 

대화를 시작합니다.

 

 

 

< 챗봇 개발자 모임 >

- 페이스북 그룹에 가입하시면 챗봇에 대한 최신 정보를 쉽게 받으실 수 있습니다.

https://www.facebook.com/groups/ChatbotDevKR/

List of Articles
제목 글쓴이 날짜sort 조회 수
한국어 챗봇 빌더 패키지, KoML onion 2022-12-01 679
AI 스마트 스피커 작동 방법 해부하기 깊은바다 2022-02-16 926
챗봇빌더 비교 - 단비Ai vs Dialogflow vs 카카오i 오픈빌더 file 깊은바다 2021-06-26 2653
Doc2Vec 유사도 비교로 FAQ 챗봇 만들기 깊은바다 2021-03-19 911
Rasa와 TMDb를 이용한 영화 챗봇 만들기 깊은바다 2020-03-12 2162
MS의 파워 버추얼 에이전트(Power Virtual Agents) 핸즈온 file 깊은바다 2020-02-10 539
챗봇, 일주일이면 아무개 만큼 한다! file [1] Dope 2020-01-21 2622
카카오i 오픈빌더를 안쓰고 자체 엔진으로 카톡 챗봇을 만드는 방법 깊은바다 2019-12-31 1353
Dialogflow에서 Universal Sentence Encoder로 문장의 유사도 측정 깊은바다 2019-08-07 1018
왕초보, 코딩없이 챗봇 만들기 깊은바다 2019-03-02 3018
DIY 챗봇 - 유사도 방식의 의도 파악 file 깊은바다 2019-01-27 1711
카카오i 오픈빌더로 피자챗봇 만들기 깊은바다 2018-12-19 4521
카카오i 오픈빌더에서 자체엔진 사용방법 [1] 깊은바다 2018-12-13 2714
NUGU Play Kit 사용기 - 명상 서비스 개발 [1] 깊은바다 2018-12-13 600
빅스비와 시작하기 file 깊은바다 2018-12-04 2023