Line-Bot Python: запись ответа пользователя в листе Google ОШИБКА
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'ok'
def over_time(count):
scope = ["https://spreadsheets.google.com/feeds"]
creds = ServiceAccountCredentials.from_json_keyfile_name('auth.json', scope)
client = gspread.authorize(creds)
sheet = client.open('test').sheet1
content = sheet.cell(1,count).value
return content
#extract the questions from here
def write_in(answers):
scope = ["https://spreadsheets.google.com/feeds"]
creds = ServiceAccountCredentials.from_json_keyfile_name('auth.json', scope)
client = gspread.authorize(creds)
sheet = client.open('test').sheet1
sheet.insert_row(answers, 2)
# write users' answers into the sheet
users=[]
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
global users
print("event.reply_token:", event.reply_token)
print("event.message.text:", event.message.text)
user_id = json.loads(str(event.source))['userId']
user_data ={}
location =0
count =0
answers =[]
for user in users:
if user_id==user['user_id']:
user_data =user
count =user_data['count']
location = [i for i, t in enumerate(users) if t['user_id'] == user_id][0]
answers = user_data['answers']
print(answers)
if user_data=={}:
user_data = {"user_id": user_id, "count": 0, "answers":[]}
users.append(user_data)
location=len(users)-1
if event.message.text == "a":
count=1
content = over_time(count)
users[location]['count'] = 1
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=content))
return 0
if event.message.text == "b":
buttons_template = TemplateSendMessage(
alt_text='b template',
template=ButtonsTemplate(
title='type',
text='please choose',
thumbnail_image_url='xxxx',
actions=[
MessageTemplateAction(
label='a',
text='a'
),
]
)
)
line_bot_api.reply_message(event.reply_token, buttons_template)
return 0
if event.message.text != "a" and event.message.text != "b":
answers.append(event.message.text)
count += 1
if count>3:
b=write_in(answers)
print(b)
users[location]['count'] = 0
users[location]['answers'] = []
return 0 #
content = over_time(count)
users[location]['count'] = count
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=content))
Я на самом деле знаю, как записать их в Google лист. Просто когда я пытался общаться с пользователями, иногда это странно. Каждый раз, когда пользователь заканчивает отвечать на вопрос, мы запишем его ответ на листе Google, а затем снова оставляем пустым, чтобы пользователь мог использовать его в следующий раз и заполнить новый ответ. Но я получил ошибку, так как иногда line-bot спрашивал меня Q1 дважды или Q2 дважды и не мог успешно писать в листе Google. Я думаю, что ошибка в основном в последней части, когда count>3, мне нужно остановить весь процесс и не дать ему продолжаться.
Действия при использовании line-bot:
напишите b -> нажмите кнопку a в форме -> Q1 -> A1 -> Q2 -> A2 -> Q3 -> A3 -> если считать>3 -> ответ =[A1,A2,A3] впишите в лист Google - > Установите пустые данные пользователя -> остановить (тогда пользователь может использовать его снова)