我在wit.ai中创建了一个新应用。在故事中,在“用户说”之后,我添加了一个函数getReply(),使用' Bot执行'并添加了两个带分支的上下文键。如果这两个密钥都可用,我将使用“Bot”发送给用户的回复说明'然后它将进入下一步,它会向用户询问丢失的密钥。
问题是,在回复中我只使用了一个上下文密钥。如果该密钥可用,则流程有效。它没有考虑另一个关键。只有在我们在回复中添加两个密钥时才检查两个密钥。
在代码中,我在函数getReply()中检查这些键,然后将其添加到上下文中。
const actions = {
send(request, response) {
...
...
...
return new Promise(function(resolve, reject) {
...
return resolve();
})
.then()) => null)
.catch((err) => {
'Error occurred',
id,
':',
err.stack || err
);
});
},
function getReply({context, entities}) {
return new Promise(function(resolve, reject) {
...
...
...
context.key1 = value1;
context.key2 = value2;
return resolve(context);
}
}
一切都正确还是我错过了什么?如果上下文不在回复中,为什么不启动它。
感谢。
答案 0 :(得分:0)
嗯,在你的例子中,我没有看到你在上下文中添加或删除键,这取决于一个逻辑。我做了一个小例子,我应该如何验证用户在Python中给出的电子邮件,以及如何在用户提供无效电子邮件的情况下处理上下文密钥。我希望它会给你一些关于如何使用上下文密钥的想法。
def save_email(br, cc):
"""Save email on context.
Arguments:
- br (dict) Bot Response
- cc (dict) Conversation Context
Returns an updated context
"""
context = br.get('context', {})
entities = br['entities']
email = first_entity_value(entities, 'email') # Use wit/email builtin entity
# First clean the context, its possible you saved one of those two keys in
# previous iterations, so clean them all just to be safe. As we are going to
# run email validation in the code below its safe to remove this keys/clean the
# context at the top of this method.
for key in ['email', 'bad-email']:
if key in context:
del context[key]
# Now validate that email is valid. If its valid, we add an 'email' key
# to the context. If email is not valid, we add a 'bad-email' key to the
# context. In this way, we can handle then at Wit.ai, depending which key
# is present, what the bot should do next.
validator = EmailValidator()
if validator(email).is_valid():
context['email'] = email
else:
context['bad-email'] = 1 # 1, 0, any value. What Wit will pay attention is
# that the 'bad-key' exists in the context.
# Finally, return the updated context
return context
正如您所看到的,将电子邮件和错误电子邮件放在上下文中是没有意义的。我不确定在那种情况下Wit会做什么。作为提醒,它使用上下文键,我们可以修改Wit如何预测以下操作。
我希望这能澄清并帮助您解决问题,
最佳,
埃米利亚诺。