Intents Extension: แนวคิดหลักและการรวม Siri Intents ใน iOS

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-06-16 เวลาอ่าน: 9 นาที

Intents Extension เป็นส่วนขยาย iOS ที่ช่วยให้แอปพลิเคชันของบริษัทอื่นสามารถประมวลผลคำสั่งเสียงของ Siri และโต้ตอบกับบริการของระบบผ่าน SiriKit แอปกำหนด intents ของตัวเองใน Intents.intentdefinition ใช้ตัวจัดการตาม INIntentHandler และลงทะเบียนเพื่อการจดจำวลีเสียง ตาม Apple Developer Documentation (2025) SiriKit รองรับโดเมน intent มากกว่า 20 โดเมน ตั้งแต่ข้อความและการชำระเงินไปจนถึงการออกกำลังกายและการจอง และตั้งแต่ iOS 14 เป็นต้นมา ได้เพิ่มการรองรับ intents แบบกำหนดเองผ่าน IntentsExtension

ประเด็นสำคัญ

  • Intents Extension ประมวลผลคำสั่งเสียง Siri และ intents ของระบบในนามของแอปในเบื้องหลัง
  • Intents ถูกกำหนดผ่านไฟล์ Intents.intentdefinition พร้อมพารามิเตอร์และการตอบกลับในตัวแก้ไขแบบภาพของ Xcode
  • โปรโตคอลหลักคือ INIntentHandler ซึ่งใช้เมธอด handle(intent:completion:) ในการประมวลผลคำขอ
  • Intents แบบกำหนดเอง (iOS 14+) ช่วยให้แอปสร้างประเภทคำสั่งของตัวเองโดยไม่ผูกติดกับโดเมน SiriKit มาตรฐาน
  • ส่วนขยายรองรับ INUIHostedViewProviding สำหรับแสดงอินเทอร์เฟซแบบกำหนดเองภายใน Siri ก่อนดำเนินการคำสั่ง

Intents Extension ใน iOS คืออะไร

Intents Extension เป็นส่วนขยายแอปที่ช่วยให้ Siri, Shortcuts และบริการระบบอื่น ๆ เรียกใช้ฟังก์ชันการทำงานของแอปผ่านโปรโตคอลมาตรฐาน INIntentHandler เมื่อผู้ใช้พูดว่า “เฮ้ Siri ส่งข้อความใน Messenger X” Siri จะเปิดใช้งานส่วนขยายที่เกี่ยวข้อง ส่งพารามิเตอร์คำขอ และรับผลลัพธ์สำหรับการพูดออกเสียง

ต่างจากส่วนขยายประเภทอื่น Intents Extension ทำงานใน เบื้องหลัง โดยไม่มีอินเทอร์เฟซที่มองเห็นได้ Siri จะแสดงการตอบกลับด้วยเสียงหรือการ์ดข้อความ ส่วนขยายสามารถเลือกให้อินเทอร์เฟซแบบกำหนดเองผ่าน INUIHostedViewProviding ซึ่งจะแสดงภายใน Siri ก่อนดำเนินการคำสั่งเพื่อการยืนยัน

ส่วนขยายไม่สามารถเข้าถึงหน้าจออุปกรณ์และไม่สามารถเริ่มดำเนินการได้เอง มีเพียงตอบสนองต่อคำขอจาก Siri หรือ Shortcuts เท่านั้น ซึ่งรับประกันความปลอดภัย: ผู้ใช้ควบคุมเสมอว่าแอปดำเนินการใดบ้างผ่านคำสั่งเสียง

SiriKit และโดเมน intent

SiriKit เป็นเฟรมเวิร์กของ Apple สำหรับการรวม Siri ซึ่งเปิดตัวใน iOS 10 โดยกำหนดโดเมน หมวดหมู่ของการดำเนินการที่ Siri สามารถจัดการได้: ข้อความ การโทรศัพท์ การชำระเงิน รายการ การเตือนความจำ รูปภาพ การออกกำลังกาย การจอง และอื่น ๆ แต่ละโดเมนมีชุด intents และการตอบกลับที่ตายตัว

โดเมนมาตรฐาน

INSendMessageIntent — การส่งข้อความ INStartWorkoutIntent — การเริ่มออกกำลังกาย INSearchForPhotosIntent — การค้นหารูปภาพ INRequestRideIntent — การจองรถ แต่ละโดเมนกำหนดพารามิเตอร์ที่จำเป็นและเลือกได้ที่ Siri ดึงมาจากคำขอด้วยเสียง ตามที่ Apple ระบุ โดเมนมาตรฐานไม่ต้องการไฟล์ intentdefinition เพียงแค่ใช้ตัวจัดการที่เกี่ยวข้องก็เพียงพอ

สำหรับแอปที่ไม่เข้ากับโดเมนมาตรฐาน iOS 14 ได้แนะนำความสามารถในการใช้ intents แบบกำหนดเอง แอปกำหนดประเภทคำสั่งของตัวเองและพารามิเตอร์ผ่าน Intents.intentdefinition และ Siri เรียนรู้ที่จะจดจำวลีที่เกี่ยวข้องตามตัวอย่างที่นักพัฒนาจัดเตรียมไว้

การกำหนดค่าใน Info.plist

Intents Extension ลงทะเบียนผ่านคีย์ IntentsSupported ใน Info.plist ซึ่งแสดงรายการคลาส intent ทั้งหมดที่ส่วนขยายจัดการ Siri ใช้รายการนี้เพื่อเลือกส่วนขยายที่เหมาะสมเมื่อจดจำคำสั่งเสียง หากมีหลายส่วนขยายที่รองรับ intent เดียวกัน 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 เป็นโปรโตคอลที่กำหนดเมธอดสำหรับจัดการแต่ละขั้นตอนของการประมวลผล intent: การแก้ไขพารามิเตอร์ การยืนยัน และการดำเนินการ ส่วนขยายใช้เมธอดเหล่านี้สำหรับแต่ละประเภท intent ที่รองรับ

สามขั้นตอนการประมวลผล

resolve — การตรวจสอบและชี้แจงพารามิเตอร์ของ intent Siri เรียกเมธอดนี้สำหรับแต่ละพารามิเตอร์ หากพารามิเตอร์หายไปหรือไม่ถูกต้อง ส่วนขยายจะส่งคืนคำขอชี้แจง และ Siri จะถามคำถามเพิ่มเติมกับผู้ใช้ confirm — การยืนยันเจตนา ส่วนขยายตรวจสอบว่าสามารถดำเนินการ intent ในบริบทปัจจุบันได้หรือไม่ handle — การดำเนินการจริงและการส่งคืนผลลัพธ์

การแยกสามขั้นตอนมีความสำคัญอย่างยิ่งสำหรับ UX ด้วยเสียง: หากไม่รู้จักพารามิเตอร์ Siri จะไม่ดำเนินการ แต่จะขอคำชี้แจง ตัวอย่างเช่น หากผู้ใช้พูดว่า “ส่งข้อความถึง Alex” แต่มี Alex สามคนในรายชื่อติดต่อ ส่วนขยายจะส่งคืน resolve พร้อมคำขอชี้แจง และ Siri จะถาม “Alex คนไหน?”

INIntentResponse และรหัสสถานะ

INIntentResponse เป็นออบเจกต์ที่ส่วนขยายส่งคืนในตัวจัดการความสมบูรณ์หลังจากดำเนินการ intent การตอบกลับประกอบด้วยรหัสผลลัพธ์ (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())
    }
}

การสร้าง intents แบบกำหนดเอง

ด้วย iOS 14 นักพัฒนาสามารถกำหนด intents แบบกำหนดเอง นอกโดเมน SiriKit มาตรฐาน Intents แบบกำหนดเองถูกอธิบายในไฟล์ Intents.intentdefinition ซึ่งเป็นตัวแก้ไขแบบภาพภายใน Xcode ที่สร้างประเภทคำสั่งใหม่พร้อมพารามิเตอร์และการตอบกลับ

โครงสร้างของ intent แบบกำหนดเอง

intent แบบกำหนดเองแต่ละรายการประกอบด้วย INIntent (คำจำกัดความของคำขอ) และ INIntentResponse (คำจำกัดความของการตอบกลับ) INIntent มีพารามิเตอร์พร้อมประเภทข้อมูล ได้แก่ String, Integer, CurrencyAmount, ออบเจกต์ที่พบ และอื่น ๆ INIntentResponse มีคุณสมบัติสำหรับส่งคืนผลลัพธ์และอาร์เรย์ของรหัสตอบกลับ Xcode จะสร้างคลาส Swift โดยอัตโนมัติตามคำจำกัดความนี้

Apple แนะนำให้รวมไม่เกิน 5 พารามิเตอร์ ใน intent แบบกำหนดเอง พารามิเตอร์ที่มากเกินไปจะลดคุณภาพการรู้จำเสียงและทำให้ประสบการณ์ผู้ใช้ซับซ้อน สำหรับแต่ละพารามิเตอร์ ควรจัดเตรียมวลีตัวอย่างใน Assistant Dialog เพื่อให้ Siri เรียนรู้ที่จะรู้จำได้อย่างถูกต้อง

วลีตัวอย่างสำหรับ Siri

ใน Intents.intentdefinition สำหรับแต่ละ intent คุณสามารถระบุ ประโยคตัวอย่าง วลีที่ผู้ใช้จะพูดกับ Siri เพื่อเปิดใช้งาน intent ตัวอย่าง: “สั่งกาแฟในแอปของฉัน” “ขอให้แอปของฉันหาสูตรพิซซ่า” 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:) ซึ่งส่วนขยายจะได้รับ intent และส่งคืน UIViewController ที่จะฝังใน Siri ขนาดของตัวควบคุมมีจำกัด ความสูงสูงสุด 200 จุด แนะนำให้ใช้การ์ดขนาดกะทัดรัดพร้อมข้อมูลสำคัญ: จำนวนเงิน เวลา ที่อยู่

อินเทอร์เฟซแบบกำหนดเองเป็นทางเลือก หากส่วนขยายไม่ได้ใช้ INUIHostedViewProviding Siri จะแสดงการ์ดมาตรฐานพร้อมประเภท intent และชื่อแอป สำหรับ intent ส่วนใหญ่ UI มาตรฐานก็เพียงพอ และ Apple แนะนำให้เพิ่มอินเทอร์เฟซแบบกำหนดเองเมื่อช่วยให้เข้าใจได้ดีขึ้นจริง ๆ เช่น เพื่อแสดงเส้นทางหรือยืนยันการชำระเงิน

ความปลอดภัยและการยืนยัน

สำหรับ intent ที่เกี่ยวข้องกับการเงินหรือข้อมูลส่วนบุคคล การรับรองความถูกต้อง เป็นสิ่งที่จำเป็น INIntentResponse รองรับรหัส requiresAuthentication ซึ่งบังคับให้ Siri ขอ Face ID หรือ Touch ID ก่อนดำเนินการ หลังจากการรับรองความถูกต้อง ส่วนขยายจะได้รับการยืนยันผ่านการเรียก handle แยกต่างหาก ซึ่งตรวจสอบสถานะการรับรองความถูกต้อง

Apple เน้นย้ำเป็นพิเศษ: 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 ได้หรือไม่?

ได้ ส่วนขยายสามารถประมวลผล intents จากแอป Shortcuts โดยไม่ต้องป้อนข้อมูลด้วยเสียง ผู้ใช้สร้างทางลัดจากการดำเนินการที่แนะนำ และส่วนขยายดำเนินการโดยไม่ต้องให้ Siri มีส่วนร่วม

iOS เวอร์ชันใดที่รองรับ intents แบบกำหนดเอง?

Intents แบบกำหนดเอง พร้อมใช้งานตั้งแต่ iOS 14 เป็นต้นไป สำหรับ iOS 10–13 มีเฉพาะโดเมน SiriKit มาตรฐานเท่านั้น Intents แบบกำหนดเองต้องใช้ Intents.intentdefinition และการสร้างคลาส Swift

ให้เวลาเท่าใดในการประมวลผล intent?

Siri รอการตอบกลับจากส่วนขยายประมาณ 15 วินาที หากเกินขีดจำกัด Siri จะแจ้งให้ผู้ใช้ทราบว่าไม่สามารถดำเนินการให้เสร็จสมบูรณ์ได้ สำหรับการดำเนินการที่ใช้เวลานาน ให้ใช้รหัสตอบกลับ inProgress

จะส่งโทเคนการอนุญาตไปยัง Intents Extension ได้อย่างไร?

ใช้ Keychain ด้วยการเข้าถึงร่วมกันผ่านกลุ่มการเข้าถึงระหว่างแอปหลักและส่วนขยาย 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 โดเมนและรองรับ intents แบบกำหนดเองตั้งแต่ iOS 14
  • วงจรชีวิตของ intent ประกอบด้วยสามขั้นตอน: resolve (การชี้แจง), confirm (การยืนยัน) และ handle (การดำเนินการ)
  • Intents แบบกำหนดเองถูกสร้างขึ้นใน Intents.intentdefinition พร้อมพารามิเตอร์ การตอบกลับ และวลีตัวอย่างสำหรับ Siri
  • INUIHostedViewProviding ช่วยให้แสดงอินเทอร์เฟซการยืนยันแบบกำหนดเองภายใน Siri ก่อนดำเนินการ
  • สำหรับการดำเนินการทางการเงินและส่วนตัว ใช้การรับรองความถูกต้องของระบบผ่าน Face ID หรือ Touch ID

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม