3. 일정 timetable
강사 / 강의 소개
챗봇에 대한 이해 및 기획
챗봇 코딩의 기초 및 개발
다양한 API의 적용
DB 연결 및 실제 적용
14:00 - 14:30 (30분)
14:30 - 15:20 (50분)
15:30 - 17:00 (90분)
17:10 - 18:00 (50분)
18:10 - 19:00 (50분)
18. 우리는 왜 챗봇을 이용하는가? (=우리는 왜 챗봇을 개발해야 하는가?)
간단하다
그래픽 요소 / 채팅은 우리의 일상
편리하다
다수가 공공장소에서 전화보다 텍스트를 선호
빠르다
별도의 앱을 다운로드 할 필요가 없다
맞춤 컨텐츠를 제공한다
개인에 맞춘 컨텐츠 경험 가능
즉각 반응한다
메세지를 즉각적으로 전달, 시간을 절약
27. 대화 시작하기 - 급식
[급식 정보]를 누르면 [오늘 급식], [내일 급식], [처음으로] 버튼을 보여줌
[오늘 급식]을 누르면 오늘 급식 정보를, [내일 급식]을 누르면 내일 급식 정보 출력 후 메인 화면으로 복귀
대화 시작하기 - 날씨
[날씨 정보]를 누르면 최신의 날씨(기온)을 출력한 후 메인화면으로 복귀
자유 대화하기
직접 타이핑을 통해 메뉴를 선택할 수 있게 [자유 대화]를 메인에 추가
28. 개발 환경 구축하기 - 1단계
VS CODE 설치
이미 Atom, Sublime Text, VS Code 등의 텍스트 에디터가 설치되신
분들은 잠시 쉬셔도 좋습니다 :)
36. Dothome 무료 호스팅 신청
웹호스팅 탭 > 무료 호스팅
아래에서 무료호스팅 Like+ 신청
좀 더 자세히 할것 과정 2-3r개 추가
37. Dothome 무료 호스팅 신청 FAQ
FTP 아이디와 비밀번호는 무엇인가요?
아까전에 설치한 FileZilla와 같은 FTP 클라이언트가
서버와 파일을 주고받을때 필요한 아이디와 비밀번호입니다.
DB 비밀번호는 무엇인가요?
Database에 접속하기 위한 비밀번호입니다.
38. 닷홈 고객센터 > 기술지원접수
새글 쓰기로 아래와 같이 적은 후 제출해주세요
'php allow_url_fopen 설정을 On으로 변경 부탁드립니다.'
앞으로의 과정에 있어 제출하지 않을 경우 수많은 오류에 부딪힙니다ㅠㅠ
44. 먼저 아래와 같이 입력합니다.
<?php
$contents = "this is sample text";
echo $contents;
?>
해설
php는 <?php로 시작해서 ?>로 끝납니다.
contents라는 변수에 "this is sample text"라는 문자열을 넣었습니다.
echo를 이용하여 contents 변수의 내용을 출력합니다.
출력
this is sample text
47. HTTP Request에 대한 이해
HTTP 프로토콜을 사용하는 서버에 대해 GET, POST 등의 메소드를 요청하면
서버가 응답코드*와 함께 응답한다.
*응답코드란, 200/403/404/503 등과 같은 응답을 말하는데 흔히 제대로 응답을 주고받은 경우 200을, 해당 디렉토리나 파일에 접근할 권한이 없는 경우 403(Forbidden)
을, 해당 컨텐츠가 존재하지 않는 경우 404(Not Found)를, 서버 내부의 응답 오류일 경우 503(Internal server error)을 응답하고 이외에도 여러가지 응답코드가 있다.
60. 그런 다음에, 아까전의 keyboard.php 파일처럼
챗봇의 응답 텍스트를 echo를 통해 보낼 수 있지 않을까???
" "
61. message.php Source Code [Part 2]
if($content == "급식"){
echo <<< EOD
{
"message": {
"text": "급식을 선택하세요."
},
"keyboard": {
"type": "buttons",
"buttons": [
"오늘 급식",
"내일 급식",
"처음으로"
]
}
}
EOD;
}
만약 input 값이 "급식"과 일치한다면,
text 타입의 message를 전송
이와 함께 buttons 타입의 키보드를 보여준다.
buttons에는 여러개의 내용을 배열로 담는다.
62. message.php Source Code [Part 3]
elseif($content == "날씨"){
echo <<< EOD
{
"message": {
"text": "날씨는 {weather}도 입니다."
},
"keyboard": {
"type": "buttons",
"buttons": [
"급식",
"날씨",
"코인"
"자유대화"
]
}
}
EOD;
}
만약 input 값이 "날씨"과 일치한다면,
text 타입의 message를 전송
이와 함께 buttons 타입의 키보드를 보여준다.
buttons에는 여러개의 내용을 배열로 담는다.
63. message.php Source Code [Part 4]
elseif($content == "처음으로"){
echo <<< EOD
{
"message": {
"text": "메인입니다."
},
"keyboard": {
"type": "buttons",
"buttons": [
"급식",
"날씨",
"코인",
"자유대화"
]
}
}
EOD;
}
만약 input 값이 "처음으로"와 일치한다면,
text 타입의 message를 전송
이와 함께 buttons 타입의 키보드를 보여준다.
buttons에는 여러개의 내용을 배열로 담는다.
64. message.php Source Code [Part 5]
elseif(strpos($content, "오늘") !== false && strpos($content, "급식") !== false){
echo <<< EOD
{
"message": {
"text": "오늘 급식은 {meal}입니다."
},
"keyboard": {
"type": "buttons",
"buttons": [
"급식",
"날씨",
"코인",
"자유대화"
]
}
}
EOD;
}
만약 input 값이 "오늘"과 "급식"을 포함한다면,
text 타입의 message를 전송
이와 함께 buttons 타입의 키보드를 보여준다.
buttons에는 여러개의 내용을 배열로 담는다.
65. message.php Source Code [Part 6]
elseif(strpos($content, "내일") !== false && strpos($content, "급식") !== false){
echo <<< EOD
{
"message": {
"text": "내일 급식은 {meal}입니다."
},
"keyboard": {
"type": "buttons",
"buttons": [
"급식",
"날씨",
"코인",
"자유대화"
]
}
}
EOD;
}
만약 input 값이 "내일"과 "급식"을 포함한다면,
text 타입의 message를 전송
이와 함께 buttons 타입의 키보드를 보여준다.
buttons에는 여러개의 내용을 배열로 담는다.
66. message.php Source Code [Part 7]
if($content == "자유대화"){
echo <<< EOD
{
"message": {
"text": "안녕?n탈출은 처음으로 입력"
}
}
EOD;
}
만약 input 값이 "자유대화"를 포함한다면,
text 타입의 message를 전송
사용자 직접 입력 가능한 키보드를 보여준다.
67. message.php Source Code [Part 8]
else{
echo <<< EOD
{
"message": {
"text": "개발중이거나 잘못됩 입력이에요ㅠ"
},
"keyboard": {
"type": "buttons",
"buttons": [
"급식",
"날씨",
"코인",
"자유대화"
]
}
}
EOD;
}
만약 input 값이 어떠한 것과도 일치하지 않으면,
text 타입의 message를 전송
이와 함께 buttons 타입의 키보드를 보여준다.
buttons에는 여러개의 내용을 배열로 담는다.
80. .htaccess에 대한 이해
.htaccess (hypertext access)는 Apache 웹 서버의 디렉토리 레벨을 설정하는 기본 파일
우리가 사용하는 닷홈의 웹 서버는 Apache 기반이다.
웹 서버의 루트 디렉토리 이하의 디렉토리에서 이 “.htaccess”파일을 생성하여
웹 루트 디렉토리 하위의 디렉토리별로 서로 다른 환경설정을 구축하고자 할때
디렉토리 내부에서 참조해야하는 설정을 구성
각 설정이 다른 .htaccess 파일을 생성하여 디렉토리에 추가
일종의 숨김파일(파일 명 앞에 . 이 붙음)이므로 PC 설정에서 숨김파일 표시가 필요
95. $content를 판별하는 두가지 방법
if($content == "blahblah"){ ... }
사용자 입력이 blahblah와 정확하게 일치할때
if문 안의 내용을 실행한다.
if(strpos($content, "blahblah") !== false){ ... }
사용자 입력에 blahblah가 포함되어 있는 경우
if문 안의 내용을 실행한다.
strpos()함수
$content에서 "blahblah"가 처음 나타나는 위치를 반환. 위치를 찾지 못한 경우 FALSE를 반환
100. API에 대한 이해
API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는
응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을
제어할 수 있게 만든 인터페이스를 뜻한다.
단순히 말해, 프로그램을 위한 인터페이스!
101. API는 어떻게 작동하나요???
만약, 내가 날씨 앱을 만들고자 할 때,
내 앱에서 해당 API를 제공하는 어떠한 곳으로 날짜, 지역 정보를 요청를 보내면,
해당 API에서는 내 앱으로 날씨 정보를 응답한다.
'요청'과 '응답'... 어디서 많이 들어본 듯...?
102. 대표적인 예시로, 내가 API에 (HTTP) Request(ex. GET)를 보내면
해당 API 정보를 알 수 있다!!!
108. RESTful API에 대한 이해
RESTful API는 크게 리소스, 메소드, 메세지로 이루어져 있다
예시) 이름이 alpha인 사용자를 생성한다라는 호출이 있을때,
리소스 : "사용자" > http://my_web/users 라는 URI
메소드 : "생성한다" > HTTP POST/GET Request
메세지 : 이름이 alpha인 사용자
HTTP POST, http://my_web/users/
{
"users" : {
"name" : "terry"
}
}
109. RESTful Architecture 6
균일한 인터페이스 Uniform Interface
상태없음 Stateless
캐시 Cache
클라이언트/서버 Client/Server
계층 시스템 Layered System
(조건부) Code on demand
110. RESTful API Method
REST에서는 HTTP 메소드를 그대로 사용한다 (CRUD)
POST 등록 (Create)
GET 조회 (Read/Select)
PUT 수정 (Update)
DELETE 삭제 (Delete)
114. 급식 API
깃허브에 오픈소스로 올라와 있는 school_meal API를 사용합니다.
https://github.com/Juneyoung-Kang/school-meal/
날씨 API
OpenWeatherMap API를 사용합니다.
가상화폐 API
빗썸의 API를 이용하여 실시간 시세를 얻습니다.
127. 개인 서버(닷홈)에 API 올리는 방법
1. 서버에 파일 올리기
OpenWeatherMap API를 사용합니다.
2. 닷홈에 php.ini allow_url_fopen On 옵션 설정 문의하기
닷홈 기술지원에 해당 옵션을 켜줄 것을 부탁합니다. (보통 한시간 내에 처리)
128. 이제 웹 브라우저를 열고 다음 주소로 접속합니다
http://juneyoung.kr/meal/meal_api.php?
countryCode=stu.xxx.go.kr&schulCode=X000000000&insttNm=XXXX학교
&schulCrseScCode=X&schMmealScCode=X
빨간 글씨를 어떻게 작성해야 할지 모르신다면? github.com/Juneyoung-Kang/school-meal
이미 올라간 API 사용 (권장)