Siri Intent: concetti chiave, SiriKit e integrazione con Siri

Autore: IT Sectr Pubblicato: 2026-02-15 Tempo di lettura: 9 min

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 comando vocale che esegue un’azione in un’app tramite Siri senza aprirla
  • SiriKit (iOS 10+) — un framework con domini predefiniti (messaggi, chiamate, pagamenti)
  • App Intents (iOS 16+) — un nuovo framework per creare comandi vocali personalizzati arbitrari
  • IntentHandler — un gestore che esegue un’azione dell’app in risposta a un comando vocale di Siri
  • INInteraction — un oggetto che rappresenta il risultato dell’esecuzione di un intent, salvato in Siri per l’apprendimento

Cos’è Siri Intent

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: architettura e domini

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:

  • Messaggi — INSendMessageIntent, INRicercaForMessaggiIntent, INSetMessageAttributeIntent
  • Chiamate — INStartCallIntent, INRicercaForCallHistoryIntent
  • Pagamenti — INSendPaymentIntent, INRequestPaymentIntent
  • Note — INCreateNoteIntent, INRicercaForNoteIntent, INAddTasksIntent
  • Promemoria — INCreateTaskListIntent, INAddTasksIntent, INSetTaskAttributeIntent
  • Allenamenti — INStartWorkoutIntent, INPauseWorkoutIntent, INEndWorkoutIntent
  • Foto — INRicercaForFotoIntent, INStartPhotoPlaybackIntent
  • CarPlay — INSetCarLockStatusIntent, INGetCarLockStatusIntent
  • Ricerca — INRicercaForMessaggiIntent, INRicercaForNotebookItemsIntent

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: il nuovo framework

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:

  • AppIntent — un protocollo per descrivere un’azione: title, description, parameters, perform()
  • IntentParameter — parametri del comando con tipi (String, Int, URL, Entity, Measurement)
  • IntentDialog — dialoghi per Siri: richiesta di conferma, risposta di successo o errore
  • WidgetIntent — un sottoinsieme di App Intents per gestire i tap sui widget (iOS 17+)
  • Shortcuts — App Intents si integra automaticamente con l’app Shortcuts

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.

Esempio di codice: Swift Intents

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+.

swift
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 e limitazioni

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.

ParameterSiriKitApp Intents
Minimum iOSiOS 10iOS 16
Domains10 predefinedArbitrary
LanguageObjective-C / SwiftSwift (macros)
TargetIntents ExtensionMain app
UISiri UI (generation)Siri UI (generation)
ConfirmationFor payments/messagesOptional
ShortcutsManualAutomatic
Widget integrationNoWidgetIntent (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

Cos’è Siri Intent in simple words?

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.

In cosa si differenzia SiriKit da App Intents?

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.

Quali domini supporta SiriKit?

SiriKit supporta 10 domini: messages (INSendMessageIntent), calls (INStartCallIntent), payments (INSendPaymentIntent), notes, reminders, photos, workouts, trip booking, car functions, and search.

Come elabora Siri Intent l’input vocale?

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.

Può essere annullata l’esecuzione di Siri Intent?

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

  • Siri Intent — un meccanismo per integrare un’app con Siri tramite comandi vocali senza aprire lo schermo
  • SiriKit (iOS 10+) — un framework con 10 domini fissi (messaggi, chiamate, pagamenti) tramite Intents Extension
  • App Intents (iOS 16+) — un nuovo framework per comandi personalizzati arbitrari con macro @Intent e @Parameter
  • IntentHandler — esegue l’azione dell’app, riceve parametri da Siri e restituisce un INInteraction con il risultato
  • Trigger phrases are set via .intentdefinition (SiriKit) or @AppShortcutsBuilder (App Intents)
  • Limitations — limite di esecuzione di 5–10 secondi, memoria 30–50 MB, conferma per azioni sensibili
  • App Intents — approccio preferito per iOS 16+, SiriKit — per supportare iOS 13–15

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.

Discuti il progetto

Leggi anche