Intent kustom

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Setiap aplikasi berbeda, dan tidak semua fungsi aplikasi cocok dengan intent bawaan Action Aplikasi yang tersedia. Untuk kasus ketika tidak ada intent bawaan (BII) untuk fungsi aplikasi, Anda dapat menggunakan intent kustom untuk memperluas aplikasi dengan Action Aplikasi.

Seperti BII, intent kustom mengikuti skema shortcuts.xml dan bertindak sebagai titik koneksi antara Asisten dan fulfillment yang Anda tetapkan. Intent kustom juga memiliki parameter intent, yang dapat Anda petakan ke parameter dalam fulfillment Anda yang sesuai.

Tidak seperti BII, intent kustom memerlukan pola kueri untuk mendeskripsikan kueri contoh yang mungkin diucapkan pengguna. Pendekatan ini berbeda dengan intent bawaan, yang masing-masing mencontohkan cara umum pengguna mengekspresikan intent tersebut.

Batasan

Intent kustom memiliki batasan berikut:

  • Nama intent kustom tidak boleh diawali dengan actions.intent.
  • Nama intent kustom harus unik di antara nama intent kustom untuk aplikasi Anda.
  • Hanya jenis data tertentu yang tersedia untuk ekstraksi parameter oleh Asisten Google. Lihat Jenis yang didukung untuk daftar jenis yang didukung.
  • Maksimum dua parameter teks yang didukung per kueri. Batas ini tidak berlaku untuk jenis data lainnya.
  • Hanya lokalitas en-US yang didukung untuk intent kustom (setelan bahasa perangkat dan Asisten harus cocok).

Jenis yang didukung

Intent kustom mendukung jenis schema.org berikut untuk ekstraksi parameter:

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

Menentukan Action Aplikasi dengan intent kustom

Seperti Action Aplikasi lainnya yang menggunakan intent bawaan, Anda menentukan intent kustom dalam elemen <capability> di shortcuts.xml.

Kemampuan ditentukan dalam elemen root <shortcuts>. Saat menentukan elemen <shortcuts>, Anda harus menyertakan namespace atribut yang ingin diakses.

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

Masukkan nama intent kustom dalam atribut android:name, dan referensikan file resource pola kueri dalam atribut 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>

Saat memberi nama intent kustom Anda, sebaiknya gunakan awalan custom.actions.intent untuk membedakan intent kustom dari intent bawaan dan intent Android (yang berfungsi secara berbeda). Nama intent kustom tidak boleh diawali dengan actions.intent, karena namespace tersebut dicadangkan untuk intent bawaan.

Untuk setiap parameter, berikan jenis schema.org yang didukung yang paling menjelaskan arti parameter. Misalnya, Anda dapat menggunakan https://schema.org/Date untuk mendeskripsikan tanggal yang diperkirakan akan diterima:

...
<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>
...

Definisi pintasan di shortcuts.xml menggunakan format yang sama dengan intent kustom seperti halnya dengan intent bawaan. Kode berikut menjelaskan Action Aplikasi yang menggunakan pola kueri yang direferensikan untuk memicu intent kustom SCHEDULE_APPOINTMENT dan kumpulan nilai yang ditetapkan, DRIVERS_LICENSE dan VEHICLE_REGISTRATION, untuk parameter 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>

Anda dapat mengonfigurasi parameter intent kustom dengan inventaris inline, yang dapat digunakan untuk memandu ekstraksi entitas ke kumpulan entitas yang didukung yang ditentukan dalam shortcuts.xml.

Pola kueri

Setiap intent kustom yang Anda gunakan memerlukan serangkaian kueri yang diharapkan dari pengguna untuk intent tersebut. Pendekatan ini tidak seperti intent bawaan, ketika kueri yang sudah dimodelkan untuk cara umum bagi pengguna untuk mengekspresikan tugas yang akan mereka coba lakukan atau informasi yang mereka cari.

Dalam file resource Android (biasanya /res/values/strings.xml), tentukan pola kueri sebagai item dalam array string. Saat Action Aplikasi Anda dipanggil, Asisten Google akan memeriksa kueri pengguna terhadap pola kueri Anda sebagai bagian dari mencocokkan intent pengguna untuk fulfillment. Setiap pola kueri yang Anda berikan mewakili frasa yang Anda anggap valid untuk intent kustom yang sesuai.

Saat memberikan pola kueri untuk intent kustom, setiap pola harus mengikuti pemanggilan eksplisit seperti "buka ExampleApp" atau "mulai ExampleApp lalu". Misalnya, pertimbangkan kueri pengguna berikut:

  • "Ok Google, buka ExampleGameApp lalu mulai buat kue".
  • "Ok Google, buka ExampleGameApp lalu mulai buat pai apel".
  • "Ok Google, mulai ExampleGameApp lalu buat 5 item kue".
  • "Ok Google, gunakan ExampleGameApp untuk membuat kue 5 kali".

Untuk mencocokkan kueri pengguna, berikan pola kueri yang berisi bagian kueri setelah frasa pemanggilan. Untuk informasi yang ingin Anda ekstrak dari kueri (seperti teks atau angka yang diberikan oleh pengguna), Anda perlu menetapkan nilai ke parameter intent yang sesuai dengan placeholder dalam pola kueri.

Untuk mereferensikan parameter dalam pola kueri, tambahkan $ ke nama parameter dalam pola Anda. Misalnya, untuk membuat nilai placeholder bagi parameter seperti <parameter name="date1" ... (actions.xml ) atau <parameter android:name="date1" ... (shortcuts.xml ), Anda akan menggunakan $date1.

Kode berikut menjelaskan pola kueri yang cocok dengan kueri pengguna di atas dan mengekstrak nilai untuk nama item dan jumlah item yang akan dibuat:

<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>

Pola kueri mendukung Kondisional. Misalnya, "setel (satu)? janji temu $tanggal $waktu". Dalam hal ini, "setel janji temu hari ini pada siang hari" dan "setel satu janji temu hari ini pada siang hari" merupakan kueri yang valid.