هر برنامه متفاوت است، و همه عملکردهای برنامه با هدف داخلی (BII) در دسترس App Actions مطابقت ندارند. برای مواردی که BII برای عملکرد برنامه شما وجود ندارد، میتوانید در عوض از یک هدف سفارشی برای گسترش برنامه خود با App Actions استفاده کنید.
مانند BII ها، مقاصد سفارشی از طرح shortcuts.xml
پیروی می کنند و به عنوان نقاط اتصال بین Assistant و اجراهای تعریف شده شما عمل می کنند. مقاصد سفارشی همچنین دارای پارامترهای intent هستند که میتوانید آنها را به پارامترهایی در انجام مربوطه خود نگاشت کنید.
برخلاف BII ها، مقاصد سفارشی به الگوهای پرس و جو برای توصیف پرس و جوهای نمونه ای که کاربر ممکن است بگوید نیاز دارد. این رویکرد با مقاصد داخلی متفاوت است، که روشهای رایجی را که کاربران آن قصد را بیان میکنند، مدل میکنند.
محدودیت ها
مقاصد سفارشی دارای محدودیت های زیر هستند:
- نام یک intent سفارشی نمی تواند با
actions.intent
شروع شود. - نام یک هدف سفارشی باید در میان نامهای هدف سفارشی برای برنامه شما منحصر به فرد باشد.
- فقط انواع داده های خاصی برای استخراج پارامتر توسط دستیار Google در دسترس هستند (به انواع پشتیبانی شده مراجعه کنید).
- مقاصد سفارشی باید حاوی نمونه هایی از الگوهای پرس و جو قابل استفاده باشد (به الگوهای پرس و جو مراجعه کنید).
- هر کوئری حداکثر از دو پارامتر متنی پشتیبانی می کند. این محدودیت برای سایر انواع داده اعمال نمی شود.
- مقاصد سفارشی فقط از محلی en-US پشتیبانی می کنند. همچنین، تنظیمات زبان دستگاه و دستیار باید مطابقت داشته باشند.
انواع پشتیبانی شده
Intent های سفارشی از انواع schema.org زیر برای استخراج پارامتر پشتیبانی می کنند:
-
https://schema.org/Text
-
https://schema.org/Date
-
https://schema.org/Time
-
https://schema.org/Number
Action های برنامه را با اهداف سفارشی تعریف کنید
مانند سایر App Actions که از BII استفاده می کنند، شما یک هدف سفارشی را در عنصر <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>
نام intent سفارشی را در ویژگی android:name
وارد کنید و به فایل منبع Query Patterns در ویژگی 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>
نامهای هدف سفارشی نمیتوانند با actions.intent
شروع شوند، زیرا آن فضای نام برای BII رزرو شده است. در عوض، هنگام نامگذاری اهداف سفارشی خود، از پیشوند custom.actions.intent
استفاده کنید تا مقاصد سفارشی خود را از هر دو BII و intent Android که عملکرد متفاوتی دارند، متمایز کنید.
برای هر پارامتر، نوع پشتیبانی شده 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>
...
با استفاده از همان فرمت میانبرهای BII، میانبرهایی را برای مقاصد سفارشی در shortcuts.xml
تعریف کنید.
کد زیر یک Action Action را توصیف میکند که از الگوهای جستجوی ارجاعشده برای راهاندازی هدف سفارشی 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>
شما می توانید پارامترهای هدف سفارشی را با موجودی درون خطی پیکربندی کنید، که می توانید از آنها برای هدایت استخراج موجودیت به مجموعه ای از موجودیت های پشتیبانی شده مشخص شده در shortcuts.xml
استفاده کنید.
الگوهای پرس و جو
هر هدف سفارشی که استفاده می کنید به مجموعه ای از پرس و جوهای مورد انتظار از کاربر برای آن هدف نیاز دارد. این رویکرد بر خلاف BII ها است، که در آن پرس و جوها از قبل برای روش های رایجی که کاربران وظایفی را که می خواهند انجام دهند یا اطلاعاتی را که به دنبال آن هستند بیان می کنند، مدل سازی شده است.
در یک فایل منبع Android (معمولا /res/values/strings.xml
)، الگوهای پرس و جو را به عنوان موارد در یک آرایه رشته ای مشخص کنید. وقتی App Action شما فراخوانی میشود، Google Assistant عبارت جستجوی کاربر را در برابر الگوهای پرس و جو شما به عنوان بخشی از مطابقت با هدف کاربر برای انجام بررسی میکند. هر الگوی درخواستی که ارائه میکنید بیانگر عبارتی است که شما آن را برای هدف سفارشی مربوطه معتبر میدانید.
هنگام ارائه الگوهای پرس و جو برای مقاصد سفارشی، انتظار داشته باشید که هر الگو از یک فراخوان صریح مانند «باز کردن برنامه مثال و» یا «شروع نمونه برنامه و» پیروی کند. به عنوان مثال، پرس و جوهای کاربر زیر را در نظر بگیرید:
- "Hey Google، Example Game App را باز کن و شروع به ساختن کیک کن."
- "Hey Google، Example Game App را باز کنید و شروع به تهیه پای سیب کنید."
- «Hey Google، Example Game App را شروع کنید و 5 مورد کیک درست کنید.»
- "Hey Google، از Example Game App برای تولید کیک 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
. در این مورد، هم «قرار امروز ظهر تعیین کنید» و هم «قرار امروز ظهر تعیین کنید» سؤالات معتبر هستند.