Görüşme İşlemleri 13 Haziran 2023'te kullanımdan kaldırılacaktır. Daha fazla bilgi için Görüşme İşlemlerinin kullanımdan kaldırılması sayfasına göz atın.

Yardımcı amaçları (Dialogflow)

Dialogflow'da Keşfedin

Dialogflow'daki Yardımcılar örneğimizi içe aktarmak için Devam'ı tıklayın. Ardından örneği dağıtmak ve test etmek için aşağıdaki adımları uygulayın:

  1. Bir aracı adı girin ve örnek için yeni bir Dialogflow aracısı oluşturun.
  2. Temsilcinin içe aktarımı tamamlandıktan sonra Temsilciye git'i tıklayın.
  3. Ana gezinme menüsünden Karşılama'ya gidin.
  4. Satır içi düzenleyiciyi etkinleştirin ve ardından Dağıt'ı tıklayın. Düzenleyici, örnek kodu içerir.
  5. Ana gezinme menüsünden Entegrasyonlar'a gidin ve Google Asistan'ı tıklayın.
  6. Görünen mod penceresinde Değişiklikleri otomatik önizle'yi etkinleştirin ve Test et'i tıklayarak Actions simülatörünü açın.
  7. Simülatörde, örneği test etmek için Talk to my test app yazın.
Devam

Yardımcılar, bir kullanıcının tam adı, tarihi ve saati ya da teslimat adresi gibi sık kullanılan verileri almak için Asistan'a konuşmayı anlık olarak devralmasını ister. Asistan istediğinizde bu bilgileri edinebilmeleri için kullanıcılara standart, tutarlı bir kullanıcı arayüzü sunarlar. Böylece kendi kullanıcı arayüzünüzü tasarlamanız gerekmez.

Kullanıma genel bakış

Dialogflow ve Actions SDK'sı ile yardımcı kullanımı genel süreç, Dialogflow ve Actions SDK'sı için aşağıda açıklanmıştır. Her yardımcı hakkında daha fazla bilgi için ilgili yardımcı bölümlerine bakın.

Dialogflow

Node.js

  1. Uygun yardımcı nesneyle conv.ask() öğesini arayın. Bir yardımcı işlevi çağırdığınızda istemci kitaplığı, Asistan'a karşılık gelen yardımcı amacını içeren bir yanıt gönderir. Asistan, niyetlerine bağlı olarak ilgili yardımcının iletişim kutusunu göstereceğini bilir.
  2. Yardımcı amaçlardan birine karşılık gelen bir etkinliği belirten Dialogflow niyeti tanımlayın. Desteklenen etkinliklerin listesi için yardımcı amaçlar bölümüne bakın. Bu niyetin herhangi bir Userının deyimi olması gerekmez. Etkinlik etkinleştiğinde (Asistan yardımcıyı taşımayı tamamladığında) bu amaç her zaman tetiklenir.
  3. Asistan, istek karşılama işleminizin ardından gelen istekte yardımcının sonucunu döndürdüğünde ilgili Dialogflow niyeti tetiklenir ve niyet normal şekilde işlenir.

JSON

  1. Asistan'a yanıt verirken possibleIntents nesnesinde yardımcının amacını belirtin. Asistan, yanıtı aldığında yardımcının iletişim kutusunu yürütmesi gerektiğini bilir. Hangi amaçların yerine getirilmesini isteyebileceğinizle ilgili bilgi için yardımcı amaçlarına bakın.
  2. Yardımcı amaçlardan birine karşılık gelen bir etkinliği belirten Dialogflow niyeti tanımlayın. Desteklenen etkinliklerin listesi için yardımcı amaçlar bölümüne bakın. Bu niyet, etkinlik tetiklendiğinde her zaman tetiklendiği için Kullanıcı şöyle diyor ifadelerine gerek yoktur.
  3. Asistan, karşılamanıza yönelik bir sonraki istekte yardımcının sonucunu döndürürse isteği ve ihtiyacınız olan verileri ayrıştırın.

Actions SDK

Node.js

  1. Uygun parametreleri kullanarak ask adlı kişiyi arayın. Yardımcı işlev, Asistan'dan yardımcı amaçlarda açıklanan amaçlardan birini yerine getirmesini ister. Bir yardımcı işlevi çağırdığınızda istemci kitaplığı, Asistan'a bu amaçlardan birini içeren bir yanıt gönderir. Asistan, amacına göre ilgili yardımcının iletişim kutusunu göstereceğini bilir.
  2. Asistan, istek karşılama isteğinizin ardından gelen istekteki yardımcının sonucunu döndürürse istekteki ilgili niyeti alırsınız. Bu, bir yardımcının sonuç döndürdüğünü algılamanızı sağlar. İhtiyacınız olan verileri elde etmek için yardımcının ilgili alıcı işlevini kullanın.

JSON

  1. Asistan'a yanıt verirken possibleIntents nesnesinde yardımcının amacını belirtin. Asistan, yanıtı aldığında yardımcının iletişim kutusunu yürütmesi gerektiğini bilir. Hangi amaçların yerine getirilmesini isteyebileceğinizle ilgili bilgi için yardımcı amaçlarına bakın.
  2. Asistan, karşılamanıza yönelik bir sonraki istekte yardımcının sonucunu döndürürse isteği ve ihtiyacınız olan verileri ayrıştırın.

Yardımcı amaçları

Aşağıdaki tabloda, Asistan'dan yerine getirmesini isteyebileceğiniz desteklenen amaçlar açıklanmaktadır. Dialogflow kullanıyorsanız yardımcı yardımcı için ilgili etkinliği belirten bir Dialogflow niyeti de oluşturmanız gerekir.

Amaç adı Dialogflow Etkinlik adı Kullanım
actions.intent.PERMISSION actions_intent_PERMISSION Kullanıcının tam adını, yaklaşık konumunu veya tam konumunu ya da üçünü birden alabilir.
actions.intent.OPTION actions_intent_OPTION Seçili öğeyi bir liste veya bant kullanıcı arayüzünden alın. Veya kullanıcı listeden ya da bant kullanıcı arayüzünden seçim yapmazsa listedeki veya bant kullanıcı arayüzündeki anahtarla eşleşen konuşma veya metin girişi alın.
actions.intent.DATETIME actions_intent_DATETIME Kullanıcıdan tarih ve saat girişi bilgilerini alın.
actions.intent.SIGN_IN actions_intent_SIGN_IN Bir kullanıcının hesabını bağlamak için hesap bağlama akışı istenir.
actions.intent.PLACE actions_intent_PLACE Kullanıcıdan bir adresi veya kayıtlı konumu alın.
actions.intent.CONFIRMATION actions_intent_CONFIRMATION Kullanıcının onayını alın (ör. "Evet" veya "Hayır" yanıtını verin).

Aşağıdaki bölümlerde, mevcut yardımcıları ve yardımcıyı kullanmak için istekte bulunmanız gereken ilişkili amaç açıklanmaktadır.

Kullanıcı bilgileri

Bu yardımcı hesapla aşağıdaki kullanıcı bilgilerini edinebilirsiniz:

  • Görünen ad
  • Ad
  • Soyadı
  • Yaklaşık cihaz konumu (posta kodu ve şehir)
  • Kesin cihaz konumu (koordinatlar ve açık adres)

Yardımcı aranıyor

Aşağıdaki kod örneğinde, istemci kitaplığını kullanarak yardımcıyı nasıl çağırabileceğiniz gösterilmektedir. JSON snippet'leri, ilgili webhook yanıtını gösterir.

Node.js

app.intent('Permission', (conv) => {
  const permissions = ['NAME'];
  let context = 'To address you by name';
  // Location permissions only work for verified users
  // https://developers.google.com/actions/assistant/guest-users
  if (conv.user.verification === 'VERIFIED') {
    // Could use DEVICE_COARSE_LOCATION instead for city, zip code
    permissions.push('DEVICE_PRECISE_LOCATION');
    context += ' and know your location';
  }
  const options = {
    context,
    permissions,
  };
  conv.ask(new Permission(options));
});

Java

@ForIntent("Permission")
public ActionResponse getPermission(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  String[] permissions = new String[] {ConstantsKt.PERMISSION_NAME};
  String context = "To address you by name";
  // Location permissions only work for verified users
  // https://developers.google.com/actions/assistant/guest-users
  if (request.getUser().getUserVerificationStatus().equals("VERIFIED")) {
    // Could use PERMISSION_DEVICE_COARSE_LOCATION instead for city, zip code
    permissions =
        new String[] {
          ConstantsKt.PERMISSION_NAME, ConstantsKt.PERMISSION_DEVICE_PRECISE_LOCATION
        };
  }
  responseBuilder
      .add("PLACEHOLDER")
      .add(new Permission().setPermissions(permissions).setContext(context));

  return responseBuilder.build();
}

Node.js

const permissions = ['NAME'];
let context = 'To address you by name';
// Location permissions only work for verified users
// https://developers.google.com/actions/assistant/guest-users
if (conv.user.verification === 'VERIFIED') {
  // Could use DEVICE_COARSE_LOCATION instead for city, zip code
  permissions.push('DEVICE_PRECISE_LOCATION');
  context += ' and know your location';
}
const options = {
  context,
  permissions,
};
conv.ask(new Permission(options));

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
String[] permissions = new String[] {ConstantsKt.PERMISSION_NAME};
String context = "To address you by name";
// Location permissions only work for verified users
// https://developers.google.com/actions/assistant/guest-users
if (request.getUser().getUserVerificationStatus().equals("VERIFIED")) {
  // Could use PERMISSION_DEVICE_COARSE_LOCATION instead for city, zip code
  permissions =
      new String[] {
        ConstantsKt.PERMISSION_NAME, ConstantsKt.PERMISSION_DEVICE_PRECISE_LOCATION
      };
}
responseBuilder
    .add("PLACEHOLDER")
    .add(new Permission().setPermissions(permissions).setContext(context));

return responseBuilder.build();

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.PERMISSION",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
          "optContext": "To address you by name and know your location",
          "permissions": [
            "NAME",
            "DEVICE_PRECISE_LOCATION"
          ]
        }
      }
    }
  }
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.PERMISSION",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
            "optContext": "To address you by name and know your location",
            "permissions": [
              "NAME",
              "DEVICE_PRECISE_LOCATION"
            ]
          }
        }
      ]
    }
  ]
}

Yardımcının sonuçları alınıyor

Aşağıdaki kod örneği, istemci kitaplığını kullanarak yardımcının sonucuna nasıl erişileceğini gösterir. JSON snippet'leri, isteği karşılamanıza yardımcı olacak sonucu içeren isteği temsil eder.

Node.js

app.intent('Permission Handler', (conv, params, confirmationGranted) => {
  // Also, can access latitude and longitude
  // const { latitude, longitude } = location.coordinates;
  const {location} = conv.device;
  const {name} = conv.user;
  if (confirmationGranted && name && location) {
    conv.ask(`Okay ${name.display}, I see you're at ` +
      `${location.formattedAddress}`);
  } else {
    conv.ask(`Looks like I can't get your information.`);
  }
  conv.ask(`Would you like to try another helper?`);
  conv.ask(new Suggestions([
    'Confirmation',
    'DateTime',
    'Place',
  ]));
});

Java

@ForIntent("Permission Handler")
public ActionResponse handlePermission(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  Location location = request.getDevice().getLocation();
  String name = request.getUser().getProfile().getDisplayName();

  if (request.isPermissionGranted()) {
    responseBuilder.add("Okay " + name + ", I see you're at " + location.getFormattedAddress());
  } else {
    responseBuilder.add("Looks like I can't get your information");
  }
  responseBuilder
      .add("Would you like to try another helper?")
      .addSuggestions(new String[] {"Confirmation", "DateTime", "Place"});

  return responseBuilder.build();
}

Node.js

app.intent('actions.intent.PERMISSION', (conv, confirmationGranted) => {
  // Also, can access latitude and longitude
  // const { latitude, longitude } = location.coordinates;
  const {location} = conv.device;
  const {name} = conv.user;
  if (confirmationGranted && name && location) {
    conv.ask(`Okay ${name.display}, I see you're at ` +
      `${location.formattedAddress}`);
  } else {
    conv.ask(`Looks like I can't get your information.`);
  }
  conv.ask(`Would you like to try another helper?`);
  conv.ask(new Suggestions([
    'Confirmation',
    'DateTime',
    'Place',
  ]));
});

Java

@ForIntent("actions.intent.PERMISSION")
public ActionResponse handlePermission(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  Location location = request.getDevice().getLocation();
  String name = request.getUser().getProfile().getDisplayName();

  if (request.isPermissionGranted()) {
    responseBuilder.add("Okay " + name + ", I see you're at " + location.getFormattedAddress());
  } else {
    responseBuilder.add("Looks like I can't get your information");
  }
  responseBuilder
      .add("Would you like to try another helper?")
      .addSuggestions(new String[] {"Confirmation", "DateTime", "Place"});

  return responseBuilder.build();
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "responseId": "f26883c9-0283-4827-85bf-533f4442b4f9-712767ed",
  "queryResult": {
    "queryText": "actions_intent_PERMISSION",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: Permission Handler",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: Permission Handler"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y/contexts/actions_capability_screen_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y/contexts/actions_capability_web_browser"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y/contexts/google_assistant_input_type_keyboard"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y/contexts/actions_intent_permission",
        "parameters": {
          "PERMISSION": true,
          "text": "yes"
        }
      }
    ],
    "intent": {
      "name": "projects/df-helpers-kohler/agent/intents/6475b0ef-dd52-4afa-a1b9-7a19e7e93a80",
      "displayName": "Permission Handler"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "profile": {
          "displayName": "Sachit Mishra",
          "givenName": "Sachit",
          "familyName": "Mishra"
        },
        "permissions": [
          "NAME",
          "DEVICE_PRECISE_LOCATION"
        ],
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y",
        "type": "ACTIVE",
        "conversationToken": "[]"
      },
      "inputs": [
        {
          "intent": "actions.intent.PERMISSION",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "yes"
            }
          ],
          "arguments": [
            {
              "name": "PERMISSION",
              "boolValue": true,
              "textValue": "true"
            },
            {
              "name": "text",
              "rawText": "yes",
              "textValue": "yes"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          }
        ]
      },
      "device": {
        "location": {
          "coordinates": {
            "latitude": 37.42241550000001,
            "longitude": -122.0840805
          },
          "formattedAddress": "Google Building 40 1600 Amphitheatre Parkway, Mountain View, California 94043",
          "zipCode": "94043",
          "city": "Mountain View"
        }
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.WEB_BROWSER"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            }
          ]
        }
      ]
    }
  },
  "session": "projects/df-helpers-kohler/agent/sessions/ABwppHGu7m_m6bTsKuLb6noyG_o-9BMSf8J9cfY8dpJIPN_hHT79qfqRrZPtyx515K-sl9SU8Jy3auH6pLmy99Y"
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "user": {
    "profile": {
      "displayName": "Sachit Mishra",
      "givenName": "Sachit",
      "familyName": "Mishra"
    },
    "permissions": [
      "DEVICE_PRECISE_LOCATION",
      "NAME"
    ],
    "locale": "en-US",
    "userVerificationStatus": "VERIFIED"
  },
  "conversation": {
    "conversationId": "ABwppHEcidO2jguO4hS8maDeMVx8aasSCcBWZHrF3EmOMIaWRP9qF0BcACistiIoeyiSNTW6KD_tqN_U-xAIOXhPvA",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.PERMISSION",
      "rawInputs": [
        {
          "inputType": "KEYBOARD",
          "query": "yes"
        }
      ],
      "arguments": [
        {
          "name": "PERMISSION",
          "boolValue": true,
          "textValue": "true"
        },
        {
          "name": "text",
          "rawText": "yes",
          "textValue": "yes"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.ACCOUNT_LINKING"
      },
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "device": {
    "location": {
      "coordinates": {
        "latitude": 37.4197238,
        "longitude": -122.08212759999999
      },
      "formattedAddress": "Google Building 45 1585 Charleston Road, Mountain View, California 94043",
      "zipCode": "94043",
      "city": "Mountain View"
    }
  },
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        }
      ]
    }
  ]
}

Yukarıdaki snippet, kullanıcının size bilgi verip vermediğini nasıl kontrol edeceğinizi ve ardından verilere nasıl erişeceğini gösterir.

Kullanıcının bilgilerini aldıktan sonra, bu bilgileri bir daha sormanıza gerek kalmadan devam etmenizi öneririz. Kullanıcı bilgilerini görüşmeler arasında depolamak için kullanıcı depolama alanını kullanabilirsiniz. UserStorage'in nasıl çalıştığını görmek için Node.js ve Java'daki Ad Medyum örneğimize göz atın.

Yardımcı aranıyor

Aşağıdaki kod örneğinde, istemci kitaplığını kullanarak yardımcıyı nasıl çağırabileceğiniz gösterilmektedir. JSON snippet'leri, ilgili webhook yanıtını gösterir.

Node.js

app.intent('List', (conv) => {
  if (!conv.screen) {
    conv.ask('Sorry, try this on a screen device or select the ' +
      'phone surface in the simulator.');
    return;
  }

  conv.ask('This is a list example.');
  // Create a list
  conv.ask(new List({
    title: 'List Title',
    items: {
      // Add the first item to the list
      'SELECTION_KEY_ONE': {
        synonyms: [
          'synonym 1',
          'synonym 2',
          'synonym 3',
        ],
        title: 'Title of First List Item',
        description: 'This is a description of a list item.',
        image: new Image({
          url: 'https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png',
          alt: 'Image alternate text',
        }),
      },
      // Add the second item to the list
      'SELECTION_KEY_GOOGLE_HOME': {
        synonyms: [
          'Google Home Assistant',
          'Assistant on the Google Home',
      ],
        title: 'Google Home',
        description: 'Google Home is a voice-activated speaker powered by ' +
          'the Google Assistant.',
        image: new Image({
          url: 'https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png',
          alt: 'Google Home',
        }),
      },
      // Add the third item to the list
      'SELECTION_KEY_GOOGLE_PIXEL': {
        synonyms: [
          'Google Pixel XL',
          'Pixel',
          'Pixel XL',
        ],
        title: 'Google Pixel',
        description: 'Pixel. Phone by Google.',
        image: new Image({
          url: 'https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png',
          alt: 'Google Pixel',
        }),
      },
    },
  }));
});

Java

@ForIntent("List")
public ActionResponse list(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  if (!request.hasCapability(Capability.SCREEN_OUTPUT.getValue())) {
    return responseBuilder
        .add("Sorry, try ths on a screen device or select the phone surface in the simulator.")
        .add("Which response would you like to see next?")
        .build();
  }

  responseBuilder
      .add("This is a list example.")
      .add(
          new SelectionList()
              .setTitle("List Title")
              .setItems(
                  Arrays.asList(
                      new ListSelectListItem()
                          .setTitle("Title of First List Item")
                          .setDescription("This is a description of a list item.")
                          .setImage(
                              new Image()
                                  .setUrl(
                                      "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                  .setAccessibilityText("Image alternate text"))
                          .setOptionInfo(
                              new OptionInfo()
                                  .setSynonyms(
                                      Arrays.asList("synonym 1", "synonym 2", "synonym 3"))
                                  .setKey("SELECTION_KEY_ONE")),
                      new ListSelectListItem()
                          .setTitle("Google Home")
                          .setDescription(
                              "Google Home is a voice-activated speaker powered by the Google Assistant.")
                          .setImage(
                              new Image()
                                  .setUrl(
                                      "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                  .setAccessibilityText("Google Home"))
                          .setOptionInfo(
                              new OptionInfo()
                                  .setSynonyms(
                                      Arrays.asList(
                                          "Google Home Assistant",
                                          "Assistant on the Google Home"))
                                  .setKey("SELECTION_KEY_GOOGLE_HOME")),
                      new ListSelectListItem()
                          .setTitle("Google Pixel")
                          .setDescription("Pixel. Phone by Google.")
                          .setImage(
                              new Image()
                                  .setUrl(
                                      "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                  .setAccessibilityText("Google Pixel"))
                          .setOptionInfo(
                              new OptionInfo()
                                  .setSynonyms(
                                      Arrays.asList("Google Pixel XL", "Pixel", "Pixel XL"))
                                  .setKey("SELECTION_KEY_GOOGLE_PIXEL")))));
  return responseBuilder.build();
}

Node.js

if (!conv.screen) {
  conv.ask('Sorry, try this on a screen device or select the ' +
    'phone surface in the simulator.');
  return;
}

conv.ask('This is a list example.');
// Create a list
conv.ask(new List({
  title: 'List Title',
  items: {
    // Add the first item to the list
    'SELECTION_KEY_ONE': {
      synonyms: [
        'synonym 1',
        'synonym 2',
        'synonym 3',
      ],
      title: 'Title of First List Item',
      description: 'This is a description of a list item.',
      image: new Image({
        url: 'https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png',
        alt: 'Image alternate text',
      }),
    },
    // Add the second item to the list
    'SELECTION_KEY_GOOGLE_HOME': {
      synonyms: [
        'Google Home Assistant',
        'Assistant on the Google Home',
    ],
      title: 'Google Home',
      description: 'Google Home is a voice-activated speaker powered by ' +
        'the Google Assistant.',
      image: new Image({
        url: 'https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png',
        alt: 'Google Home',
      }),
    },
    // Add the third item to the list
    'SELECTION_KEY_GOOGLE_PIXEL': {
      synonyms: [
        'Google Pixel XL',
        'Pixel',
        'Pixel XL',
      ],
      title: 'Google Pixel',
      description: 'Pixel. Phone by Google.',
      image: new Image({
        url: 'https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png',
        alt: 'Google Pixel',
      }),
    },
  },
}));

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
if (!request.hasCapability(Capability.SCREEN_OUTPUT.getValue())) {
  return responseBuilder
      .add("Sorry, try ths on a screen device or select the phone surface in the simulator.")
      .add("Which response would you like to see next?")
      .build();
}

responseBuilder
    .add("This is a list example.")
    .add(
        new SelectionList()
            .setTitle("List Title")
            .setItems(
                Arrays.asList(
                    new ListSelectListItem()
                        .setTitle("Title of First List Item")
                        .setDescription("This is a description of a list item.")
                        .setImage(
                            new Image()
                                .setUrl(
                                    "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                .setAccessibilityText("Image alternate text"))
                        .setOptionInfo(
                            new OptionInfo()
                                .setSynonyms(
                                    Arrays.asList("synonym 1", "synonym 2", "synonym 3"))
                                .setKey("SELECTION_KEY_ONE")),
                    new ListSelectListItem()
                        .setTitle("Google Home")
                        .setDescription(
                            "Google Home is a voice-activated speaker powered by the Google Assistant.")
                        .setImage(
                            new Image()
                                .setUrl(
                                    "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                .setAccessibilityText("Google Home"))
                        .setOptionInfo(
                            new OptionInfo()
                                .setSynonyms(
                                    Arrays.asList(
                                        "Google Home Assistant",
                                        "Assistant on the Google Home"))
                                .setKey("SELECTION_KEY_GOOGLE_HOME")),
                    new ListSelectListItem()
                        .setTitle("Google Pixel")
                        .setDescription("Pixel. Phone by Google.")
                        .setImage(
                            new Image()
                                .setUrl(
                                    "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                .setAccessibilityText("Google Pixel"))
                        .setOptionInfo(
                            new OptionInfo()
                                .setSynonyms(
                                    Arrays.asList("Google Pixel XL", "Pixel", "Pixel XL"))
                                .setKey("SELECTION_KEY_GOOGLE_PIXEL")))));
return responseBuilder.build();

JSON

Aşağıdaki JSON'in bir webhook yanıtını açıkladığını unutmayın.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.OPTION",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
          "listSelect": {
            "title": "List Title",
            "items": [
              {
                "optionInfo": {
                  "key": "SELECTION_KEY_ONE",
                  "synonyms": [
                    "synonym 1",
                    "synonym 2",
                    "synonym 3"
                  ]
                },
                "description": "This is a description of a list item.",
                "image": {
                  "url": "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png",
                  "accessibilityText": "Image alternate text"
                },
                "title": "Title of First List Item"
              },
              {
                "optionInfo": {
                  "key": "SELECTION_KEY_GOOGLE_HOME",
                  "synonyms": [
                    "Google Home Assistant",
                    "Assistant on the Google Home"
                  ]
                },
                "description": "Google Home is a voice-activated speaker powered by the Google Assistant.",
                "image": {
                  "url": "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png",
                  "accessibilityText": "Google Home"
                },
                "title": "Google Home"
              },
              {
                "optionInfo": {
                  "key": "SELECTION_KEY_GOOGLE_PIXEL",
                  "synonyms": [
                    "Google Pixel XL",
                    "Pixel",
                    "Pixel XL"
                  ]
                },
                "description": "Pixel. Phone by Google.",
                "image": {
                  "url": "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png",
                  "accessibilityText": "Google Pixel"
                },
                "title": "Google Pixel"
              }
            ]
          }
        }
      },
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "This is a list example."
            }
          }
        ]
      }
    }
  }
}

JSON

Aşağıdaki JSON'in bir webhook yanıtını açıkladığını unutmayın.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.OPTION",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.OptionValueSpec",
            "listSelect": {
              "title": "List Title",
              "items": [
                {
                  "optionInfo": {
                    "key": "SELECTION_KEY_ONE",
                    "synonyms": [
                      "synonym 1",
                      "synonym 2",
                      "synonym 3"
                    ]
                  },
                  "description": "This is a description of a list item.",
                  "image": {
                    "url": "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png",
                    "accessibilityText": "Image alternate text"
                  },
                  "title": "Title of First List Item"
                },
                {
                  "optionInfo": {
                    "key": "SELECTION_KEY_GOOGLE_HOME",
                    "synonyms": [
                      "Google Home Assistant",
                      "Assistant on the Google Home"
                    ]
                  },
                  "description": "Google Home is a voice-activated speaker powered by the Google Assistant.",
                  "image": {
                    "url": "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png",
                    "accessibilityText": "Google Home"
                  },
                  "title": "Google Home"
                },
                {
                  "optionInfo": {
                    "key": "SELECTION_KEY_GOOGLE_PIXEL",
                    "synonyms": [
                      "Google Pixel XL",
                      "Pixel",
                      "Pixel XL"
                    ]
                  },
                  "description": "Pixel. Phone by Google.",
                  "image": {
                    "url": "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png",
                    "accessibilityText": "Google Pixel"
                  },
                  "title": "Google Pixel"
                }
              ]
            }
          }
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "This is a list example."
              }
            }
          ]
        }
      }
    }
  ]
}

Liste veya bant kullanıcı arayüzünü görüntüleyebilir ve belirlenen seçeneği kullanıcıdan actions.intent.OPTION amacıyla alabilirsiniz.

Yardımcının sonuçları alınıyor

Aşağıdaki kod örnekleri, yardımcı kitaplığın sonucuna istemci kitaplığını kullanarak nasıl erişeceğinizi gösterir. JSON snippet'leri, isteği karşılamanıza yardımcı olacak sonucu içeren isteği temsil eder.

Aşağıdaki snippet'ler, kullanıcının hangi seçeneği belirlediğini gösterir.

Node.js

app.intent('List - OPTION', (conv, params, option) => {
  const SELECTED_ITEM_RESPONSES = {
    'SELECTION_KEY_ONE': 'You selected the first item',
    'SELECTION_KEY_GOOGLE_HOME': 'You selected the Google Home!',
    'SELECTION_KEY_GOOGLE_PIXEL': 'You selected the Google Pixel!',
  };
  conv.ask(SELECTED_ITEM_RESPONSES[option]);
  conv.ask('Which response would you like to see next?');
});

Java

@ForIntent("List - OPTION")
public ActionResponse listSelected(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  String selectedItem = request.getSelectedOption();
  String response;

  if (selectedItem.equals("SELECTION_KEY_ONE")) {
    response = "You selected the first item";
  } else if (selectedItem.equals("SELECTION_KEY_GOOGLE_HOME")) {
    response = "You selected the Google Home!";
  } else if (selectedItem.equals("SELECTION_KEY_GOOGLE_PIXEL")) {
    response = "You selected the Google Pixel!";
  } else {
    response = "You did not select a valid item";
  }
  return responseBuilder.add(response).add("Which response would you like to see next?").build();
}

Node.js

app.intent('actions.intent.OPTION', (conv, params, option) => {
  const SELECTED_ITEM_RESPONSES = {
    'SELECTION_KEY_ONE': 'You selected the first item',
    'SELECTION_KEY_GOOGLE_HOME': 'You selected the Google Home!',
    'SELECTION_KEY_GOOGLE_PIXEL': 'You selected the Google Pixel!',
  };
  conv.ask(SELECTED_ITEM_RESPONSES[option]);
  conv.ask('Which response would you like to see next?');
});

Java

  @ForIntent("actions.intent.OPTION")
  public ActionResponse listSelected(ActionRequest request) {
    ResponseBuilder responseBuilder = getResponseBuilder(request);
    String selectedItem = request.getSelectedOption();
    String response;

    if (selectedItem.equals("SELECTION_KEY_ONE")) {
      response = "You selected the first item";
    } else if (selectedItem.equals("SELECTION_KEY_GOOGLE_HOME")) {
      response = "You selected the Google Home!";
    } else if (selectedItem.equals("SELECTION_KEY_GOOGLE_PIXEL")) {
      response = "You selected the Google Pixel!";
    } else {
      response = "You did not select a valid item";
    }
    return responseBuilder.add(response).add("Which response would you like to see next?").build();
  }

  public ActionResponse carousel(ActionRequest request) {
    ResponseBuilder responseBuilder = getResponseBuilder(request);
    if (!request.hasCapability(Capability.SCREEN_OUTPUT.getValue())) {
      return responseBuilder
          .add("Sorry, try ths on a screen device or select the phone surface in the simulator.")
          .add("Which response would you like to see next?")
          .build();
    }

    responseBuilder
        .add("This is a carousel example.")
        .add(
            new SelectionCarousel()
                .setItems(
                    Arrays.asList(
                        new CarouselSelectCarouselItem()
                            .setTitle("Title of First List Item")
                            .setDescription("This is a description of a list item.")
                            .setImage(
                                new Image()
                                    .setUrl(
                                        "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                    .setAccessibilityText("Image alternate text"))
                            .setOptionInfo(
                                new OptionInfo()
                                    .setSynonyms(
                                        Arrays.asList("synonym 1", "synonym 2", "synonym 3"))
                                    .setKey("SELECTION_KEY_ONE")),
                        new CarouselSelectCarouselItem()
                            .setTitle("Google Home")
                            .setDescription(
                                "Google Home is a voice-activated speaker powered by the Google Assistant.")
                            .setImage(
                                new Image()
                                    .setUrl(
                                        "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                    .setAccessibilityText("Google Home"))
                            .setOptionInfo(
                                new OptionInfo()
                                    .setSynonyms(
                                        Arrays.asList(
                                            "Google Home Assistant",
                                            "Assistant on the Google Home"))
                                    .setKey("SELECTION_KEY_GOOGLE_HOME")),
                        new CarouselSelectCarouselItem()
                            .setTitle("Google Pixel")
                            .setDescription("Pixel. Phone by Google.")
                            .setImage(
                                new Image()
                                    .setUrl(
                                        "https://storage.googleapis.com/actionsresources/logo_assistant_2x_64dp.png")
                                    .setAccessibilityText("Google Pixel"))
                            .setOptionInfo(
                                new OptionInfo()
                                    .setSynonyms(
                                        Arrays.asList("Google Pixel XL", "Pixel", "Pixel XL"))
                                    .setKey("SELECTION_KEY_GOOGLE_PIXEL")))));
    return responseBuilder.build();
  }
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "responseId": "5d7732d1-d22d-4a0e-ad34-8bc0a7fde20c-21947381",
  "queryResult": {
    "queryText": "actions_intent_OPTION",
    "action": "List.List-custom",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: List - OPTION",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: List - OPTION"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/actions_capability_screen_output"
      },
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/actions_capability_web_browser"
      },
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/google_assistant_input_type_touch"
      },
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/list-followup",
        "lifespanCount": 1
      },
      {
        "name": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA/contexts/actions_intent_option",
        "parameters": {
          "OPTION": "SELECTION_KEY_GOOGLE_PIXEL",
          "text": "Google Pixel"
        }
      }
    ],
    "intent": {
      "name": "projects/df-responses-kohler/agent/intents/88904350-193e-4472-a2de-977eb5d9e26e",
      "displayName": "List - OPTION"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "locale": "en-US",
        "lastSeen": "2019-08-04T23:56:32Z",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA",
        "type": "ACTIVE",
        "conversationToken": "[\"list-followup\"]"
      },
      "inputs": [
        {
          "intent": "actions.intent.OPTION",
          "rawInputs": [
            {
              "inputType": "TOUCH",
              "query": "Google Pixel"
            }
          ],
          "arguments": [
            {
              "name": "OPTION",
              "textValue": "SELECTION_KEY_GOOGLE_PIXEL"
            },
            {
              "name": "text",
              "rawText": "Google Pixel",
              "textValue": "Google Pixel"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          }
        ]
      },
      "isInSandbox": true,
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.WEB_BROWSER"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            }
          ]
        }
      ],
      "requestType": "SIMULATOR"
    }
  },
  "session": "projects/df-responses-kohler/agent/sessions/ABwppHHsebncupHK11oKhsCTgyH96GRNYH-xpeeMTqb-cvOxbd67QenbRlZM4bGAIB8_KXdTfI7-7lYVKN1ovAhCaA"
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "user": {
    "locale": "en-US",
    "lastSeen": "2019-08-06T07:37:53Z",
    "userVerificationStatus": "VERIFIED"
  },
  "conversation": {
    "conversationId": "ABwppHGcqunXh1M6IE0lu2sVqXdpJfdpC5FWMkMSXQskK1nzb4IkSUSRqQzoEr0Ly0z_G3mwyZlk5rFtd1w",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.OPTION",
      "rawInputs": [
        {
          "inputType": "TOUCH",
          "query": "Google Home"
        }
      ],
      "arguments": [
        {
          "name": "OPTION",
          "textValue": "SELECTION_KEY_GOOGLE_HOME"
        },
        {
          "name": "text",
          "rawText": "Google Home",
          "textValue": "Google Home"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.ACCOUNT_LINKING"
      },
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "isInSandbox": true,
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.WEB_BROWSER"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        }
      ]
    }
  ],
  "requestType": "SIMULATOR"
}

Tarih ve Saat

actions.intent.DATETIME amacının yerine getirilmesini isteyerek kullanıcılardan bir tarih ve saat elde edebilirsiniz.

Yardımcı aranıyor

Aşağıdaki kod örneğinde, istemci kitaplığını kullanarak yardımcıyı nasıl çağırabileceğiniz gösterilmektedir. JSON snippet'leri, ilgili webhook yanıtını gösterir.

DateTime iznini oluştururken options nesnesini kullanarak kullanıcıdan tarih ve saat isterken özel istemler belirtebilirsiniz.

Node.js

app.intent('Date Time', (conv) => {
  const options = {
    prompts: {
      initial: 'When would you like to schedule the appointment?',
      date: 'What day was that?',
      time: 'What time works for you?',
    },
  };
  conv.ask(new DateTime(options));
});

Java

@ForIntent("Date Time")
public ActionResponse getDateTime(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);

  responseBuilder
      .add("PLACEHOLDER")
      .add(
          new DateTimePrompt()
              .setDateTimePrompt("When would you like to schedule the appointment?")
              .setDatePrompt("What day was that?")
              .setTimePrompt("What time works for you?"));
  return responseBuilder.build();
}

Node.js

const options = {
  prompts: {
    initial: 'When would you like to schedule the appointment?',
    date: 'What day was that?',
    time: 'What time works for you?',
  },
};
conv.ask(new DateTime(options));

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);

responseBuilder
    .add("PLACEHOLDER")
    .add(
        new DateTimePrompt()
            .setDateTimePrompt("When would you like to schedule the appointment?")
            .setDatePrompt("What day was that?")
            .setTimePrompt("What time works for you?"));
return responseBuilder.build();

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.DATETIME",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec",
          "dialogSpec": {
            "requestDatetimeText": "When would you like to schedule the appointment?",
            "requestDateText": "What day was that?",
            "requestTimeText": "What time works for you?"
          }
        }
      }
    }
  }
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.DATETIME",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.DateTimeValueSpec",
            "dialogSpec": {
              "requestDatetimeText": "When would you like to schedule the appointment?",
              "requestDateText": "What day was that?",
              "requestTimeText": "What time works for you?"
            }
          }
        }
      ]
    }
  ]
}

Yardımcının sonuçları alınıyor

Aşağıdaki kod örneği, istemci kitaplığını kullanarak yardımcının sonucuna nasıl erişileceğini gösterir. JSON snippet'leri, isteği karşılamanıza yardımcı olacak sonucu içeren isteği temsil eder.

Aşağıdaki snippet, kullanıcının erişim izni verip vermediğini nasıl kontrol edeceğini ve verilere nasıl erişeceğini gösterir.

Node.js

app.intent('Date Time Handler', (conv, params, datetime) => {
  const {month, day} = datetime.date;
  const {hours, minutes} = datetime.time;
  conv.ask(`<speak>` +
      `Great, we will see you on ` +
      `<say-as interpret-as="date" format="dm">${day}-${month}</say-as>` +
      `<say-as interpret-as="time" format="hms12" detail="2">${hours}` +
      `:${minutes || '00'}</say-as>` +
      `</speak>`);
  conv.ask('Would you like to try another helper?');
  conv.ask(new Suggestions([
    'Confirmation',
    'Permission',
    'Place',
  ]));
});

Java

@ForIntent("Date Time Handler")
public ActionResponse handleDateTime(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);

  DateTime dateTimeValue = request.getDateTime();
  Integer day = dateTimeValue.getDate().getDay();
  Integer month = dateTimeValue.getDate().getMonth();
  Integer hours = dateTimeValue.getTime().getHours();
  Integer minutes = dateTimeValue.getTime().getMinutes();
  String minutesStr = (minutes != null) ? String.valueOf(minutes) : "00";
  responseBuilder.add(
      "<speak>"
          + "Great, we will see you on "
          + "<say-as interpret-as=\"date\" format=\"dm\">"
          + day
          + "-"
          + month
          + "</say-as>"
          + "<say-as interpret-as=\"time\" format=\"hms12\" detail=\"2\">"
          + hours
          + ":"
          + minutesStr
          + "</say-as>"
          + "</speak>");
  responseBuilder
      .add("Would you like to try another helper?")
      .addSuggestions(new String[] {"Confirmation", "Permission", "Place"});
  return responseBuilder.build();
}

Node.js

app.intent('actions.intent.DATETIME', (conv) => {
  const datetime = conv.arguments.get('DATETIME');
  const {month, day} = datetime.date;
  const {hours, minutes} = datetime.time;
  conv.ask(`<speak>` +
      `Great, we will see you on ` +
      `<say-as interpret-as="date" format="dm">${day}-${month}</say-as>` +
      `<say-as interpret-as="time" format="hms12" detail="2">${hours}` +
      `:${minutes || '00'}</say-as>` +
      `</speak>`);
  conv.ask('Would you like to try another helper?');
  conv.ask(new Suggestions([
    'Confirmation',
    'Permission',
    'Place',
  ]));
});

Java

@ForIntent("actions.intent.DATETIME")
public ActionResponse datetimeHandler(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);

  DateTime dateTimeValue = request.getDateTime();
  Integer day = dateTimeValue.getDate().getDay();
  Integer month = dateTimeValue.getDate().getMonth();
  Integer hours = dateTimeValue.getTime().getHours();
  Integer minutes = dateTimeValue.getTime().getMinutes();
  String minutesStr = (minutes != null) ? String.valueOf(minutes) : "00";
  responseBuilder.add(
      "<speak>"
          + "Great, we will see you on "
          + "<say-as interpret-as=\"date\" format=\"dm\">"
          + day
          + "-"
          + month
          + "</say-as>"
          + "<say-as interpret-as=\"time\" format=\"hms12\" detail=\"2\">"
          + hours
          + ":"
          + minutesStr
          + "</say-as>"
          + "</speak>");
  responseBuilder
      .add("Would you like to try another helper?")
      .addSuggestions(new String[] {"Confirmation", "Permission", "Place"});
  return responseBuilder.build();
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "responseId": "2b0a039d-b033-4256-bd8a-ebb1f0ad90b4-712767ed",
  "queryResult": {
    "queryText": "actions_intent_DATETIME",
    "action": "DateTime.DateTime-custom",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: Date Time Handler",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: Date Time Handler"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/actions_capability_screen_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/actions_capability_web_browser"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/google_assistant_input_type_keyboard"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/datetime-followup",
        "lifespanCount": 1
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY/contexts/actions_intent_datetime",
        "parameters": {
          "DATETIME": "2019-08-14T10:30:00",
          "text": "1030am"
        }
      }
    ],
    "intent": {
      "name": "projects/df-helpers-kohler/agent/intents/3c145f18-32fe-40aa-842e-b99ab28c3f2a",
      "displayName": "Date Time Handler"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY",
        "type": "ACTIVE",
        "conversationToken": "[\"datetime-followup\"]"
      },
      "inputs": [
        {
          "intent": "actions.intent.DATETIME",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "1030am"
            }
          ],
          "arguments": [
            {
              "name": "DATETIME",
              "datetimeValue": {
                "date": {
                  "year": 2019,
                  "month": 8,
                  "day": 14
                },
                "time": {
                  "hours": 10,
                  "minutes": 30
                }
              }
            },
            {
              "name": "text",
              "rawText": "1030am",
              "textValue": "1030am"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            }
          ]
        }
      ]
    }
  },
  "session": "projects/df-helpers-kohler/agent/sessions/ABwppHHnU7RSIOU994H8vd2wLYXbnoIAs3rk-4zUeiRAaX3aJ0dp68Y50MgvddE2stYuI6Hlu-MfWO75Gz76EeY"
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "user": {
    "profile": {
      "displayName": "Sachit Mishra",
      "givenName": "Sachit",
      "familyName": "Mishra"
    },
    "permissions": [
      "DEVICE_PRECISE_LOCATION",
      "NAME"
    ],
    "locale": "en-US",
    "userVerificationStatus": "VERIFIED"
  },
  "conversation": {
    "conversationId": "ABwppHEcidO2jguO4hS8maDeMVx8aasSCcBWZHrF3EmOMIaWRP9qF0BcACistiIoeyiSNTW6KD_tqN_U-xAIOXhPvA",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.DATETIME",
      "rawInputs": [
        {
          "inputType": "KEYBOARD",
          "query": "430pm"
        }
      ],
      "arguments": [
        {
          "name": "DATETIME",
          "datetimeValue": {
            "date": {
              "year": 2019,
              "month": 8,
              "day": 18
            },
            "time": {
              "hours": 16,
              "minutes": 30
            }
          }
        },
        {
          "name": "text",
          "rawText": "430pm",
          "textValue": "430pm"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.ACCOUNT_LINKING"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      }
    ]
  },
  "device": {
    "location": {
      "coordinates": {
        "latitude": 37.4197238,
        "longitude": -122.08212759999999
      },
      "formattedAddress": "Google Building 45 1585 Charleston Road, Mountain View, California 94043",
      "zipCode": "94043",
      "city": "Mountain View"
    }
  },
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}

Hesapta Oturum Açın

Kullanıcıların, actions.intent.SIGN_IN amacının karşılanmasını isteyerek hizmetinizle ilişkili hesaplarda oturum açmalarını sağlayabilirsiniz. Kullanıcılar OAuth üzerinden sesli oturum açamaz.

Yardımcı aranıyor

Aşağıdaki kod örneğinde, istemci kitaplığını kullanarak yardımcıyı nasıl çağırabileceğiniz gösterilmektedir. JSON snippet'leri, ilgili webhook yanıtını gösterir.

Node.js

const {SignIn} = require('actions-on-google');
app.intent('ask_for_sign_in_detail', (conv) => {
  conv.ask(new SignIn());
});

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
return responseBuilder.add("This is the SignIn helper intent").add(new SignIn()).build();

JSON

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.SIGN_IN",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
        }
      }
    }
  }
}

JSON

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.SIGN_IN",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.SignInValueSpec"
          }
        }
      ]
    }
  ]
}

Yardımcının sonuçları alınıyor

Aşağıdaki kod örneği, istemci kitaplığını kullanarak yardımcının sonucuna nasıl erişileceğini gösterir. JSON snippet'leri, isteği karşılamanıza yardımcı olacak sonucu içeren isteği temsil eder.

Aşağıdaki snippet, kullanıcının erişim izni verip vermediğini nasıl kontrol edeceğini ve verilere nasıl erişeceğini gösterir.

Node.js

app.intent('ask_for_sign_in_confirmation', (conv, params, signin) => {
  if (signin.status !== 'OK') {
    return conv.ask('You need to sign in before using the app.');
  }
  // const access = conv.user.access.token;
  // possibly do something with access token
  return conv.ask('Great! Thanks for signing in.');
});

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
boolean signedIn = request.isSignInGranted();
return responseBuilder
    .add(signedIn ? "Great! Thanks for signin in." : "You must sign in before using the app.")
    .build();

JSON

{
  "responseId": "",
  "queryResult": {
    "queryText": "",
    "action": "",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "",
    "fulfillmentMessages": [],
    "outputContexts": [],
    "intent": {
      "name": "ask_for_sign_in_confirmation",
      "displayName": "ask_for_sign_in_confirmation"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {},
    "languageCode": ""
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "isInSandbox": true,
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          }
        ]
      },
      "inputs": [
        {
          "rawInputs": [],
          "intent": "",
          "arguments": [
            {
              "name": "SIGN_IN",
              "extension": {
                "@type": "type.googleapis.com/google.actions.v2.SignInValue",
                "status": "OK"
              }
            }
          ]
        }
      ],
      "user": {},
      "conversation": {},
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            }
          ]
        }
      ]
    }
  },
  "session": ""
}

JSON

{
  "user": {},
  "device": {},
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "conversation": {},
  "inputs": [
    {
      "rawInputs": [],
      "intent": "ask_for_sign_in_confirmation",
      "arguments": [
        {
          "name": "SIGN_IN",
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.SignInValue",
            "status": "OK"
          }
        }
      ]
    }
  ],
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}

Yer ve Konum

actions.intent.PLACE amacının yerine getirilmesini isteyerek kullanıcılardan bir konum alabilirsiniz. Bu yardımcı ayar, kullanıcıyı Google'a kaydettiği ev/iş/iletişim konumları da dahil olmak üzere adresleri ve diğer konumları istemek için kullanır.

Kaydedilen konumlar, yalnızca ilişkili adresi değil, yalnızca adresi döndürür (ör. "ANA = 123 Main St" yerine "123 Main St").

Yardımcı aranıyor

Aşağıdaki kod örneğinde, istemci kitaplığını kullanarak yardımcıyı nasıl çağırabileceğiniz gösterilmektedir. JSON snippet'leri, ilgili webhook yanıtını gösterir.

Node.js

app.intent('Place', (conv) => {
  const options = {
    context: 'To find a location',
    prompt: 'Where would you like to go?',
  };
  conv.ask(new Place(options));
});

Java

@ForIntent("Place")
public ActionResponse getPlace(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder
      .add("PLACEHOLDER")
      .add(
          new Place()
              .setRequestPrompt("Where would you like to go?")
              .setPermissionContext("To find  a location"));
  return responseBuilder.build();
}

Node.js

const options = {
  context: 'To find a location',
  prompt: 'Where would you like to go?',
};
conv.ask(new Place(options));

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder
    .add("PLACEHOLDER")
    .add(
        new Place()
            .setRequestPrompt("Where would you like to go?")
            .setPermissionContext("To find  a location"));
return responseBuilder.build();

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.PLACE",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.PlaceValueSpec",
          "dialogSpec": {
            "extension": {
              "@type": "type.googleapis.com/google.actions.v2.PlaceValueSpec.PlaceDialogSpec",
              "permissionContext": "To find a location",
              "requestPrompt": "Where would you like to go?"
            }
          }
        }
      }
    }
  }
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.PLACE",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.PlaceValueSpec",
            "dialogSpec": {
              "extension": {
                "@type": "type.googleapis.com/google.actions.v2.PlaceValueSpec.PlaceDialogSpec",
                "permissionContext": "To find a location",
                "requestPrompt": "Where would you like to go?"
              }
            }
          }
        }
      ]
    }
  ]
}

Yardımcının sonuçları alınıyor

Aşağıdaki kod örneği, istemci kitaplığını kullanarak yardımcının sonucuna nasıl erişileceğini gösterir. JSON snippet'leri, isteği karşılamanıza yardımcı olacak sonucu içeren isteği temsil eder.

Aşağıdaki snippet, kullanıcının erişim izni verip vermediğini nasıl kontrol edeceğini ve verilere nasıl erişeceğini gösterir.

Node.js

app.intent('Place Handler', (conv, params, place) => {
  if (!place) {
    conv.ask(`Sorry, I couldn't get a location from you.`);
  } else {
    // Place also contains formattedAddress and coordinates
    const {name} = place;
    conv.ask(`${name} sounds like a great place to go!`);
  }
  conv.ask('Would you like to try another helper?');
  conv.ask(new Suggestions([
    'Confirmation',
    'DateTime',
    'Permission',
  ]));
});

Java

@ForIntent("Place Handler")
public ActionResponse handlePlace(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  Location location = request.getPlace();
  if (location == null) {
    responseBuilder.add("Sorry, I couldn't get a location from you.");
  } else {
    responseBuilder.add(location.getName() + " sounds like a great place to go!");
  }
  responseBuilder
      .add("Would you like to try another helper?")
      .addSuggestions(new String[] {"Confirmation", "DateTime", "Permission"});
  return responseBuilder.build();
}

Node.js

app.intent('actions.intent.PLACE', (conv) => {
  const place = conv.arguments.get('PLACE');
  if (!place) {
    conv.ask(`Sorry, I couldn't get a location from you.`);
  } else {
    // Place also contains formattedAddress and coordinates
    const {name} = place;
    conv.ask(`${name} sounds like a great place to go!`);
  }
  conv.ask('Would you like to try another helper?');
  conv.ask(new Suggestions([
    'Confirmation',
    'DateTime',
    'Permission',
  ]));
});

Java

@ForIntent("actions.intent.PLACE")
public ActionResponse handlePlace(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  Location location = request.getPlace();
  if (location == null) {
    responseBuilder.add("Sorry, I couldn't get a location from you.");
  } else {
    responseBuilder.add(location.getName() + " sounds like a great place to go!");
  }
  responseBuilder
      .add("Would you like to try another helper?")
      .addSuggestions(new String[] {"Confirmation", "DateTime", "Permission"});
  return responseBuilder.build();
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "responseId": "ce99fd40-b9ed-4151-bc99-f25db9eda8c5-712767ed",
  "queryResult": {
    "queryText": "actions_intent_PLACE",
    "action": "Place.Place-custom",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: Place Handler",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: Place Handler"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_screen_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_web_browser"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/google_assistant_input_type_keyboard"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/place-followup",
        "lifespanCount": 1
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_intent_place",
        "parameters": {
          "PLACE": "KFC, 2523 North Carson Street, Carson City, NV 89706, United States",
          "text": "yes"
        }
      }
    ],
    "intent": {
      "name": "projects/df-helpers-kohler/agent/intents/4cf9e154-e151-44db-ae79-84d8c5a707de",
      "displayName": "Place Handler"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "permissions": [
          "DEVICE_PRECISE_LOCATION"
        ],
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA",
        "type": "ACTIVE",
        "conversationToken": "[\"place-followup\"]"
      },
      "inputs": [
        {
          "intent": "actions.intent.PLACE",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "Query handled by Actions on Google"
            }
          ],
          "arguments": [
            {
              "name": "PLACE",
              "placeValue": {
                "coordinates": {
                  "latitude": 39.182895,
                  "longitude": -119.7679113
                },
                "formattedAddress": "KFC, 2523 North Carson Street, Carson City, NV 89706, United States",
                "name": "KFC",
                "placeId": "ChIJZfBpmMEKmYARFsfc574LgB8"
              }
            },
            {
              "name": "text",
              "rawText": "yes",
              "textValue": "yes"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          }
        ]
      },
      "device": {
        "location": {
          "coordinates": {
            "latitude": 39.2814592,
            "longitude": -120.12421119999999
          },
          "formattedAddress": "Currant Road, Truckee, California 96161",
          "zipCode": "96161",
          "city": "Truckee"
        }
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.WEB_BROWSER"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            }
          ]
        }
      ]
    }
  }
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "user": {
    "permissions": [
      "DEVICE_PRECISE_LOCATION"
    ],
    "locale": "en-US",
    "userVerificationStatus": "VERIFIED"
  },
  "conversation": {
    "conversationId": "ABwppHEcidO2jguO4hS8maDeMVx8aasSCcBWZHrF3EmOMIaWRP9qF0BcACistiIoeyiSNTW6KD_tqN_U-xAIOXhPvA",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.PLACE",
      "rawInputs": [
        {
          "inputType": "KEYBOARD",
          "query": "Query handled by Actions on Google"
        }
      ],
      "arguments": [
        {
          "name": "PLACE",
          "placeValue": {
            "coordinates": {
              "latitude": 37.4219999,
              "longitude": -122.0840575
            },
            "formattedAddress": "Googleplex, 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States",
            "name": "Googleplex",
            "placeId": "ChIJj61dQgK6j4AR4GeTYWZsKWw"
          }
        },
        {
          "name": "text",
          "rawText": "googleplex",
          "textValue": "googleplex"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.ACCOUNT_LINKING"
      },
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      }
    ]
  },
  "device": {
    "location": {
      "coordinates": {
        "latitude": 37.4197238,
        "longitude": -122.08212759999999
      },
      "formattedAddress": "Google Building 45 1585 Charleston Road, Mountain View, California 94043",
      "zipCode": "94043",
      "city": "Mountain View"
    }
  },
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        },
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        }
      ]
    }
  ]
}

Onay

Kullanıcıdan genel bir onay isteyebilir (evet/hayır sorusu) ve verilen yanıtı alabilirsiniz. "Evet" ve "hayır" dilbilgisi doğal olarak "Evet" veya "Hayır" gibi ifadelerle genişleyerek pek çok durumda kullanılabilir.

Yardımcı aranıyor

Aşağıdaki kod örneğinde, istemci kitaplığını kullanarak yardımcıyı nasıl çağırabileceğiniz gösterilmektedir. JSON snippet'leri, ilgili webhook yanıtını gösterir.

Kullanıcıdan onay isterken özel bir istem belirtebilirsiniz.

Node.js

app.intent('Confirmation', (conv) => {
  conv.ask(new Confirmation('Can you confirm?'));
});

Java

@ForIntent("Confirmation")
public ActionResponse getConfirmation(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  responseBuilder
      .add("PLACEHOLDER")
      .add(new Confirmation().setConfirmationText("Can you confirm?"));
  return responseBuilder.build();
}

Node.js

conv.ask(new Confirmation('Can you confirm?'));

Java

ResponseBuilder responseBuilder = getResponseBuilder(request);
responseBuilder
    .add("PLACEHOLDER")
    .add(new Confirmation().setConfirmationText("Can you confirm?"));
return responseBuilder.build();

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.CONFIRMATION",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec",
          "dialogSpec": {
            "requestConfirmationText": "Can you confirm?"
          }
        }
      }
    }
  }
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.CONFIRMATION",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.ConfirmationValueSpec",
            "dialogSpec": {
              "requestConfirmationText": "Can you confirm?"
            }
          }
        }
      ]
    }
  ]
}

Yardımcının sonuçları alınıyor

Aşağıdaki kod örneği, istemci kitaplığını kullanarak yardımcının sonucuna nasıl erişileceğini gösterir. JSON snippet'leri, isteği karşılamanıza yardımcı olacak sonucu içeren isteği temsil eder.

Kullanıcı yardımcıya yanıt verdikten sonra karşılamanıza dair bir istek alırsınız ve kullanıcının onaylayıp onaylamadığını kontrol edebilirsiniz.

Node.js

app.intent('Confirmation Handler', (conv, params, confirmationGranted) => {
  conv.ask(confirmationGranted
    ? 'Thank you for confirming'
    : 'No problem, you have not confirmed');
  conv.ask('Would you like to try another helper?');
  conv.ask(new Suggestions([
    'DateTime',
    'Permission',
    'Place',
  ]));
});

Java

@ForIntent("Confirmation Handler")
public ActionResponse handleConfirmation(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  boolean userConfirmation = request.getUserConfirmation();
  responseBuilder
      .add(userConfirmation ? "Thank you for confirming" : "No problem, you have not confirmed")
      .addSuggestions(new String[] {"Place", "DateTime", "Permission"});
  return responseBuilder.build();
}

Node.js

app.intent('actions.intent.CONFIRMATION', (conv, confirmationGranted) => {
  conv.ask(confirmationGranted
    ? 'Thank you for confirming'
    : 'No problem, you have not confirmed');
  conv.ask('Would you like to try another helper?');
  conv.ask(new Suggestions([
    'DateTime',
    'Permission',
    'Place',
  ]));
});

Java

@ForIntent("actions.intent.CONFIRMATION")
public ActionResponse handleConfirmation(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  boolean userConfirmation = request.getUserConfirmation();
  responseBuilder
      .add(userConfirmation ? "Thank you for confirming" : "No problem, you have not confirmed")
      .addSuggestions(new String[] {"Place", "DateTime", "Permission"});
  return responseBuilder.build();
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "responseId": "26c3dd46-321c-4ab5-9f6c-a445f6d5de01-712767ed",
  "queryResult": {
    "queryText": "actions_intent_CONFIRMATION",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Webhook failed for intent: Confirmation Handler",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Webhook failed for intent: Confirmation Handler"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_account_linking"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_media_response_audio"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_audio_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_web_browser"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_capability_screen_output"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/google_assistant_input_type_keyboard"
      },
      {
        "name": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA/contexts/actions_intent_confirmation",
        "parameters": {
          "CONFIRMATION": true,
          "text": "yes"
        }
      }
    ],
    "intent": {
      "name": "projects/df-helpers-kohler/agent/intents/11cc7c8e-0710-42ea-9cd9-723aff03e97f",
      "displayName": "Confirmation Handler"
    },
    "intentDetectionConfidence": 1,
    "languageCode": "en"
  },
  "originalDetectIntentRequest": {
    "source": "google",
    "version": "2",
    "payload": {
      "user": {
        "locale": "en-US",
        "userVerificationStatus": "VERIFIED"
      },
      "conversation": {
        "conversationId": "ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA",
        "type": "ACTIVE",
        "conversationToken": "[]"
      },
      "inputs": [
        {
          "intent": "actions.intent.CONFIRMATION",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "yes"
            }
          ],
          "arguments": [
            {
              "name": "CONFIRMATION",
              "boolValue": true
            },
            {
              "name": "text",
              "rawText": "yes",
              "textValue": "yes"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.ACCOUNT_LINKING"
          },
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          },
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          }
        ]
      },
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            },
            {
              "name": "actions.capability.WEB_BROWSER"
            }
          ]
        }
      ]
    }
  },
  "session": "projects/df-helpers-kohler/agent/sessions/ABwppHEdLCo3vaqVs-pED_sPQDIUr_Ls5JYICyNks9vKbfUaIF8n4P7fYsKEYSiKvD3Vmnli9deu_uTB8s3nPeA"
}

JSON

Aşağıdaki JSON'in bir webhook isteğini tanımladığını unutmayın.

{
  "user": {
    "locale": "en-US",
    "userVerificationStatus": "VERIFIED"
  },
  "conversation": {
    "conversationId": "ABwppHGY8XRtymCExS313Cc6Vp42zR0uQuGf6BwpSW0772Er-rxSTtFjs3KfGYu6jCDgHbA8IKVWjB8Gr9odc4yHhg",
    "type": "NEW"
  },
  "inputs": [
    {
      "intent": "actions.intent.CONFIRMATION",
      "rawInputs": [
        {
          "inputType": "KEYBOARD",
          "query": "yes"
        }
      ],
      "arguments": [
        {
          "name": "CONFIRMATION",
          "boolValue": true
        },
        {
          "name": "text",
          "rawText": "yes",
          "textValue": "yes"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      },
      {
        "name": "actions.capability.ACCOUNT_LINKING"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      }
    ]
  },
  "availableSurfaces": [
    {
      "capabilities": [
        {
          "name": "actions.capability.AUDIO_OUTPUT"
        },
        {
          "name": "actions.capability.SCREEN_OUTPUT"
        },
        {
          "name": "actions.capability.WEB_BROWSER"
        }
      ]
    }
  ]
}