如何在Dialogflow中处理用户名?

时间:2019-03-24 02:25:28

标签: dialogflow actions-on-google

首先,我是Dialogflow的新手,也是一般编码的新手。我正在尝试构建一个处理订阅暂停的机器人。 我已经为以下步骤设置了一些意图和实体:

  • 向用户问好并解释该机器人可以做什么
  • 请求暂停服务订阅(约10个池) 服务)
  • 询问暂停的开始时间和结束时间(两个不同的值)
  • 总结请求并重复键值

(几乎)我对此感到满意,但是我想实现一个提示输入用户名的提示。我不知道是否有任何内置变量可以在这里为我提供帮助。

这就是我希望对话看起来的样子:

  

(用户):您好,我想暂停对[SUB_NAME]的订阅   [START_DATE]至[END_DATE]

     

(助理):您的订阅用户名是什么?

     

(用户): [user_name_123或UserName123或USER_NAME](字母数字,不遵循特定模式)

     

(助理):完成。您请求[USER_NAME_123]从[START_DATE]到[END_DATE]暂停[SUB_NAME]。请检查您的电子邮件并确认您的请求。

(我认为)我需要的是一个非常简单的自定义变量。在Python中,我会选择这样的东西:

  

用户名=输入(“您的用户名是什么?”)

我想将其存储为一个变量,可以用“ $”引用。 有没有办法用Dialogflow做到这一点?

还有,是否有可能获得上述用户名,即没有ML兼容的环绕语句结构? 我不想像这样强迫对话:

  

(助理):您的用户名是什么?

     

(用户): 我的用户名是 [user_name_123]

2 个答案:

答案 0 :(得分:1)

您可以使用@ sys.any类型标记Dialogflow培训短语中的特定单词,这将能够获取部分输入。然后,您可以将其作为参数。

Sys.any在这些类型的抽象输入类型中确实很有用,但是由于仅匹配用户名变得更加困难,因此将需要更多的训练短语。

您可能希望查看Google登录或OAuth,而不是使用似乎未通过服务验证的用户名。上面的建议可以使用,但不是执行用户名的最佳方法。

答案 1 :(得分:0)

如果您在Google上使用“操作”,则可以使用userStorage保存用户的用户名,然后再访问该用户名以执行任务(在您的情况下为暂停订阅)

假设您的意图返回一个用户名,那么在存储中设置用户名就很简单:

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection){
    captureSession.stopRunning()

    if let metadataObject = metadataObjects.first {
        guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
        guard let stringValue = readableObject.stringValue else { return }
        AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
        found(code: stringValue)
    }

    DispatchQueue.main.async {
        self.performSegue(withIdentifier: "toTimerView", sender: self)
    }
}

然后,您可以简单地以以下方式访问用户名:

grid = {'km__n_clusters': self._clusters, 'NN__alpha': self._nn_reg, 'NN__hidden_layer_sizes': self._nn_arch}
mlp = MLPClassifier(activation='relu', max_iter=2000, early_stopping=True, random_state=self._details.seed)
km = kmeans(random_state=self._details.seed, n_jobs=self._details.threads) #tried n_jobs=self._details.threads
pipe = Pipeline([('km', km), ('NN', mlp)], memory=experiments.pipeline_memory)
gs, _ = self.gs_with_best_estimator(pipe, grid, type='kmeans')
self.log("KMmeans Grid search complete")

希望有帮助!