Intents Extension: مفاهیم کلیدی و ادغام Siri Intents در iOS

نویسنده: IT Sectr منتشر شده: 2026-06-16 زمان مطالعه: 9 دقیقه

Intents Extension یک افزونه iOS است که به برنامه‌های شخص ثالث اجازه می‌دهد دستورات صوتی Siri را پردازش کرده و از طریق SiriKit با سرویس‌های سیستمی تعامل داشته باشند. برنامه ایننت‌های خود را در Intents.intentdefinition تعریف می‌کند، کنترل‌کننده‌هایی بر اساس INIntentHandler پیاده‌سازی می‌کند و آن‌ها را برای تشخیص عبارات صوتی ثبت می‌کند. طبق Apple Developer Documentation (2025)، SiriKit بیش از 20 دامنه ایننت را پشتیبانی می‌کند — از پیام‌ها و پرداخت‌ها گرفته تا تمرینات و رزروها، و از iOS 14 پشتیبانی از ایننت‌های سفارشی از طریق IntentsExtension اضافه شده است.

نکات کلیدی

  • Intents Extension دستورات صوتی Siri و ایننت‌های سیستمی را از طرف برنامه در پس‌زمینه پردازش می‌کند
  • اینت‌ها از طریق فایل Intents.intentdefinition با پارامترها و پاسخ‌ها در ویرایشگر بصری Xcode تعریف می‌شوند
  • پروتکل اصلی — INIntentHandler که متد handle(intent:completion:) را برای پردازش درخواست پیاده‌سازی می‌کند
  • اینت‌های سفارشی (iOS 14+) به برنامه اجازه می‌دهند انواع دستورات خود را بدون وابستگی به دامنه‌های استاندارد SiriKit ایجاد کند
  • افزونه از INUIHostedViewProviding برای نمایش رابط سفارشی درون Siri قبل از اجرای فرمان پشتیبانی می‌کند

Intents Extension در iOS چیست

Intents Extension یک افزونه برنامه است که به Siri، Shortcuts و سایر سرویس‌های سیستمی اجازه می‌دهد از طریق پروتکل استاندارد INIntentHandler عملکرد برنامه را فراخوانی کنند. وقتی کاربر می‌گوید «سلام Siri، پیامی در پیام‌رسان X ارسال کن»، Siri افزونه مربوطه را فعال می‌کند، پارامترهای درخواست را منتقل می‌کند و نتیجه را برای گفتن دریافت می‌کند.

بر خلاف سایر انواع افزونه‌ها، Intents Extension در پس‌زمینه بدون رابط قابل مشاهده کار می‌کند — Siri خود پاسخ را با صدا یا کارت متنی نمایش می‌دهد. افزونه می‌تواند به صورت اختیاری یک رابط سفارشی از طریق INUIHostedViewProviding ارائه دهد که قبل از اجرای فرمان برای تأیید درون Siri نمایش داده می‌شود.

افزونه به صفحه نمایش دستگاه دسترسی ندارد و نمی‌تواند به طور مستقل اقداماتی را آغاز کند — فقط در پاسخ به درخواست Siri یا Shortcuts. این امر امنیت را تضمین می‌کند: کاربر همیشه کنترل می‌کند که برنامه چه اقداماتی را از طریق دستورات صوتی انجام می‌دهد.

SiriKit و دامنه‌های ایننت

SiriKit فریمورک اپل برای ادغام با Siri است که در iOS 10 معرفی شد. این فریمورک دامنه‌ها را تعریف می‌کند — دسته‌بندی اقداماتی که Siri می‌تواند پردازش کند: پیام‌ها، تماس‌های تلفنی، پرداخت‌ها، لیست‌ها، یادآوری‌ها، عکس‌ها، تمرینات، رزروها و موارد دیگر. هر دامنه مجموعه ثابتی از ایننت‌ها و پاسخ‌ها دارد.

دامنه‌های استاندارد

INSendMessageIntent — ارسال پیام. INStartWorkoutIntent — شروع تمرین. INSearchForPhotosIntent — جستجوی عکس. INRequestRideIntent — سفارش تاکسی. هر دامنه پارامترهای اجباری و اختیاری را تعریف می‌کند که Siri از درخواست صوتی استخراج می‌کند. به گفته اپل، برای دامنه‌های استاندارد فایل intentdefinition لازم نیست — پیاده‌سازی کنترل‌کننده مربوطه کافی است.

برای برنامه‌هایی که در دامنه‌های استاندارد قرار نمی‌گیرند، از iOS 14 امکان اینت‌های سفارشی فراهم شده است. برنامه انواع دستورات و پارامترهای خود را از طریق Intents.intentdefinition تعریف می‌کند و Siri بر اساس مثال‌های ارائه شده توسط توسعه‌دهنده، عبارات مربوطه را تشخیص می‌دهد.

پیکربندی در Info.plist

Intents Extension از طریق کلید IntentsSupported در Info.plist ثبت می‌شود، جایی که تمام کلاس‌های ایننتی که افزونه پردازش می‌کند فهرست می‌شوند. Siri از این لیست برای انتخاب افزونه مناسب هنگام تشخیص فرمان صوتی استفاده می‌کند. اگر چند افزونه از یک ایننت پشتیبانی کنند، Siri به کاربر انتخاب می‌دهد.

swift
class MessageIntentHandler: NSObject,
    INSendMessageIntentHandling {

    func handle(
        intent: INSendMessageIntent,
        completion: @escaping
            (INSendMessageIntentResponse) -> Void
    ) {
        let response = INSendMessageIntentResponse(
            code: .success, userActivity: nil)
        completion(response)
    }
}

INIntentHandler: پردازش درخواست‌ها

INIntentHandler پروتکلی است که متدهایی را برای پردازش هر مرحله از کار ایننت تعریف می‌کند: حل پارامترها، تأیید و اجرا. افزونه این متدها را برای هر نوع ایننتی که پشتیبانی می‌کند پیاده‌سازی می‌کند.

سه مرحله پردازش

resolve — بررسی و دقیق‌کردن پارامترهای ایننت. Siri این متد را برای هر پارامتر فراخوانی می‌کند. اگر پارامتری مشخص نشده یا نادرست باشد، افزونه درخواست دقیق‌کردن را برمی‌گرداند و Siri سؤال اضافی از کاربر می‌پرسد. confirm — تأیید قصد. افزونه بررسی می‌کند که آیا می‌تواند ایننت را در زمینه فعلی اجرا کند. handle — اجرای واقعی عملیات و بازگرداندن نتیجه.

تقسیم به سه مرحله برای تجربه کاربری صوتی حیاتی است: اگر پارامتری تشخیص داده نشود، Siri عمل را انجام نمی‌دهد بلکه دوباره می‌پرسد. مثلاً اگر کاربر گفت «به الکسی پیام بده» اما در مخاطبین سه الکسی وجود دارد — افزونه resolve با درخواست دقیق‌کردن برمی‌گرداند و Siri می‌پرسد «کدام الکسی؟».

INIntentResponse و وضعیت‌ها

INIntentResponse شیئی است که افزونه پس از اجرای ایننت در completion برمی‌گرداند. Response شامل کد نتیجه (success، failure، requiresAuthentication، inProgress) و داده‌های اختیاری برای گفتن توسط Siri است. کد نحوه واکنش Siri را تعیین می‌کند: success — تأیید صوتی، failure — پیام خطا، inProgress — نشان‌دهنده عملیات طولانی.

swift
func resolve(
    for intent: INSendMessageIntent,
    with completion: @escaping
        (INStringResolutionResult) -> Void
) {
    if let text = intent.content, !text.isEmpty {
        completion(.success(with: text))
    } else {
        completion(.needsValue())
    }
}

ایجاد ایننت‌های سفارشی

از iOS 14 توسعه‌دهندگان امکان تعریف اینت‌های خود را خارج از دامنه‌های استاندارد SiriKit به دست آوردند. ایننت‌های سفارشی در فایل Intents.intentdefinition توضیح داده می‌شوند — این یک ویرایشگر بصری درون Xcode است که در آن انواع جدیدی از دستورات با پارامترها و پاسخ‌ها ایجاد می‌شوند.

ساختار ایننت سفارشی

هر ایننت سفارشی از INIntent (تعریف درخواست) و INIntentResponse (تعریف پاسخ) تشکیل شده است. INIntent شامل پارامترهایی با نوع داده — String، Integer، CurrencyAmount، اشیاء یافت شده و موارد دیگر است. INIntentResponse شامل ویژگی‌هایی برای بازگرداندن نتیجه و آرایه‌ای از کدهای پاسخ است. Xcode به طور خودکار کلاس‌های Swift را بر اساس این تعریف تولید می‌کند.

اپل توصیه می‌کند که ایننت سفارشی بیش از 5 پارامتر نداشته باشد — تعداد زیاد تشخیص صدا را کاهش می‌دهد و تجربه کاربر را پیچیده می‌کند. برای هر پارامتر بهتر است نمونه عبارات در Assistant Dialog ارائه شود تا Siri تشخیص صحیح را بیاموزد.

نمونه عبارات برای Siri

در Intents.intentdefinition برای هر ایننت می‌توان جملات نمونه مشخص کرد — عباراتی که کاربر برای فعال‌سازی ایننت به Siri خواهد گفت. مثال‌ها: «در برنامه من قهوه سفارش بده»، «از برنامه من بخواه دستور پیتزا پیدا کند». Siri از این عبارات برای یادگیری تشخیص استفاده می‌کند و هنگام تنظیم Shortcuts به کاربر پیشنهاد می‌دهد.

objective-c
// Intents.intentdefinition (ویرایشگر بصری)
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

INUIHostedViewProviding پروتکلی است که به Intents Extension اجازه می‌دهد قبل از اجرای فرمان، رابط سفارشی را درون Siri نمایش دهد. مثلاً هنگام سفارش تاکسی، افزونه می‌تواند نقشه‌ای با مسیر و هزینه نمایش دهد و کاربر عمل را با لمس تأیید کند.

پیکربندی رابط

پروتکل متد configure(with:for:completion:) را تعریف می‌کند که در آن افزونه ایننت را دریافت کرده و UIViewController را برمی‌گرداند که در Siri جاسازی می‌شود. اندازه کنترل‌کننده محدود است — حداکثر ارتفاع 200 نقطه. استفاده از کارت‌های فشرده با اطلاعات کلیدی توصیه می‌شود: مبلغ، زمان، آدرس.

رابط سفارشی اختیاری است — اگر افزونه INUIHostedViewProviding را پیاده‌سازی نکند، Siri یک کارت استاندارد با نوع ایننت و برنامه نمایش می‌دهد. برای بیشتر ایننت‌ها UI استاندارد کافی است و اپل توصیه می‌کند فقط زمانی رابط سفارشی اضافه شود که واقعاً درک را بهبود می‌بخشد — مثلاً برای نمایش مسیر یا تأیید پرداخت.

امنیت و تأیید

برای ایننت‌های مرتبط با امور مالی یا داده‌های شخصی احراز هویت لازم است. INIntentResponse از کد requiresAuthentication پشتیبانی می‌کند که Siri را وادار می‌کند قبل از اجرا Face ID یا Touch ID را درخواست کند. پس از احراز هویت، افزونه تأیید را از طریق فراخوانی جداگانه‌ای به نام handle دریافت می‌کند که در آن وضعیت احراز هویت بررسی می‌شود.

اپل به طور ویژه تأکید می‌کند: Intents Extension نباید رمز عبور یا بیومتریک خود را درخواست کند — از احراز هویت سیستمی استفاده می‌شود. ذخیره توکن‌های دسترسی در Keychain با دسترسی مشترک بین برنامه و افزونه، روش استاندارد برای نشست‌های طولانی مدت است.

swift
class IntentViewController: UIViewController {

    func configure(
        with intent: INIntent,
        completion: @escaping
            (UIViewController?) -> Void
    ) {
        let cardView = ConfirmationCardView()
        let hostingController =
            UIHostingController(rootView: cardView)
        completion(hostingController)
    }
}

سوالات متداول

آیا می‌توان از Intents Extension بدون Siri استفاده کرد؟

بله، افزونه می‌تواند ایننت‌های برنامه Shortcuts را بدون ورودی صوتی پردازش کند. کاربر از اقدامات پیشنهادی یک میانبر ایجاد می‌کند و افزونه آن را بدون مشارکت Siri اجرا می‌کند.

کدام نسخه‌های iOS از ایننت‌های سفارشی پشتیبانی می‌کنند؟

اینت‌های سفارشی از iOS 14 و جدیدتر در دسترس هستند. برای iOS 10–13 فقط دامنه‌های استاندارد SiriKit قابل استفاده هستند. ایننت‌های سفارشی نیاز به Intents.intentdefinition و تولید کلاس‌های Swift دارند.

چه مدت برای پردازش ایننت زمان داده می‌شود؟

Siri حدود 15 ثانیه منتظر پاسخ از افزونه می‌ماند. پس از تجاوز از حد مجاز، Siri به کاربر اطلاع می‌دهد که عمل انجام نشد. برای عملیات طولانی از کد پاسخ inProgress استفاده کنید.

چگونه توکن احراز هویت را به Intents Extension منتقل کنیم؟

از Keychain با دسترسی مشترک از طریق access group بین برنامه اصلی و افزونه استفاده کنید. App Group shared UserDefaults جایگزین است اما از نظر امنیت از Keychain پایین‌تر است.

تفاوت Intents Extension با Intents UI Extension چیست؟

Intents Extension منطق را پردازش می‌کند — resolve، confirm، handle. Intents UI Extension رابط سفارشی را برای نمایش درون Siri از طریق INUIHostedViewProviding ارائه می‌دهد. هر دو می‌توانند با هم کار کنند.

خلاصه

  • Intents Extension دستورات صوتی Siri و میانبرهای Shortcuts را از طریق پروتکل INIntentHandler پردازش می‌کند
  • SiriKit بیش از 20 دامنه استاندارد ارائه می‌دهد و از iOS 14 از ایننت‌های سفارشی پشتیبانی می‌کند
  • چرخه حیات ایننت شامل سه مرحله است: resolve (دقیق‌کردن)، confirm (تأیید) و handle (اجرا)
  • اینت‌های سفارشی در Intents.intentdefinition با پارامترها، پاسخ‌ها و نمونه عبارات برای Siri ایجاد می‌شوند
  • INUIHostedViewProviding امکان نمایش رابط تأیید سفارشی درون Siri قبل از اجرا را فراهم می‌کند
  • برای اقدامات مالی و خصوصی از احراز هویت سیستمی از طریق Face ID یا Touch ID استفاده می‌شود

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید