Intents Extension: ключови понятия и интеграция на Siri Intents в iOS

Автор: IT Sectr Публикувано: 2026-06-16 Време за четене: 9 мин

Intents Extension е разширение за iOS, което позволява на приложения на трети страни да обработват гласови команди на Siri и да взаимодействат със системни услуги чрез SiriKit. Приложението дефинира собствени интенти в Intents.intentdefinition, имплементира манипулатори на базата на INIntentHandler и ги регистрира за разпознаване на гласови фрази. Според Apple Developer Documentation (2025), SiriKit поддържа повече от 20 домейна на интенти — от съобщения и плащания до тренировки и резервации, а от iOS 14 е добавена поддръжка за персонализирани интенти чрез IntentsExtension.

Основни точки

  • Intents Extension обработва гласови команди на Siri и системни интенти от името на приложението на заден план
  • Интентите се дефинират чрез файла Intents.intentdefinition с параметри и отговори във визуалния редактор на Xcode
  • Основният протокол — INIntentHandler, който имплементира метода handle(intent:completion:) за обработка на заявки
  • Персонализирани интенти (iOS 14+) позволяват на приложението да създава собствени типове команди без обвързване със стандартните домейни на SiriKit
  • Разширението поддържа INUIHostedViewProviding за показване на персонализиран интерфейс вътре в Siri преди изпълнение на командата

Какво е Intents Extension в iOS

Intents Extension е разширение на приложение, което позволява на Siri, Shortcuts и други системни услуги да извикват функционалността на приложението чрез стандартизирания протокол INIntentHandler. Когато потребителят каже „Хей Siri, изпрати съобщение в Messenger X”, Siri активира съответното разширение, предава параметрите на заявката и получава резултата за озвучаване.

За разлика от други типове разширения, Intents Extension работи на заден план без видим интерфейс — Siri сама показва отговора с глас или текстова карта. Разширението може по избор да предостави персонализиран интерфейс чрез INUIHostedViewProviding, който се показва вътре в Siri преди изпълнение на командата за потвърждение.

Разширението няма достъп до екрана на устройството и не може да инициира действия самостоятелно — само в отговор на заявка от Siri или Shortcuts. Това осигурява сигурност: потребителят винаги контролира какви действия изпълнява приложението чрез гласови команди.

SiriKit и домейни на интенти

SiriKit е рамка на Apple за интеграция с Siri, представена в iOS 10. Тя определя домейни — категории действия, които Siri може да обработва: съобщения, телефонни обаждания, плащания, списъци, напомняния, снимки, тренировки, резервации и други. Всеки домейн има фиксиран набор от интенти и отговори.

Стандартни домейни

INSendMessageIntent — изпращане на съобщения. INStartWorkoutIntent — започване на тренировка. INSearchForPhotosIntent — търсене на снимки. INRequestRideIntent — поръчване на такси. Всеки домейн определя задължителни и опционални параметри, които Siri извлича от гласовата заявка. Според Apple за стандартните домейни не е необходим файл intentdefinition — достатъчно е да се имплементира съответният манипулатор.

За приложения, които не попадат в стандартните домейни, от iOS 14 се появи възможността за персонализирани интенти. Приложението дефинира собствени типове команди и техните параметри чрез Intents.intentdefinition, а Siri се учи да разпознава съответните фрази на базата на примери, предоставени от разработчика.

Конфигурация в Info.plist

Intents Extension се регистрира чрез ключа IntentsSupported в Info.plist, където се изброяват всички класове интенти, които разширението обработва. Siri използва този списък за избор на подходящо разширение при разпознаване на гласова команда. Ако няколко разширения поддържат един и същ интент, Siri предлага на потребителя избор.

swift
class MessageIntentHandler: NSObject,
    INSendMessageIntentHandling {

    func handle(
        intent: INSendMessageIntent,
        completion: @escaping
            (INSendMessageIntentResponse) -> Void
    ) {
        let response = INSendMessageIntentResponse(
            code: .success, userActivity: nil)
        completion(response)
    }
}

INIntentHandler: обработка на заявки

INIntentHandler — протоколът, който дефинира методи за обработка на всеки етап от работата на интента: разрешаване на параметри, потвърждение и изпълнение. Разширението имплементира тези методи за всеки тип интент, който поддържа.

Три етапа на обработка

resolve — проверка и уточняване на параметрите на интента. Siri извиква този метод за всеки параметър. Ако параметър не е зададен или е неправилен, разширението връща искане за уточняване и Siri задава допълнителен въпрос на потребителя. confirm — потвърждение на намерението. Разширението проверява дали може да изпълни интента в текущия контекст. handle — действително изпълнение на операцията и връщане на резултата.

Разделянето на три етапа е критично за гласовото потребителско изживяване: ако параметър не бъде разпознат, Siri не изпълнява действието, а препитва. Например, ако потребителят е казал „Изпрати съобщение на Алексей”, но в контактите има трима Алексей — разширението връща resolve с искане за уточняване и Siri пита „На кой Алексей?”.

INIntentResponse и статуси

INIntentResponse — обектът, който разширението връща в completion след изпълнение на интента. Response съдържа код на резултата (success, failure, requiresAuthentication, inProgress) и опционални данни за озвучаване от Siri. Кодът определя как Siri ще реагира: success — гласово потвърждение, failure — съобщение за грешка, inProgress — индикация за продължителна операция.

swift
func resolve(
    for intent: INSendMessageIntent,
    with completion: @escaping
        (INStringResolutionResult) -> Void
) {
    if let text = intent.content, !text.isEmpty {
        completion(.success(with: text))
    } else {
        completion(.needsValue())
    }
}

Създаване на персонализирани интенти

От iOS 14 разработчиците получиха възможност да дефинират собствени интенти извън стандартните домейни на SiriKit. Персонализираните интенти се описват във файла Intents.intentdefinition — това е визуален редактор вътре в Xcode, където се създават нови типове команди с параметри и отговори.

Структура на персонализиран интент

Всеки персонализиран интент се състои от INIntent (дефиниция на заявка) и INIntentResponse (дефиниция на отговор). INIntent съдържа параметри с тип данни — String, Integer, CurrencyAmount, намерени обекти и други. INIntentResponse съдържа свойства за връщане на резултат и масив от кодове за отговор. Xcode автоматично генерира Swift класове на базата на тази дефиниция.

Apple препоръчва персонализираният интент да съдържа не повече от 5 параметъра — прекомерният брой влошава разпознаването на реч и усложнява потребителското изживяване. За всеки параметър е желателно да се предоставят примерни фрази в Assistant Dialog, за да се научи Siri да ги разпознава правилно.

Примерни фрази за Siri

В Intents.intentdefinition за всеки интент могат да се зададат примерни изречения — фрази, които потребителят ще каже на Siri, за да активира интента. Примери: „Поръчай кафе в МоетоПриложение”, „Помоли МоетоПриложение да намери рецепта за пица”. Siri използва тези фрази за обучение на разпознаване и ги предлага на потребителя при настройване на Shortcuts.

objective-c
// Intents.intentdefinition (визуален редактор)
Intent: OrderCoffeeIntent
Parameters:
  - beverage (String)
  - size (String)
  - quantity (Integer)
Response:
  - orderNumber (String)
  - price (CurrencyAmount)
Phrases:
  - "Order coffee in MyApp"
  - "Get a latte from MyApp"

Гласово взаимодействие и INUIHostedViewProviding

INUIHostedViewProviding — протоколът, който позволява на Intents Extension да показва персонализиран интерфейс вътре в Siri преди изпълнение на командата. Например при поръчване на такси разширението може да покаже карта с маршрут и цена, а потребителят потвърждава действието с докосване.

Конфигурация на интерфейса

Протоколът дефинира метода configure(with:for:completion:), където разширението получава интента и връща UIViewController, който ще бъде вграден в Siri. Размерът на контролера е ограничен — максимална височина 200 точки. Препоръчва се използването на компактни карти с ключова информация: сума, време, адрес.

Персонализираният интерфейс е опционален — ако разширението не имплементира INUIHostedViewProviding, Siri показва стандартна карта с типа интент и приложението. За повечето интенти стандартният интерфейс е достатъчен и Apple препоръчва добавяне на персонализиран интерфейс само когато наистина подобрява разбирането — например за показване на маршрут или потвърждение на плащане.

Сигурност и потвърждение

За интенти, свързани с финанси или лични данни, се изисква удостоверяване. INIntentResponse поддържа кода requiresAuthentication, който принуждава Siri да поиска Face ID или Touch ID преди изпълнение. След удостоверяване разширението получава потвърждение чрез отделно извикване на handle, където се проверява статусът на удостоверяване.

Apple специално подчертава: Intents Extension не трябва да изисква собствена парола или биометрия — използва се системно удостоверяване. Съхраняването на токени за достъп в Keychain с общ достъп между приложението и разширението е стандартна практика за дълготрайни сесии.

swift
class IntentViewController: UIViewController {

    func configure(
        with intent: INIntent,
        completion: @escaping
            (UIViewController?) -> Void
    ) {
        let cardView = ConfirmationCardView()
        let hostingController =
            UIHostingController(rootView: cardView)
        completion(hostingController)
    }
}

Често задавани въпроси

Може ли да се използва Intents Extension без Siri?

Да, разширението може да обработва интенти от приложението Shortcuts без гласов вход. Потребителят създава пряк път от предложените действия и разширението го изпълнява без участието на Siri.

Кои версии на iOS поддържат персонализирани интенти?

Персонализирани интенти са достъпни от iOS 14 и по-нови. За iOS 10–13 са достъпни само стандартните домейни на SiriKit. Персонализираните интенти изискват Intents.intentdefinition и генериране на Swift класове.

Колко време се дава за обработка на интент?

Siri очаква отговор от разширението около 15 секунди. При превишаване на лимита Siri уведомява потребителя, че действието не е успешно. За продължителни операции използвайте код за отговор inProgress.

Как да предам токен за ауторизация на Intents Extension?

Използвайте Keychain с общ достъп чрез access group между основното приложение и разширението. App Group shared UserDefaults е алтернатива, но отстъпва на Keychain по отношение на сигурността.

Каква е разликата между Intents Extension и Intents UI Extension?

Intents Extension обработва логиката — resolve, confirm, handle. Intents UI Extension предоставя персонализиран интерфейс за показване вътре в Siri чрез INUIHostedViewProviding. И двете могат да работят заедно.

Резюме

  • Intents Extension обработва гласови команди на Siri и преки пътища на Shortcuts чрез протокола INIntentHandler
  • SiriKit предлага повече от 20 стандартни домейна и поддържа персонализирани интенти от iOS 14
  • Жизненият цикъл на интента включва три етапа: resolve (уточняване), confirm (потвърждение) и handle (изпълнение)
  • Персонализирани интенти се създават в Intents.intentdefinition с параметри, отговори и примерни фрази за Siri
  • INUIHostedViewProviding позволява показване на персонализиран интерфейс за потвърждение вътре в Siri преди изпълнение
  • За финансови и частни действия се използва системно удостоверяване чрез Face ID или Touch ID

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също