https://cleaning-toolbox.tistory.com/63
이 글까지 보고 이해하셨으면 이제 카카오 i 오픈빌더로 만든 챗봇을 연계해보도록 하겠습니다.
챗봇의 기본적인 사용법은 다른 분들이 많이 올려주셨기에 이부분은 패스하도록 하겠습니다.
많이 고민했던 부분은 User를 어떻게 식별하고 User에 맞춰서 설정을 불러오고 하는 부분이였는데
챗봇상에서 User를 식별하자니 카카오 싱크나 비즈니스 채널처럼 뭔가 다른 조치가 필요한 것 같았습니다.
그래서 어쩔 수 없이 사용자에게 이름을 직접 입력하게끔 하여 사용자를 식별하게 설계했습니다.
먼저 이름 엔티티를 @sys.constant를 이용해 만들고 '이름입력'이라는 스킬을 만들었습니다.
처음인 경우에는 User의 Token을 받아야하기에 따로 경로를 지정해주었고
해본 경험이 있으면 Token이 필요없기에 바로 이름을 입력받습니다.
@app.route('/name', methods=['POST'])
def get_name():
global user_name
value = {}
check = {}
if request.method == 'POST':
content = request.get_json()
content = content['action']['params']['kakao_name']
friend['name'] = content
user_data = func.find_item(mongo, {"name":friend['name']}, "alarm", "setting")
user_check = func.find_item(mongo, {"name":friend['name']}, "alarm", "kakao")
for i in user_data:
value = i
for j in user_check:
check = j
print(content + '님이 앱 실행 중')
if value.get('name') == None:
user_name = friend['name']
if check.get('name') == None:
dataSend = {
"version": "2.0",
"template": {
"outputs": [
{
"basicCard":
{
"title":"앱을 실행한 이력이 없습니다.",
"buttons": [{
"action":"message",
"label":"기본 설정",
"messageText": "처음이다"
}]
}
}
]
}
}
print(friend['name'] + '님은 토큰을 발급하지 않았음')
return jsonify(dataSend)
else:
dataSend = {
"version": "2.0",
"template": {
"outputs": [
{
"basicCard":
{
"title":"설정된 알람이 없습니다. 무엇을 하고 싶나요?",
"buttons": [{
"action":"message",
"label":"알람 생성/수정",
"messageText": "알람 생성/수정"
},
{
"action":"message",
"label":"알람 삭제",
"messageText": "알람 삭제"
},
{
"action":"message",
"label":"건의사항 작성",
"messageText": "건의사항 작성"
}]
}
}
]
}
}
print(friend['name'] + '님은 설정한 알람이 없음')
return jsonify(dataSend)
else:
user_name = friend['name']
dataSend = {
"version": "2.0",
"template": {
"outputs": [
{
"basicCard":
{
"title":"설정된 알람이 있습니다. 무엇을 하고 싶나요?",
"buttons": [{
"action":"message",
"label":"알람 생성/수정",
"messageText": "알람 생성/수정"
},
{
"action":"message",
"label":"알람 삭제",
"messageText": "알람 삭제"
},
{
"action":"message",
"label":"건의사항 작성",
"messageText": "건의사항 작성"
}]
}
}
]
}
}
print(friend['name'] + '님은 설정한 알람이 있음')
return jsonify(dataSend)
일단 User의 이름을 입력받으면 이 User의 이름이 User들의 알람 설정 정보가 있는 DB내에 있는 사람인지 확인합니다.
그 후에 OWNER의 kakao 친구 목록에 있는지 검사합니다.
순서에 대한 이유는 OWNER의 친구 목록에 있는지 먼저 검사하면 이 모듈은 매 정각마다 실행되기에 시간이 더 소요된다고 판단했습니다. 그렇기에 알람 설정 정보에 User를 먼저 체크하고 친구 목록에 체크합니다.
알람 설정 정보가 있으면 code와 Token도 정상적으로 발급됐었기에 다시 알람을 설정하게 되고
알람 설정 정보가 없으면 알람을 삭제한것이기에 똑같이 알람을 설정할 수 있게 됩니다.
이때 알람 설정 정보가 없고 친구 목록에도 없으면 OWNER의 친구목록 불러오기에서 문제가 있는것이기에
처음해본거라고 판단하여 User의 code와 Token을 다시 재발급시킵니다.
이런식으로 한다면 User가 조금 더 번거로울 수 있지만 개인프로젝트로서 비즈니스채널도 못사용하고 카카오 싱크는 물론이고 여러 많은 제약에 의해 최대한으로 할 수 있는 설계였던것 같습니다.
조금 더 개선할 수는 있겠지만 이 프로젝트에만 머무를 순 없다고 생각해서 어느정도의 차선책으로 개발을 한 것 같습니다.
이후에도 이 앱을 배포하고 운영하면서 친구들의 피드백이나 건의사항에 대해서 수정하고 개선하는 점들을 작성해보도록 하겠습니다.
'Python' 카테고리의 다른 글
파이썬-실습(12) HTML로 파일 log내용 확인하기 (0) | 2022.01.12 |
---|---|
파이썬 - Deque(데크) (0) | 2021.12.20 |
파이썬-실습(10) 카카오톡 친구들에게 API로 메시지 보내기 (0) | 2021.12.17 |
파이썬-실습(9) 가변적인 Url 파싱하기, 카카오 인가코드 파싱 (0) | 2021.12.17 |
파이썬-실습(8) 카카오 디벨로퍼 인가코드, Friends 토큰 (0) | 2021.12.17 |