Siri Intent è un meccanismo per integrare un’app iOS con l’assistente vocale Siri, consentendo agli utenti di eseguire azioni vocali senza aprire l’app. Lo sviluppo avviene in Swift utilizzando i framework Intents (Intents.framework) e SiriKit. A partire da iOS 16 è apparso App Intents — un nuovo framework più flessibile per creare comandi vocali personalizzati. Siri Intent supporta 10 domini (messaggi, chiamate, pagamenti, note, allenamenti e altri) e consente all’app di elaborare richieste vocali tramite IntentHandler. Esploriamo concetti chiave, architettura ed esempi di codice.
Punti chiave
Siri Intent è un meccanismo che consente a un’app iOS di elaborare comandi vocali pronunciati dall’utente tramite Siri. Quando l’utente dice “Siri, send a message to Ivan on Telegram,” Siri riconosce l’intent (INSendMessageIntent), identifica l’app che può gestirlo (Telegram), passa i parametri (contact “Ivan,” message text), e avvia l’IntentHandler dell’app. L’intero processo richiede 0.5–2 seconds e non richiede l’apertura dell’app.
L’architettura di Siri Intent include tre componenti. Il primo è il file .intentdefinition, che descrive la struttura dell’intent: parametri (String, Integer, INPerson), frasi trigger e risposte. Il secondo è IntentHandler, che implementa il protocollo di gestione: riceve parametri, esegue l’azione (es. invia un messaggio tramite l’API dell’app) e restituisce un INInteraction con un codice di risultato. Il terzo è Intents Extension, un target separato in Xcode che esegue nel proprio processo. Siri avvia Intents Extension su una richiesta vocale, le passa i dati e riceve il risultato. L’Extension non ha UI — viene eseguita in background e deve completarsi entro 5–10 secondi.
Casi d’uso di Siri Intent: sending messages (INSendMessageIntent), making calls (INStartCallIntent), sending payments (INSendPaymentIntent), creating notes (INCreateNoteIntent), workouts (INStartWorkoutIntent), photos (INRicercaForFotoIntent), booking trips (INBookRestaurantReservationIntent), car functions (INSetCarLockStatusIntent). Ogni dominio ha uno schema di parametri rigoroso e limitazioni definite da Apple per la sicurezza.
SiriKit è un framework introdotto da Apple in iOS 10 (2016). Fornisce domini pronti (Intents) per azioni tipiche: messages, calls, payments, notes, reminders, photos, workouts, booking, car functions, search. Per ogni dominio, Apple ha definito un insieme di classi Intent (INSendMessageIntent, INStartCallIntent) che l’app implementa tramite IntentHandler. SiriKit genera automaticamente una conferma UI prima dell’esecuzione (per pagamenti e messaggi, la conferma è obbligatoria).
Domini di SiriKit:
Limitazioni di SiriKit: gli sviluppatori non possono creare domini personalizzati — possono solo usare quelli predefiniti. Questa limitazione è stata risolta in iOS 16 con l’introduzione di App Intents, che consente di creare comandi vocali arbitrari per qualsiasi azione dell’app.
App Intents è un framework Apple introdotto in iOS 16 (2022) e significativamente ampliato in iOS 17–18. A differenza di SiriKit con i suoi domini fissi, App Intents consente agli sviluppatori di definire i propri comandi vocali per qualsiasi azione dell’app: “Siri, add milk to the shopping list in AnyList,” “Siri, schedule a meeting in Fantastical,” “Siri, turn on the living room light in Home.” Gli intent personalizzati sono definiti tramite il protocollo AppIntent con parametri, frasi e uno schema di conferma.
Componenti di App Intents:
App Intents vs SiriKit: la differenza principale è la flessibilità. SiriKit è limitato a 10 domini, App Intents consente di creare qualsiasi comando. SiriKit richiede un target separato Intents Extension, App Intents funziona all’interno dell’app principale. SiriKit usa Intents.framework (Objective-C/Swift), App Intents usa una nuova sintassi dichiarativa Swift con macro @Intent e @Parameter. Secondo Apple, App Intents è utilizzato nel 70% dei nuovi progetti con supporto Siri a partire dal 2025.
Un esempio di creazione di un App Intent personalizzato per aggiungere una nota all’app. Dimostra l’approccio moderno utilizzando il framework App Intents in iOS 16+.
import AppIntents
// 1. Intent personalizzato per aggiungere una nota
struct AddNoteIntent: AppIntent {
// Nome del comando (visibile in Shortcuts)
static var title: LocalizedStringResource = "Aggiungi nota"
// Descrizione del comando
static var description: LocalizedStringResource = "Crea una nuova nota nell’app"
// Parametri del comando
@Parameter(title: "Testo della nota")
var noteContent: String
@Parameter(title: "Categoria", default: "Generale")
var category: String
// Esecuzione dell’azione
func perform() async throws -> some IntentResult {
// Creare una nota tramite archiviazione locale
let note = Note(content: noteContent, category: category)
try await NoteStore.shared.save(note)
// Restituire il risultato con un dialogo per Siri
return .result(
dialog: .response("Nota "(noteContent)" creata")
)
}
}
// 2. App Shortcut Provider — registrazione comandi
struct NotesShortcuts: AppShortcutsProvider {
@AppShortcutsBuilder
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: AddNoteIntent(),
phrases: [
"Aggiungi nota a (.applicationName)",
"Crea una nota con (.$noteContent) in (.applicationName)",
"Scrivi (.$noteContent) in (.applicationName)",
]
)
}
}
// 3. Intent SiriKit per messaggi (approccio classico)
class MessageIntentHandler: NSObject, INSendMessageIntentHandling {
func resolveRecipients(
for intent: INSendMessageIntent,
completion: @escaping ([INPersonResolutionResult]) -> Void
) {
guard let recipients = intent.recipients else {
completion([.needsRequired()])
return
}
// Risolvere i contatti tramite la rubrica dell’app
let results = recipients.map { INPersonResolutionResult.success(with: $0) }
completion(results)
}
func handle(
intent: INSendMessageIntent,
completion: @escaping (INSendMessageIntentResponse) -> Void
) {
// Inviare un messaggio tramite l’API dell’app
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil
)
completion(response)
}
}
Punti chiave: AppIntent — protocollo per comandi vocali personalizzati; @Parameter — macro che definisce i parametri del comando; perform() — metodo che esegue l’azione e restituisce un risultato con un dialogo per Siri; AppShortcutsProvider — registra i comandi dell’app in Siri e Shortcuts; INSendMessageIntentHandling — protocollo SiriKit per gestire il dominio dei messaggi. Le frasi trigger vengono impostate tramite .applicationName e \.$parameter per variabilità.
Raccomandazioni per creare Siri Intents: definisci frasi trigger chiare con varianti di pronuncia; restituisci un dialogo informativo dopo l’esecuzione (successo/errore); gestisci casi di parametri incompleti tramite metodi resolve con richieste di chiarimento; salva INInteraction dopo l’esecuzione per l’apprendimento di Siri; testa su un dispositivo reale (il simulatore non supporta Siri). Per App Intents, usa @Intent con inAppRicercaKeywords per migliorare il riconoscimento.
Limitazioni: Gli Intent di SiriKit sono limitati a 10 domini. Intents Extension viene eseguita con un limite di 5–10 secondi — se superato, Siri segnala un errore. Siri Intent non ha UI — l’intera interfaccia è generata da Siri. App Intents è disponibile solo su iOS 16+ (~85% di copertura dispositivi al 2026). Per supportare iOS 13–15, deve essere utilizzato SiriKit. Privacy: Siri non trasmette registrazioni audio all’app — solo il testo del parametro riconosciuto. Per azioni sensibili (pagamenti, messaggi), la conferma dell’utente è obbligatoria.
| Parameter | SiriKit | App Intents |
|---|---|---|
| Minimum iOS | iOS 10 | iOS 16 |
| Domains | 10 predefined | Arbitrary |
| Language | Objective-C / Swift | Swift (macros) |
| Target | Intents Extension | Main app |
| UI | Siri UI (generation) | Siri UI (generation) |
| Confirmation | For payments/messages | Optional |
| Shortcuts | Manual | Automatic |
| Widget integration | No | WidgetIntent (iOS 17+) |
Prestazioni e debug: Intents Extension viene eseguita in un processo separato con un limite di memoria di 30–50 MB. Per il debug, usa lo schema «Intents Extension» in Xcode collegato al processo di Siri. I log vengono emessi nella console del dispositivo. App Intents viene eseguito il debug tramite l’app Shortcuts sul dispositivo. INInteraction viene salvato localmente e utilizzato da Siri per suggerimenti — elimina le interazioni obsolete tramite INInteraction delete.
Domande frequenti
Siri Intent è un comando vocale che attiva un’azione specifica in un’app senza aprirla. The user says «Siri, invia un messaggio su WhatsApp» and Siri performs the action through the IntentHandler of the WhatsApp app.
SiriKit (iOS 10+) è un framework più vecchio con domini predefiniti (messaggi, chiamate, pagamenti). App Intents (iOS 16+) is a new framework that allows creating custom intents for any actions without domain limitations.
SiriKit supporta 10 domini: messages (INSendMessageIntent), calls (INStartCallIntent), payments (INSendPaymentIntent), notes, reminders, photos, workouts, trip booking, car functions, and search.
Siri riconosce il parlato e lo associa a un Intent specifico basato sulle frasi definite in .intentdefinition. IntentHandler esegue l’azione e restituisce il risultato. L’intero processo richiede 0.5–2 seconds.
Sì, dopo aver riconosciuto l’intent ma prima di eseguirlo, Siri mostra una conferma all’utente. L’utente può annullare l’esecuzione con la voce («Annulla») o toccando. Per pagamenti e messaggi, la conferma è obbligatoria.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche