카카오톡 봇 만들기 (3)

지금까지 flask 실행을 하였다 . 이제부터 본격적으로 봇 테스트 기능을 이용하여 구축해보겠다.

기본 설정

테스트이기 때문에 일단 작동이 잘되는지 확인을 해보겠다.

우선 봇 관련 발화와 스킬관련 설정을 해야한다. 다시 카카오톡 봇 설정으로 들어가자

발화 설정

발화는 쉽게말하면 사용자가 카카오톡으로 친 채팅이라고 보면된다.

카카오톡에 등록한 사용자 발화에 대해서 제대로 서버에 json 형식으로 보내지는 것을 볼 수가 있다.

테스트를 위해서 "오늘의 메뉴"라고 등록을 한 뒤 엔터를 누르도록 하자.

스킬 설정

이제 우리가 사용하는 서버를 연결하기 위해서 스킬을 만들도록 하자

스킬탭으로 이동하여 다음과 같이 스킬을 생성하도록 하자.

여기서 중요한것은 url설정이다.

첫번 째로 https로 하면 제대로 동작하지 않는다. 꼭 http로 해야한다.

그리고 localhost:5000에는 Azure로 생성한 곳의 Ip를 넣어주도록하자.

현재 필자는 주소 뒤에 /message로 하였는데 이는 구현하기 나름이다.

그 후 다시 홈화면으로 돌아와서 스킬데이터 사용으로 봇응답을 설정해주고 파라미터에서도 스킬 등록을 해준뒤 저장을 해준다.

Flask 코드작성

이제 테스트하기 위한 코드를 작성해보도록하자. 예제 코드는 다음과 같다.

from flask import Flask, json, request, jsonify
import sys

app = Flask(__name__)

@app.route('/message', methods=['POST'])
def Message():
    content = request.get_json()
    content = content['userRequest']['utterance']
    content=content.replace("\n","")
    print(content)
    if content == u"오늘의 메뉴":
        dataSend = {
            "version" : "2.0",
            "template" : {
                "outputs" : [
                    {
                        "simpleText" : {
                            "text" : "테스트입니다."
                        }
                    }
                ]
            }
        }
    else:
        dataSend = {
            "version" : "2.0",
            "template" : {
                "outputs" : [
                    {
                        "simpleText" : {
                            "text" : "error입니다."
                        }
                    }
                ]
            }
        }
    return jsonify(dataSend)

if __name__ == "__main__":
    app.run(host='0.0.0.0',port=5000)

하나씩 코드를 살펴보도록 하자

우선 어노테이션을 사용하여 route를 설정해주도록 하자 이는 아무거나 원하는 것으로 설정하도록 하자

나는 /message로 설정하였다 이렇게 설정하면 쉽게말하면 http://localhost:5000/message로 이동했을 때의 기능을 보여준다고 하면된다.

methodsPOST형식으로 사용하였다. json으로 값을 받아야하기 때문에 POST로 하였다.

@app.route('/message', methods=['POST'])

밑의 def Message()부분이 이해 안된다면 이전 게시물을 참고하도록 하자

content = request.get_json() # 사용자가 입력한 정보를 json형태로 가져옴
content = content['userRequest']['utterance'] # user가 입력한 발화를 가져옴

content에서 userRequestutterance는 이전 게시물에서 사용자의 발화를 나타내는 정보라고 하였다. 이를 통해서 사용자가 입력한 정보를 가져오게 된다.

content=content.replace("\n","") # '\n'문자를 ""로 대체한다.
print(content) #사용자의 입력을 제대로 받는 지 확인하기 위한 수단

주의할 점이 있는데 사용자의 정보는 엔터를 받기 때문에 \n을 포함해서 반환이 된다. 이를 없애기 위해서는 여러가지 방법이 있는데 나는 replace를 사용하여 해결하였다.

다른방법으로는 split을 사용하거나 if문 안에서 판별을 할 때 오늘의 메뉴\n으로 비교하는 방법도 있다.

if content == u"오늘의 메뉴":
        dataSend = {
            "version" : "2.0",
            "template" : {
                "outputs" : [
                    {
                        "simpleText" : {
                            "text" : "테스트입니다."
                        }
                    }
                ]
            }
        }
    else:
        dataSend = {
            "version" : "2.0",
            "template" : {
                "outputs" : [
                    {
                        "simpleText" : {
                            "text" : "error입니다."
                        }
                    }
                ]
            }
        }
    return jsonify(dataSend)

"오늘의 메뉴"에 u를 붙여주는 이유는 unicode변환이라고 하는데 붙여주지 않아도 작동하는 것을 볼 수 있다.

그리고는 이전 게시물에서 보여주었던 형식을 차목하여 simpleText형으로 데이터를 dataSend라는 변수에 담아서 jsonify(dataSend)로 Json형식으로 보내주도록 한다.

이제 터미널에서 python3 파일명.py를 이용하여 서버를 작동하도록 한다.

작동 확인

작동확인을 위해서는 봇테스트 기능을 사용한다.

봇테스트를 키고 우리가 입력했던 "오늘의 메뉴"를 입력해보자.

정상적으로 작동하는 것을 볼 수 있다. 또한, 터미널 창에서도 제대로 작동하는 것을 볼 수 있다.

다음시간에는 엔티티 추가와 엔티티를 읽어오는 법과 quickreply에 대해서 구현해보도록하자

'Python > Flask' 카테고리의 다른 글

[Python/Flask] 카카오톡 봇 만들기 (2)  (0) 2021.06.30
[Python/Flask] 카카오톡 봇 만들기 (1)  (0) 2021.06.30

+ Recent posts