webhook 이란?
client가 챗봇을 통해 질문을 하는 문자를 dialogflow로 보낸 뒤,
해당 문자를 webhook에 post방식으로 알려줍니다.
webhook의 역할은 dialogflow에서 정해둔 답변 말고 저희가 원하는 답변으로 동적으로 대화를 할 수 있습니다.
그래서 저희는 오늘 python flask를 통해서 webhook 서버를 만들어 client에서 받은 질문에 대한 답을
동적으로 바꾸는 것을 하도록 하겠습니다.
webhook 서버는 python 뿐만 아니라 node.js 등 여러 가지 언어를 사용해서 만들 수 있습니다.
1. python 설치
해당 링크 들어가셔서 다운로드하시면 됩니다.
Donloads 클릭 후 설치하시면 32bit로 설치됩니다.
Add Python 3.7 to PATH 선택 후 Install Now 누르시면 기본 경로로 설치가 됩니다.
Customize installation로 설치하시면 원하는 폴더에 설치하실 수 있습니다.
2. python flask 설치하기
flask 사용하기 위해서
cmd 창 열어서 flask 설치해주시면 됩니다.
설치 시 Add Python 3.7 to PATH 누르시면 시스템 -> 환경설정에 path가 자동으로 등록됩니다.
명령어 : pip install flask
윈도키 + r = cmd 창을 열어두시면 됩니다.
설치 후 설치가 잘 되었나 확인해보고 싶으시면
pip list 명령어로 확인하시면 됩니다.
3. python webhook 작성하기
python flask webhook 코드
import urllib
import json
import os
from flask import Flask, request, make_response, jsonify
# initialize the flask app
app = Flask(__name__)
# default route
@app.route('/')
def index():
return 'Hello World!'
# create a route for webhook
@app.route('/webhook', methods=['GET', 'POST'])
def webhook():
req = request.get_json(force=True)
action = req['queryResult']['action'] #1
if action == 'interest':
name = req['queryResult']['parameters']['roominfomation'] #2
else:
return "test"
return {'fulfillmentText': name} #3
# run the app
if __name__ == '__main__':
port = int(os.getenv('PORT',80))
app.run(debug=True, port=port,host='0.0.0.0')
------------------------------------------------------------------
#1 저희가 dialogflow에서 설정한 action 값을 가지고 옵니다.
#2 해당 action안에 parameters로 지정한 값을 가지고 옵니다.
#3 응답하고 싶은 말을 넣으시면 됩니다.
4. dialogflow webhook 사용하기
(1) dialogflow intents 설정
파이썬 코드
#1 action = req['queryResult']['action'] : 위 python에서 action 값은 room_name 값이 저장됩니다.
(2) intents Fulffillment Enbale 설정
해당 intents 밑 에보시면 Fulfillment Enable 하셔야 합니다.
5. Fulfillment webhook 설정
Dialogflow에서 webhook 설정 시 외부 아이피를 사용해야 합니다.
하지만 ngrok를 사용하면 내부 -> 외부로 바꿔줍니다.
https://itrh.tistory.com/49?category=579621
ngrok 명령어 : ngrok http 5000
해당 글을 읽어보시고 사용하시면 됩니다.
python flask는 기본 포트 5000입니다.