다이얼로그 플로우 인텐트(Intent) 불러오기(Import) 기능 오류 대처법
다이얼로그 플로우는 다양한 Intent를 JSON 형식의 파일에서 불러오는 기능을 제공합니다. 따라서 JSON 파일의 형식이 잘못되었거나, 다이얼로그 플로우에서 설정하고 있는 기본적인 형식을 지키지 못하면 오류 메시지가 출력됩니다.
일단 위와 같이 장문의 오류가 발생하면 당황하지 말고 개발자 도구를 열어서 오류 메시지를 정확히 복사합니다.
오류 메시지가 위와 같이 굉장히 많이 나왔네요.
이를 위와 같이 텍스트 파일에 옮겨줍시다. 이제 오류가 발생하는 해당 파일들을 일일이 삭제할 수 있습니다.
혹은 텍스트 파일에 담은 뒤에 파일 이름만 파이썬으로 추출할 수 있습니다. 다음과 같이 말이죠.
import os
FIND_DIR="./error messages.txt"
def find_all(string,substring):
length = len(substring)
c=0
indexes = []
while c < len(string):
if string[c:c+length] == substring:
indexes.append(c)
c=c+1
return indexes
f = open(FIND_DIR, "r")
s = f.read()
all_errors = find_all(s, "intents/")
for i in range(0, len(all_errors)):
index = all_errors[i]
# get only 12 characters
print(s[index+8:index + 20])
f.close()
위 스크립트를 실행하면 정확히 오류가 발생하는 파일의 이름 앞 부분을 구할 수 있습니다.
이제 이러한 파일들을 삭제해야 하는데요. 만약 삭제해야 할 파일의 개수가 많다면, 다음과 같이 파이썬 스크립트를 이용해서 일괄 삭제할 수도 있습니다. 저는 다음과 같이 삭제하고자 하는 파일을 배열에 하나씩 담아서 하나씩 순회하면서 삭제되도록 만들었습니다.
import os
DIR="./Dialog Flow Example Project/intents/"
# deleting some intents that have an error sententce.
targets=[
'145127b6428c',
'14015d374076',
'1401cc8a40b3',
'1451bc4266be',
'1451b39a0148',
'105137cdd164',
'1401fec0f8e8',
'1051e6b4632a',
'145138afb780',
'1451bc4266be',
'1451e8f0d5cb',
'1051b5472e66',
'1001bb2b5200',
'1451153fae0e',
'1451bc0aa2a9',
'1001956e5832',
'105112bdd48a',
'1451bcdef726',
'1451ef55eba6',
'1051b3439dd6',
'1051bb288765',
'1001d0245578',
'14011ae6df96',
'1101cab5bc06',
'145103636150',
'140141837fb0',
'1401c7dde1b5',
'140192c0fdf1',
'1451400f135b'
]
for ROOT, DIRS, FILES in os.walk(DIR):
for F in FILES:
filename = "{}/{}".format(ROOT, F)
for i in range(0, len(targets)):
if targets[i] in filename:
print("Deleting file \"{}\"".format(filename))
os.remove(filename)
다만 위와 같이 하면 수동으로 파일명을 입력해야 하므로, 오류 메시지로부터 자동으로 파일 이름을 읽어서 오류가 발생하는 파일만 삭제하도록 스크립트를 합칠 수 있습니다.
import os
FIND_DIR="./error messages.txt"
ERROR_DIR="./Dialog Flow Example Project/intents/"
def find_all(string,substring):
length = len(substring)
c=0
indexes = []
while c < len(string):
if string[c:c+length] == substring:
indexes.append(c)
c=c+1
return indexes
f = open(FIND_DIR, "r")
s = f.read()
all_errors = find_all(s, "intents/")
for ROOT, DIRS, FILES in os.walk(ERROR_DIR):
for F in FILES:
filename = "{}/{}".format(ROOT, F)
for i in range(0, len(all_errors)):
index = all_errors[i]
if s[index+8:index + 20] in filename:
print("Deleting file \"{}\"".format(filename))
os.remove(filename)
결과적으로 특정 인텐트의 JSON 파일에 오류가 나오는 경우 오류 메시지를 error message.txt에 기록만 해주고, 이 스크립트를 실행하면 알아서 오류 메시지에 적힌 오류 인텐트 파일들을 찾아서 그 파일들만 intents 폴더에서 지워주게 됩니다.
결과적으로 위와 같이 더이상 문법과 관련한 오류는 나오지 않는 것을 알 수 있습니다.
'다이얼로그 플로우(Dialog Flow)' 카테고리의 다른 글
다이얼로그 플로우(Dialog Flow) 스몰 토크(Small Talk) 이용해보기 (2) | 2018.10.14 |
---|---|
다이얼로그 플로우(Diaolg Flow)와 플라스크(Flask)를 카카오톡 플러스친구에 연동하기 (2) | 2018.08.29 |
다이얼로그 플로우(Dialog Flow)와 플라스크(Flask) 연동하기 (6) | 2018.08.29 |
다이얼로그 플로우(Dialog Flow)에 엑셀 파일(csv) 등의 데이터를 한 번에 넣는 방법 (8) | 2018.08.23 |
다이얼로그 플로우(Dialog Flow) 엔티티(Entity)로 단어 분류하여 응답하기 (0) | 2018.08.19 |