카카오챗봇기능을 통해 간단하게 챗에 응답하는 챗봇을 제작할 수 있습니다.
기본적인 구성방법은 아래 링크를 참조하시면됩니다.
http://kjcoder.tistory.com/505
위 링크는 서버가 C#기준으로 되어있기 때문에 PHP로 구성하는 방법을 알려드립니다.
운영 환경 |
PHP 5.6 / NGINX 12.2 |
디렉토리 |
[웹루트]/index.php |
NGINX와 PHP-FPM 구성은 생략합니다.
https://launchdog.wordpress.com/2016/04/22/centos7-nginx-php7-mariadb-%EC%84%A4%EC%B9%98-1/
위 링크에 설명을 잘해 놓았으니 참고하도록합니다.
위 링크는 PHP7기준입니다. 참고로 저는 호환성을 위해 PHP5.6을 선택하였습니다.
kakao 챗봇 서비스를 위한 nginx 서버 설정
콘피그파일에 아래와 같이 구성합니다. (/etc/nginx/conf.d/default.conf 수정)
location ~ /kakao {
try_files $uri $uri/ /index.php?/$request_uri;
}
카카오에서 요청되는 주소는 http://[도메인]/kakao/keyboard 형식으로 호출되도록하기위해 위와 같이 구성합니다.
실제 실행파일은 웹루트/index.php 입니다.
route를 rewrite시키는 효과를 냅니다.
참고로 PHP 스크립트 설정은 아래와 같이 하였습니다.(php-fpm/nginx 설정시 미리 하기도 합니다.)
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php/([a-zA-Z0-9_]+)/([0-9]+)$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
static 파일 서비스는 아래와 같구요..
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 12M;
access_log off;
add_header Cache-Control "public";
}
location ~* \.(?:css|js)$ {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
그 다음 index.php 파일 내용입니다.
단촐합니다.
<?php
header('Content-Type: application/json');
$uri = $_SERVER["REQUEST_URI"];
if($uri=='/kakao/keyboard') {
//if(!is_kakao_server()) return; #호출 서버가 카카오서버가 아니면 실행안되도록 함.
$data = array();
$data['type'] = 'text';
echo json_encode($data);
return;
}
if($uri=='/kakao/message') {
//if(!is_kakao_server()) return; #호출 서버가 카카오서버가 아니면 실행안되도록 함.
$postdata = file_get_contents("php://input");
$message = json_decode($postdata);
//$message->content
//$message->user_key
//$message->type
// 위 변수로 접근 가능하다. 적절하게 처리.
### 적절한 처리..
$data = array('message'=>array('text'=>'잘 처리되었어요.~등등등')); //메시지 응답을 한다.
echo json_encode($data);
return;
}
#끝~
아 참고로 is_kakao_server()는 카카오서버의 요청만 처리하도록 확인하는 함수입니다.
function is_kakao_server()
{
$kakao_server = array('110.76.143.234','110.76.143.235','110.76.143.236');
return in_array($_SERVER['REMOTE_ADDR'], $kakao_server);
}
요렇게 구성하시면 됩니다.