Siri Intent là cơ chế tích hợp ứng dụng iOS với trợ lý giọng nói Siri, cho phép người dùng thực hiện hành động bằng giọng nói mà không cần mở ứng dụng. Việc phát triển được thực hiện bằng Swift sử dụng các framework Intents (Intents.framework) và SiriKit. Bắt đầu từ iOS 16, App Intents xuất hiện — một framework mới linh hoạt hơn để tạo các lệnh thoại tùy chỉnh. Siri Intent hỗ trợ 10 miền (tin nhắn, cuộc gọi, thanh toán, ghi chú, tập luyện và những miền khác) và cho phép ứng dụng xử lý yêu cầu bằng giọng nói thông qua IntentHandler. Hãy cùng khám phá các khái niệm chính, kiến trúc và ví dụ mã.
Các điểm chính
Siri Intent là cơ chế cho phép ứng dụng iOS xử lý các lệnh thoại do người dùng nói thông qua Siri. Khi người dùng nói “Siri, send a message to Ivan on Telegram,” Siri nhận dạng intent (INSendMessageIntent), xác định ứng dụng có thể xử lý nó (Telegram), truyền các tham số (contact “Ivan,” message text), và khởi chạy IntentHandler của ứng dụng. Toàn bộ quá trình mất 0.5–2 seconds và không yêu cầu mở ứng dụng.
Kiến trúc của Siri Intent bao gồm ba thành phần. Đầu tiên là tệp .intentdefinition, mô tả cấu trúc intent: tham số (String, Integer, INPerson), cụm từ kích hoạt và phản hồi. Thứ hai là IntentHandler, triển khai giao thức xử lý: nhận tham số, thực hiện hành động (ví dụ: gửi tin nhắn qua API ứng dụng) và trả về INInteraction với mã kết quả. Thứ ba là Intents Extension, một target riêng trong Xcode chạy trong tiến trình riêng của nó. Siri khởi chạy Intents Extension khi có yêu cầu bằng giọng nói, truyền dữ liệu cho nó và nhận kết quả. Extension không có UI — nó chạy ở chế độ nền và phải hoàn thành trong vòng 5–10 giây.
Các trường hợp sử dụng Siri Intent: sending messages (INSendMessageIntent), making calls (INStartCallIntent), sending payments (INSendPaymentIntent), creating notes (INCreateNoteIntent), workouts (INStartWorkoutIntent), photos (INTìm kiếmForẢnhIntent), booking trips (INBookRestaurantReservationIntent), car functions (INSetCarLockStatusIntent). Mỗi miền có lược đồ tham số nghiêm ngặt và các giới hạn do Apple xác định vì lý do bảo mật.
SiriKit là một framework được Apple giới thiệu trong iOS 10 (2016). Nó cung cấp các miền (Intents) có sẵn cho các hành động điển hình: messages, calls, payments, notes, reminders, photos, workouts, booking, car functions, search. Cho mỗi miền, Apple đã xác định một tập hợp các lớp Intent (INSendMessageIntent, INStartCallIntent) mà ứng dụng triển khai thông qua IntentHandler. SiriKit tự động tạo xác nhận UI trước khi thực thi (đối với thanh toán và tin nhắn, xác nhận là bắt buộc).
Các miền SiriKit:
Giới hạn của SiriKit: nhà phát triển không thể tạo miền tùy chỉnh — họ chỉ có thể sử dụng các miền được xác định trước. Giới hạn này đã được giải quyết trong iOS 16 với sự ra đời của App Intents, cho phép tạo lệnh thoại tùy ý cho bất kỳ hành động nào của ứng dụng.
App Intents là một framework của Apple được giới thiệu trong iOS 16 (2022) và mở rộng đáng kể trong iOS 17–18. Không giống SiriKit với các miền cố định, App Intents cho phép nhà phát triển xác định lệnh thoại riêng của họ cho bất kỳ hành động nào của ứng dụng: “Siri, add milk to the shopping list in AnyList,” “Siri, schedule a meeting in Fantastical,” “Siri, turn on the living room light in Home.” Các intent tùy chỉnh được xác định thông qua giao thức AppIntent với các tham số, cụm từ và lược đồ xác nhận.
Các thành phần App Intents:
App Intents vs SiriKit: sự khác biệt chính là tính linh hoạt. SiriKit bị giới hạn ở 10 miền, App Intents cho phép tạo bất kỳ lệnh nào. SiriKit yêu cầu một target Intents Extension riêng, App Intents hoạt động bên trong ứng dụng chính. SiriKit sử dụng Intents.framework (Objective-C/Swift), App Intents sử dụng cú pháp Swift khai báo mới với macro @Intent và @Parameter. Theo Apple, App Intents được sử dụng trong 70% dự án mới với hỗ trợ Siri tính đến năm 2025.
Ví dụ về tạo App Intent tùy chỉnh để thêm ghi chú vào ứng dụng. Minh họa cách tiếp cận hiện đại sử dụng framework App Intents trong iOS 16+.
import AppIntents
// 1. Intent tùy chỉnh để thêm ghi chú
struct AddNoteIntent: AppIntent {
// Tên lệnh (hiển thị trong Shortcuts)
static var title: LocalizedStringResource = "Thêm ghi chú"
// Mô tả lệnh
static var description: LocalizedStringResource = "Tạo ghi chú mới trong ứng dụng"
// Tham số lệnh
@Parameter(title: "Nội dung ghi chú")
var noteContent: String
@Parameter(title: "Danh mục", default: "Chung")
var category: String
// Thực thi hành động
func perform() async throws -> some IntentResult {
// Tạo ghi chú qua bộ nhớ cục bộ
let note = Note(content: noteContent, category: category)
try await NoteStore.shared.save(note)
// Trả về kết quả với hộp thoại cho Siri
return .result(
dialog: .response("Ghi chú "(noteContent)" đã được tạo")
)
}
}
// 2. App Shortcut Provider — đăng ký lệnh
struct NotesShortcuts: AppShortcutsProvider {
@AppShortcutsBuilder
static var appShortcuts: [AppShortcut] {
AppShortcut(
intent: AddNoteIntent(),
phrases: [
"Thêm ghi chú vào (.applicationName)",
"Tạo ghi chú với (.$noteContent) trong (.applicationName)",
"Viết (.$noteContent) trong (.applicationName)",
]
)
}
}
// 3. Intent SiriKit cho tin nhắn (cách tiếp cận cổ điển)
class MessageIntentHandler: NSObject, INSendMessageIntentHandling {
func resolveRecipients(
for intent: INSendMessageIntent,
completion: @escaping ([INPersonResolutionResult]) -> Void
) {
guard let recipients = intent.recipients else {
completion([.needsRequired()])
return
}
// Giải quyết danh bạ qua sổ địa chỉ của ứng dụng
let results = recipients.map { INPersonResolutionResult.success(with: $0) }
completion(results)
}
func handle(
intent: INSendMessageIntent,
completion: @escaping (INSendMessageIntentResponse) -> Void
) {
// Gửi tin nhắn qua API ứng dụng
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil
)
completion(response)
}
}
Các điểm chính: AppIntent — giao thức cho lệnh thoại tùy chỉnh; @Parameter — macro xác định tham số lệnh; perform() — phương thức thực thi hành động và trả về kết quả với hộp thoại cho Siri; AppShortcutsProvider — đăng ký các lệnh của ứng dụng trong Siri và Shortcuts; INSendMessageIntentHandling — giao thức SiriKit để xử lý miền tin nhắn. Các cụm từ kích hoạt được đặt qua .applicationName và \.$parameter để có biến thể.
Khuyến nghị khi tạo Siri Intents: xác định cụm từ kích hoạt rõ ràng với các biến thể phát âm; trả về hộp thoại thông tin sau khi thực thi (thành công/lỗi); xử lý trường hợp tham số không đầy đủ thông qua phương thức resolve với yêu cầu làm rõ; lưu INInteraction sau khi thực thi để Siri học hỏi; kiểm tra trên thiết bị thật (trình giả lập không hỗ trợ Siri). Đối với App Intents, sử dụng @Intent với inAppTìm kiếmKeywords để cải thiện nhận dạng.
Giới hạn: Intent SiriKit bị giới hạn ở 10 miền. Intents Extension chạy với giới hạn 5–10 giây — nếu vượt quá, Siri báo lỗi. Siri Intent không có UI — toàn bộ giao diện do Siri tạo ra. App Intents chỉ khả dụng trên iOS 16+ (~85% thiết bị được hỗ trợ tính đến năm 2026). Để hỗ trợ iOS 13–15, phải sử dụng SiriKit. Quyền riêng tư: Siri không truyền bản ghi âm đến ứng dụng — chỉ văn bản tham số được nhận dạng. Đối với các hành động nhạy cảm (thanh toán, tin nhắn), xác nhận của người dùng là bắt buộc.
| 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+) |
Hiệu suất và gỡ lỗi: Intents Extension chạy trong một tiến trình riêng với giới hạn bộ nhớ 30–50 MB. Để gỡ lỗi, sử dụng lược đồ «Intents Extension» trong Xcode đính kèm với tiến trình Siri. Nhật ký được xuất ra bảng điều khiển thiết bị. App Intents được gỡ lỗi thông qua ứng dụng Shortcuts trên thiết bị. INInteraction được lưu cục bộ và được Siri sử dụng cho các gợi ý — xóa các tương tác lỗi thời qua INInteraction delete.
Câu hỏi thường gặp
Siri Intent là một lệnh thoại kích hoạt một hành động cụ thể trong ứng dụng mà không cần mở nó. Người dùng nói «Siri, gửi tin nhắn trên WhatsApp» và Siri thực hiện hành động thông qua IntentHandler of the WhatsApp app.
SiriKit (iOS 10+) là một framework cũ hơn với các miền được xác định trước (tin nhắn, cuộc gọi, thanh toán). App Intents (iOS 16+) is a new framework that allows creating custom intents for any actions without domain limitations.
SiriKit hỗ trợ 10 miền: messages (INSendMessageIntent), calls (INStartCallIntent), payments (INSendPaymentIntent), notes, reminders, photos, workouts, trip booking, car functions, and search.
Siri nhận dạng giọng nói và khớp nó với một Intent cụ thể dựa trên các cụm từ được xác định trong .intentdefinition. IntentHandler thực hiện hành động và trả về kết quả. Toàn bộ quá trình mất 0.5–2 seconds.
Có, sau khi nhận dạng intent nhưng trước khi thực thi nó, Siri hiển thị xác nhận cho người dùng. Người dùng có thể hủy thực thi bằng giọng nói («Hủy») hoặc chạm. Đối với thanh toán và tin nhắn, xác nhận là bắt buộc.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm