如何让Siri无需‘note’类词汇或自定义词汇搜索应用内文本?
解决Siri应用内搜索无需强制词汇或自定义替代词的问题
我之前也碰到过类似的头疼问题——系统自带的INSearchForNotebookItemsIntent确实硬绑定了note/list/task这类特定词汇,把用户的交互限制得很死。针对你的两个需求,这里有两种落地性很强的解决方案:
方案一:创建自定义搜索Intent,彻底摆脱系统词汇限制
如果想让用户直接说“On TextBook show Movies”就触发应用内搜索,完全绕开系统的notebook类词汇,最直接的方式是打造专属的自定义Intent:
- 在Xcode里新增一个
Intent Definition文件(路径:File > New > File > Intent Definition)。 - 新建一个Intent(比如命名为
SearchInTextBookIntent),添加一个String类型的参数(比如searchKeyword),记得勾选“Supports Siri Suggestions”让Siri能识别这个参数。 - 配置Intent的触发短语模板:切换到
Shortcuts标签页,添加贴合用户口语的触发句式,比如:- "On TextBook show {searchKeyword}"
- "Search TextBook for {searchKeyword}"
这样Siri会直接匹配这些短语,不需要额外的类别词汇触发。
- 创建
Intent Extensiontarget,在对应的handler类里实现搜索逻辑:接收searchKeyword参数,调用你应用内的文本搜索接口,再用INIntentResponse构造符合Siri展示要求的结果返回。 - 在主应用的
Info.plist里注册这个自定义Intent,确保Siri能把短语和你的应用关联起来。
这种方式完全由你掌控触发逻辑,用户体验会更贴合你的应用场景。
方案二:扩展系统Intent的自定义词汇,支持“record”等替代词
如果不想完全抛弃INSearchForNotebookItemsIntent,可以通过自定义词汇扩展让Siri把“record”这类词识别为系统认可的notebook类别:
- 创建一个
.vocab格式的词汇映射文件(比如TextBookVocab.vocab),内容示例如下:
这个文件的作用是把“record”“entry”这类自定义词汇,映射到系统的TYPE_NAME: INNotebookItemType LOCALE: en-US PHRASES: - record - entry - snippetINNotebookItemTypeNote类型上。 - 将这个
.vocab文件加入项目,然后在主应用的Info.plist里配置INVocabulary字段:<key>INVocabulary</key> <dict> <key>INNotebookItemType</key> <array> <string>TextBookVocab.vocab</string> </array> </dict> - 确保你的
Intent Extension已经在Info.plist的IntentsSupported列表中添加了INSearchForNotebookItemsIntent。
配置完成后,用户说“On TextBook show Movies record”时,Siri会自动把“record”识别为note类型,从而触发你的应用内搜索,完美替代默认的“note”词汇。
小提示
- 测试时一定要在实体设备上开启Siri,并给应用授予“Siri & Search”权限,模拟器的Siri支持有限。
- 自定义触发短语可以多设置几个口语化的版本,比如“Find {searchKeyword} in TextBook”,覆盖更多用户的表达习惯。
- 自定义词汇文件要对应正确的系统类型,比如这里的
INNotebookItemType,否则映射不会生效。
内容的提问来源于stack exchange,提问作者Anton Belousov
相关产品推荐
相关产品推荐

