Swift AppIntent当包含参数时总是请求确认



我正在尝试添加语音控制(通过Siri)到MacOS项目。所以我可以输入"overlay to left 10">

期望从框架:

  • Siri通过说"叠加到左边10"来识别快捷方式
  • 参数在左边;和"10";认可。

实际工作原理:

  • Siri只识别字面上的"叠加方向";然后Siri问"什么方向",然后问"多少像素">

我的问题是AppIntent可以直接从命令中识别参数吗?没有确认每一个参数?很多谢谢!

enum Direction:String{
case left, right, up, down
}
extension Direction: AppEnum{
static var caseDisplayRepresentations: [Direction : DisplayRepresentation] = [
.down: "down",
.up: "up",
.left: "to the left",
.right: "to the right",
]

static var typeDisplayName: LocalizedStringResource = "Direction"
static var typeDisplayRepresentation: TypeDisplayRepresentation = "Direction"
}
struct MoveGridIntent: AppIntent {

static var title: LocalizedStringResource = "Overlay Direction"
static var description = IntentDescription("move the grid")
static var openAppWhenRun: Bool = true
@Parameter(title: "Direction", description: "the direction the overlay is going to move", requestValueDialog: IntentDialog("Which direction"))
var direction: Direction

@Parameter(title: "pixels", inclusiveRange: (1, 50))
var pixels: Int

static var parameterSummary: some ParameterSummary {
Summary("Overlay (.$direction) (.$pixels)")
}

@MainActor
func perform() async throws -> some IntentResult {
print("MoveGridIntent", "move overlay", direction, "for (pixels) pixels !!")
return .result()
}
}

您可以在安装快捷方式应用程序时添加应用程序意图,通过实现AppShortcutsProvider,如下所示:

struct MyShortcuts : AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: MoveGridIntent(),
phrases: ["Move overlay by (.$pixels) (.$direction) with (.applicationName)"])
}
}

在提供的每个短语中使用applicationName是很重要的,否则它们将无法被识别。

我目前正在为我自己的一个项目弄清楚这个问题,并注意到,涉及的参数和专业词汇越多,它就越烦人。它应该可以很好地用于您的示例。

编辑:在调用短语中只能有一个动态参数!上面的例子不起作用。

如果它没有-我在这里猜测,仍然在自己工作-你可能需要在你的参数和/或AppIntentVocabulary.plist上添加resolvers到你的本地化(还不确定,这是否只对旧式SiriKit实现有影响)。

我也推荐观看https://developer.apple.com/videos/play/wwdc2022/10170/和https://developer.apple.com/videos/play/wwdc2022/10032

相关内容

  • 没有找到相关文章

最新更新