我想使用twilio,whatsapp和flask构建一个简单的聊天机器人,该机器人将询问用户姓名,年龄和图片。但是flask应用程序只问了一个问题并返回输出并退出该函数。
我尝试使用while循环继续询问所有问题并获取输出,但是如果没有返回,则不会显示对用户消息的响应。因此,我无法为用户提供下一个问题的答案。 有什么方法可以为用户创建会话并获取所有详细信息并关闭会话,而下一次同一用户发起聊天时,该用户可以获取其信息。
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
app = Flask(__name__)
output = []
@app.route("/")
def hello():
return "Hello world !!"
@app.route("/sms", methods=['GET', 'POST'])
def sms_reply():
# Fetch the message
msg = request.form.get('Body')
msg = msg.lower()
output.append(msg)
resp = MessagingResponse()
resp.message("May I know you name?")
# ASK ANOTHER QUESTION
print("User message: ", msg)
return str(resp)
答案 0 :(得分:2)
Heyo,Twilio开发人员推广人员。 ?
假设/sms
是to use cookies to persist the state of your conversation,当您收到消息时,state=asked_for_name
端点就是您定义的webhook URL。如果您为webhook请求设置了cookie,则该cookie将在以下webhooks中持续存在(最长4h)。
我不是python开发人员,但我构建的a quick JS example具有/sms/
endpoint available。逻辑很简单,应该可以转移到烧瓶中。 :)
使用伪代码,您可以做的是通过设置的cookie保持状态。
state
返回TwiML询问名称
您的电话号码会收到询问姓名的答复,此人会用姓名回答。另一个Webhook发送到相同的URL。
检查asked_for_name
cookie并找到name
response.Body.body
的值设置一个state=asked_for_age
cookie state
返回TwiML询问年龄
您的电话号码会收到询问年龄的答复,对方会回答他们的年龄。另一个Webhook发送到相同的URL。
检查asked_for_age
cookie并找到age
response.Body.body
的值设置一个state=sent_summary
cookie name
age
和import pandas as pd
l1 = '{"colA":"valA", "colB":null}'
l2 = '{"colA":"valC", "colB":null}'
lines = [l1, l2]
correct_dicts = [eval(li.replace(' null ', 'None')) for li in lines]
df = pd.DataFrame({
'colA': [d.get('colA', None) for d in correct_dicts],
'colB': [d.get('colB', None) for d in correct_dicts]
}
)
print(df)
print(correct_dicts)
作为旁注,对于此类事情,您可能需要查看Twilio Studio。您可以通过立即拖放一些小部件来建立这些聊天对话。 :)