Intents Extension adalah ekstensi iOS yang memungkinkan aplikasi pihak ketiga memproses perintah suara Siri dan berinteraksi dengan layanan sistem melalui SiriKit. Aplikasi menentukan intent-nya sendiri di Intents.intentdefinition, mengimplementasikan handler berdasarkan INIntentHandler, dan mendaftarkannya untuk pengenalan frase suara. Menurut Apple Developer Documentation (2025), SiriKit mendukung lebih dari 20 domain intent — dari pesan dan pembayaran hingga latihan dan reservasi, dan sejak iOS 14 ditambahkan dukungan untuk intent kustom melalui IntentsExtension.
Poin Penting
Intents Extension adalah ekstensi aplikasi yang memungkinkan Siri, Shortcuts, dan layanan sistem lainnya memanggil fungsionalitas aplikasi melalui protokol standar INIntentHandler. Ketika pengguna mengatakan “Hei Siri, kirim pesan di Messenger X”, Siri mengaktifkan ekstensi yang sesuai, meneruskan parameter permintaan, dan menerima hasil untuk diucapkan.
Tidak seperti jenis ekstensi lainnya, Intents Extension bekerja di latar belakang tanpa antarmuka yang terlihat — Siri sendiri menampilkan respons melalui suara atau kartu teks. Ekstensi dapat secara opsional menyediakan antarmuka kustom melalui INUIHostedViewProviding, yang ditampilkan di dalam Siri sebelum menjalankan perintah untuk konfirmasi.
Ekstensi tidak memiliki akses ke layar perangkat dan tidak dapat memulai tindakan secara mandiri — hanya sebagai respons terhadap permintaan dari Siri atau Shortcuts. Ini memastikan keamanan: pengguna selalu mengontrol tindakan apa yang dilakukan aplikasi melalui perintah suara.
SiriKit adalah framework Apple untuk integrasi dengan Siri, diperkenalkan di iOS 10. Framework ini mendefinisikan domain — kategori tindakan yang dapat diproses Siri: pesan, panggilan telepon, pembayaran, daftar, pengingat, foto, latihan, reservasi, dan lainnya. Setiap domain memiliki kumpulan intent dan respons tetap.
INSendMessageIntent — mengirim pesan. INStartWorkoutIntent — memulai latihan. INSearchForPhotosIntent — mencari foto. INRequestRideIntent — memesan taksi. Setiap domain mendefinisikan parameter wajib dan opsional yang diekstrak Siri dari permintaan suara. Menurut Apple, untuk domain standar tidak diperlukan file intentdefinition — cukup mengimplementasikan handler yang sesuai.
Untuk aplikasi yang tidak masuk dalam domain standar, sejak iOS 14 muncul kemungkinan intent kustom. Aplikasi mendefinisikan tipe perintah dan parameternya sendiri melalui Intents.intentdefinition, dan Siri belajar mengenali frasa yang sesuai berdasarkan contoh yang diberikan oleh pengembang.
Intents Extension didaftarkan melalui kunci IntentsSupported di Info.plist, di mana semua kelas intent yang diproses ekstensi dicantumkan. Siri menggunakan daftar ini untuk memilih ekstensi yang tepat saat mengenali perintah suara. Jika beberapa ekstensi mendukung intent yang sama, Siri menawarkan pilihan kepada pengguna.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler — protokol yang mendefinisikan metode untuk memproses setiap tahap kerja intent: resolusi parameter, konfirmasi, dan eksekusi. Ekstensi mengimplementasikan metode ini untuk setiap jenis intent yang didukungnya.
resolve — pemeriksaan dan klarifikasi parameter intent. Siri memanggil metode ini untuk setiap parameter. Jika parameter tidak ditentukan atau tidak benar, ekstensi mengembalikan permintaan klarifikasi, dan Siri mengajukan pertanyaan tambahan kepada pengguna. confirm — konfirmasi niat. Ekstensi memeriksa apakah dapat menjalankan intent dalam konteks saat ini. handle — eksekusi operasi yang sebenarnya dan pengembalian hasil.
Pembagian menjadi tiga tahap sangat penting untuk UX suara: jika parameter tidak dikenali, Siri tidak menjalankan tindakan, melainkan menanyakan ulang. Misalnya, jika pengguna berkata “Kirim pesan ke Alexei”, tetapi di kontak ada tiga Alexei — ekstensi mengembalikan resolve dengan permintaan klarifikasi, dan Siri bertanya “Alexei yang mana?”.
INIntentResponse — objek yang dikembalikan ekstensi di completion setelah menjalankan intent. Response berisi kode hasil (success, failure, requiresAuthentication, inProgress) dan data opsional untuk diucapkan Siri. Kode menentukan bagaimana Siri bereaksi: success — konfirmasi suara, failure — pesan kesalahan, inProgress — indikasi operasi yang berlangsung lama.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Sejak iOS 14, pengembang mendapat kemampuan untuk mendefinisikan intent sendiri di luar domain standar SiriKit. Intent kustom dijelaskan dalam file Intents.intentdefinition — ini adalah editor visual di dalam Xcode di mana tipe perintah baru dengan parameter dan respons dibuat.
Setiap intent kustom terdiri dari INIntent (definisi permintaan) dan INIntentResponse (definisi respons). INIntent berisi parameter dengan tipe data — String, Integer, CurrencyAmount, objek yang ditemukan, dan lainnya. INIntentResponse berisi properti untuk mengembalikan hasil dan array kode respons. Xcode secara otomatis menghasilkan kelas Swift berdasarkan definisi ini.
Apple merekomendasikan agar intent kustom tidak memiliki lebih dari 5 parameter — jumlah berlebihan menurunkan pengenalan suara dan mempersulit pengalaman pengguna. Untuk setiap parameter, disarankan untuk memberikan contoh frasa di Assistant Dialog agar Siri belajar mengenalinya dengan benar.
Di Intents.intentdefinition untuk setiap intent dapat ditentukan contoh kalimat — frasa yang akan diucapkan pengguna kepada Siri untuk mengaktifkan intent. Contoh: “Pesan kopi di AplikasiSaya”, “Minta AplikasiSaya menemukan resep pizza”. Siri menggunakan frasa ini untuk belajar pengenalan dan menawarkannya kepada pengguna saat mengatur Shortcuts.
// Intents.intentdefinition (editor visual)
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 — protokol yang memungkinkan Intents Extension menampilkan antarmuka kustom di dalam Siri sebelum menjalankan perintah. Misalnya, saat memesan taksi, ekstensi dapat menampilkan peta dengan rute dan biaya, dan pengguna mengonfirmasi tindakan dengan sentuhan.
Protokol mendefinisikan metode configure(with:for:completion:), di mana ekstensi menerima intent dan mengembalikan UIViewController yang akan disematkan di Siri. Ukuran controller terbatas — tinggi maksimum 200 poin. Disarankan menggunakan kartu kompak dengan informasi kunci: jumlah, waktu, alamat.
Antarmuka kustom bersifat opsional — jika ekstensi tidak mengimplementasikan INUIHostedViewProviding, Siri menampilkan kartu standar dengan jenis intent dan aplikasi. Untuk sebagian besar intent, UI standar sudah cukup, dan Apple merekomendasikan menambahkan antarmuka kustom hanya ketika benar-benar meningkatkan pemahaman — misalnya, untuk menampilkan rute atau mengonfirmasi pembayaran.
Untuk intent yang terkait dengan keuangan atau data pribadi, diperlukan autentikasi. INIntentResponse mendukung kode requiresAuthentication, yang memaksa Siri meminta Face ID atau Touch ID sebelum menjalankan. Setelah autentikasi, ekstensi menerima konfirmasi melalui panggilan handle terpisah, di mana status autentikasi diperiksa.
Apple secara khusus menekankan: Intents Extension tidak boleh meminta kata sandi atau biometrik sendiri — autentikasi sistem digunakan. Menyimpan token akses di Keychain dengan akses bersama antara aplikasi dan ekstensi adalah praktik standar untuk sesi jangka panjang.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Pertanyaan yang Sering Diajukan
Ya, ekstensi dapat memproses intent dari aplikasi Shortcuts tanpa input suara. Pengguna membuat pintasan dari tindakan yang disarankan, dan ekstensi menjalankannya tanpa partisipasi Siri.
Intent kustom tersedia mulai iOS 14 dan lebih baru. Untuk iOS 10–13, hanya domain standar SiriKit yang tersedia. Intent kustom memerlukan Intents.intentdefinition dan pembuatan kelas Swift.
Siri menunggu respons dari ekstensi sekitar 15 detik. Jika melebihi batas, Siri memberi tahu pengguna bahwa tindakan gagal dilakukan. Untuk operasi panjang, gunakan kode respons inProgress.
Gunakan Keychain dengan akses bersama melalui access group antara aplikasi utama dan ekstensi. App Group shared UserDefaults adalah alternatif, tetapi kalah dengan Keychain dalam hal keamanan.
Intents Extension memproses logika — resolve, confirm, handle. Intents UI Extension menyediakan antarmuka kustom untuk ditampilkan di dalam Siri melalui INUIHostedViewProviding. Keduanya dapat bekerja bersama.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga