글 수 51

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

조회 수 10250 추천 수 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
제목 글쓴이 날짜 조회 수
파이썬과 Flask로 만든 간단한 카카오톡 챗봇 file [2] 깊은바다 2017-04-22 10461
파이썬과 Django로 카카오톡 챗봇 구현하기 깊은바다 2017-04-18 7215
PHP로 만든 간단한 카카오톡 챗봇 file 깊은바다 2017-04-15 10250
페이스북 날씨 챗봇 개발하기 file 깊은바다 2017-04-11 1903
ChatScript로 한국어 챗봇 개발하기 [2] 깊은바다 2017-03-21 6373
Wit.ai - 챗봇 API file 깊은바다 2017-02-28 2649