Siri Intent: ключевые понятия, SiriKit и интеграция с Siri

Автор: IT Sectr Опубликовано: 2026-02-15 Время чтения: 9 мин

Siri Intent — механизм интеграции iOS-приложения с голосовым ассистентом Siri, позволяющий пользователям выполнять действия голосом без открытия приложения. Разработка ведётся на Swift с использованием фреймворков Intents (Intents.framework) и SiriKit. Начиная с iOS 16 появился App Intents — новый, более гибкий фреймворк для создания кастомных голосовых команд. Siri Intent поддерживает 10 доменов (сообщения, звонки, платежи, заметки, тренировки и другие) и позволяет приложению обрабатывать голосовые запросы через IntentHandler. Рассмотрим ключевые понятия, архитектуру и примеры кода.

Главное

  • Siri Intent — голосовая команда, выполняющая действие в приложении через Siri без его открытия
  • SiriKit (iOS 10+) — фреймворк с предопределёнными доменами (сообщения, звонки, платежи)
  • App Intents (iOS 16+) — новый фреймворк для создания произвольных кастомных голосовых команд
  • IntentHandler — обработчик, выполняющий действие приложения в ответ на голосовую команду Siri
  • INInteraction — объект, представляющий результат выполнения интента, сохраняемый в Siri для обучения

Что такое Siri Intent

Siri Intent — это механизм, позволяющий iOS-приложению обрабатывать голосовые команды, произнесённые пользователем через Siri. Когда пользователь говорит «Siri, отправь сообщение в Telegram Ивану», Siri распознаёт интент (INSendMessageIntent), определяет приложение, которое может его обработать (Telegram), передаёт параметры (контакт «Иван», текст сообщения) и запускает IntentHandler приложения. Весь процесс занимает 0.5–2 секунды и не требует открытия приложения.

Архитектура Siri Intent включает три компонента. Первый — .intentdefinition файл, описывающий структуру интента: параметры (String, Integer, INPerson), фразы-триггеры и ответы. Второй — IntentHandler, реализующий протокол обработки: получает параметры, выполняет действие (например, отправляет сообщение через API приложения) и возвращает INInteraction с кодом результата. Третий — Intents Extension, отдельный target в Xcode, работающий в собственном процессе. Siri запускает Intents Extension при голосовом запросе, передаёт ему данные и получает результат. Extension не имеет UI — он выполняется в фоне и должен завершиться за 5–10 секунд.

Варианты использования Siri Intent: отправка сообщений (INSendMessageIntent), совершение звонков (INStartCallIntent), отправка платежей (INSendPaymentIntent), создание заметок (INCreateNoteIntent), тренировки (INStartWorkoutIntent), фотографии (INSearchForPhotosIntent), бронирование поездок (INBookRestaurantReservationIntent), автомобильные функции (INSetCarLockStatusIntent). Каждый домен имеет строгую схему параметров и ограничения, определённые Apple для безопасности.

SiriKit: архитектура и домены

SiriKit — фреймворк, представленный Apple в iOS 10 (2016). Он предоставляет готовые домены (Intents) для типовых действий: сообщения, звонки, платежи, заметки, напоминания, фотографии, тренировки, бронирование, автомобильные функции, поиск. Для каждого домена Apple определила набор Intent-классов (INSendMessageIntent, INStartCallIntent), которые приложение реализует через IntentHandler. SiriKit автоматически генерирует UI-подтверждение перед выполнением (для платежей и сообщений подтверждение обязательно).

Домены SiriKit:

  • Сообщения (Messages) — INSendMessageIntent, INSearchForMessagesIntent, INSetMessageAttributeIntent
  • Звонки (Calls) — INStartCallIntent, INSearchForCallHistoryIntent
  • Платежи (Payments) — INSendPaymentIntent, INRequestPaymentIntent
  • Заметки (Notes) — INCreateNoteIntent, INSearchForNotesIntent, INAddTasksIntent
  • Напоминания (Reminders) — INCreateTaskListIntent, INAddTasksIntent, INSetTaskAttributeIntent
  • Тренировки (Workouts) — INStartWorkoutIntent, INPauseWorkoutIntent, INEndWorkoutIntent
  • Фотографии (Photos) — INSearchForPhotosIntent, INStartPhotoPlaybackIntent
  • Автомобиль (CarPlay) — INSetCarLockStatusIntent, INGetCarLockStatusIntent
  • Поиск (Search) — INSearchForMessagesIntent, INSearchForNotebookItemsIntent

Ограничения SiriKit: разработчик не может создавать собственные домены — только использовать предопределённые. Это ограничение решено в iOS 16 с появлением App Intents, который позволяет создавать произвольные голосовые команды для любых действий приложения.

App Intents: новый фреймворк

App Intents — фреймворк Apple, представленный в iOS 16 (2022) и значительно расширенный в iOS 17–18. В отличие от SiriKit с фиксированными доменами, App Intents позволяет разработчику определять собственные голосовые команды для любых действий приложения: «Siri, добавь молоко в список покупок в AnyList», «Siri, запиши встречу в Fantastical», «Siri, включи свет в гостиной в Home». Кастомные интенты определяются через протокол AppIntent с указанием параметров, фраз и схемы подтверждения.

Компоненты App Intents:

  • AppIntent — протокол для описания действия: title, description, parameters, perform()
  • IntentParameter — параметры команды с типами (String, Int, URL, Entity, Measurement)
  • IntentDialog — диалоги для Siri: запрос подтверждения, ответ об успехе или ошибке
  • WidgetIntent — подмножество App Intents для обработки нажатий на виджетах (iOS 17+)
  • Shortcuts — App Intents автоматически интегрируются с приложением Shortcuts

App Intents vs SiriKit: основное отличие — гибкость. SiriKit ограничен 10 доменами, App Intents позволяет создавать любые команды. SiriKit требует отдельного Intents Extension target, App Intents работает внутри основного приложения. SiriKit использует Intents.framework (Objective-C/Swift), App Intents — новый декларативный Swift-синтаксис с макросами @Intent, @Parameter. По данным Apple, App Intents используется в 70% новых проектов с поддержкой Siri на 2025 год.

Пример кода: Swift Intents

Пример создания кастомного App Intent для добавления заметки в приложение. Демонстрирует современный подход с использованием фреймворка App Intents в iOS 16+.

swift
import AppIntents

// 1. Кастомный Intent для добавления заметки
struct AddNoteIntent: AppIntent {
    // Название команды (видно в Shortcuts)
    static var title: LocalizedStringResource = "Добавить заметку"

    // Описание команды
    static var description: LocalizedStringResource = "Создаёт новую заметку в приложении"

    // Параметры команды
    @Parameter(title: "Текст заметки")
    var noteContent: String

    @Parameter(title: "Категория", default: "Общее")
    var category: String

    // Выполнение действия
    func perform() async throws -> some IntentResult {
        // Создаём заметку через локальное хранилище
        let note = Note(content: noteContent, category: category)
        try await NoteStore.shared.save(note)

        // Возвращаем результат с диалогом для Siri
        return .result(
            dialog: .response("Заметка \"\(noteContent)\" создана")
        )
    }
}

// 2. App Shortcut Provider — регистрация команд
struct NotesShortcuts: AppShortcutsProvider {
    @AppShortcutsBuilder
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: AddNoteIntent(),
            phrases: [
                "Добавить заметку в \(.applicationName)",
                "Создать заметку с \(\.$noteContent) в \(.applicationName)",
                "Запиши \(\.$noteContent) в \(.applicationName)",
            ]
        )
    }
}

// 3. SiriKit Intent для сообщений (классический подход)
class MessageIntentHandler: NSObject, INSendMessageIntentHandling {

    func resolveRecipients(
        for intent: INSendMessageIntent,
        completion: @escaping ([INPersonResolutionResult]) -> Void
    ) {
        guard let recipients = intent.recipients else {
            completion([.needsRequired()])
            return
        }
        // Разрешаем контакты через Address Book приложения
        let results = recipients.map { INPersonResolutionResult.success(with: $0) }
        completion(results)
    }

    func handle(
        intent: INSendMessageIntent,
        completion: @escaping (INSendMessageIntentResponse) -> Void
    ) {
        // Отправляем сообщение через API приложения
        let response = INSendMessageIntentResponse(
            code: .success, userActivity: nil
        )
        completion(response)
    }
}

Ключевые моменты: AppIntent — протокол для кастомной голосовой команды; @Parameter — макрос, определяющий параметры команды; perform() — метод, выполняющий действие и возвращающий результат с диалогом для Siri; AppShortcutsProvider — регистрирует команды приложения в Siri и Shortcuts; INSendMessageIntentHandling — протокол SiriKit для обработки домена сообщений. Фразы-триггеры задаются через .applicationName и \.$parameter для вариативности.

Рекомендации и ограничения

Рекомендации по созданию Siri Intent: определяйте понятные фразы-триггеры с вариантами произношения; возвращайте информативный диалог после выполнения (успех/ошибка); обрабатывайте случаи неполных параметров через resolve-методы с запросом уточнения; сохраняйте INInteraction после выполнения для обучения Siri; тестируйте на реальном устройстве (симулятор не поддерживает Siri). Для App Intents используйте @Intent с inAppSearchKeywords для улучшения распознавания.

Ограничения: SiriKit Intents ограничены 10 доменами. Intents Extension выполняется с лимитом 5–10 секунд — при превышении Siri сообщает об ошибке. Siri Intent не имеет UI — весь интерфейс генерируется Siri. App Intents доступны только на iOS 16+ (охват ~85% устройств на 2026). Для поддержки iOS 13–15 необходимо использовать SiriKit. Приватность: Siri не передаёт приложению аудиозапись — только распознанный текст параметров. Для конфиденциальных действий (платежи, сообщения) обязательно подтверждение от пользователя.

ПараметрSiriKitApp Intents
Минимальная iOSiOS 10iOS 16
Домены10 предопределённыхПроизвольные
ЯзыкObjective-C / SwiftSwift (макросы)
TargetIntents ExtensionОсновное приложение
UISiri UI (генерация)Siri UI (генерация)
ПодтверждениеДля платежей/сообщенийОпционально
ShortcutsВручнуюАвтоматически
Widget интеграцияНетWidgetIntent (iOS 17+)

Производительность и отладка: Intents Extension запускается в отдельном процессе с ограничением памяти 30–50 МБ. Для отладки используйте схему «Intents Extension» в Xcode с аттачем к процессу Siri. Логи выводятся в консоль устройства. App Intents отлаживаются через приложение Shortcuts на устройстве. INInteraction сохраняется локально и используется Siri для предложений — удаляйте устаревшие взаимодействия через INInteraction delete.

Часто задаваемые вопросы

Что такое Siri Intent простыми словами?

Siri Intent — это голосовая команда, которая запускает определённое действие в приложении без его открытия. Пользователь говорит «Siri, отправь сообщение в WhatsApp» и Siri выполняет действие через IntentHandler приложения WhatsApp.

Чем SiriKit отличается от App Intents?

SiriKit (iOS 10+) — старый фреймворк с предопределёнными доменами (сообщения, звонки, платежи). App Intents (iOS 16+) — новый фреймворк, позволяющий создавать кастомные интенты для любых действий без ограничения доменами.

Какие домены поддерживает SiriKit?

SiriKit поддерживает 10 доменов: сообщения (INSendMessageIntent), звонки (INStartCallIntent), платежи (INSendPaymentIntent), заметки, напоминания, фотографии, тренировки, бронирование поездок, автомобильные функции и поиск.

Как Siri Intent обрабатывает голосовой ввод?

Siri распознаёт речь и сопоставляет её с определённым Intent на основе фраз, заданных в .intentdefinition. IntentHandler выполняет действие и возвращает результат. Весь процесс занимает 0.5–2 секунды.

Можно ли отменить выполнение Siri Intent?

Да, после распознавания интента, но до его выполнения, Siri показывает пользователю подтверждение. Пользователь может отменить выполнение голосом («Отмена») или касанием. Для платежей и сообщений подтверждение обязательно.

Итоги

  • Siri Intent — механизм интеграции приложения с Siri через голосовые команды без открытия экрана
  • SiriKit (iOS 10+) — фреймворк с 10 фиксированными доменами (сообщения, звонки, платежи) через Intents Extension
  • App Intents (iOS 16+) — новый фреймворк для произвольных кастомных команд с макросами @Intent и @Parameter
  • IntentHandler — выполняет действие приложения, получает параметры из Siri и возвращает INInteraction с результатом
  • Фразы-триггеры задаются через .intentdefinition (SiriKit) или @AppShortcutsBuilder (App Intents)
  • Ограничения — лимит выполнения 5–10 секунд, память 30–50 МБ, подтверждение для чувствительных действий
  • App Intents — предпочтительный подход для iOS 16+, SiriKit — для поддержки iOS 13–15

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также