Tạo actions.xml (không dùng nữa)

Stay organized with collections Save and categorize content based on your preferences.

Sau khi xác định chức năng trong ứng dụng và (BII) ý định tích hợp mà bạn muốn triển khai, hãy tạo một tài nguyên actions.xml trong ứng dụng Android để ánh xạ BII đến chức năng của ứng dụng. Hành động trong ứng dụng được xác định trong actions.xml mô tả cách mỗi BII giải quyết việc thực hiện đơn hàng, cũng như các tham số được trích xuất và cung cấp cho ứng dụng của bạn.

Tổng quan

Để tích hợp ứng dụng Android với Hành động trong ứng dụng, bạn phải đặt tệp actions.xml trong thư mục res/xml của dự án ứng dụng.

Thêm một nội dung tham chiếu đến tệp actions.xml trong tệp AndroidManifest.xml bằng cách sử dụng thẻ <meta-data>. Ví dụ:

<application>
    <!-- ... -->
    <meta-data android:name="com.google.android.actions" android:resource="@xml/actions" />
</application>

Thao tác này sẽ khai báo tài nguyên XML cho tệp xml/actions.xml trong APK. Để tìm hiểu thêm về cách chỉ định tài nguyên trong Android, vui lòng xem phần Tổng quan về tài nguyên ứng dụng trong tài liệu dành cho nhà phát triển Android.

Lược đồ

Bảng sau đây mô tả giản đồ cho actions.xml. Khi đưa vào một thẻ, bạn phải bao gồm mọi thuộc tính của thẻ đó, trừ khi nó được đánh dấu là "không bắt buộc".

Thẻ Có trong: Thuộc tính
<actions> cấp cao nhất
<action> <actions>

intentName

queryPatterns (chỉ áp dụng cho đối tượng có ý định tùy chỉnh)

<parameter> <action> name
<entity-set-reference> <parameter>

entitySetId HOẶC

urlFilter

<fulfillment> <action>

urlTemplate

fulfillmentMode (không bắt buộc)

requiredForegroundActivity (không bắt buộc)

<parameter-mapping> <fulfillment>

urlParameter

intentParameter

required (không bắt buộc)

entityMatchRequired (không bắt buộc)

<entity-set> <actions> entitySetId
<entity> <entity-set>

name (và alternateName, tùy chọn) HOẶC

sameAs

identifier HOẶC url

Mô tả thẻ

Phần này mô tả các thẻ schema khác nhau cho actions.xml.

<hành động>

Một Hành động trong ứng dụng mà ứng dụng hỗ trợ. Mỗi thẻ <action> trong tệp actions.xml phải được cung cấp ít nhất một <fulfillment>.

Thuộc tính:

  • intentName: Ý định tích hợp cho Hành động trong ứng dụng (chẳng hạn như actions.intent.CREATE_TAXI_RESERVATION). Để biết danh sách các ý định tích hợp sẵn được hỗ trợ, vui lòng xem tài liệu tham khảo về ý định tích hợp sẵn.

  • queryPatterns: Một tập hợp các truy vấn dự kiến từ người dùng cho ý định này. Thuộc tính này chỉ áp dụng cho đối tượng có ý định tùy chỉnh, vì BII đã bao gồm mô hình các phương thức phổ biến mà người dùng thể hiện tác vụ họ đang cố gắng thực hiện hoặc thông tin họ tìm kiếm.

<tham số>

Một tham số của Hành động trong ứng dụng có tên và danh sách các thực thể được liên kết.

Thuộc tính:

  • name: Tên để liên kết với tham số này (chẳng hạn như "điểm đến"). Tên phải là một trường cấp lá xanh của tham số (chẳng hạn như tradeOrder.assetOrdered.assetIssuedBy.name). Nếu tham số là loại nguyên gốc, chẳng hạn như một chuỗi, thì tên chỉ là tên của chính tham số đó.

<tham chiếu nhóm thực thể>

Tham chiếu đến nguồn cấp dữ liệu schema.org do nhà phát triển cung cấp. Nguồn cấp dữ liệu phải được cung cấp trực tiếp trong tệp actions.xml bằng cách sử dụng các thẻ <entity-set>.

Thuộc tính:

  • entitySetId: Tham chiếu đến một tập hợp các thực thể cụ thể. Thuộc tính này phải tương ứng với một entitySetId trong thẻ <entity-set>.

  • urlFilter: Đường dẫn URL được sử dụng khi cung cấp khoảng không quảng cáo trên web để thực hiện nhiệm vụ. Thuộc tính này hỗ trợ hai ký tự đại diện:

    • *: Dấu hoa thị khớp một chuỗi từ 0 đến nhiều lần xuất hiện của ký tự đứng trước đó.

    • .*: Dấu chấm theo sau là dấu hoa thị khớp với mọi chuỗi từ 0 đến nhiều ký tự.

    • Các ký tự thoát chỉ cần thiết đối với *\. Bạn có thể thoát các ký tự này dưới dạng \\*\\\\ tương ứng.

<phương thức thực hiện>

Thông tin về cách thực hiện ý định của người dùng bằng ứng dụng Android. Nhà phát triển có thể cung cấp nhiều thẻ <fulfillment> trong actions.xml, với các bộ tham số bắt buộc khác nhau cho từng ý định.

Google sử dụng <fulfillment> đầu tiên có sẵn các tham số bắt buộc để đáp ứng truy vấn của người dùng. Bạn phải cung cấp một <fulfillment> không có bất kỳ tham số bắt buộc nào dưới dạng phương thức thực hiện dự phòng.

Thuộc tính:

  • urlTemplate: Mẫu để tạo liên kết sâu hoặc URI Lát cắt để mở trên thiết bị. Bạn có thể mở rộng mẫu này bằng các tham số ý định của người dùng nếu tất cả các tham số bắt buộc cho mẫu đều có sẵn. Để biết ví dụ về mẫu URL loại HTTP, vui lòng xem nội dung Bài viết trên Wikipedia về mẫu URL. Định dạng mẫu tuân theo quy cách mẫu URI RFC 6570.

  • fulfillmentMode: (không bắt buộc) Chế độ thực hiện dùng để phân phát. Các giá trị hợp lệ là:

    • actions.fulfillment.DEEPLINK: Thực hiện hành động của người dùng bằng cách mở ứng dụng Android bằng một liên kết sâu. Đây là tùy chọn mặc định.

    • actions.fulfillment.SLICE: Thực hiện hành động của người dùng bằng cách nhúng một Lát cắt do ứng dụng Android cung cấp.

  • requiredForegroundActivity: (không bắt buộc) Cho biết hoạt động phải ở nền trước để Hành động trong ứng dụng được kích hoạt bằng lệnh gọi ứng dụng trên nền trước.

    • Chỉ định hoạt động mà không cần bất kỳ chữ viết tắt nào của lớp bằng cách dùng tên gói ứng dụng, theo sau là dấu gạch chéo lên (/), kế tiếp là tên của hoạt động: APP_PACKAGE_NAME/ACTIVITY_NAME

Dưới đây là một số ví dụ về giá trị mẫu URL:

Mẫu Giá trị Giá trị mở rộng
https://example.com/test{?foo,bar} "foo": "123"

"bar": "456"

https://example.com/test?foo=123&bar=456
https://example.com/test?utm_campaign=appactions{&foo,bar} "foo": "123"

"bar": "456"

https://example.com/test?utm_campaign=appactions&foo=123&bar=456
https://example.com/test?utm_campaign=appactions{#foo} "foo": "123" https://example.com/test?utm_campaign=appactions#foo=123
myapp://example/{foo} "foo": "123" myapp://example/123
intent://foo#Intent;scheme=my-scheme{;S.extra1,S.extra2};end "S.extra1": "123"

"S.extra2": "456"

intent://foo#Intent;scheme=my-scheme;S.extra1=123;S.extra2=456;end

Để biết thêm thông tin về cách định cấu hình mẫu URL, vui lòng xem mẫu URL để thực hiện.

< ánh xạ tham số>

Ánh xạ từ tham số ý định đến biến trong mẫu URL. Các khóa trong bản đồ này đại diện cho tham số mẫu URL hoặc "biến" như được mô tả trong RFC 6570.

Nếu tham số không được đưa vào ý định, thì biến tương ứng sẽ không xác định được tại thời điểm mở rộng mẫu URL. Vui lòng xem phần RFC 6570, Mục 3.2.1 để biết nội dung mô tả về cách xử lý các biến không xác định.

Lưu ý required="true"entityMatchRequired="true" khác biệt.

Thuộc tính:

  • urlParameter: Mọi biến được đề cập trong mẫu URL phải có urlParameter tương ứng trong <parameter-mapping>. Chẳng hạn như nếu uri_template là http://spysatellite.com/show{?lat,long}, thì bạn phải có các khóa trong <parameter-mapping> cho tham số latlong.

  • intentParameter: Giá trị đề cập đến các tham số ý định. Nếu tham số ý định thuộc loại có cấu trúc, hãy sử dụng ký hiệu dấu chấm để tham chiếu đến trường lồng. Chẳng hạn nếu có tham số taxiReservation thuộc loại schema.org/TaxiReservation, bạn có thể sử dụng taxiReservation.pickupLocation.geo.latitude để tham chiếu đến giá trị vĩ độ.

    Nếu bạn cung cấp một nhóm thực thể cho tham số này, thì intentParameter phải khớp chính xác với tên của <parameter> tương ứng (chẳng hạn như taxiReservation.pickupLocation.geo.latitude ). Nếu tham số ý định là loại phức tạp, thì giá trị phải tương ứng với tham chiếu đối tượng cho tham số (chẳng hạn như taxiReservation ). Nếu tham số ý định là loại nguyên gốc, thì giá trị sẽ là tên của chính tham số đó.

  • required: (không bắt buộc) Cho biết một intentParameter nhất định phải có để mẫu URL này hợp lệ. Mẫu URL bị loại bỏ nếu truy vấn của người dùng không chứa giá trị cho intentParameter đã được cung cấp.

  • entityMatchRequired: (không bắt buộc) Cho biết phải có khoảng không quảng cáo phù hợp với intentParameter đã được cung cấp. Mặc định là false.

    Khi thuộc tính này được đặt thành true, nếu có một kết quả trùng khớp với khoảng không quảng cáo thì giá trị nhận dạng từ kết quả trùng khớp đó sẽ được chuyển vào mẫu URL. Nếu không, Trợ lý sẽ bỏ qua việc thực hiện nếu không có kết quả phù hợp.

    Khi thuộc tính này được đặt thành false, nếu có một kết quả trùng khớp với khoảng không quảng cáo thì giá trị nhận dạng từ kết quả trùng khớp đó sẽ được chuyển vào mẫu URL. Nếu không, Trợ lý sẽ cung cấp giá trị tham số BII như được trích xuất từ truy vấn của người dùng.

<nhóm thực thể>

Tập hợp các thực thể cùng dòng trong actions.xml.

Thuộc tính:

  • entitySetId: Giá trị nhận dạng duy nhất bắt buộc cho <entity-set> trong actions.xml (chẳng hạn như "myInlineEntitySet1"). Giá trị này cũng phải tương ứng với giá trị <entitySetId> trong thẻ <entity-set-reference>.

    Giá trị cho entitySetId phải chứa tối đa 30 ký tự chữ và số (không có ký tự đặc biệt như - hoặc _) và bắt đầu bằng một chữ cái.

<thực thể>

Một phần tử trong số một nhóm các thực thể chứa nội dung trong actions.xml. Chứa một tập hợp con các trường schema.org/Thing.

Bạn có thể mã hóa cứng hoặc tham chiếu giá trị chuỗi cho các trường url, identifiersameAs qua tài nguyên chuỗi của APK. Khi cung cấp từ đồng nghĩa, hãy sử dụng các giá trị chuỗi cho trường alternateName tham chiếu đến tài nguyên mảng chuỗi của APK.

Thuộc tính:

  • name: Tên bắt buộc của thực thể, trừ khi bạn chỉ định một trường sameAs. Phải là duy nhất trên các trường name thực thể và alternateName của <entity-set> đã cho (chẳng hạn như "kem đánh răng").

  • alternateName: (không bắt buộc) Tên thay thế của thực thể. Bạn phải chỉ định trường name trước khi chỉ định trường alternateName. Phải là duy nhất trên các trường namealternateName của <entity-set> đã cung cấp. Thực thể này sẽ được chọn nếu truy vấn của người dùng phù hợp với bất kỳ chuỗi nào trong số này.

  • sameAs: URL của một trang web tham khảo xác định thực thể một cách rõ ràng. Dùng để chỉ định một giá trị enum nếu và chỉ khi loại tham số ý định là loại phụ của schema.org/Enumeration.

    Đây là yêu cầu bắt buộc đối với các trường tham số có loại phụ là schema.org/Enumeration (chẳng hạn như MealTypeBreakfast).

  • identifier: Giá trị nhận dạng của thực thể. Phải là duy nhất trên các thực thể của <entity-set> đã cung cấp (chẳng hạn như CAPPUCCINO_ID).

  • url: URL RFC 3986 sẽ được mở trên thiết bị Android. Ứng dụng khách HTTP cũng có thể hoặc không thể phân giải được URL. Chẳng hạn như trên Android, URL có thể là URL "http://" liên kết với ứng dụng hoặc URL dành riêng cho thiết bị, chẳng hạn như URL "intent://" hoặc URL trong một lược đồ URL tùy chỉnh.

    Bạn có thể sử dụng trường url cùng với thuộc tính urlTemplate của <fulfillment> theo những cách sau:

    • Hãy cung cấp các giá trị url trong khoảng không quảng cáo nội tuyến và bỏ qua urlTemplate trong <fulfillment>.

    • Cung cấp giá trị url trong khoảng không quảng cáo nội tuyến đồng thời sử dụng các giá trị đó trong giá trị urlTemplate (chẳng hạn như {@url}?extra_param=ExampleValue).

Bạn phải cung cấp identifier hoặc url. Tất cả các thực thể trong một nhóm thực thể nhất định phải sử dụng cùng một thuộc tính (identifier hoặc url).

Khoảng không quảng cáo nội tuyến cho Hành động trong ứng dụng

Đối với một số ý định tích hợp, bạn có thể tùy ý hướng dẫn việc trích xuất thực thể cho một nhóm các thực thể được hỗ trợ chỉ định trong actions.xml, ở đây là khoảng không quảng cáo nội tuyến. Khi một người dùng gọi Hành động trong ứng dụng của bạn, Trợ lý sẽ so khớp các tham số truy vấn của người dùng với các thực thể được chỉ định là khoảng không quảng cáo nội tuyến. Sau đó, Trợ lý Google có thể sử dụng giá trị nhận dạng tương ứng với các mục trong khoảng không quảng cáo khi tạo đường liên kết sâu để thực hiện đơn hàng.

Bạn sẽ xác định khoảng không quảng cáo nội tuyến chủ yếu bằng cách sử dụng phần tử <entity-set><entity>. Khoảng không quảng cáo nội tuyến đơn giản hóa việc phát triển bằng cách cho phép ứng dụng của bạn chỉ xử lý các giá trị nhận dạng hoặc URL từ lệnh gọi Hành động trong ứng dụng thay vì cần nhận dạng chuỗi hoặc giá trị liệt kê của Google.

Chẳng hạn như ứng dụng của bạn cung cấp nhiều loại đồ uống mà người dùng có thể đặt hàng, và bạn yêu cầu người dùng đưa ra các yêu cầu sau đây cho cùng một loại đồ uống:

  • Này Google, hãy đặt một ly Latte có chữ ký Blueberry Crisp Iced trên ExampleApp.

  • Này Google, hãy đặt một ly cà phê đá việt quất trên ExampleApp.

Trong khoảng không quảng cáo nội tuyến, bạn cần chỉ định "Latte chữ ký Blueberry Crisp Ice" là một thực thể tương ứng với giá trị nhận dạng 12345a. Bạn cũng cần chỉ định "Cà phê đá việt quất" dưới dạng một thực thể tương ứng với cùng một giá trị nhận dạng. Giờ đây, khi người dùng kích hoạt Hành động trong ứng dụng của bạn bằng các cụm từ tìm kiếm nêu trên, Trợ lý có thể sử dụng giá trị nhận dạng "12345a" khi tạo liên kết sâu để thực hiện đơn hàng.

Bạn có thể chỉ định tối đa 1.000 thực thể cho mỗi ứng dụng trên tất cả các nhóm thực thể. Có thể xác định tối đa 20 giá trị từ đồng nghĩa alternateName cho mỗi <entity>.

Khoảng không quảng cáo trên web cho Hành động trong ứng dụng

Đối với một số ý định tích hợp, bạn có thể sử dụng khoảng không quảng cáo trên web làm phương thức tạo URL để thực hiện nhiệm vụ. Khoảng không quảng cáo trên web sử dụng trang web của bạn để khám phá các URL nhằm thực hiện Hành động trong ứng dụng. Tính năng này hữu ích nhất khi nền web của bạn xuất hiện ổn định và các đường liên kết sâu trong ứng dụng được sắp xếp xoay quanh nội dung web có sẵn công khai.

Để sử dụng khoảng không quảng cáo trên web, vui lòng cập nhật actions.xml của bạn:

  1. Trong thẻ <action> mà bạn muốn sử dụng khoảng không quảng cáo trên web, hãy thêm thẻ <fulfillment> và đặt thuộc tính urlTemplate của thẻ đó thành {@url}.

  2. Trong cùng một thẻ <action>, hãy thêm thẻ <parameter> và đặt thuộc tính name của thẻ đó thành tham số ý định tích hợp tương ứng gần nhất với thực thể mà trang web của bạn mô tả. Chẳng hạn như khi cung cấp khoảng không quảng cáo trên web cho ORDER_MENU_ITEM, bạn nên liên kết các trang trình đơn với menuItem.name và liên kết các trang vị trí nhà hàng với menuItem.inMenuSection.inMenu.forRestaurant.name.

  3. Trong thẻ <parameter> mới, hãy thêm một thẻ <entity-set-reference> và đặt thuộc tính urlFilter của thẻ đó vào đường dẫn URL mà bạn muốn sử dụng cho khoảng không quảng cáo trên web.

Bằng cách thực hiện các bước trên, Trợ lý có thể tìm kiếm trên web trong đường dẫn URL mà bạn cung cấp trong thuộc tính urlFilter. Sau đó, Trợ lý Google cung cấp giá trị {@url} cho phương thức thực hiện đơn hàng của bạn bằng cách sử dụng các kết quả. Trình xử lý liên kết sâu có thể chuyển hướng người dùng dựa trên đường liên kết sâu do Trợ lý trả về để thực hiện hành động đó.

Ví dụ, giả sử trang web của bạn chứa trang thông tin sản phẩm sử dụng đường dẫn bắt đầu bằng https://www.example.com/items/. Bạn sử dụng giá trị urlFilter https://www.example.com/items/.*, sau đó Trợ lý sẽ trả về URL để thực hiện hành động như https://www.example.com/items/item123. Vui lòng xem <entity-set-reference> để biết thông tin chí tiết về thuộc tính urlFilter.

Mẫu URL trong phương thức thực hiện

Trong thẻ <fulfillment>, bạn có thể khai báo một mẫu URL bằng phần giữ chỗ cho tham số động. Mẫu này sẽ liên kết đến một trong các hoạt động Android của bạn bằng cách sử dụng URL đường liên kết ứng dụng, lược đồ tùy chỉnh hoặc URL dựa trên ý định.

Định cấu hình mẫu URL

Ví dụ về URL liên kết ứng dụng:

<action intentName="actions.intent.CREATE_TAXI_RESERVATION">
    <fulfillment urlTemplate="http://my-taxi.com/order{?dropoffLocation}">
        <parameter-mapping
                intentParameter="taxiReservation.dropoffLocation.name"
                urlParameter="dropoffLocation"/>
    </fulfillment>
</action>

Ví dụ về lược đồ tùy chỉnh:

<action intentName="actions.intent.CREATE_TAXI_RESERVATION">
    <fulfillment urlTemplate="mytaxi://reserve{?dropoffLocation}">
        <parameter-mapping
                intentParameter="taxiReservation.dropoffLocation.name"
                urlParameter="dropoffLocation"/>
    </fulfillment>
</action>

Ví dụ về URL dựa trên ý định:

<action intentName="actions.intent.CREATE_TAXI_RESERVATION">
    <fulfillment
            urlTemplate="intent:#Intent;package=com.example.myapp;action=com.example.myapp.MY_ACTION{;S.dropoff};end">
        <parameter-mapping
                intentParameter="taxiReservation.dropoffLocation.name"
                urlParameter="S.dropoff"/>
    </fulfillment>
</action>

Khi chỉ định thẻ <parameter-mapping> cho phương thức thực hiện đơn hàng, thuộc tính intentParameter biểu thị tham số ý định tích hợp sẵn do người dùng cung cấp. Ở các ví dụ trên, tham số đó là tên vị trí trả khách (taxiReservation.dropoffLocation.name). Bạn có thể tìm thấy các tham số có sẵn cho mọi ý định tích hợp trong phần tham chiếu ý định tích hợp.

Để ánh xạ tham số có ý định tích hợp sẵn với một vị trí trong URL, bạn phải sử dụng thuộc tính urlParameter của thẻ <parameter-mapping>. Thuộc tính này tương ứng với giá trị phần giữ chỗ trong mẫu URL mà bạn muốn thay thế bằng thông tin của người dùng. Giá trị phần giữ chỗ phải có trong urlTemplate và được đặt trong dấu ngoặc nhọn ({}).

URL liên kết ứng dụng

Nếu bạn đang sử dụng URL liên kết ứng dụng, urlTemplate sẽ trỏ đến URL HTTP thông thường có thể kích hoạt Hoạt động của bạn. Các tham số được truyền dưới dạng tham số URL vào URL của liên kết ứng dụng. Các tham số trong urlTemplate phải được đặt trong dấu ngoặc nhọn ({}) và đặt trước dấu chấm hỏi (?). Nếu bạn không đặt tham số, thì tham số đó (bao gồm dấu ngoặc nhọn) sẽ bị loại khỏi kết quả.

Chẳng hạn như nếu một người dùng kích hoạt Hành động trong ứng dụng bằng cách yêu cầu đặt một chuyến taxi đến San Francisco, thì URI cuối cùng được kích hoạt (sau khi thay thế tham số) sẽ như sau:

https://mydomain.com/order?action=com.example.myapp.MY_ACTION&dropoff=San+Francisco

URL dựa trên ý định

Nếu bạn đang sử dụng URL dựa trên ý định, giá trị urlTemplate sẽ bao gồm tên gói, thao tác theo ý định và một số ý định bổ sung, được gọi là "dropoff". Phần phụ có tiền tố là "S." để biểu thị một Ý định chuỗi phụ (như được xác định bởi Intent.toUri()) và được bao quanh bằng dấu ngoặc nhọn để biểu thị sự thay thế bằng một tham số. Bạn cần thêm dấu chấm phẩy phía trước để phân tách Hành động theo ý định đó với Ý định bổ sung (và chỉ đưa vào khi tham số này được đặt).

Trong ví dụ của chúng tôi, giá trị urlParameter được đặt thành S.dropoff; bạn có thể thấy vị trí này xuất hiện trong URL của chúng tôi bằng cách tìm giá trị này trong urlTemplate.

Chẳng hạn như nếu người dùng kích hoạt Hành động bằng cách yêu cầu gọi xe đến "San Francisco" thì URI cuối cùng được kích hoạt (sau khi thay thế tham số) sẽ là:

intent:#Intent;package=com.example.myapp;action=com.example.myapp.MY_ACTION;S.dropoff=San+Francisco;end

Để biết thêm thông tin về ý định, vui lòng xem tài liệu về Ý định trên Android.

Sử dụng giá trị URL từ các thực thể trong mẫu URL

Theo mặc định, nếu một <entity> khớp với truy vấn của người dùng, thì giá trị của thuộc tính identifier sẽ được truyền vào mẫu URL. Để tham chiếu thuộc tính url của <entity>, vui lòng sử dụng {@url} trong mẫu URL và không sử dụng thẻ <parameter-mapping>. Lưu ý giá trị nhận dạng là các ký tự thoát URL, nhưng các giá trị của thuộc tính url vẫn không thay đổi.

Nếu một phương thức thực hiện đơn hàng sử dụng {@url} trong mẫu URL, thì phương thức thực hiện đơn hàng sẽ cố gắng lấy {@url} từ các nguồn như khoảng không quảng cáo trên web và nội tuyến. Khi khoảng không quảng cáo trên web lẫn nội tuyến đều là các nguồn tiềm năng từ {@url}, thì khoảng không quảng cáo trên web sẽ được ưu tiên.

Ví dụ:

<fulfillment urlTemplate="{@url}">
    <!-- No parameter-mapping is needed -->
</fulfillment>
<entity-set entitySetId="...">
    <entity name="..." url="https://my.url.fulfillment/1"/>
    <entity name="..." url="https://my.url.fulfillment/2"/>
</entity-set>

tham số {@url} có thể được kết hợp với các tham số khác. Ví dụ:

<fulfillment urlTemplate="{@url}?referrer=actions_on_google{&amp;other_param}">
    <parameter-mapping intentParameter="otherParam.name" urlParameter="other_param"/>
</fulfillment>
<entity-set entitySetId="...">
    <entity name="..." url="https://my.url.fulfillment/1"/>
    <entity name="..." url="https://my.url.fulfillment/2"/>
</entity-set>

So khớp tham số

Cách Google so khớp tham số từ cách phát âm của người dùng với các thực thể bạn đã chỉ định sẽ phụ thuộc vào loại tham số:

  • Enum: Google so khớp truy vấn của người dùng ("monday") với một URL enum liên kết ("http://schema.org/Monday"), sau đó chọn thực thể có giá trị sameAs khớp với URL enum.
  • Chuỗi: Google chọn thực thể có giá trị name hoặc alternateName khớp với truy vấn của người dùng.

Ví dụ

Phần dưới đây cho thấy ví dụ về cách sử dụng các ý định tích hợp trong actions.xml.

Tài chính - tài khoản và việc thanh toán

Ví dụ actions.xml dưới đây sử dụng ý định tích hợp actions.intent.CREATE_MONEY_TRANSFER:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.CREATE_MONEY_TRANSFER">
        <fulfillment urlTemplate="mybankapp://transfer{?amount,currency,recipientBankAccountType,senderBankAccountType,mode}">
            <parameter-mapping intentParameter="moneyTransfer.amount.value" urlParameter="amount" />
            <parameter-mapping intentParameter="moneyTransfer.amount.currency" urlParameter="currency" />
            <parameter-mapping intentParameter="moneyTransfer.moneyTransferDestination.name" urlParameter="recipientBankAccountType" />
            <parameter-mapping intentParameter="moneyTransfer.moneyTransferOrigin.name" urlParameter="senderBankAccountType" />
            <parameter-mapping intentParameter="moneyTransfer.transferMode" urlParameter="mode" />
        </fulfillment>
    </action>
</actions>

Thể dục - dinh dưỡng

Ví dụ actions.xml dưới đây sử dụng ý định tích hợp actions.intent.RECORD_FOOD_OBSERVATION:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.RECORD_FOOD_OBSERVATION">
        <parameter name="foodObservation.forMeal">
            <entity-set-reference entitySetId="MealEntitySet"/>
        </parameter>
        <fulfillment urlTemplate="myfoodapp://record{?food,meal}">
            <parameter-mapping intentParameter="foodObservation.forMeal" urlParameter="meal" entityMatchRequired="true" />
            <parameter-mapping intentParameter="foodObservation.aboutFood.name" urlParameter="food" />
        </fulfillment>
    </action>
    <entity-set entitySetId="MealEntitySet">
        <entity sameAs="http://schema.googleapis.com/MealTypeBreakfast" identifier="1" />
        <entity sameAs="http://schema.googleapis.com/MealTypeLunch" identifier="2" />
        <entity sameAs="http://schema.googleapis.com/MealTypeDinner" identifier="3" />

    </entity-set>
</actions>

Đặt món ăn

Ví dụ actions.xml dưới đây sử dụng ý định tích hợp actions.intent.ORDER_MENU_ITEM:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.ORDER_MENU_ITEM">
        <parameter name="menuItem.inMenuSection.inMenu.forRestaurant.servesCuisine">
            <entity-set-reference entitySetId="CuisineEntitySet"/>
        </parameter>
        <fulfillment urlTemplate="myfoodapp://order{?restaurant}">
            <parameter-mapping intentParameter="menuItem.inMenuSection.inMenu.forRestaurant.name" urlParameter="restaurant" required="true" />
        </fulfillment>
        <!-- URL values are derived from a matched entity from the CuisineEntity Set. This is not a fallback fulfillment because {@url} is a required parameter. -->
        <fulfillment urlTemplate="{@url}" />
        <!-- Fallback fulfillment with no required parameters -->
        <fulfillment urlTemplate="myfoodapp://browse{?food}">
            <parameter-mapping intentParameter="menuItem.name" urlParameter="food" />
        </fulfillment>
    </action>
    <entity-set entitySetId="CuisineEntitySet">
        <entity url="myfoodapp://browse/italian/pizza" name="@string/pizza" alternateName="@array/pizzaSynonyms" />
        <entity url="myfoodapp://browse/american/hamburger" name="@string/hamburger" alternateName="@array/hamburgerSynonyms" />
        <entity url="myfoodapp://browse/mediterranean" name="@string/mediterranean" alternateName="@array/mediterraneanSynonyms" />
    </entity-set>
</actions>

Giao thông

Tệp actions.xml sau đây sử dụng ý định tích hợp actions.intent.CREATE_TAXI_RESERVATION:

<actions>
    <action intentName="actions.intent.CREATE_TAXI_RESERVATION">
        <fulfillment urlTemplate="https://taxi-actions.firebaseapp.com/order{?dropoffAddress}">
            <!-- Dropoff location as an address -->
            <parameter-mapping
                    intentParameter="taxiReservation.dropoffLocation.name"
                    urlParameter="dropoffAddress"/>
        </fulfillment>
    </action>
</actions>

Khác

Ví dụ actions.xml dưới đây sử dụng ý định tích hợp actions.intent.OPEN_APP_FEATURE:

<?xml version="1.0" encoding="utf-8"?>
<actions>
    <action intentName="actions.intent.OPEN_APP_FEATURE">
        <!-- Each parameter can reference an entity set using a custom ID. -->
        <parameter name="feature">
            <entity-set-reference entitySetId="FeatureEntitySet"/>
        </parameter>

        <fulfillment urlTemplate="myexampleapp://pathto{?appFeature}">
            <parameter-mapping intentParameter="feature" urlParameter="appFeature" />
        </fulfillment>
    </action>

    <entity-set entitySetId="FeatureEntitySet">
        <entity identifier="FEATUREONE" name="first feature" />
        <entity identifier="FEATURETWO" name="second feature" />
    </entity-set>
</actions>