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, відправ повідомлення в Месенджері X», Siri активує відповідне розширення, передає параметри запиту та отримує результат для озвучування.

На відміну від інших типів розширень, Intents Extension працює у фоновому режимі без видимого інтерфейсу — Siri сама відображає відповідь голосом або текстовою карткою. Розширення може опціонально надати кастомний UI через INUIHostedViewProviding, який відображається всередині Siri перед виконанням команди для підтвердження.

Розширення не має доступу до екрану пристрою і не може ініціювати дії самостійно — лише у відповідь на запит від Siri або Shortcuts. Це забезпечує безпеку: користувач завжди контролює, які дії виконує додаток через голосові команди.

SiriKit та домени інтентів

SiriKit — це фреймворк Apple для інтеграції з Siri, представлений у iOS 10. Він визначає домени — категорії дій, які Siri може обробляти: повідомлення, телефонні дзвінки, платежі, списки, нагадування, фото, тренування, бронювання та інші. Кожен домен має фіксований набір інтентів і відповідей.

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

INSendMessageIntent — надсилання повідомлень. INStartWorkoutIntent — початок тренування. INSearchForPhotosIntent — пошук фотографій. INRequestRideIntent — замовлення таксі. Кожен домен визначає обов'язкові та опціональні параметри, які Siri витягує з голосового запиту. За даними Apple, для стандартних доменів не потрібен файл intentdefinition — достатньо реалізувати відповідний handler.

Для додатків, які не потрапляють у стандартні домени, з 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 — фактичне виконання операції та повернення результату.

Розділення на три етапи критично важливе для голосового UX: якщо параметр не розпізнано, 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 відображає стандартну картку з типом інтенту та додатком. Для більшості інтентів стандартний UI достатній, і 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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