Intents Extension là một tiện ích mở rộng iOS cho phép ứng dụng bên thứ ba xử lý lệnh thoại Siri và tương tác với các dịch vụ hệ thống thông qua SiriKit. Ứng dụng định nghĩa intent riêng trong Intents.intentdefinition, triển khai bộ xử lý dựa trên INIntentHandler và đăng ký chúng để nhận dạng cụm từ thoại. Theo Apple Developer Documentation (2025), SiriKit hỗ trợ hơn 20 miền intent — từ nhắn tin và thanh toán đến tập luyện và đặt chỗ — và từ iOS 14, hỗ trợ intent tùy chỉnh đã được thêm vào thông qua IntentsExtension.
Những điểm chính
Intents Extension là một tiện ích mở rộng ứng dụng cho phép Siri, Shortcuts và các dịch vụ hệ thống khác gọi chức năng ứng dụng thông qua giao thức chuẩn hóa INIntentHandler. Khi người dùng nói “Này Siri, gửi tin nhắn trong Messenger X”, Siri kích hoạt tiện ích mở rộng tương ứng, truyền tham số yêu cầu và nhận kết quả để đọc bằng giọng nói.
Không giống các loại tiện ích mở rộng khác, Intents Extension hoạt động trong nền mà không có giao diện hiển thị — Siri hiển thị phản hồi bằng giọng nói hoặc thẻ văn bản. Tiện ích mở rộng có thể tùy chọn cung cấp giao diện tùy chỉnh thông qua INUIHostedViewProviding, được hiển thị bên trong Siri trước khi thực thi lệnh để xác nhận.
Tiện ích mở rộng không có quyền truy cập vào màn hình thiết bị và không thể tự khởi tạo hành động — chỉ để phản hồi yêu cầu từ Siri hoặc Shortcuts. Điều này đảm bảo bảo mật: người dùng luôn kiểm soát các hành động mà ứng dụng thực hiện thông qua lệnh thoại.
SiriKit là framework của Apple để tích hợp Siri, được giới thiệu trong iOS 10. Nó định nghĩa các miền — danh mục hành động mà Siri có thể xử lý: tin nhắn, cuộc gọi điện thoại, thanh toán, danh sách, lời nhắc, ảnh, tập luyện, đặt chỗ và các loại khác. Mỗi miền có một tập hợp intent và phản hồi cố định.
INSendMessageIntent — gửi tin nhắn. INStartWorkoutIntent — bắt đầu tập luyện. INSearchForPhotosIntent — tìm kiếm ảnh. INRequestRideIntent — đặt xe. Mỗi miền định nghĩa các tham số bắt buộc và tùy chọn mà Siri trích xuất từ yêu cầu giọng nói. Theo Apple, các miền tiêu chuẩn không yêu cầu tệp intentdefinition — chỉ cần triển khai bộ xử lý tương ứng.
Đối với các ứng dụng không thuộc miền tiêu chuẩn, iOS 14 đã giới thiệu khả năng sử dụng intent tùy chỉnh. Ứng dụng định nghĩa loại lệnh riêng và tham số của chúng thông qua Intents.intentdefinition, và Siri học cách nhận dạng các cụm từ tương ứng dựa trên các ví dụ do nhà phát triển cung cấp.
Intents Extension được đăng ký thông qua khóa IntentsSupported trong Info.plist, liệt kê tất cả các lớp intent mà tiện ích mở rộng xử lý. Siri sử dụng danh sách này để chọn tiện ích mở rộng phù hợp khi nhận dạng lệnh thoại. Nếu nhiều tiện ích mở rộng hỗ trợ cùng một intent, Siri yêu cầu người dùng chọn.
class MessageIntentHandler: NSObject,
INSendMessageIntentHandling {
func handle(
intent: INSendMessageIntent,
completion: @escaping
(INSendMessageIntentResponse) -> Void
) {
let response = INSendMessageIntentResponse(
code: .success, userActivity: nil)
completion(response)
}
}
INIntentHandler là một giao thức định nghĩa các phương thức để xử lý từng giai đoạn của quá trình xử lý intent: giải quyết tham số, xác nhận và thực thi. Tiện ích mở rộng triển khai các phương thức này cho mỗi loại intent mà nó hỗ trợ.
resolve — xác thực và làm rõ tham số intent. Siri gọi phương thức này cho mỗi tham số. Nếu tham số bị thiếu hoặc không chính xác, tiện ích mở rộng trả về yêu cầu làm rõ và Siri hỏi người dùng một câu bổ sung. confirm — xác nhận ý định. Tiện ích mở rộng kiểm tra xem nó có thể thực thi intent trong ngữ cảnh hiện tại hay không. handle — thực thi thực tế của thao tác và trả về kết quả.
Việc phân chia ba giai đoạn rất quan trọng đối với trải nghiệm người dùng bằng giọng nói: nếu một tham số không được nhận dạng, Siri không thực thi hành động mà yêu cầu làm rõ. Ví dụ: nếu người dùng nói “Gửi tin nhắn cho Alex” nhưng có ba Alex trong danh bạ — tiện ích mở rộng trả về resolve với yêu cầu làm rõ và Siri hỏi “Alex nào?”
INIntentResponse là một đối tượng mà tiện ích mở rộng trả về trong trình xử lý hoàn thành sau khi thực thi intent. Phản hồi chứa mã kết quả (success, failure, requiresAuthentication, inProgress) và dữ liệu tùy chọn để Siri đọc bằng giọng nói. Mã xác định cách Siri phản hồi: success — xác nhận bằng giọng nói, failure — thông báo lỗi, inProgress — chỉ báo thao tác kéo dài.
func resolve(
for intent: INSendMessageIntent,
with completion: @escaping
(INStringResolutionResult) -> Void
) {
if let text = intent.content, !text.isEmpty {
completion(.success(with: text))
} else {
completion(.needsValue())
}
}
Với iOS 14, các nhà phát triển có khả năng định nghĩa intent tùy chỉnh bên ngoài các miền SiriKit tiêu chuẩn. Intent tùy chỉnh được mô tả trong tệp Intents.intentdefinition — một trình chỉnh sửa trực quan bên trong Xcode nơi các loại lệnh mới với tham số và phản hồi được tạo.
Mỗi intent tùy chỉnh bao gồm INIntent (định nghĩa yêu cầu) và INIntentResponse (định nghĩa phản hồi). INIntent chứa các tham số với kiểu dữ liệu — String, Integer, CurrencyAmount, đối tượng tìm thấy và các loại khác. INIntentResponse chứa các thuộc tính để trả về kết quả và một mảng mã phản hồi. Xcode tự động tạo các lớp Swift dựa trên định nghĩa này.
Apple khuyến nghị không bao gồm quá 5 tham số trong một intent tùy chỉnh — quá nhiều tham số làm giảm chất lượng nhận dạng giọng nói và làm phức tạp trải nghiệm người dùng. Đối với mỗi tham số, nên cung cấp các cụm từ ví dụ trong Hộp thoại Trợ lý để Siri học cách nhận dạng chúng một cách chính xác.
Trong Intents.intentdefinition, cho mỗi intent bạn có thể chỉ định câu ví dụ — các cụm từ mà người dùng sẽ nói với Siri để kích hoạt intent. Ví dụ: “Đặt cà phê trong ỨngDụngCủaTôi”, “Yêu cầu ỨngDụngCủaTôi tìm công thức pizza”. Siri sử dụng các cụm từ này để huấn luyện nhận dạng và đề xuất chúng cho người dùng khi thiết lập Shortcuts.
// Intents.intentdefinition (trình chỉnh sửa trực quan)
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 là một giao thức cho phép Intents Extension hiển thị giao diện tùy chỉnh bên trong Siri trước khi thực thi lệnh. Ví dụ: khi đặt xe, tiện ích mở rộng có thể hiển thị bản đồ với lộ trình và chi phí, và người dùng xác nhận hành động bằng cách chạm.
Giao thức định nghĩa phương thức configure(with:for:completion:), nơi tiện ích mở rộng nhận intent và trả về UIViewController để được nhúng vào Siri. Kích thước bộ điều khiển bị giới hạn — chiều cao tối đa 200 điểm. Nên sử dụng thẻ nhỏ gọn với thông tin chính: số tiền, thời gian, địa chỉ.
Giao diện tùy chỉnh là tùy chọn — nếu tiện ích mở rộng không triển khai INUIHostedViewProviding, Siri hiển thị thẻ tiêu chuẩn với loại intent và tên ứng dụng. Đối với hầu hết intent, giao diện tiêu chuẩn là đủ và Apple khuyên chỉ thêm giao diện tùy chỉnh khi nó thực sự cải thiện sự hiểu biết — ví dụ: để hiển thị lộ trình hoặc xác nhận thanh toán.
Đối với intent liên quan đến tài chính hoặc dữ liệu cá nhân, xác thực là bắt buộc. INIntentResponse hỗ trợ mã requiresAuthentication, buộc Siri yêu cầu Face ID hoặc Touch ID trước khi thực thi. Sau khi xác thực, tiện ích mở rộng nhận được xác nhận thông qua một lệnh gọi handle riêng, nơi trạng thái xác thực được kiểm tra.
Apple nhấn mạnh cụ thể: Intents Extension không nên yêu cầu mật khẩu riêng hoặc dữ liệu sinh trắc học — xác thực hệ thống được sử dụng. Lưu trữ mã thông báo truy cập trong Keychain với quyền truy cập chia sẻ giữa ứng dụng và tiện ích mở rộng là thực hành tiêu chuẩn cho các phiên dài hạn.
class IntentViewController: UIViewController {
func configure(
with intent: INIntent,
completion: @escaping
(UIViewController?) -> Void
) {
let cardView = ConfirmationCardView()
let hostingController =
UIHostingController(rootView: cardView)
completion(hostingController)
}
}
Câu hỏi thường gặp
Có, tiện ích mở rộng có thể xử lý intent từ ứng dụng Shortcuts mà không cần đầu vào giọng nói. Người dùng tạo lối tắt từ các hành động được đề xuất và tiện ích mở rộng thực thi nó mà không có sự tham gia của Siri.
Intent tùy chỉnh có sẵn từ iOS 14 trở lên. Đối với iOS 10–13, chỉ các miền SiriKit tiêu chuẩn có sẵn. Intent tùy chỉnh yêu cầu Intents.intentdefinition và tạo lớp Swift.
Siri chờ phản hồi từ tiện ích mở rộng trong khoảng 15 giây. Nếu vượt quá giới hạn, Siri thông báo cho người dùng rằng không thể hoàn thành hành động. Đối với các thao tác kéo dài, hãy sử dụng mã phản hồi inProgress.
Sử dụng Keychain với quyền truy cập chia sẻ thông qua nhóm truy cập giữa ứng dụng chính và tiện ích mở rộng. App Group shared UserDefaults là một giải pháp thay thế nhưng kém hơn Keychain về bảo mật.
Intents Extension xử lý logic — resolve, confirm, handle. Intents UI Extension cung cấp giao diện tùy chỉnh để hiển thị bên trong Siri thông qua INUIHostedViewProviding. Cả hai có thể hoạt động cùng nhau.
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