Intents Extension is een iOS-extensie waarmee apps van derden Siri-spraakopdrachten kunnen verwerken en via SiriKit met systeemdiensten kunnen communiceren. De app definieert eigen intents in Intents.intentdefinition, implementeert handlers op basis van INIntentHandler en registreert ze voor herkenning van spraakzinnen. Volgens Apple Developer Documentation (2025) ondersteunt SiriKit meer dan 20 intentdomeinen — van berichten en betalingen tot trainingen en reserveringen, en met iOS 14 is ondersteuning voor aangepaste intents via IntentsExtension toegevoegd.
Belangrijkste punten
Intents Extension is een app-extensie waarmee Siri, Shortcuts en andere systeemdiensten de functionaliteit van de app kunnen aanroepen via het gestandaardiseerde INIntentHandler-protocol. Wanneer de gebruiker zegt „Hé Siri, stuur een bericht in Messenger X”, activeert Siri de bijbehorende extensie, geeft de verzoekparameters door en ontvangt het resultaat om uit te spreken.
In tegenstelling tot andere extensietypen werkt Intents Extension op de achtergrond zonder zichtbare interface — Siri toont zelf het antwoord met spraak of een tekstkaart. De extensie kan optioneel een aangepaste interface bieden via INUIHostedViewProviding, die binnen Siri wordt weergegeven vóór het uitvoeren van de opdracht ter bevestiging.
De extensie heeft geen toegang tot het apparaatscherm en kan niet zelfstandig acties initiëren — alleen als reactie op een verzoek van Siri of Shortcuts. Dit garandeert de veiligheid: de gebruiker heeft altijd controle over welke acties de app uitvoert via spraakopdrachten.
SiriKit is het Apple-framework voor integratie met Siri, geïntroduceerd in iOS 10. Het definieert domeinen — categorieën van acties die Siri kan verwerken: berichten, telefoongesprekken, betalingen, lijsten, herinneringen, foto's, trainingen, reserveringen en andere. Elk domein heeft een vaste set intents en antwoorden.
INSendMessageIntent — berichten verzenden. INStartWorkoutIntent — training starten. INSearchForPhotosIntent — foto's zoeken. INRequestRideIntent — taxi bestellen. Elk domein definieert verplichte en optionele parameters die Siri uit het spraakverzoek haalt. Volgens Apple is voor standaarddomeinen geen intentdefinition-bestand nodig — het implementeren van de bijbehorende handler is voldoende.
Voor apps die niet in de standaarddomeinen vallen, is sinds iOS 14 de mogelijkheid van aangepaste intents ontstaan. De app definieert eigen commandotypen en hun parameters via Intents.intentdefinition, en Siri leert de bijbehorende zinnen te herkennen op basis van door de ontwikkelaar verstrekte voorbeelden.
Intents Extension wordt geregistreerd via de sleutel IntentsSupported in Info.plist, waar alle intentklassen worden vermeld die de extensie verwerkt. Siri gebruikt deze lijst om de juiste extensie te selecteren bij het herkennen van een spraakopdracht. Als meerdere extensies dezelfde intent ondersteunen, biedt Siri de gebruiker een keuze.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler — het protocol dat methoden definieert voor het verwerken van elke fase van de intent: het oplossen van parameters, bevestigen en uitvoeren. De extensie implementeert deze methoden voor elk type intent dat zij ondersteunt.
resolve — controle en verduidelijking van intentparameters. Siri roept deze methode aan voor elke parameter. Als een parameter niet is opgegeven of onjuist is, retourneert de extensie een verzoek om verduidelijking en stelt Siri de gebruiker een aanvullende vraag. confirm — bevestiging van het voornemen. De extensie controleert of zij de intent in de huidige context kan uitvoeren. handle — de daadwerkelijke uitvoering van de operatie en terugkeer van het resultaat.
De verdeling in drie fasen is cruciaal voor de spraak UX: als een parameter niet wordt herkend, voert Siri de actie niet uit, maar vraagt opnieuw. Als de gebruiker bijvoorbeeld zegt „Stuur een bericht naar Alexei”, maar er zijn drie Alexei in de contacten — retourneert de extensie resolve met een verzoek om verduidelijking en vraagt Siri „Naar welke Alexei?”.
INIntentResponse — het object dat de extensie retourneert in completion na uitvoering van de intent. Response bevat de resultaatcode (success, failure, requiresAuthentication, inProgress) en optionele gegevens om door Siri te worden uitgesproken. De code bepaalt hoe Siri reageert: success — spraakbevestiging, failure — foutmelding, inProgress — indicatie van een langdurige operatie.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Sinds iOS 14 hebben ontwikkelaars de mogelijkheid gekregen om eigen intents te definiëren buiten de standaard SiriKit-domeinen. Aangepaste intents worden beschreven in het bestand Intents.intentdefinition — dit is een visuele editor in Xcode waarin nieuwe commandotypen met parameters en antwoorden worden gemaakt.
Elke aangepaste intent bestaat uit INIntent (definitie van het verzoek) en INIntentResponse (definitie van het antwoord). INIntent bevat parameters met een gegevenstype — String, Integer, CurrencyAmount, gevonden objecten en andere. INIntentResponse bevat eigenschappen voor het retourneren van het resultaat en een array van antwoordcodes. Xcode genereert automatisch Swift-klassen op basis van deze definitie.
Apple raadt aan dat een aangepaste intent niet meer dan 5 parameters bevat — een overmatig aantal verslechtert de spraakherkenning en bemoeilijkt de gebruikerservaring. Voor elke parameter is het wenselijk om voorbeeldzinnen te verstrekken in Assistant Dialog, zodat Siri deze correct leert herkennen.
In Intents.intentdefinition kunnen voor elke intent voorbeeldzinnen worden opgegeven — zinnen die de gebruiker tegen Siri zal zeggen om de intent te activeren. Voorbeelden: „Bestel koffie in MijnApp”, „Vraag MijnApp om een pizzarecept te vinden”. Siri gebruikt deze zinnen om herkenning te leren en biedt ze de gebruiker aan bij het instellen van Shortcuts.
// Intents.intentdefinition (visuele editor)
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 — het protocol dat Intents Extension in staat stelt een aangepaste interface weer te geven binnen Siri vóór het uitvoeren van de opdracht. Bij het bestellen van een taxi kan de extensie bijvoorbeeld een kaart met de route en kosten tonen, en de gebruiker bevestigt de actie door aanraking.
Het protocol definieert de methode configure(with:for:completion:), waarbij de extensie de intent ontvangt en een UIViewController retourneert die in Siri wordt ingebed. De grootte van de controller is beperkt — maximale hoogte 200 punten. Het gebruik van compacte kaarten met kerninformatie wordt aanbevolen: bedrag, tijd, adres.
De aangepaste interface is optioneel — als de extensie INUIHostedViewProviding niet implementeert, toont Siri een standaardkaart met het intenttype en de app. Voor de meeste intents is de standaard UI voldoende en Apple raadt aan alleen een aangepaste interface toe te voegen wanneer deze echt het begrip verbetert — bijvoorbeeld voor het tonen van een route of het bevestigen van een betaling.
Voor intents die verband houden met financiën of persoonlijke gegevens is authenticatie vereist. INIntentResponse ondersteunt de code requiresAuthentication, die Siri dwingt om Face ID of Touch ID aan te vragen vóór uitvoering. Na authenticatie ontvangt de extensie bevestiging via een aparte handle-aanroep, waarin de authenticatiestatus wordt gecontroleerd.
Apple benadrukt in het bijzonder: Intents Extension mag geen eigen wachtwoord of biometrie vragen — er wordt systeemauthenticatie gebruikt. Het opslaan van toegangstokens in Keychain met gedeelde toegang tussen de app en de extensie is de standaardpraktijk voor langdurige sessies.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Veelgestelde vragen
Ja, de extensie kan intents verwerken uit de Shortcuts-app zonder spraakinvoer. De gebruiker maakt een snelkoppeling uit de voorgestelde acties en de extensie voert deze uit zonder tussenkomst van Siri.
Aangepaste intents zijn beschikbaar vanaf iOS 14 en nieuwer. Voor iOS 10–13 zijn alleen de standaard SiriKit-domeinen beschikbaar. Aangepaste intents vereisen Intents.intentdefinition en het genereren van Swift-klassen.
Siri wacht ongeveer 15 seconden op een antwoord van de extensie. Bij overschrijding van de limiet meldt Siri aan de gebruiker dat de actie niet kon worden uitgevoerd. Gebruik voor langdurige bewerkingen de antwoordcode inProgress.
Gebruik Keychain met gedeelde toegang via een access group tussen de hoofdapp en de extensie. App Group shared UserDefaults is een alternatief, maar staat achter bij Keychain wat betreft beveiliging.
Intents Extension verwerkt de logica — resolve, confirm, handle. Intents UI Extension biedt een aangepaste interface voor weergave binnen Siri via INUIHostedViewProviding. Beide kunnen samenwerken.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook