首先,我是Dialogflow的新手,也是一般编码的新手。我正在尝试构建一个处理订阅暂停的机器人。 我已经为以下步骤设置了一些意图和实体:
(几乎)我对此感到满意,但是我想实现一个提示输入用户名的提示。我不知道是否有任何内置变量可以在这里为我提供帮助。
这就是我希望对话看起来的样子:
(用户):您好,我想暂停对[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]
答案 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")
希望有帮助!