如果没有回复,则不会初始化上下文密钥 - wit.ai

时间:2016-12-02 08:15:31

标签: wit.ai

我在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);
  }
}

一切都正确还是我错过了什么?如果上下文不在回复中,为什么不启动它。

感谢。

1 个答案:

答案 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如何预测以下操作。

我希望这能澄清并帮助您解决问题,

最佳,

埃米利亚诺。