다이얼로그 플로우(Dialog Flow)와 플라스크(Flask) 연동하기
다이얼로그 플로우(Dialog Flow)로 챗봇(Chat Bot)을 개발한 뒤에 이를 실제 상용 서비스에서 활용하기 위해서는 웹 서버와 함께 사용하는 것이 가장 효과적입니다. 웹 서버 중에서는 가장 가벼우면서도 빠르게 구현할 수 있는 플라스크(Flask)를 이용하면 효율적입니다. 따라서 아래 과정을 차근차근 따라하면서 자신만의 플라스크 웹 서버에서 다이얼로그 플로우를 사용할 수 있도록 하세요.
※ 다이얼로그 플로우 API V1 테스트하기 ※
먼저 자신이 사용하고자 하는 에이전트(Agent) 프로젝트의 클라이언트 액세스 토큰(Client Access Token)을 확인합니다.
이후에 API를 어떻게 사용할 수 있는지 확인해 봅시다.
Dialog Flow API V1 문서: https://dialogflow.com/docs/reference/agent/query
기본적으로 다이얼로그 플로우는 매우 간단하게 초기 버전의 API를 사용할 수 있습니다. 가장 중요한 부분만 추출하면 다음과 같습니다.
먼저 POST 방식 전송 예제는 위와 같습니다. 헤더에 CLIENT ACCESS TOKEN을 넣은 뒤에 아래쪽에 'query'로 실질적인 질의문을 넣는 것을 알 수 있습니다. 이제 이를 파이썬을 이용해 동일하게 동작하는 클라이언트를 작성하면 됩니다. 전체 Flask 웹 서버의 소스코드는 다음과 같습니다.
위 사진은 결과 예제 사진입니다. 보시면 JSON 형태로 'result' -> 'fulflilment' -> 'speech'에 결과 값이 담겨 오는 것을 알 수 있습니다. 따라서 요청 데이터를 보낸 이후에 결과 값에서 이를 파싱하도록 소스코드를 작성하면 됩니다.
※ Flask 웹 서버의 소스코드 ※
# -*- encoding: utf-8 -*-
import requests
import json
from flask import Flask, request, jsonify
def get_answer(text, user_key):
data_send = {
'query': text,
'sessionId': user_key,
'lang': 'ko',
}
data_header = {
'Authorization': 'Bearer CLIENT ACCESS TOKEN',
'Content-Type': 'application/json; charset=utf-8'
}
dialogflow_url = 'https://api.dialogflow.com/v1/query?v=20150910'
res = requests.post(dialogflow_url, data=json.dumps(data_send), headers=data_header)
if res.status_code != requests.codes.ok:
return '오류가 발생했습니다.'
data_receive = res.json()
answer = data_receive['result']['fulfillment']['speech']
return answer
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/', methods=['POST', 'GET'])
def webhook():
content = request.args.get('content')
userid = request.args.get('userid')
return get_answer(content, userid)
if __name__ == '__main__':
app.run(host='0.0.0.0')
위와 같이 API 문서의 내용을 그대로 따라 작성한 것을 알 수 있습니다. 대신에 자신의 웹 서버에서는 'content'와 'userid'라는 두 파라미터로 값을 받습니다. 이후에 해당 소스코드를 실행하고 자신의 로컬 환경에서 테스트를 진행하면 됩니다.
'다이얼로그 플로우(Dialog Flow)' 카테고리의 다른 글
다이얼로그 플로우 인텐트(Intent) 불러오기(Import) 기능 오류 대처법 (0) | 2018.10.14 |
---|---|
다이얼로그 플로우(Diaolg Flow)와 플라스크(Flask)를 카카오톡 플러스친구에 연동하기 (2) | 2018.08.29 |
다이얼로그 플로우(Dialog Flow)에 엑셀 파일(csv) 등의 데이터를 한 번에 넣는 방법 (8) | 2018.08.23 |
다이얼로그 플로우(Dialog Flow) 엔티티(Entity)로 단어 분류하여 응답하기 (0) | 2018.08.19 |
다이얼로그 플로우(Dialog Flow) Follow-up Intent를 이용한 연계형 챗봇 만들기 (0) | 2018.08.19 |