본문 바로가기

project/맞춤법 검사 on 카카오톡 챗봇

[카카오톡 챗봇으로 맞춤법 교정기 만들기] 3 - 스킬서버 만들기(python, flask)

728x90

 

카카오 챗봇에 우리가 원하는 기능을 제공하려면 '스킬 서버'를 이용해야 한다.

 

- 스킬 서버란?

봇 시스템으로부터 데이터를 받아서 적절한 응답을 만들어 주는 별도의 기능을 제공하는 서버다.

유저가 챗봇에 입력한 맞춤법을 검사할 문장을 request body에 담아서 스킬 서버로 보내고

스킬 서버에서는 맞춤법 교정을 진행한 결과를 reseponse body에 담아서 전달해주면 된다.

json format만 맞춰주면 누구나 카카오톡 챗봇을 이용할 수 있다.

 

- request

request format은 하나의 format에 카카오톡 대화 관련 정보를 전달한다.

👉request json format 보기

해당 시스템에서는 맞춤법을 교정할 대화를 파라미터로 전달한다.

파라미터로 전달한 값은 action 필드의 params에서 파싱 할 수 있다. detailParams을 파싱 해도 된다.

 

실제로 request json의 action필드 부분을 발췌하면 다음과 같다. (id는 제거함)

"action": {
    "id": "xxxxxxxxxxxx",
    "name": "spell check",
    "params": {
      "spell_check_text": "모가지"
    },
    "detailParams": {
      "spell_check_text": {
        "groupName": "",
        "origin": "모가지",
        "value": "모가지"
      }
    },
    "clientExtra": {}
  }

 

request를 받는 api 서버에서는 데이터를 파싱 해야 한다.

json data를 언어나 프레임워크에서 지원하는 방식으로 처리하면 된다.

python flask에서는 아래 코드처럼 request json을 파싱 할 수 있다.

# Python - flask

from flask import request

def get_spell_check_text():
    json_data = request.get_json()
    return json_data['action']['params']['spell_check_text']

 

 

 

 

- response

response는 챗봇에서 보이길 원하는 응답 형태(카드뷰, 텍스트만 표시 등)에 따라 format이 다르다.

교정 결과는 텍스트로만 전달하는 게 가장 효율적이라고 판단하여 텍스트형 출력 요소인 SimpleText format을 선택했다.

👉response json format - simple text 보기

 

simple text response는 간단하게 생성할 수 있다.

# Python

def response_kakao_chatbot_simple_text(text: str) -> dict:
    return {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": "교정 결과\n" + text
                    }
                }
            ]
        }
    }

 

TMI

- skill이라는 용어는 chatbot 쪽에서는 범용적으로 사용되는 용어이며, 포스트에 언급한 의미와 동일하다

- response에서 사용자 발화 정보는 userRequest-utterance에 있다. 일반 발화라면 utterance 필드에 있겠지만, 본 경우에는 블록에서 파라미터로 발화를 전달하기 때문인지 utterance에는 해당 블록에 진입에 사용된 발화 내용('맞춤법 교정하기')이 있다.

- response의 text 줄 넘김은 \n을 이용하면 된다.

- skill server는 local 서버로는 개발 챗봇과 연결해서 테스트할 수 없다. 별도로 서버 호스팅을 해야 한다.

 

참고

🤨스킬 서버 이해하기

⌨️github repository