actions.xml 만들기(지원 중단됨)

구현하려는 인앱 기능과 내장 인텐트(BII)를 식별한 후 Android 앱에서 BII를 앱 기능에 매핑하는 actions.xml 리소스를 만듭니다. actions.xml에 정의된 앱 작업에는 각 BII가 처리를 확인하는 방법과 추출되어 앱에 제공되는 매개변수에 관한 설명이 포함됩니다.

개요

Android 앱을 앱 작업과 통합하려면 actions.xml 파일을 앱 프로젝트의 res/xml 디렉터리에 배치해야 합니다.

<meta-data> 태그를 사용하여 AndroidManifest.xml 파일 내 actions.xml 파일에 대한 참조를 추가합니다. 예를 들면 다음과 같습니다.

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

이렇게 하면 APK에 xml/actions.xml 파일의 XML 리소스가 선언됩니다. Android의 리소스 지정 방식에 관한 자세한 내용은 Android 개발자 문서의 앱 리소스 개요를 참고하세요.

스키마

다음 표에서는 actions.xml의 스키마를 설명합니다. 태그를 포함할 때 선택사항으로 표시되지 않는 한 태그의 모든 속성은 필수 속성입니다.

태그 포함된 요소 속성
<actions> 최상위 수준
<action> <actions>

intentName

queryPatterns(맞춤 인텐트에만 해당됨)

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

entitySetId 또는

urlFilter

<fulfillment> <action>

urlTemplate

fulfillmentMode(선택사항)

requiredForegroundActivity(선택사항)

<parameter-mapping> <fulfillment>

urlParameter

intentParameter

required(선택사항)

entityMatchRequired(선택사항)

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

name(및 선택적으로 alternateName) 또는

sameAs

identifier 또는 url

태그 설명

이 섹션에서는 actions.xml의 다양한 스키마 태그를 설명합니다.

<action>

앱에서 지원하는 앱 작업 actions.xml 파일의 모든 <action> 태그에 하나 이상의 <fulfillment>를 제공해야 합니다.

속성:

  • intentName: 앱 작업을 위한 내장 인텐트(예: actions.intent.CREATE_TAXI_RESERVATION). 지원되는 내장 인텐트 목록은 내장 인텐트 참조를 확인하세요.

  • queryPatterns: 이 인텐트와 관련해 사용자가 예상한 쿼리 세트. BII에는 사용자가 원하는 작업 또는 정보를 표현하는 일반 방식의 모델이 이미 포함되어 있기 때문에, 이 속성은 맞춤 인텐트에만 해당됩니다.

<parameter>

연결된 항목의 이름과 목록이 있는 앱 작업의 매개변수.

속성:

  • name: 매개변수와 연결할 이름(예: 'destination'). 이름은 매개변수의 리프 레벨 필드(예: tradeOrder.assetOrdered.assetIssuedBy.name)입니다. 매개변수가 문자열과 같은 원시 유형인 경우 이름은 매개변수 이름 자체입니다.

<entity-set-reference>

개발자가 제공하는 schema.org 피드에 대한 참조. 피드는 <entity-set> 태그를 사용하여 actions.xml 파일에 직접 제공해야 합니다.

속성:

  • entitySetId: 특정 항목 모음에 대한 참조입니다. 이 속성은 <entity-set> 태그의 entitySetId와 일치해야 합니다.

  • urlFilter: 처리를 위한 웹 인벤토리를 제공할 때 사용되는 URL 경로. 이 속성에는 2개의 와일드 카드가 지원됩니다.

    • *: 별표를 사용하면 바로 앞에 있는 문자가 0번 이상 나오는 일치 항목을 찾습니다.

    • .*: 마침표 다음에 별표를 사용하면 0자 이상 일치하는 항목을 찾습니다.

    • 이스케이프 문자는 각각 \\*\\\\로 이스케이프 처리할 수 있는 리터럴 *\에만 필요합니다.

<fulfillment>

Android 앱을 사용하여 사용자 인텐트를 처리하는 방법에 관한 정보. 개발자는 각 인텐트에 필요한 다양한 매개변수 집합과 함께 actions.xml에 여러 개의 <fulfillment> 태그를 제공할 수 있습니다.

Google에서는 사용자 쿼리를 처리하는 데 필요한 모든 매개변수를 사용할 수 있는 첫 번째 <fulfillment>를 사용합니다. 필수 매개변수가 없는 한 개의 <fulfillment>를 대체 처리로 제공해야 합니다.

속성:

  • urlTemplate: 기기에서 열 딥 링크 또는 Slice URI를 만들기 위한 템플릿. 템플릿에 필요한 모든 매개변수를 사용할 수 있는 경우 템플릿은 사용자 인텐트의 매개변수로 확장될 수 있습니다. HTTP URL 템플릿의 예는 URL 템플릿에 관한 위키백과 문서를 참고하세요. 템플릿 형식은 RFC 6570 URI 템플릿 사양을 따릅니다.

  • fulfillmentMode: (선택사항) 서비스 제공에 사용되는 처리 모드. 유효한 값은 다음과 같습니다.

    • actions.fulfillment.DEEPLINK: 딥 링크를 사용하여 Android 앱을 열어 사용자 작업을 처리합니다. 이는 기본값입니다.

    • actions.fulfillment.SLICE: Android 앱에 제공되는 Slice를 삽입하여 사용자 작업을 처리합니다.

  • requiredForegroundActivity: (선택사항) 앱 작업을 위해 포그라운드에 있어야 하는 활동은 포그라운드 앱 호출로 트리거되어야 함을 나타냅니다.

    • 활동을 지정할 때는 클래스 약어 없이 앱 패키지 이름을 사용하고 그 뒤에 슬래시(/)와 활동 이름을 차례로 입력합니다(APP_PACKAGE_NAME/ACTIVITY_NAME).

다음은 URL 템플릿 값의 몇 가지 예입니다.

템플릿 확장 값
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

URL 템플릿 구성 방법에 관한 자세한 내용은 처리 태그에 URL 템플릿 선언을 참고하세요.

<parameter-mapping>

인텐트 매개변수에서 URL 템플릿의 변수로 매핑됩니다. 이 맵의 키는 RFC 6570에 설명된 대로 URL 템플릿 매개변수 또는 '변수'를 나타냅니다.

매개변수가 인텐트에 포함되어 있지 않으면 URL 템플릿이 확장될 때 상응하는 변수는 정의되지 않는 상태로 남게 됩니다. 정의되지 않은 변수가 처리되는 방법에 관한 설명은 RFC 6570, 섹션 3.2.1을 참고하세요.

required="true"entityMatchRequired="true"는 다릅니다.

속성:

  • urlParameter: URL 템플릿에 언급된 모든 변수에는 그에 상응하는 <parameter-mapping>urlParameter가 있어야 합니다. 예를 들어 uri_template이 http://spysatellite.com/show{?lat,long}이면 매개변수 latlong과 관련해 <parameter-mapping>의 키가 있어야 합니다.

  • intentParameter: 값은 인텐트 매개변수를 참조합니다. 인텐트 매개변수가 구조화된 유형인 경우 점 표기법을 사용하여 중첩 필드를 참조합니다. 예를 들어 schema.org/TaxiReservation 유형의 매개변수 taxiReservation이 있는 경우 위도 값을 참조하려면 taxiReservation.pickupLocation.geo.latitude를 사용하면 됩니다.

    이 매개변수의 항목 세트를 제공하는 경우 intentParameter는 상응하는 <parameter> 태그의 이름(예: taxiReservation.pickupLocation.geo.latitude)과 정확히 일치해야 합니다.

    인텐트 매개변수의 유형이 복잡하다면 값은 매개변수의 객체 참조(예: taxiReservation)에 상응합니다. 인텐트 매개변수가 프리미티브 유형이면 값은 매개변수 이름 자체입니다.

  • required: (선택사항) 이 URL 템플릿이 유효하려면 지정된 intentParameter가 있어야 함을 나타냅니다. 사용자 쿼리에 지정된 intentParameter의 값이 없으면 URL 템플릿은 삭제됩니다.

  • entityMatchRequired: (선택사항) 지정된 intentParameter에 일치되는 인벤토리가 있어야 함을 나타냅니다. 기본값은 false입니다.

    이 속성을 true로 설정할 경우 일치하는 인벤토리가 있으면 그 일치 항목의 식별자가 URL 템플릿에 전달됩니다. 일치 항목이 없으면 어시스턴트는 처리를 건너뜁니다.

    이 속성을 false로 설정할 경우 일치하는 인벤토리가 있으면 그 일치 항목의 식별자가 URL 템플릿에 전달됩니다. 일치 항목이 없으면 어시스턴트는 사용자 쿼리에서 추출된 BII 매개변수 값을 제공합니다.

<entity-set>

actions.xml의 인라인 항목 세트.

속성:

  • entitySetId: actions.xml<entity-set>에 필요한 고유 식별자(예: "myInlineEntitySet1"). 이 값은 <entity-set-reference> 태그의 <entitySetId> 값과도 같아야 합니다.

    entitySetId의 값은 최대 30자의 영숫자 문자(- 또는 _ 같은 특수문자 없음)를 포함해야 하고 문자로 시작해야 합니다.

<entity>

actions.xml에 인라인된 항목 세트 간의 요소. schema.org/Thing 필드의 하위 집합이 포함되어 있습니다.

url, identifier, sameAs 필드의 문자열 값은 하드코딩되거나 APK의 문자열 리소스를 사용하여 참조될 수 있습니다. 동의어를 제공할 경우 APK의 문자열 배열 리소스를 참조하는, alternateName 필드의 문자열 값을 사용합니다.

속성:

  • name: sameAs 필드를 지정하지 않는 경우 항목의 필수 이름. 지정된 <entity-set>의 항목 namealternateName 필드 간에 고유해야 합니다(예: 'toothpaste').

  • alternateName: (선택사항) 항목의 대체 이름. alternateName 필드를 지정하기 전에 name 필드를 지정해야 합니다. 지정된 <entity-set>의 항목 namealternateName 필드 간에 고유해야 합니다. 사용자 쿼리가 그러한 문자열과 일치하면 항목이 선택됩니다.

  • sameAs: 항목을 명확하게 식별하는 참조 웹페이지의 URL. 인텐트 매개변수 유형이 schema.org/Enumeration의 하위유형인 경우에만 enum 값을 지정하는 데 사용됩니다.

    이는 유형이 schema.org/Enumeration의 하위유형에 속하는 매개변수 필드에 필요합니다(예: MealTypeBreakfast).

  • identifier: 항목의 식별자. 지정된 <entity-set>의 항목 간에 고유해야 합니다(예: CAPPUCCINO_ID).

  • url: Android 기기에서 열 RFC 3986 URL. 이 URL은 HTTP 클라이언트에서 확인하지 못할 수 있습니다. 예를 들어 Android에서 URL은 앱에 연결된 'http://' URL이거나 기기별 URL(예: 'intent://' URL) 또는 맞춤 URL 스키마의 URL일 수 있습니다.

    다음과 같은 방법으로 url 필드를 <fulfillment>urlTemplate 속성과 함께 사용할 수 있습니다.

    • 인라인 인벤토리에 url 값을 제공하고 <fulfillment>에서 urlTemplate을 생략합니다.

    • 인라인 인벤토리에 url 값을 제공하고 그 값을 urlTemplate 값(예: {@url}?extra_param=ExampleValue)에 사용합니다.

identifier 또는 url은 반드시 제공해야 합니다. 지정된 항목 집합 내의 모든 항목은 동일한 속성(identifier 또는 url)을 사용해야 합니다.

앱 작업을 위한 인라인 인벤토리

선택적으로 일부 내장 인텐트에서는 항목 추출을 actions.xml에 지정된 지원되는 항목 집합(인라인 인벤토리하고 함)으로 유도할 수 있습니다. 사용자가 앱 작업을 호출하면 어시스턴트는 사용자 쿼리 매개변수를 인라인 인벤토리로 지정된 항목과 일치시킵니다. 그러면 Google 어시스턴트는 처리에 사용할 딥 링크를 생성할 때 인벤토리 항목에 상응하는 식별자를 사용할 수 있습니다.

주로 <entity-set><entity> 요소를 사용하여 인라인 인벤토리를 정의할 수 있습니다. 인라인 인벤토리는 앱이 문자열이나 Google 열거형 값을 인식할 필요 없이 앱 작업 호출의 식별자나 URL만 처리하도록 하여 개발을 간소화합니다.

예를 들어 앱에서 사용자가 주문할 수 있는 다양한 음료를 제공할 경우 개발자는 사용자가 동일한 유형의 음료를 다음과 같이 요청할 것으로 예상할 수 있습니다.

  • Hey Google, ExampleApp에서 블루베리 크리스피 아이스 시그니처 라떼를 주문해 줘.

  • Hey Google, ExampleApp에서 블루베리 아이스 커피를 주문해 줘.

인라인 인벤토리에서 식별자 12345a에 해당하는 항목으로 '블루베리 크리스피 아이스 시그니처 라떼'를 지정합니다. 또한 '블루베리 아이스 커피'도 같은 식별자에 해당하는 항목으로 지정합니다. 이제 사용자가 위의 쿼리로 앱 작업을 트리거하면 어시스턴트는 처리에 사용할 딥 링크를 생성할 때 12345a 식별자를 사용할 수 있습니다.

모든 항목 집합에서 앱당 최대 1,000개의 항목을 지정할 수 있습니다. <entity>별로 최대 20개의 alternateName 동의어 값을 정의할 수 있습니다.

앱 작업을 위한 웹 인벤토리

일부 내장 인텐트에서는 웹 인벤토리를 처리에 사용할 URL을 생성하는 방법으로 사용할 수 있습니다. 웹 인벤토리는 웹사이트를 기반으로 앱 작업 처리를 위한 URL을 탐색합니다. 이 기능은 웹 인지도가 강하고 공개된 웹 콘텐츠를 중심으로 인앱 딥 링크가 구성된 경우에 가장 유용합니다.

웹 인벤토리를 사용하려면 actions.xml을 업데이트합니다.

  1. 웹 인벤토리를 사용하려는 <action> 태그에서 <fulfillment> 태그를 추가하고 urlTemplate 속성을 {@url}로 설정합니다.

  2. 동일한 <action> 태그에서 <parameter> 태그를 추가하고, 웹페이지에 설명된 항목에 가장 근접한 내장 인텐트 매개변수에 name 속성을 설정합니다. 예를 들어 ORDER_MENU_ITEM을 위한 웹 인벤토리를 제공할 경우 메뉴 페이지를 menuItem.name에, 레스토랑 위치 페이지를 menuItem.inMenuSection.inMenu.forRestaurant.name에 연결합니다.

  3. <parameter> 태그에서 <entity-set-reference> 태그를 추가하고, 웹 인벤토리에 사용할 URL 경로에 urlFilter 속성을 설정합니다.

위 단계를 따르면 어시스턴트가 urlFilter 속성에 제공된 URL 경로에서 웹 검색을 할 수 있습니다. 그런 다음 Google 어시스턴트가 그 결과를 사용하여 처리에 {@url} 값을 제공합니다. 그러면 딥 링크 핸들러는 관련 처리를 위해 어시스턴트에서 반환된 딥 링크를 기반으로 사용자를 라우팅할 수 있습니다.

예를 들어 https://www.example.com/items/로 시작하는 경로의 제품 목록이 웹사이트에 포함되어 있다고 가정해 보겠습니다. urlFilterhttps://www.example.com/items/.*를 사용하면 어시스턴트가 나중에 https://www.example.com/items/item123과 같은 처리 URL을 반환합니다. urlFilter 속성에 관한 자세한 내용은 <entity-set-reference>를 참고하세요.

처리 태그에 URL 템플릿 선언

<fulfillment> 태그에서는 동적 매개변수의 자리표시자와 함께 URL 템플릿을 선언할 수 있습니다. 이 템플릿은 앱 링크 URL, 맞춤 스키마 또는 인텐트 기반 URL을 사용하여 Android 활동 중 하나에 매핑됩니다.

URL 템플릿 구성

앱 링크 URL의 예:

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

맞춤 스키마의 예:

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

인텐트 기반 URL의 예:

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

처리 <parameter-mapping> 태그를 지정할 때 intentParameter 속성은 사용자가 제공한 내장 인텐트 매개변수를 나타냅니다. 위의 예에서 그 매개변수는 하차 위치 이름(taxiReservation.dropoffLocation.name)입니다. 내장 인텐트 참조에서 지정된 내장 인텐트에 사용 가능한 매개변수를 확인할 수 있습니다.

내장 인텐트 매개변수를 URL의 위치에 매핑하려면 <parameter-mapping> 태그의 urlParameter 속성을 사용하면 됩니다. 이 속성은 URL 템플릿에서 사용자의 정보로 대체하려는 자리표시자 값에 해당합니다. 자리표시자 값은 urlTemplate에 있어야 하고 중괄호({})로 묶여야 합니다.

앱 링크 URL을 사용하는 경우 urlTemplateActivity를 트리거할 수 있는 일반 HTTP URL을 가리킵니다. 매개변수는 앱 링크 URL에 URL 매개변수로 전달됩니다. urlTemplate의 매개변수는 중괄호({})로 묶고 물음표(?)를 접두사로 사용해야 합니다. 매개변수가 설정되지 않으면 매개변수(중괄호 포함)는 결과에서 생략됩니다.

예를 들어 사용자가 샌프란시스코로 가는 택시를 불러달라고 요청하여 앱 작업을 트리거한 경우 (매개변수 대체 후) 트리거되는 최종 URI는 다음과 같습니다.

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

인텐트 기반 URL

인텐트 기반 URL을 사용 중인 경우 urlTemplate 값에는 패키지 이름, 인텐트 작업, 하차라는 추가 인텐트 한 개가 포함됩니다. 추가 항목은 String 인텐트 추가 항목(Intent.toUri()를 통해 정의됨)을 나타내는 'S.'가 접두사로 추가되고, 중괄호로 묶여 매개변수로 대체되었음을 나타냅니다.

인텐트 작업을 인텐트 추가 항목에서 분리하려면 선행 세미콜론이 추가로 필요합니다(매개변수가 설정된 경우에만 포함됨).

다음 예에서 urlParameter 값은 S.dropoff로 설정됩니다. urlTemplate에서 이 값을 찾으면 URL에서 이 값이 표시되는 위치를 확인할 수 있습니다.

예를 들어 사용자가 샌프란시스코로 가는 차량 공유 서비스를 요청하여 앱 작업을 트리거하는 경우 (매개변수 대체 후) 트리거되는 최종 URI는 다음과 같습니다.

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

인텐트에 관한 자세한 내용은 Android 인텐트 문서를 참고하세요.

URL 템플릿에 항목의 URL 값 사용

기본적으로 <entity>가 사용자의 쿼리와 일치하면 identifier 속성의 값이 URL 템플릿에 전달됩니다. 대신 <entity>url 속성을 참조하려면 URL 템플릿에 {@url}을 사용하고 <parameter-mapping> 태그는 사용하지 마세요. 식별자 값은 URL 이스케이프 처리되지만 url 속성 값은 변경되지 않고 유지됩니다.

URL 템플릿의 {@url}이 처리에 사용되는 경우 웹 인벤토리와 인라인 인벤토리 같은 소스에서 {@url}을 도출하려고 시도됩니다. 웹 인벤토리와 인라인 인벤토리가 모두 {@url}을 도출하기 위한 잠재적인 소스인 경우 웹 인벤토리가 우선합니다.

예를 들면 다음과 같습니다.

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

{@url} 매개변수는 다른 매개변수와 함께 사용할 수 있습니다.

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

매개변수 일치

Google에서 사용자 음성에서 비롯된 매개변수를 개발자가 지정한 항목과 일치시키는 방식은 매개변수 유형에 따라 다릅니다.

  • Enum: Google은 사용자의 쿼리('Monday')를 연결된 enum URL('http://schema.org/Monday')과 일치시킨 다음, enum URL과 일치하는 sameAs 값을 갖는 항목을 선택합니다.
  • String: Google은 name 또는 alternateName 값이 사용자의 쿼리와 일치하는 항목을 선택합니다.

이 섹션에서는 actions.xml에서 내장 인텐트를 활용하는 방법의 예를 보여줍니다.

금융 - 계정 및 결제

다음 actions.xml 예에서는 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>

피트니스 - 영양

다음 actions.xml 예에서는 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>

음식 주문

다음 actions.xml 예에서는 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>

교통정보

다음 actions.xml 파일은 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>

기타

다음 actions.xml 예에서는 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>