نية المساعدة (Dialogflow)

الاستكشاف في Dialogflow

انقر على متابعة لاستيراد نموذج "مساعد Google" في Dialogflow. بعد ذلك، اتبع الخطوات أدناه لنشر النموذج واختباره:

  1. أدخِل اسم الوكيل وأنشِئ وكيل Dialogflow جديد للنموذج.
  2. بعد انتهاء عملية الاستيراد، انقر على الانتقال إلى الوكيل.
  3. من قائمة التنقّل الرئيسية، انتقِل إلى توصيل الطلبات.
  4. فعِّل المحرّر المضمّن، ثم انقر على نشر. يحتوي المحرِّر على العيّنة الرمز.
  5. من قائمة التنقل الرئيسية، انتقِل إلى عمليات الدمج، ثم انقر على Google "مساعد Google"
  6. في النافذة المشروطة التي تظهر، فعِّل تغييرات المعاينة التلقائية وانقر على اختبار. لفتح محاكي الإجراءات.
  7. في المحاكي، أدخِل Talk to my test app لاختبار العيّنة.
متابعة

يطلب المساعدون من "مساعد Google" تولّي المحادثة مؤقتًا لتنفيذ إجراء البيانات الشائعة مثل الاسم الكامل للمستخدم أو التاريخ والوقت أو عنوان التسليم. وعندما تطلب الحصول على مساعد، يقدم المساعد واجهة مستخدم قياسية ومتسقة المستخدمين للحصول على هذه المعلومات، لذلك لن تضطر إلى تصميم المعلومات الخاصة بك.

نظرة عامة على الاستخدام

تم توضيح العملية العامة لاستخدام المساعد مع Dialogflow وAction SDK أدناه لـ Dialogflow وحزمة SDK للأعمال. اطّلِع على الأقسام الخاصة بأدوات المساعدة مزيد من المعلومات حول كل مُساعِد

Dialogflow

Node.js

  1. يمكنك الاتصال بـ conv.ask() باستخدام الكائن المساعِد المناسب. فعندما عند استدعاء دالة مساعدة، ترسل مكتبة البرامج ردًا إلى "مساعد Google" يتضمّن هدف المساعد المعني استنادًا إلى النية، يعرف "مساعد Google" تنفيذ مربع الحوار .
  2. تعريف هدف Dialogflow الذي يحدد حدثًا يتوافق مع إحدى النوايا المساعدة. الاطّلاع على نوايا المساعدة للحصول على قائمة بالأحداث المتوافقة. لا يحتاج هذا النية إلى أي عبارات من نوع يقول المستخدم، لأنها يتم تشغيلها دائمًا عندما يقع الحدث يتم تنشيطها (عندما ينتهي "مساعد Google" من تنفيذ المساعد).
  3. وعندما يعرض "مساعد Google" نتيجة المساعد في المطلوبة إلى طريقة تنفيذ الطلب، يتم تفعيل هدف Dialogflow، ويمكنك التعامل مع الغرض بشكلٍ طبيعي.

JSON

  1. يُرجى تحديد هدف المساعد في possibleIntents المستخدم عند الاستجابة لخدمة "مساعد Google". عندما يتلقّى "مساعد Google" سيعرف أنه يجب تنفيذ مربع الحوار للمساعد. عرض أهداف المساعدة للحصول على معلومات حول الأهداف التي تريد تحقيقها يمكنك طلب أن يتم الوفاء به.
  2. تعريف هدف Dialogflow الذي يحدد حدثًا يتوافق مع إحدى النوايا المساعدة. الاطّلاع على نوايا المساعدة للحصول على قائمة بالأحداث المتوافقة. لا يحتاج هذا النية إلى أي عبارات من نوع يقول المستخدم، لأنها يتم تشغيلها دائمًا عندما يقع الحدث التي يتم تنشيطها.
  3. وعندما يعرض "مساعد Google" نتيجة المساعد في إلى عملية التنفيذ، وتحليل الطلب والبيانات التي تحتاجها.

حزمة تطوير برامج المهام

Node.js

  1. استدعِ ask مع تضمين المعلَمات المناسبة. تطلب الدالة المساعدة تنفيذ أحد الأهداف الموضحة في أغراض المساعدة. عندما تستدعي دالة مساعدة، ترسل مكتبة العملاء ردًا إلى المساعد يحتوي على أحد هذه النوايا. بناءً على قصده، يعرف "مساعد Google" تنفيذ مربّع حوار للمساعد المقابل.
  2. وعندما يعرض "مساعد Google" نتيجة المساعد في الطلب إلى طريقة التنفيذ، ستتلقى الغرض المقابل في طلبك. يتيح لك ذلك رصد أنّ أحد المساعدين قد عرض نتيجة. استخدام دالة getter المتجاوبة للمساعد للحصول على البيانات التي المحتاجين.

JSON

  1. يُرجى تحديد هدف المساعد في possibleIntents المستخدم عند الاستجابة لخدمة "مساعد Google". عندما يتلقّى "مساعد Google" سيعرف أنه يجب تنفيذ مربع الحوار للمساعد. عرض أهداف المساعدة للحصول على معلومات حول الأهداف التي تريد تحقيقها يمكنك طلب أن يتم الوفاء به.
  2. وعندما يعرض "مساعد Google" نتيجة المساعد في إلى عملية التنفيذ، وتحليل الطلب والبيانات التي تحتاجها.

نوايا المساعدة

يوضّح الجدول التالي الأهداف المتوافقة التي يمكنك طلبها "مساعد Google" لتنفيذ المهام إذا كنت تستخدم Dialogflow، ستحتاج أيضًا إلى إنشاء هدف Dialogflow الذي يحدد الحدث المقابل للغرض المساعد.

اسم الغرض اسم حدث Dialogflow الاستخدام
actions.intent.PERMISSION actions_intent_PERMISSION يجب الحصول على اسم المستخدم بالكامل أو موقعه الجغرافي التقريبي أو موقعه الجغرافي الدقيق، أو جميعها 3.
actions.intent.OPTION actions_intent_OPTION يمكنك استلام العنصر المحدّد من قائمة أو واجهة مستخدم لوحة عرض دوّارة. أو، إذا كان المستخدم لا يتم اختياره من واجهة مستخدم القائمة أو لوحة العرض الدوّارة، أو لا يتلقّى كلامًا أو نصًا إدخال يتطابق مع المفتاح في واجهة مستخدم القائمة أو لوحة العرض الدوّارة.
actions.intent.DATETIME actions_intent_DATETIME الحصول على إدخال التاريخ والوقت من المستخدم.
actions.intent.SIGN_IN actions_intent_SIGN_IN يطلب هذا الإجراء مسار ربط الحساب لربط حساب مستخدم.
actions.intent.PLACE actions_intent_PLACE الحصول على عنوان أو موقع جغرافي محفوظ من المستخدم
actions.intent.CONFIRMATION actions_intent_CONFIRMATION الحصول على تأكيد من المستخدم (على سبيل المثال، إجابة عن سؤال بنعم أو لا)

توضّح الأقسام التالية الجهات المساعِدة المتاحة والهدف المرتبط بها التي يجب أن تطلبها لاستخدام المساعد.

معلومات المستخدم

يمكنك الحصول على معلومات المستخدمين التالية باستخدام هذا التطبيق المساعِد:

  • الاسم المعروض
  • الاسم المعطى
  • اسم العائلة
  • الموقع الجغرافي التقريبي للجهاز (الرمز البريدي والمدينة)
  • الموقع الجغرافي الدقيق للجهاز (الإحداثيات وعنوان الشارع)

جارٍ الاتصال بمقدّم المساعدة

يوضح مثال الرمز التالي كيفية طلب المساعد باستخدام البرنامج المكتبة. تعرِض مقتطفات JSON الاستجابة المقابلة على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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"
            ]
          }
        }
      ]
    }
  ]
}

الحصول على نتائج المساعد

يوضّح مثال الرمز التالي طريقة الوصول إلى نتيجة المساعد باستخدام ومكتبة العملاء. وتمثل مقتطفات JSON الطلب الذي يحتوي على الناتجة عن المساعدة التي سيتلقاها تنفيذ طلبك.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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"
        }
      ]
    }
  ]
}

يوضح المقتطف أعلاه كيفية التحقق مما إذا كان المستخدم قد منحك المعلومات ثم الوصول إلى البيانات.

بعد الحصول على معلومات المستخدم، نقترح عليك الاحتفاظ بهذه العلامة المعلومات، لذلك لن تضطر إلى السؤال مرة أخرى. يمكنك استخدام مساحة التخزين للمستخدم لتخزين معلومات المستخدم عبر المحادثات. اطلع على نموذج Name Psychic في Node.js وJava للاطلاع على عمل UserStorage.

جارٍ الاتصال بمقدّم المساعدة

يوضح مثال الرمز التالي كيفية طلب المساعد باستخدام البرنامج المكتبة. تعرِض مقتطفات JSON الاستجابة المقابلة على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف استجابة ردّ تلقائي على الويب.

{
  "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."
              }
            }
          ]
        }
      }
    }
  ]
}

يمكنك عرض قائمة أو واجهة مستخدم لوحة عرض دوّارة والحصول على الخيار المحدَّد من المستخدم. بهدف actions.intent.OPTION.

الحصول على نتائج المساعد

توضّح أمثلة الرموز التالية طريقة الوصول إلى نتيجة المساعد باستخدام ومكتبة العملاء. تمثّل مقتطفات JSON الطلب الذي يحتوي على النتيجة للمساعد الذي سيستلمه تنفيذك.

توضّح المقتطفات التالية كيفية التحقّق من الخيار الذي اختاره المستخدم.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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"
}

التاريخ والوقت

يمكنك الحصول على التاريخ والوقت من المستخدمين من خلال طلب تنفيذ هدف واحد (actions.intent.DATETIME).

جارٍ الاتصال بمقدّم المساعدة

يوضح مثال الرمز التالي كيفية طلب المساعد باستخدام البرنامج المكتبة. تعرِض مقتطفات JSON الاستجابة المقابلة على الويب.

يمكنك تحديد الطلبات المخصّصة عند طلب التاريخ والوقت من المستخدم باستخدام كائن options عند إنشاء إذن DateTime.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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?"
            }
          }
        }
      ]
    }
  ]
}

الحصول على نتائج المساعد

يوضّح مثال الرمز التالي طريقة الوصول إلى نتيجة المساعد باستخدام ومكتبة العملاء. تمثّل مقتطفات JSON الطلب الذي يحتوي على النتيجة للمساعد الذي سيستلمه تنفيذك.

يوضح المقتطف أدناه كيفية التحقق مما إذا كان المستخدم قد منح إذن الوصول وطريقة تنفيذ هذا الإجراء من الوصول إلى البيانات.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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"
        }
      ]
    }
  ]
}

تسجيل الدخول إلى الحساب

يمكنك السماح للمستخدمين بتسجيل الدخول إلى حساباتهم المرتبطة بحسابك الخدمة من خلال طلب تنفيذ actions.intent.SIGN_IN. المستخدمون لا يمكن تسجيل الدخول عبر الصوت من خلال OAuth.

جارٍ الاتصال بمقدّم المساعدة

يوضح مثال الرمز التالي كيفية طلب المساعد باستخدام البرنامج المكتبة. تعرِض مقتطفات JSON الاستجابة المقابلة على الويب.

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"
          }
        }
      ]
    }
  ]
}

الحصول على نتائج المساعد

يوضّح مثال الرمز التالي طريقة الوصول إلى نتيجة المساعد باستخدام ومكتبة العملاء. تمثّل مقتطفات JSON الطلب الذي يحتوي على النتيجة للمساعد الذي سيستلمه تنفيذك.

يوضح المقتطف أدناه كيفية التحقق مما إذا كان المستخدم قد منح إذن الوصول وطريقة تنفيذ هذا الإجراء من الوصول إلى البيانات.

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"
        }
      ]
    }
  ]
}

المكان والموقع الجغرافي

يمكنك الحصول على أحد المواقع الجغرافية من المستخدِمين من خلال طلب تنفيذ هدف واحد (actions.intent.PLACE). يُستخدَم هذا المساعد لطلب والعناوين والمواقع الأخرى، بما في ذلك أي مواقع للمنزل/العمل/الاتصال التي حفظها في Google.

ستعرض المواقع الجغرافية المحفوظة العنوان فقط، وليس التعيين المرتبط بها. (مثال: "123 شارع جامعة الدول العربية" بدلاً من "المنزل = 123 شارع جامعة الدول العربية").

جارٍ الاتصال بمقدّم المساعدة

يوضح مثال الرمز التالي كيفية طلب المساعد باستخدام البرنامج المكتبة. تعرِض مقتطفات JSON الاستجابة المقابلة على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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?"
              }
            }
          }
        }
      ]
    }
  ]
}

الحصول على نتائج المساعد

يوضّح مثال الرمز التالي طريقة الوصول إلى نتيجة المساعد باستخدام ومكتبة العملاء. تمثّل مقتطفات JSON الطلب الذي يحتوي على النتيجة للمساعد الذي سيستلمه تنفيذك.

يوضح المقتطف أدناه كيفية التحقق مما إذا كان المستخدم قد منح إذن الوصول وطريقة تنفيذ هذا الإجراء من الوصول إلى البيانات.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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"
        }
      ]
    }
  ]
}

تأكيد

يمكنك أن تطرح تأكيدًا عامًا من المستخدم (سؤال بنعم أو لا) والحصول على والإجابة الناتجة. القواعد النحوية لـ "نعم" و"لا" تتوسع بشكل طبيعي إلى أشياء مثل "نعم" أو "لا"، مما يجعلها قابلة للاستخدام في العديد من المواقف.

جارٍ الاتصال بمقدّم المساعدة

يوضح مثال الرمز التالي كيفية طلب المساعد باستخدام البرنامج المكتبة. تعرِض مقتطفات JSON الاستجابة المقابلة على الويب.

يمكنك تحديد طلب مخصّص عند طلب التأكيد من المستخدم.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

JSON

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

الحصول على نتائج المساعد

يوضّح مثال الرمز التالي طريقة الوصول إلى نتيجة المساعد باستخدام ومكتبة العملاء. تمثّل مقتطفات JSON الطلب الذي يحتوي على النتيجة للمساعد الذي سيستلمه تنفيذك.

بعد أن يردّ المستخدم على المساعد، ستتلقّى طلبًا إلى طلبك والتحقّق ممّا إذا كان المستخدِم قد أكّد عليه الموافقة أم لا.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

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

تجدر الإشارة إلى أن ملف JSON أدناه يصف طلب ردّ تلقائي على الويب.

{
  "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"
        }
      ]
    }
  ]
}