Dialogflow를 사용했을 때 앱뿐 아니라 웹에서도 사용하기 위해 웹 서버에서 Dialogflow를 요청해 보았습니다.
Python Flask를 개발해 기반으로 Dialogflow를 사용하였습니다..
Dialogflow인증 방식은 V2를 사용하였습니다.
웹에서 인증 방법을 검색하였을때 V1방식에 대한 자료가 많았으나 Dialogflow에서 V2를 권장하여 V2로 인증을 받았습니다.
Dialogflow에 reuqest를 보내기 전에 아무나 request를 보내는 것을 방지하여 위에 언급했던 거와 같이 V1, V2 방식이 있습니다.
V1 인증
기존의 인증 방식으로 Dialogflow Agent를 생성하면 설정 > General에 Access Key라고 표시가 되어 있는 곳이 있다.
(버전 업으로 인하여 내가 만든 Agent에는 Access Key라고 작성된 부분이 아예 없었다..)
Access Key를 request 할 때 Header에 포함하여 요청을 하면 인증이 끝난다.
V2 인증
기존의 인증 방식과 다르게 사용자 서비스 계정을 생성하여 관련 정보가 있는 Json파일을 받은 후 인증을 한다.
{
"type": "",
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "",
"client_id": "",
"auth_uri": "",
"token_uri": "",..
}
위와 같은 내용이 들어있는 Json 파일이며 Flask에서 요청 시에는 꼭 필요한 파일이다.
하단의 URL을 보며 생성해야 한다.
참고: https://cloud.google.com/iam/docs/creating-managing-service-account-keys?hl=ko
1.Flask OS 세팅
Json 파일을 생성했다면 인증을 하기 위해 프로젝트에 환경설정을 해야 한다.
필자는 프로젝트가 처음 실행되는 곳에다가 입력하였다.
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="auth.json"
if __name__ == "__main__": # 이 코드가 있는 파일
# app.debug = True
app.run()
2. Module Install
request 요청을 하기 위해 모듈 2개 설치가 필요합니다.
- dialogflow 0.5.1
- google-api-core 1.4.1
3.Dialogflow Request
이제 아래와 같이 project 정보를 입력한 후 text_to_be_analyzed에 dialogflow에 사용되는 문장을 입력하면 된다.
필자는 필요에 따라 사용하기 위해 특정 Controller의 def에 넣어서 사용하므로 def에 구현하여 사용하면 된다.
import os
import dialogflow from google.api_core.exceptions
import InvalidArgument
DIALOGFLOW_PROJECT_ID = '[PROJECT_ID]'
DIALOGFLOW_LANGUAGE_CODE = '[LANGUAGE]
SESSION_ID = 'me'
text_to_be_analyzed = "Howdy" # 요청 문장
session_client = dialogflow.SessionsClient()
session = session_client.session_path(DIALOGFLOW_PROJECT_ID, SESSION_ID)
text_input = dialogflow.types.TextInput(text=text_to_be_analyzed, language_code=DIALOGFLOW_LANGUAGE_CODE)
query_input = dialogflow.types.QueryInput(text=text_input)
try:
response = session_client.detect_intent(session=session, query_input=query_input)
except InvalidArgument:
raise
nprint("Query text:", response.query_result.query_text)
print("Detected intent:", response.query_result.intent.display_name)
print("Detected intent confidence:", response.query_result.intent_detection_confidence)
print("Fulfillment text:", response.query_result.fulfillment_text)
참고: https://medium.com/swlh/working-with-dialogflow-using-python-client-cb2196d579a4
'ETC > Dialogflow' 카테고리의 다른 글
Dialogflow 사용[1] (0) | 2023.04.15 |
---|---|
Dialogflow 란?[3] (0) | 2023.04.15 |
Dialogflow 란?[2] (0) | 2023.04.15 |
Dialogflow 란?[1] (0) | 2023.04.15 |