https://vmpo.tistory.com/94?category=733430 을 참고하여 만들었습니다.
최신 보안 이슈를 전달하는 챗봇을 만들고자 결정한 직후, 카카오 챗봇 승인 신청을 했다.
월요일날 승인 신청을 했는데, 금요일 오후 쯤에 다음과 같이 메일 한 통이 날아왔다.
승인 신청이 반려된 것이다. 슬퍼할 겨를 없이 메일을 자세히 살펴보니 카카오톡 채널 URL이 유효하지 않아 OBT 승인 신청이 반려된 것이다.
알고보니 카카오톡 채널 공개설정을 ON으로 해줘야하는데, OFF로 설정해서 승인 신청이 반려되었다.
이와 같은 내용을 일요일에 인지한 후, 다시 승인 신청을 했고, 화요일이 되자 아래와 같은 이메일 한 통이 날아왔다.
승인 신청이 완료되었고 kakao i developers의 접근 권한이 부여되어 챗봇을 생성할 수 있게 되었다.
현재 나는 봇을 하나 만들었기 때문에 '나의 봇'에 1이라고 되어있는데, 처음 회원가입을 하고 들어가면 아무것도 없다.
내가 봇을 만들었기 때문에 나의 ROLE은 마스터이다.
(나는 새로운 작업자들을 추가할 수 있고, 그들의 권한 역시 설정이 가능하다. 나는 혼자 작업할 것이기 때문에 이 부분을 설정해주지 않았다.)
챗봇을 생성하게 되면 위와 같은 화면을 만나게 되고, 현재 나는 스킬만을 사용할 것이기 때문에 폴백블록 을 사용할 것이다.
봇 응답에서 스킬데이터를 선택한다.
스킬 탭으로 가서 스킬을 생성한다. api 서버 url을 아래 URL부분에 입력하면 된다.
스킬을 다 만들고 나면 폴백 블록으로 돌아와 빨간 동그라미 부분과 같이 사용하고자 하는 스킬을 선택한다.
아래 화면은 내가 챗봇으로 구현한 화면이다.
나는 장고 api 서버를 이용하였다. 요청이 있으면 아래와 같이 응답하도록 되어있다.
# views.py
@csrf_exempt
def callApi(request):
if request.method == 'POST':
data = JSONParser().parse(request)
print(data)
client_utterance = data['userRequest']['utterance'].strip('\n')
if client_utterance in ['보안뉴스', '데일리시큐', 'wired', '모아서 보기']:
return JsonResponse(kakaotemplates.listcard(client_utterance), status=200)
else:
return JsonResponse(kakaotemplates.quickReplies(), status=200)
client_utterance = data['userRequest']['utterance'].strip('\n') 로 사용자 발화 내용을 가져오고, 가져온 내용을 토대로 어떻게 응답할 지를 결정합니다.
위의 그림과 같이 보안뉴스라고 메시지를 보내게 되면 JsonResponse(kakaotemplates.listcard(client_utterance), status=200) 이 실행됩니다.
# kakaotemplates.py
# ListCard
def listcard(news_title):
data = []
_boannews = crawling.newest_news(news_title)
count = 1
for bn in _boannews:
if count == 6 : break
_temp = dict()
_temp["title"] = _boannews[bn]["title"]
_temp["description"] = _boannews[bn]["date"] + " | " + _boannews[bn]["author"]
_temp["link"] = {"web" : _boannews[bn]["link"]}
data.append(_temp)
count += 1
return {
"version": "2.0",
"template": {
"outputs": [
{
"listCard": {
"header": {
"title": news_title
},
"items": data
}
}
]
}
}
def quickReplies():
return {
"version": "2.0",
"template": {
"outputs": [
{
"simpleText": {
"text": "보안 관련 뉴스 사이트입니다."
}
}
],
"quickReplies": [
{
"messageText": "보안뉴스",
"action": "message",
"label": "보안뉴스"
},
{
"messageText": "데일리시큐",
"action": "message",
"label": "데일리시큐"
},
{
"messageText": "wired",
"action": "message",
"label": "wired"
},
{
"messageText": "모아서 보기",
"action": "message",
"label": "모아서 보기"
}
]
}
}
위의 코드는 https://i.kakao.com/docs/skill-response-format#%EC%98%88%EC%A0%9C-%EC%BD%94%EB%93%9C-7 를 보고 응답 타입별 json 포맷에 맞춰서 반환해주는 함수를 구성한 것입니다.
이렇게 하면 아주 간단한 챗봇 완성입니다~~~