我目前正在使用Django为Google Dialogflow编写Webhook应用程序。 一切正常,我基本上完成了。 由于某种原因,我现在开始遇到各种随机出现的问题,其中最严重的情况如下: 每当Webhook执行用户帐户创建调用时,它都会创建一个双数据库条目,这会使程序崩溃(因为我的.get突然返回多个元素而不是单个用户)。
我正在使用以下简单模型:
# model to create user entries
class TestUser(models.Model):
name = models.CharField(max_length=200)
userID = models.CharField(max_length=12, blank=True)
registrationDate = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
# model to add watched movies to user
class Movie(models.Model):
username = models.ForeignKey(TestUser, on_delete=models.CASCADE)
title = models.CharField(max_length=200, blank=True)
genreID = models.IntegerField (blank=True)
def __str__(self):
return self.title
def list_genre_id(self):
return self.genreID
发生问题时在我的webhook中执行的部分应该是以下内容:
if action == "account_creation":
selection = req.get("queryResult").get("parameters").get("account_selection")
if selection == "True":
q = TestUser(name=f"{username}", userID=idgen())
q.save()
userID = TestUser.objects.get(name=f"{username}").userID
fullfillmenttext = {"fulfillment_text": "Alright, I created a new account for you! Would you like to add "
"some of your favorite movies to your account?",
"outputContexts": [
{
"name": f"projects/nextflix-d48b9/agent/sessions/{userID}/contexts/create_add_movies",
"lifespanCount": 1,
"parameters": {
"data": "{}"
}
}]}
这是我正在使用的简单idgen函数:
def idgen():
y = ''.join(
random.SystemRandom().choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(12))
return y
我正在尝试创建此用户ID,以在所有用户的webhook调用中具有唯一的会话ID。似乎有些事情弄乱了,但我一点儿也不知道是什么。 非常感谢您的关注!
答案 0 :(得分:1)
看来我能够解决此问题: 问题显然是我将先前outputContext的生命周期设置为2而不是1,这导致由于某种原因两次执行该代码单元的答案。伙计,dialogflow是如此糟糕的程序。