Siri Intent — mechanizm integracji aplikacji iOS z asystentem głosowym Siri, umożliwiający użytkownikom wykonywanie działań głosem bez otwierania aplikacji. Programowanie odbywa się w Swift z użyciem frameworków Intents (Intents.framework) i SiriKit. Od iOS 16 pojawił się App Intents — nowy, bardziej elastyczny framework do tworzenia niestandardowych poleceń głosowych. Siri Intent obsługuje 10 domen (wiadomości, połączenia, płatności, notatki, treningi i inne) i umożliwia aplikacji przetwarzanie zapytań głosowych przez IntentHandler. Omówimy kluczowe pojęcia, architekturę i przykłady kodu.
Najważniejsze
Siri Intent — to mechanizm umożliwiający aplikacji iOS przetwarzanie poleceń głosowych wypowiadanych przez użytkownika przez Siri. Gdy użytkownik mówi «Siri, wyślij wiadomość do Telegram do Jana», Siri rozpoznaje intent (INSendMessageIntent), określa aplikację, która może go obsłużyć (Telegram), przekazuje parametry (kontakt «Jan», treść wiadomości) i uruchamia IntentHandler aplikacji. Cały proces trwa 0,5–2 sekund i nie wymaga otwierania aplikacji.
Architektura Siri Intent obejmuje trzy komponenty. Pierwszy — plik .intentdefinition opisujący strukturę intentu: parametry (String, Integer, INPerson), frazy wyzwalające i odpowiedzi. Drugi — IntentHandler implementujący protokół obsługi: otrzymuje parametry, wykonuje działanie (np. wysyła wiadomość przez API aplikacji) i zwraca INInteraction z kodem wyniku. Trzeci — Intents Extension, osobny target w Xcode, działający we własnym procesie. Siri uruchamia Intents Extension przy zapytaniu głosowym, przekazuje mu dane i otrzymuje wynik. Extension nie ma UI — wykonuje się w tle i musi zakończyć w ciągu 5–10 sekund.
Zastosowania Siri Intent: wysyłanie wiadomości (INSendMessageIntent), wykonywanie połączeń (INStartCallIntent), wysyłanie płatności (INSendPaymentIntent), tworzenie notatek (INCreateNoteIntent), treningi (INStartWorkoutIntent), zdjęcia (INSearchForPhotosIntent), rezerwacja podróży (INBookRestaurantReservationIntent), funkcje samochodowe (INSetCarLockStatusIntent). Każda domena ma ścisły schemat parametrów i ograniczenia określone przez Apple dla bezpieczeństwa.
SiriKit — framework przedstawiony przez Apple w iOS 10 (2016). Zapewnia gotowe domeny (Intents) dla typowych działań: wiadomości, połączenia, płatności, notatki, przypomnienia, zdjęcia, treningi, rezerwacje, funkcje samochodowe, wyszukiwanie. Dla każdej domeny Apple określiła zestaw klas Intent (INSendMessageIntent, INStartCallIntent), które aplikacja implementuje przez IntentHandler. SiriKit automatycznie generuje UI-potwierdzenie przed wykonaniem (dla płatności i wiadomości potwierdzenie jest obowiązkowe).
Domeny SiriKit:
Ograniczenia SiriKit: programista nie może tworzyć własnych domen — może używać tylko predefiniowanych. To ograniczenie zostało rozwiązane w iOS 16 wraz z pojawieniem się App Intents, który umożliwia tworzenie dowolnych poleceń głosowych dla dowolnych działań aplikacji.
App Intents — framework Apple, przedstawiony w iOS 16 (2022) i znacznie rozszerzony w iOS 17–18. W przeciwieństwie do SiriKit ze stałymi domenami, App Intents umożliwia programiście definiowanie własnych poleceń głosowych dla dowolnych działań aplikacji: «Siri, dodaj mleko do listy zakupów w AnyList», «Siri, zapisz spotkanie w Fantastical», «Siri, włącz światło w salonie w Home». Niestandardowe intenty definiuje się przez protokół AppIntent z określeniem parametrów, fraz i schematu potwierdzenia.
Komponenty App Intents:
App Intents vs SiriKit: główna różnica — elastyczność. SiriKit jest ograniczony do 10 domen, App Intents umożliwia tworzenie dowolnych poleceń. SiriKit wymaga osobnego targetu Intents Extension, App Intents działa wewnątrz głównej aplikacji. SiriKit używa Intents.framework (Objective-C/Swift), App Intents — nowej deklaratywnej składni Swift z makrami @Intent, @Parameter. Według danych Apple, App Intents jest używany w 70% nowych projektów z obsługą Siri na 2025 rok.
Przykład tworzenia niestandardowego App Intent do dodawania notatki w aplikacji. Demonstruje nowoczesne podejście z użyciem frameworka App Intents w iOS 16+.
import AppIntents
// 1. Niestandardowy Intent do dodawania notatki
struct AddNoteIntent: AppIntent {
// Nazwa polecenia (widoczna w Shortcuts)
static var title: LocalizedStringResource = "Dodaj notatkę"
// Opis polecenia
static var description: LocalizedStringResource = "Tworzy nową notatkę w aplikacji"
// Parametry polecenia
@Parameter(title: "Treść notatki")
var noteContent: String
@Parameter(title: "Kategoria", default: "Ogólne")
var category: String
// Wykonanie działania
func perform() async throws -> some IntentResult {
// Tworzymy notatkę przez lokalne przechowywanie
let note = Note(content: noteContent, category: category)
try await NoteStore.shared.save(note)
// Zwracamy wynik z dialogiem dla Siri
return .result(
dialog: .response("Notatka \"\(noteContent)\" utworzona")
)
}
}
// 2. App Shortcut Provider — rejestracja poleceń
struct NotesShortcuts: AppShortcutsProvider {
@AppShortcutsBuilder
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: AddNoteIntent(),
phrases: [
"Dodaj notatkę w \(.applicationName)",
"Utwórz notatkę z \(.\$noteContent) w \(.applicationName)",
"Zapisz \(.\$noteContent) w \(.applicationName)",
]
)
}
}
// 3. SiriKit Intent dla wiadomości (klasyczne podejście)
class MessageIntentHandler: NSObject, INSendMessageIntentHandling {
func resolveRecipients(
for intent: INSendMessageIntent,
completion: @escaping ([INPersonResolutionResult]) -> Void
) {
guard let recipients = intent.recipients else {
completion([.needsRequired()])
return
}
// Rozpoznajemy kontakty przez Address Book aplikacji
let results = recipients.map { INPersonResolutionResult.success(with: $0) }
completion(results)
}
func handle(
intent: INSendMessageIntent,
completion: @escaping (INSendMessageIntentResponse) -> Void
) {
// Wysyłamy wiadomość przez API aplikacji
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil
)
completion(response)
}
}
Kluczowe elementy: AppIntent — protokół dla niestandardowego polecenia głosowego; @Parameter — makro określające parametry polecenia; perform() — metoda wykonująca działanie i zwracająca wynik z dialogiem dla Siri; AppShortcutsProvider — rejestruje polecenia aplikacji w Siri i Shortcuts; INSendMessageIntentHandling — protokół SiriKit do obsługi domeny wiadomości. Frazy wyzwalające są określane przez .applicationName i \.$parameter dla różnorodności.
Zalecenia dotyczące tworzenia Siri Intent: definiuj zrozumiałe frazy wyzwalające z wariantami wymowy; zwracaj informacyjny dialog po wykonaniu (sukces/błąd); obsługuj przypadki niekompletnych parametrów przez metody resolve z prośbą o doprecyzowanie; zapisuj INInteraction po wykonaniu do uczenia Siri; testuj na rzeczywistym urządzeniu (symulator nie obsługuje Siri). Dla App Intents używaj @Intent z inAppSearchKeywords dla lepszego rozpoznawania.
Ograniczenia: SiriKit Intents są ograniczone do 10 domen. Intents Extension wykonuje się z limitem 5–10 sekund — po przekroczeniu Siri zgłasza błąd. Siri Intent nie ma UI — cały interfejs jest generowany przez Siri. App Intents są dostępne tylko na iOS 16+ (pokrycie ~85% urządzeń na 2026). Do obsługi iOS 13–15 należy używać SiriKit. Prywatność: Siri nie przekazuje aplikacji nagrania audio — tylko rozpoznany tekst parametrów. Dla poufnych działań (płatności, wiadomości) wymagane jest potwierdzenie od użytkownika.
| Parametr | SiriKit | App Intents |
|---|---|---|
| Minimalne iOS | iOS 10 | iOS 16 |
| Domeny | 10 predefiniowanych | Dowolne |
| Język | Objective-C / Swift | Swift (makra) |
| Target | Intents Extension | Główna aplikacja |
| UI | Siri UI (generacja) | Siri UI (generacja) |
| Potwierdzenie | Dla płatności/wiadomości | Opcjonalnie |
| Shortcuts | Ręcznie | Automatycznie |
| Integracja Widget | Nie | WidgetIntent (iOS 17+) |
Wydajność i debugowanie: Intents Extension uruchamia się w oddzielnym procesie z ograniczeniem pamięci 30–50 MB. Do debugowania użyj schematu «Intents Extension» w Xcode z dołączeniem do procesu Siri. Logi są wypisywane w konsoli urządzenia. App Intents debuguje się przez aplikację Shortcuts na urządzeniu. INInteraction jest zapisywany lokalnie i używany przez Siri do sugestii — usuwaj nieaktualne interakcje przez INInteraction delete.
Często zadawane pytania
Siri Intent to polecenie głosowe, które uruchamia określone działanie w aplikacji bez jej otwierania. Użytkownik mówi «Siri, wyślij wiadomość w WhatsApp» a Siri wykonuje działanie przez IntentHandler aplikacji WhatsApp.
SiriKit (iOS 10+) — stary framework z predefiniowanymi domenami (wiadomości, połączenia, płatności). App Intents (iOS 16+) — nowy framework umożliwiający tworzenie niestandardowych intentów dla dowolnych działań bez ograniczenia domenami.
SiriKit obsługuje 10 domen: wiadomości (INSendMessageIntent), połączenia (INStartCallIntent), płatności (INSendPaymentIntent), notatki, przypomnienia, zdjęcia, treningi, rezerwacja podróży, funkcje samochodowe i wyszukiwanie.
Siri rozpoznaje mowę i dopasowuje ją do określonego Intent na podstawie fraz zdefiniowanych w .intentdefinition. IntentHandler wykonuje działanie i zwraca wynik. Cały proces trwa 0,5–2 sekund.
Tak, po rozpoznaniu intentu, ale przed jego wykonaniem, Siri pokazuje użytkownikowi potwierdzenie. Użytkownik może anulować wykonanie głosem («Anuluj») lub dotknięciem. Dla płatności i wiadomości potwierdzenie jest obowiązkowe.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również