이전 게시물에서는 "안녕"이라는 메시지에 대한 다이얼로그 플로우의 답변만 확인했다면
이제는 카카오톡에서 입력하는 모든 말에 반환할 수 있도록 테스트한다.
구름IDE에서 플라스크 생성 후, 이전 게시물 코드를 참고하여 카카오톡 챗봇 JSON 규격에 맞게 작성한다.
https://i.kakao.com/docs/skill-response-format#%EC%98%88%EC%A0%9C%EC%BD%94%EB%93%9C-1
가장 기본적인 simple text를 활용하였다.
import os
import google.cloud.dialogflow_v2 as dialogflow
import requests
import json
from flask import Flask, request,jsonify
#dialogflow 인증
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] ='private_key.json'
DIALOGFLOW_PROJECT_ID ='[PROJECT_ID]'
DIALOGFLOW_LANGUAGE_CODE ='ko'
SESSION_ID ='me'
session_client = dialogflow.SessionsClient()
session = session_client.session_path(DIALOGFLOW_PROJECT_ID,SESSION_ID)
#dialogflow에서 텍스트 반환
def get_answer(test_query):
our_input =dialogflow.types.TextInput(text=test_query, language_code=DIALOGFLOW_LANGUAGE_CODE)
query = dialogflow.types.QueryInput(text=our_input)
response = session_client.detect_intent(session=session,query_input=query)
return response.query_result.fulfillment_text;
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/test', methods=['POST'])
def test():
#카카오 json 규격
req = request.get_json()
input_text=req['userRequest']['utterance']
res={
"version":"2.0",
"template":{
"outputs":[
{
"simpleText":{
"text":get_answer(input_text)
}
}
]
}
}
return jsonify(res)
#메인 함수
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, threaded=True)
python 파일명.py 5000으로 실행한다.
외부에서 접속할 수 있도록 하는 설정이 필요한데, 프로젝트 속성-실행 URL과 포트에서 할 수 있다.
포트 5000번으로 도메인 주소를 등록하였다.
외부에서는 이 주소로 접근할 수 있는 것이다.
웹 서버를 동작시켰다면, 챗봇 관리자 센터에서 챗봇을 생성한다.
챗봇 사용을 위해서는 카톡 측의 승인이 필요하다.
스킬을 등록할 때 아까 등록한 도메인 주소를 입력하면 된다.
코드에서 루트 명이 test이었으므로, 뒤에 /test를 붙여주었다.
각자 코드에 맞게 수정하면 된다.
그리고 폴백 블록에서 스킬을 지정해 주고, 봇 응답에서 스킬 데이터 사용으로 추가해 준다.
봇테스트에서 안녕 뿐만 아니라 다른 말로도 확인해 보았다.
다이얼로그 플로우에서 지정해둔 텍스트로 반환된다면 성공이다!
'정보' 카테고리의 다른 글
BeautifulSoup로 이미지 저장하기 (0) | 2022.09.24 |
---|---|
Python과 몽고DB 연결 및 조회하기, 값 추출하기 (0) | 2022.09.04 |
MongoDB CSV, JSON파일 import하기/파일깨짐현상 (0) | 2022.09.04 |
몽고DB 설치하기/mongo.exe 파일 없음 해결(6.0버전) (0) | 2022.09.04 |
Dialogflow api 사용하기(파이썬/Python) (0) | 2022.08.16 |
댓글