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

Sau khi xác định chức năng trong ứng dụng và ý định tích hợp (BII) 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 để liên kết BII với 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 phương thức thực hiện, 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ừ phi 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 (không bắt buộc)) 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 được hỗ trợ, vui lòng xem tài liệu tham khảo về ý định tích hợp.

  • 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 tuỳ chỉnh, vì BII đã bao gồm mô hình những cách phổ biến người dùng thể hiện nhiệm vụ họ đang cố thực hiện hoặc thông tin họ tìm kiếm.

<parameter>

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ư "đích đến"). Tên phải là một trường ở cấp độ lá 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ư chuỗi, thì tên chính là tên của tham số đó.

<entity-set-reference>

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 lần xuất hiện đến nhiều lần xuất hiện của ký tự đứng ngay trước đó.

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

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

<fulfillment>

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 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ị. Mẫu có thể mở rộng 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 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ời 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

Sau đâ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{?someValue,anotherValue} "someValue": "123"

"anotherValue": "456"

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

"anotherValue": "456"

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

"S.extra2": "456"

intent://example#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 khoá trong ánh xạ này đại diện cho tham số mẫu URL hoặc "biến" như 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 được 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 cung cấp một nhóm thực thể cho tham số này, intentParameter phải khớp chính xác với tên của thẻ <parameter> tương ứng (ví dụ: taxiReservation.pickupLocation.geo.latitude).

    Nếu tham số ý định có loại phức tạp, thì giá trị sẽ tương ứng với tham chiếu đối tượng cho tham số đó (ví dụ: taxiReservation). Nếu tham số ý định có loại nguyên gốc, thì giá trị sẽ chính là tên của 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ã hoá cứng hoặc tham chiếu giá trị chuỗi cho các trường url, identifiersameAs bằng 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 thực thể cho <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ẽ mở trên thiết bị Android. Ứng dụng HTTP cũng có thể không 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 giản đồ URL tuỳ 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ể tuỳ ý 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 hoá việc phát triển bằng cách chỉ cho phép ứng dụng của bạn xử lý giá trị nhận dạng hoặc URL từ lời 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:

  • Ok Google, đặt một ly Blueberry Crisp Iced Signature Latte trên Ứng dụng mẫu.

  • Ok Google, đặt một ly Blueberry Iced Coffee trên Ứng dụng mẫu.

Trong khoảng không quảng cáo nội tuyến, bạn cần chỉ định "Ly Blueberry Crisp Iced Signature Latte" 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 "Ly Blueberry Iced Coffee" là 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 trước đó, Trợ lý có thể sử dụng giá trị nhận dạng 12345a khi tạo đường liên kết sâu cho phương thức thực hiện.

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ẻ này thành đường dẫn URL 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 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, giản đồ tuỳ 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, thuộc tính intentParameter biểu thị tham số ý định tích hợp 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 đã cho trong phần tham chiếu ý định tích hợp.

Để liên kết tham số có ý định tích hợp 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 ({}).

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 Activity 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, thì 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 phụ String (như được Intent.toUri() xác định) 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 thao tác theo ý định đó với ý định phụ (và chỉ đưa vào nếu tham số này được đặt).

Trong ví dụ sau, giá trị urlParameter được đặt thành S.dropoff; bạn có thể thấy vị trí giá trị này xuất hiện trong URL 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 một Hành động trong ứng dụ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.

Điều này được thể hiện trong ví dụ sau:

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

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