3

我试图弄清楚如何使用 iOS12 中的自定义意图来定义和创建快捷方式。我想创建一个快捷方式,以便用户可以将任务添加到我的应用程序并为其命名(以及将来的其他参数)。例如,只需对 Siri 说“添加名称为‘取衣服’的任务”。

这是我定义意图的方式: 在此处输入图像描述

然后我尝试使用这个创建一个 Siri 快捷方式:

    TaskIntent *taskIntent = [[TaskIntent alloc] init];
    taskIntent.suggestedInvocationPhrase = @"TaskIt";

    INShortcut *taskShortcut = [[INShortcut alloc] initWithIntent:taskIntent];

    INUIAddVoiceShortcutViewController *addSiri = [[INUIAddVoiceShortcutViewController alloc] initWithShortcut:taskShortcut];
    addSiri.delegate = self;
    [self presentViewController:addSiri animated:YES completion: nil];

但是,它最终在应用程序中出现异常:

无法从意图创建快捷方式({ taskName = ; identifier = EE4661C6-1826-4A14-84EC-FD684647FE2B; }),因为它没有有效的参数组合

所以我不确定如何正确地做到这一点。捐赠快捷方式时是否必须提供任务名称?但这意味着每次都会显示相同的 taskName 并将其添加到系统中,这不是我想要的。还是新的 SiriKit 的可定制性不足以处理通用输入?

4

2 回答 2

4

是的,在创建自定义之后TaskIntent,您需要填充其参数。也就是说,您需要为 设置一个值taskName

taskIntent.taskName = @"Test";

每次用户在您的应用程序中执行相关操作时,您都会捐赠意图。如果您的用户使用 输入任务taskName,您可以通过创建您的意图并将taskIntent.taskName参数设置为用户输入的任务名称来捐赠此任务名称。它会建议再次输入具有相同标题的任务的快捷方式,这可能不是你想要什么。添加任务不是重复的,因为任务标题不同,而且没有什么可以预测的,所以这INAddTasksIntent似乎比捐赠快捷方式更合适。

于 2018-07-20T09:23:24.500 回答
4

您不能用您创建的自定义意图的参数向 Siri 提问。

您可以在 SiriKit 中创建两种类型的意图:

  • 内置意图
  • 自定义意图

对于内置意图,您可以向 Siri 提出带有参数的问题,例如“向 John 发送一条消息,说‘帮我预订一张票’”。SiriKit 将帮助您找到意图、提取参数(John 和消息内容)并为您发送消息。

对于用于 Siri 快捷方式的自定义意图,您不能提出带参数的问题。您只能使用不带参数的命令来触发意图,并执行与捐赠相同的操作(捐赠自定义意图时,您必须在其中设置参数。)。

内置意图和自定义意图之间的差异可能是由以下事实造成的:对于内置意图,SiriKit 需要进行大量机器学习训练工作才能识别意图并提取参数。但是自定义意图没有这种训练有素的机器学习模型,它不能像内置意图那样工作。

于 2019-03-15T07:24:06.890 回答