แต่ละแอปมีความแตกต่างกัน และฟังก์ชันการทำงานของแอปบางอย่างอาจไม่ตรงกับ 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
ในกรณีนี้ ทั้งคู่ "นัดหมายวันนี้ตอนเที่ยง" และ
"นัดเวลาวันนี้ตอนเที่ยง" เป็นการค้นหาที่ถูกต้อง