Intents Extension est une extension iOS qui permet aux applications tierces de traiter les commandes vocales de Siri et d'interagir avec les services système via SiriKit. L'application définit ses propres intents dans Intents.intentdefinition, implémente des handlers basés sur INIntentHandler et les enregistre pour la reconnaissance de phrases vocales. Selon la documentation Apple Developer (2025), SiriKit prend en charge plus de 20 domaines d'intents — des messages et paiements aux entraînements et réservations — et depuis iOS 14, la prise en charge des intents personnalisés a été ajoutée via IntentsExtension.
Points clés
Intents Extension est une extension d'application qui permet à Siri, Shortcuts et d'autres services système d'invoquer les fonctionnalités de l'application via le protocole standardisé INIntentHandler. Lorsqu'un utilisateur dit « Dis Siri, envoie un message dans Messenger X », Siri active l'extension correspondante, transmet les paramètres de la requête et reçoit le résultat à vocaliser.
Contrairement à d'autres types d'extensions, Intents Extension fonctionne en arrière-plan sans interface visible — Siri affiche la réponse par voix ou par carte texte. L'extension peut éventuellement fournir une interface personnalisée via INUIHostedViewProviding, qui s'affiche dans Siri avant d'exécuter une commande pour confirmation.
L'extension n'a pas accès à l'écran de l'appareil et ne peut pas initier d'actions par elle-même — seulement en réponse à une demande de Siri ou de Shortcuts. Cela garantit la sécurité : l'utilisateur contrôle toujours les actions que l'application effectue via les commandes vocales.
SiriKit est le framework d'Apple pour l'intégration de Siri, introduit dans iOS 10. Il définit des domaines — des catégories d'actions que Siri peut gérer : messages, appels téléphoniques, paiements, listes, rappels, photos, entraînements, réservations et autres. Chaque domaine a un ensemble fixe d'intents et de réponses.
INSendMessageIntent — envoi de messages. INStartWorkoutIntent — début d'entraînement. INSearchForPhotosIntent — recherche de photos. INRequestRideIntent — réservation de course. Chaque domaine définit des paramètres obligatoires et facultatifs que Siri extrait de la requête vocale. Selon Apple, les domaines standard ne nécessitent pas de fichier intentdefinition — il suffit d'implémenter le handler correspondant.
Pour les applications qui ne correspondent pas aux domaines standard, iOS 14 a introduit la possibilité d'utiliser des intents personnalisés. L'application définit ses propres types de commandes et leurs paramètres via Intents.intentdefinition, et Siri apprend à reconnaître les phrases correspondantes sur la base d'exemples fournis par le développeur.
Intents Extension est enregistré via la clé IntentsSupported dans Info.plist, qui répertorie toutes les classes d'intents que l'extension traite. Siri utilise cette liste pour sélectionner l'extension appropriée lors de la reconnaissance d'une commande vocale. Si plusieurs extensions prennent en charge le même intent, Siri invite l'utilisateur à choisir.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler est un protocole qui définit des méthodes pour gérer chaque étape du traitement des intents : résolution des paramètres, confirmation et exécution. L'extension implémente ces méthodes pour chaque type d'intent qu'elle prend en charge.
resolve — validation et clarification des paramètres de l'intent. Siri appelle cette méthode pour chaque paramètre. Si un paramètre est manquant ou incorrect, l'extension renvoie une demande de clarification, et Siri pose une question supplémentaire à l'utilisateur. confirm — confirmation de l'intention. L'extension vérifie si elle peut exécuter l'intent dans le contexte actuel. handle — exécution réelle de l'opération et retour du résultat.
La séparation en trois étapes est cruciale pour l'expérience utilisateur vocale : si un paramètre n'est pas reconnu, Siri n'exécute pas l'action mais demande une clarification. Par exemple, si l'utilisateur a dit « Envoie un message à Alex » mais qu'il y a trois Alex dans les contacts — l'extension renvoie un resolve avec une demande de clarification, et Siri demande « Quel Alex ? »
INIntentResponse est un objet que l'extension retourne dans le handler de completion après avoir exécuté l'intent. La réponse contient un code de résultat (success, failure, requiresAuthentication, inProgress) et des données facultatives à vocaliser par Siri. Le code détermine comment Siri répond : success — confirmation vocale, failure — message d'erreur, inProgress — indication d'une opération longue.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Avec iOS 14, les développeurs ont obtenu la possibilité de définir des intents personnalisés en dehors des domaines standard de SiriKit. Les intents personnalisés sont décrits dans le fichier Intents.intentdefinition — un éditeur visuel dans Xcode où de nouveaux types de commandes avec paramètres et réponses sont créés.
Chaque intent personnalisé se compose de INIntent (définition de la requête) et INIntentResponse (définition de la réponse). INIntent contient des paramètres avec des types de données — String, Integer, CurrencyAmount, objets trouvés et autres. INIntentResponse contient des propriétés pour retourner les résultats et un tableau de codes de réponse. Xcode génère automatiquement des classes Swift basées sur cette définition.
Apple recommande de ne pas inclure plus de 5 paramètres dans un intent personnalisé — des paramètres excessifs dégradent la reconnaissance vocale et compliquent l'expérience utilisateur. Pour chaque paramètre, il est conseillé de fournir des phrases d'exemple dans la boîte de dialogue Assistant afin que Siri apprenne à les reconnaître correctement.
Dans Intents.intentdefinition, pour chaque intent vous pouvez spécifier des phrases d'exemple — les phrases que l'utilisateur dira à Siri pour activer l'intent. Exemples : « Commande un café dans MonApp », « Demande à MonApp de trouver une recette de pizza ». Siri utilise ces phrases pour l'apprentissage de la reconnaissance et les suggère à l'utilisateur lors de la configuration de Shortcuts.
// Intents.intentdefinition (éditeur visuel)
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 est un protocole qui permet à Intents Extension d'afficher une interface personnalisée dans Siri avant d'exécuter une commande. Par exemple, lors de la réservation d'une course, l'extension peut afficher une carte avec l'itinéraire et le coût, et l'utilisateur confirme l'action en tapant.
Le protocole définit la méthode configure(with:for:completion:), où l'extension reçoit l'intent et retourne un UIViewController à intégrer dans Siri. La taille du contrôleur est limitée — hauteur maximale de 200 points. Il est recommandé d'utiliser des cartes compactes avec les informations clés : montant, heure, adresse.
L'interface personnalisée est facultative — si l'extension n'implémente pas INUIHostedViewProviding, Siri affiche une carte standard avec le type d'intent et le nom de l'application. Pour la plupart des intents, l'interface standard est suffisante, et Apple recommande d'ajouter une interface personnalisée uniquement lorsqu'elle améliore réellement la compréhension — par exemple, pour afficher un itinéraire ou confirmer un paiement.
Pour les intents liés aux finances ou aux données personnelles, une authentification est requise. INIntentResponse prend en charge le code requiresAuthentication, qui force Siri à demander Face ID ou Touch ID avant l'exécution. Après l'authentification, l'extension reçoit la confirmation via un appel handle séparé, où le statut d'authentification est vérifié.
Apple souligne spécifiquement : Intents Extension ne doit pas demander son propre mot de passe ou des données biométriques — l'authentification système est utilisée. Stocker les jetons d'accès dans Keychain avec un accès partagé entre l'application et l'extension est une pratique standard pour les sessions de longue durée.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Foire aux questions
Oui, l'extension peut traiter les intents de l'application Shortcuts sans saisie vocale. L'utilisateur crée un raccourci à partir des actions suggérées, et l'extension l'exécute sans la participation de Siri.
Les intents personnalisés sont disponibles à partir d'iOS 14. Pour iOS 10–13, seuls les domaines standard de SiriKit sont disponibles. Les intents personnalisés nécessitent Intents.intentdefinition et la génération de classes Swift.
Siri attend la réponse de l'extension pendant environ 15 secondes. Si la limite est dépassée, Siri informe l'utilisateur que l'action n'a pas pu être effectuée. Pour les opérations longues, utilisez le code de réponse inProgress.
Utilisez Keychain avec un accès partagé via un groupe d'accès entre l'application principale et l'extension. App Group shared UserDefaults est une alternative mais inférieure à Keychain en termes de sécurité.
Intents Extension gère la logique — resolve, confirm, handle. Intents UI Extension fournit une interface personnalisée à afficher dans Siri via INUIHostedViewProviding. Les deux peuvent fonctionner ensemble.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi