ความตั้งใจที่กําหนดเอง

แต่ละแอปมีความแตกต่างกัน และฟังก์ชันการทำงานของแอปบางอย่างอาจไม่ตรงกับ Intent ในตัวของการดำเนินการของแอป (BII) ในกรณีที่ไม่มี BII สำหรับฟังก์ชันการทำงานของแอป คุณสามารถใช้ การขยายแอปของคุณด้วยการดำเนินการของแอป

เช่นเดียวกับ BII ความตั้งใจที่กำหนดเองจะทำงานตาม สคีมา shortcuts.xml และทำหน้าที่เป็น จุดเชื่อมต่อระหว่าง Assistant และการดำเนินการที่คุณกำหนดไว้ กำหนดเอง Intent ยังมีพารามิเตอร์ Intent ซึ่งคุณแมปกับพารามิเตอร์ใน การดำเนินการตามคำสั่งซื้อที่เกี่ยวข้อง

Intent ที่กำหนดเองต้องใช้รูปแบบการค้นหา ซึ่งแตกต่างจาก BI อธิบายตัวอย่างคำค้นหาที่ผู้ใช้อาจพูด วิธีนี้แตกต่างจาก ฟีเจอร์ในตัว ซึ่งเป็นโมเดลวิธีทั่วไปที่ผู้ใช้แสดงความตั้งใจดังกล่าว

ข้อจำกัด

ความตั้งใจที่กำหนดเองมีข้อจำกัดดังต่อไปนี้

  • ชื่อของความตั้งใจที่กำหนดเองจะขึ้นต้นด้วย actions.intent ไม่ได้
  • ชื่อของความตั้งใจที่กำหนดเองต้องไม่ซ้ำกันกับชื่อความตั้งใจที่กำหนดเองสำหรับ แอปของคุณ
  • Google ดึงข้อมูลพารามิเตอร์ได้เพียงบางประเภทเท่านั้น Assistant (ดูประเภทที่รองรับ)
  • Intent ที่กำหนดเองต้องมีตัวอย่างของรูปแบบการค้นหาที่ใช้ได้ (ดูรูปแบบการค้นหา)
  • การค้นหาแต่ละรายการรองรับพารามิเตอร์ข้อความได้สูงสุด 2 รายการ ขีดจำกัดนี้ไม่ มีผลกับข้อมูลประเภทอื่นๆ
  • Intent ที่กำหนดเองรองรับเฉพาะภาษา en-US เท่านั้น นอกจากนั้น อุปกรณ์และ Assistant การตั้งค่าภาษาจะต้องตรงกัน

ประเภทที่รองรับ

Intent ที่กำหนดเองรองรับประเภท schema.org ต่อไปนี้สำหรับ การแยกพารามิเตอร์:

  • https://schema.org/Text
  • https://schema.org/Date
  • https://schema.org/Time
  • https://schema.org/Number

กำหนดการดำเนินการของแอปด้วย Intent ที่กำหนดเอง

คุณจะกำหนด Intent ในองค์ประกอบ <capability> ใน shortcuts.xml

ความสามารถกำหนดไว้ในองค์ประกอบรูท <shortcuts> เมื่อคุณ กำหนดเอลิเมนต์ <shortcuts> รวมถึงเนมสเปซของ แอตทริบิวต์ที่คุณต้องการเข้าถึง ดังที่แสดงในตัวอย่างต่อไปนี้

<shortcuts
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  ...
</shortcuts>

ระบุชื่อของความตั้งใจที่กำหนดเองในแอตทริบิวต์ android:name และ อ้างอิงไฟล์ทรัพยากรรูปแบบคำค้นหาใน queryPatterns

<shortcuts
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  <capability
      android:name="custom.actions.intent.EXAMPLE_INTENT"
      app:queryPatterns="@array/ExampleQueries">
    <intent ...>
      <url-template
          android:value="http://custom.com{?number_of_items,item_name}" />
      <parameter
          android:name="number_of_items"
          android:key="number_of_items"
          android:mimeType="https://schema.org/Number" />
      <parameter
          android:name="item_name"
          android:key="item_name"
          android:mimeType="https://schema.org/Text" />
    </intent>
  </capability>
  ...
</shortcuts>

ชื่อ Intent ที่กำหนดเองต้องไม่ขึ้นต้นด้วย actions.intent เนื่องจากเนมสเปซนั้นสงวนไว้สำหรับ BII แต่เมื่อ การตั้งชื่อ Intent ที่กำหนดเอง ให้ใช้คำนำหน้า custom.actions.intent เพื่อแยกความตั้งใจที่กำหนดเองจากทั้ง 2 อย่าง BI และ Android Intent ทำงานต่างกัน

สำหรับแต่ละพารามิเตอร์ ให้ระบุประเภท schema.org ที่รองรับ ที่อธิบายความหมายของพารามิเตอร์ได้ดีที่สุด ตัวอย่างเช่น คุณสามารถใช้ https://schema.org/Date เพื่ออธิบายวันที่ที่คุณคาดว่าจะได้รับ:

...
<intent>
  <url-template android:value="https://example.com/appt{?apptType,date,time}" />
  <parameter
      android:name="date"
      android:key="date"
      android:mimeType="https://schema.org/Date" />
  ...
</intent>
...

กำหนดแป้นพิมพ์ลัดสำหรับ Intent ที่กำหนดเองใน shortcuts.xml โดยใช้รูปแบบเดียวกัน เป็นทางลัดสำหรับ BII

โค้ดต่อไปนี้อธิบายการดำเนินการของแอปที่ใช้คำค้นหาที่อ้างอิง รูปแบบที่จะทริกเกอร์ความตั้งใจที่กำหนดเอง SCHEDULE_APPOINTMENT และใช้ ชุดของค่า DRIVERS_LICENSE และ VEHICLE_REGISTRATION สำหรับ apptType พารามิเตอร์

<shortcuts
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  <capability
      android:name="custom.actions.intent.SCHEDULE_APPOINTMENT"
      app:queryPatterns="@array/scheduleApptQueries">
    <intent ...>
     <url-template android:value="https://example.com/appt{?apptType,date,time}" />
       <parameter
          android:name="date"
          android:key="date"
          android:mimeType="https://schema.org/Date" />
       <parameter
          android:name="time"
          android:key="time"
          android:mimeType="https://schema.org/Time" />
       <!-- The following parameter has no type because the shortcuts are bound to it -->
       <parameter android:name="apptType" android:key="apptType" />
    </intent>
  </capability>

  <shortcut
      android:shortcutShortLabel="Driver's License"
      android:shortcutId="DRIVERS_LICENSE">
    <capability-binding android:key="custom.actions.intent.SCHEDULE_APPOINTMENT">
      <parameter-binding
          android:key="apptType"
          android:value="@string/driversLicense" />
    </capability-binding>
  </shortcut>

  <shortcut
      android:shortcutsShortLabel="Vehicle Registration"
      android:shortcutId="VEHICLE_REGISTRATION">
    <capability-binding android:key="custom.actions.intent.SCHEDULE_APPOINTMENT">
      <parameter-binding
          android:key="apptType"
          android:value="@string/vehicleRegistration" />
    </capability-binding>
  </shortcut>
</shortcuts>

คุณสามารถกำหนดค่าพารามิเตอร์ Intent ที่กำหนดเองได้ด้วยพื้นที่โฆษณาในบรรทัด ซึ่งคุณสามารถใช้เพื่อนำการแยกเอนทิตีไปยังชุดเอนทิตีที่รองรับ ที่ระบุไว้ใน shortcuts.xml

รูปแบบคำค้นหา

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

ระบุการค้นหาในไฟล์ทรัพยากร Android (โดยปกติคือ /res/values/strings.xml) รูปแบบเป็นรายการในอาร์เรย์สตริง เมื่อ มีการเรียกใช้การดำเนินการของแอป โดย Google Assistant จะตรวจสอบคำถามของผู้ใช้กับ รูปแบบการค้นหาเป็นส่วนหนึ่งของการจับคู่ Intent ของผู้ใช้ในการดำเนินการ คำค้นหาแต่ละรายการ รูปแบบที่คุณระบุแสดงถึงวลีที่คุณพิจารณาว่าถูกต้องสำหรับ ตามความตั้งใจที่กำหนดเองที่สอดคล้องกัน

เมื่อระบุรูปแบบการค้นหาสำหรับ Intent ที่กำหนดเอง แต่ละรูปแบบจะต้องเป็นไปตาม คำขอที่ชัดแจ้ง เช่น "เปิดแอปตัวอย่างและ" หรือ "เริ่มต้นแอปตัวอย่างและ" ตัวอย่างเช่น ลองพิจารณาข้อความค้นหาของผู้ใช้ต่อไปนี้

  • "Ok Google เปิดแอปเกมตัวอย่างและเริ่มทำเค้ก"
  • "Ok Google เปิดแอปเกมตัวอย่างและเริ่มทำพายแอปเปิล"
  • "Ok Google เริ่มแอปเกมตัวอย่างและสร้างสรรค์เค้ก 5 รายการ"
  • "Ok Google ใช้แอปเกมตัวอย่างเพื่อผลิตเค้ก 5 ครั้ง"

หากต้องการจับคู่คำค้นหาของผู้ใช้ ให้ระบุรูปแบบคำค้นหาที่มีส่วนของ ค้นหาหลังวลีการเรียกใช้ สำหรับข้อมูลที่คุณต้องการแยกออกจาก (เช่น ข้อความหรือตัวเลขที่ผู้ใช้ระบุ) คุณจะกำหนดค่าให้กับแอตทริบิวต์ พารามิเตอร์ Intent ที่สอดคล้องกันกับตัวยึดตำแหน่งในรูปแบบการค้นหา

หากต้องการอ้างอิงพารามิเตอร์ในรูปแบบคำค้นหา ให้เพิ่ม $ ลงในชื่อของพารามิเตอร์ ในรูปแบบของคุณ เช่น หากต้องการสร้างค่าตัวยึดตำแหน่งสำหรับ เช่น <parameter name="date1" ... (ใน actions.xml) หรือ <parameter android:name="date1" ... (ใน shortcuts.xml) คุณใช้ $date1

โค้ดต่อไปนี้จะอธิบายรูปแบบการค้นหาที่ตรงกับผู้ใช้ก่อนหน้านี้ คำค้นหาและแยกค่าสำหรับชื่อรายการและจำนวนรายการที่จะสร้าง:

<resources>
  <string-array name="ExampleQueries">
    <item>start making a $text1</item>
    <item>start making an $text1</item>
    <item>craft $number1 $text1 items</item>
    <item>produce $text1 $number1 times</item>
  </string-array>
</resources>

รูปแบบการค้นหารองรับเงื่อนไข เช่น set (an)? appointment $date $time ในกรณีนี้ ทั้งคู่ "นัดหมายวันนี้ตอนเที่ยง" และ "นัดเวลาวันนี้ตอนเที่ยง" เป็นการค้นหาที่ถูกต้อง