SiriKit自定义意图参数和快捷方式

时间:2018-07-17 06:54:57

标签: ios objective-c sirikit ios12 inshortcut

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

这是我定义意图的方式: enter image description here

然后我正在尝试使用以下方法创建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 =;       标识符= EE4661C6-1826-4A14-84EC-FD684647FE2B;   }),因为它没有有效的参数组合

所以我不确定如何正确执行此操作。捐赠快捷方式时是否必须提供taskName?但这意味着每次都会显示相同的taskName并将其添加到系统中,这不是我想要的。还是新的SiriKit无法自定义以处理通用输入?

2 个答案:

答案 0 :(得分:2)

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

taskIntent.taskName = @"Test";

每当用户在您的应用程序中执行相关操作时,您就捐赠意图。如果您的用户使用taskName输入任务,则可以通过创建意图并将taskIntent.taskName参数设置为用户输入的任务名称来捐赠此taskName。这将为输入任务提供捷径再次使用相同的标题,这可能不是您想要的。由于任务标题不同且无法预测,因此添加任务不是重复的,因此INAddTasksIntent似乎比捐赠快捷方式更合适。

答案 1 :(得分:1)

您不能使用创建的自定义意图的参数询问Siri问题。

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

  • 内置意图
  • 自定义意图

对于内置意图,您可以使用参数询问Siri问题,例如“向John发送一条消息,说“帮助我预订机票”。 SiriKit将帮助您找到意图,提取参数(John和消息内容)并为您发送消息。

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

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