جمع جهات الاتصال وإدارتها في Google Chat

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

إليك طريقة عمل تطبيق Chat:

  • نموذج التواصل من الأمر الذي يبدأ بشرطة مائلة
    الشكل 1. يستجيب تطبيق Chat للأمر الذي يبدأ بشرطة مائلة /about برسالة نصية وزر يفتح نموذج جهة الاتصال.
  • نموذج الاتصال في مربّع حوار
    الشكل 2. يفتح تطبيق Chat مربّع حوار يمكن للمستخدمين إدخال معلومات حول جهة اتصال فيه.
  • مربّع حوار التأكيد والمراجعة
    الشكل 3. يعرض تطبيق Chat مربّع حوار تأكيد ليتمكّن المستخدمون من مراجعة المعلومات والتأكيد عليها قبل إرسالها.
  • رسالة نصية تؤكّد جهة الاتصال الجديدة
    الشكل 4. بعد أن يرسل المستخدم النموذج، يرسل تطبيق Chat رسالة نصية خاصة لتأكيد عملية الإرسال.
  • نموذج التواصل من رسالة بطاقة
    الشكل 5. يطلب تطبيق Chat أيضًا من المستخدمين إضافة جهة اتصال من بطاقة في رسالة.

المتطلبات الأساسية

الأهداف

الهندسة المعمارية

تم إنشاء تطبيق Chat باستخدام برمجة تطبيقات Google ويستخدم أحداث التفاعل لمعالجة طلبات مستخدمي Chat والردّ عليها.

يوضّح ما يلي كيف يمكن للمستخدم التفاعل عادةً مع تطبيق Chat:

  1. يفتح مستخدم رسالة مباشرة باستخدام تطبيق Chat، أو يضيف تطبيق Chat إلى مساحة حالية.

  2. يطلب تطبيق Chat من المستخدم إضافة جهة اتصال من خلال إنشاء نموذج جهة اتصال وعرضه ككائن card. لعرض نموذج التواصل، يستجيب تطبيق Chat للمستخدمين بالطرق التالية:

    • يردّ على الإشارات والرسائل المباشرة برسالة بطاقة تحتوي على نموذج جهة الاتصال.
    • يستجيب للأمر /addContact الذي يبدأ بشرطة مائلة من خلال فتح مربّع حوار يتضمّن نموذج جهة الاتصال.
    • يستجيب للأمر الشرطي /about برسالة نصية تتضمّن زر إضافة جهة اتصال يمكن للمستخدمين النقر عليه لفتح مربّع حوار يتضمّن نموذج جهة الاتصال.
  3. عندما يظهر نموذج التواصل، يُدخل المستخدم معلومات الاتصال في الحقول وعناصر واجهة المستخدم التالية:

    • الاسم الأول واسم العائلة: أداة textInput تقبل السلاسل.
    • تاريخ الميلاد: أداة dateTimePicker تقبل التواريخ فقط.
    • نوع جهة الاتصال: عنصر واجهة مستخدم selectionInput لأزرار الاختيار يتيح للمستخدمين اختيار قيمة سلسلة واحدة وإرسالها (إما Personal أو Work).
    • زر المراجعة والإرسال: هو buttonList مصفوفة تتضمّن عنصر واجهة المستخدم button الذي ينقر عليه المستخدم لإرسال القيم التي أدخلها.
  4. يتعامل تطبيق Google Chat مع حدث تفاعل CARD_CLICKED لمعالجة القيم التي يدخلها المستخدم، ويعرض القيم في بطاقة تأكيد.

  5. يراجع المستخدم بطاقة التأكيد وينقر على الزر إرسال لإكمال معلومات الاتصال.

  6. يرسل تطبيق Google Chat رسالة نصية خاصة تؤكّد عملية الإرسال.

إعداد البيئة

يوضّح هذا القسم كيفية إنشاء مشروع في Google Cloud وإعداده لتطبيق Chat.

إنشاء مشروع على Google Cloud

Google Cloud Console

  1. في Google Cloud Console، انتقِل إلى "القائمة" > المشرف وإدارة الهوية وإمكانية الوصول > إنشاء مشروع.

    الانتقال إلى "إنشاء مشروع"

  2. في حقل اسم المشروع، أدخِل اسمًا وصفيًا لمشروعك.

    اختياري: لتعديل رقم تعريف المشروع، انقر على تعديل. لا يمكن تغيير رقم تعريف المشروع بعد إنشائه، لذا اختَر رقم تعريف يلبي احتياجاتك طوال مدة المشروع.

  3. في حقل الموقع الجغرافي، انقر على تصفّح لعرض المواقع الجغرافية المحتملة لمشروعك. بعد ذلك، انقر على اختيار.
  4. انقر على إنشاء. تنتقل وحدة تحكّم Google Cloud إلى صفحة "لوحة البيانات" ويتم إنشاء مشروعك في غضون بضع دقائق.

gcloud CLI

في إحدى بيئات التطوير التالية، يمكنك الوصول إلى واجهة سطر الأوامر (CLI) في Google Cloud (gcloud):

  • Cloud Shell: لتفعيل Cloud Shell واستخدام وحدة طرفية على الإنترنت مع إعداد gcloud CLI مسبقًا
    تفعيل Cloud Shell
  • Local Shell: لاستخدام بيئة تطوير محلية، عليك تثبيت وإعداد gcloud CLI.
    لإنشاء مشروع على Google Cloud، استخدِم الأمر gcloud projects create:
    gcloud projects create PROJECT_ID
    استبدِل PROJECT_ID بضبط رقم تعريف المشروع الذي تريد إنشاءه.

إعداد المصادقة والتفويض

تتطلّب تطبيقات Google Chat إعداد شاشة موافقة OAuth ليتمكّن المستخدمون من منح تطبيقك الإذن في تطبيقات Google Workspace، بما في ذلك Google Chat.

في هذا البرنامج التعليمي، ستنشئ تطبيق Chat مخصّصًا للاختبار والاستخدام الداخلي فقط، لذا لا بأس من استخدام معلومات العنصر النائب لشاشة الموافقة. قبل نشر تطبيق Chat، عليك استبدال أي معلومات نائبة بمعلومات حقيقية.

  1. في وحدة تحكّم Google Cloud، انتقِل إلى "القائمة" > > العلامة التجارية.

    الانتقال إلى "الهوية البصرية للعلامة التجارية"

  2. إذا سبق لك إعداد ، يمكنك إعداد إعدادات "شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth" التالية في العلامة التجارية والجمهور والوصول إلى البيانات. إذا ظهرت لك الرسالة لم يتم الإعداد بعد، انقر على البدء:

    1. ضمن معلومات التطبيق، في اسم التطبيق، اكتب Contact Manager.
    2. في البريد الإلكتروني المخصّص لدعم المستخدمين، اختَر عنوان بريدك الإلكتروني أو مجموعة Google المناسبة.
    3. انقر على التالي.
    4. ضمن الجمهور، اختَر داخلي. إذا لم تتمكّن من اختيار داخلي، اختَر خارجي.
    5. انقر على التالي.
    6. ضمن معلومات الاتصال، أدخِل عنوان بريد إلكتروني يمكنك تلقّي إشعارات فيه بشأن أي تغييرات تطرأ على مشروعك.
    7. انقر على التالي.
    8. ضمن إنهاء، راجِع سياسة بيانات المستخدمين في خدمات Google API، ثم انقر على أوافق على سياسة بيانات المستخدمين في خدمات Google API إذا كنت موافقًا عليها.
    9. انقر على متابعة.
    10. انقر على إنشاء.
    11. إذا اخترت خارجي لنوع المستخدم، أضِف مستخدمين تجريبيين:
      1. انقر على الجمهور.
      2. ضمن المستخدمون التجريبيون، انقر على إضافة مستخدمين.
      3. أدخِل عنوان بريدك الإلكتروني وأي مستخدمين آخرين معتمَدين للاختبار، ثم انقر على حفظ.

إنشاء تطبيق Chat ونشره

في القسم التالي، ستنسخ مشروعًا كاملاً من مشاريع Apps Script وتعدّله، وهو يحتوي على جميع رموز التطبيق المطلوبة لتطبيق Chat، لذا لن تحتاج إلى نسخ كل ملف ولصقه.

يمكنك اختياريًا الاطّلاع على المشروع بأكمله على GitHub.

عرض على GitHub

في ما يلي نظرة عامة على كل ملف:

main.gs

يتعامل مع جميع منطق التطبيق، بما في ذلك أحداث التفاعل المتعلقة بموعد إرسال المستخدمين رسائل إلى تطبيق Chat أو النقر على أزرار من رسالة في تطبيق Chat أو فتح مربعات الحوار وإغلاقها.

عرض رمز main.gs

apps-script/contact-form-app/main.gs
/**
 * Copyright 2024 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Responds to a MESSAGE interaction event in Google Chat.
 *
 * @param {Object} event the MESSAGE interaction event from Chat API.
 * @return {Object} message response that opens a dialog or sends private
 *                          message with text and card.
 */
function onMessage(event) {
  if (event.message.slashCommand) {
    switch (event.message.slashCommand.commandId) {
      case 1:
        // If the slash command is "/about", responds with a text message and button
        // that opens a dialog.
        return {
          text: "Manage your personal and business contacts 📇. To add a " +
                  "contact, use the slash command `/addContact`.",
          accessoryWidgets: [{
            buttonList: { buttons: [{
              text: "Add Contact",
              onClick: { action: {
                function: "openInitialDialog",
                interaction: "OPEN_DIALOG"
              }}
            }]}
          }]
        }
      case 2:
        // If the slash command is "/addContact", opens a dialog.
        return openInitialDialog();
    }
  }

  // If user sends the Chat app a message without a slash command, the app responds
  // privately with a text and card to add a contact.
  return {
    privateMessageViewer: event.user,
    text: "To add a contact, try `/addContact` or complete the form below:",
    cardsV2: [{
      cardId: "addContactForm",
      card: {
        header: { title: "Add a contact" },
        sections:[{ widgets: CONTACT_FORM_WIDGETS.concat([{
          buttonList: { buttons: [{
            text: "Review and submit",
            onClick: { action: { function : "openConfirmation" }}
          }]}
        }])}]
      }
    }]
  };
}

/**
 * Responds to CARD_CLICKED interaction events in Google Chat.
 *
 * @param {Object} event the CARD_CLICKED interaction event from Google Chat.
 * @return {Object} message responses specific to the dialog handling.
 */
function onCardClick(event) {
  // Initial dialog form page
  if (event.common.invokedFunction === "openInitialDialog") {
    return openInitialDialog();
  // Confirmation dialog form page
  } else if (event.common.invokedFunction === "openConfirmation") {
    return openConfirmation(event);
  // Submission dialog form page
  } else if (event.common.invokedFunction === "submitForm") {
    return submitForm(event);
  }
}

/**
 * Opens the initial step of the dialog that lets users add contact details.
 *
 * @return {Object} a message with an action response to open a dialog.
 */
function openInitialDialog() {
  return { actionResponse: {
    type: "DIALOG",
    dialogAction: { dialog: { body: { sections: [{
      header: "Add new contact",
      widgets: CONTACT_FORM_WIDGETS.concat([{
        buttonList: { buttons: [{
          text: "Review and submit",
          onClick: { action: { function: "openConfirmation" }}
        }]}
      }])
    }]}}}
  }};
}

/**
 * Returns the second step as a dialog or card message that lets users confirm details.
 *
 * @param {Object} event the interactive event with form inputs.
 * @return {Object} returns a dialog or private card message.
 */
function openConfirmation(event) {
  const name = fetchFormValue(event, "contactName") ?? "";
  const birthdate = fetchFormValue(event, "contactBirthdate") ?? "";
  const type = fetchFormValue(event, "contactType") ?? "";
  const cardConfirmation = {
    header: "Your contact",
    widgets: [{
      textParagraph: { text: "Confirm contact information and submit:" }}, {
      textParagraph: { text: "<b>Name:</b> " + name }}, {
      textParagraph: {
        text: "<b>Birthday:</b> " + convertMillisToDateString(birthdate)
      }}, {
      textParagraph: { text: "<b>Type:</b> " + type }}, {
      buttonList: { buttons: [{
        text: "Submit",
        onClick: { action: {
          function: "submitForm",
          parameters: [{
            key: "contactName", value: name }, {
            key: "contactBirthdate", value: birthdate }, {
            key: "contactType", value: type
          }]
        }}
      }]}
    }]
  };

  // Returns a dialog with contact information that the user input.
  if (event.isDialogEvent) {
    return { action_response: {
      type: "DIALOG",
      dialogAction: { dialog: { body: { sections: [ cardConfirmation ]}}}
    }};
  }

  // Updates existing card message with contact information that the user input.
  return {
    actionResponse: { type: "UPDATE_MESSAGE" },
    privateMessageViewer: event.user,
    cardsV2: [{
      card: { sections: [cardConfirmation]}
    }]
  }
}

/**
  * Validates and submits information from a dialog or card message
  * and notifies status.
  *
  * @param {Object} event the interactive event with parameters.
  * @return {Object} a message response that opens a dialog or posts a private
  *                  message.
  */
function submitForm(event) {
  const contactName = event.common.parameters["contactName"];
  // Checks to make sure the user entered a contact name.
  // If no name value detected, returns an error message.
  const errorMessage = "Don't forget to name your new contact!";
  if (!contactName && event.dialogEventType === "SUBMIT_DIALOG") {
    return { actionResponse: {
      type: "DIALOG",
      dialogAction: { actionStatus: {
        statusCode: "INVALID_ARGUMENT",
        userFacingMessage: errorMessage
      }}
    }};
  }
  if (!contactName) {
    return {
      privateMessageViewer: event.user,
      text: errorMessage
    };
  }

  // The Chat app indicates that it received form data from the dialog or card.
  // Sends private text message that confirms submission.
  const confirmationMessage = "✅ " + contactName + " has been added to your contacts.";
  if (event.dialogEventType === "SUBMIT_DIALOG") {
    return {
      actionResponse: {
        type: "DIALOG",
        dialogAction: { actionStatus: {
          statusCode: "OK",
          userFacingMessage: "Success " + contactName
        }}
      }
    };
  }
  return {
    actionResponse: { type: "NEW_MESSAGE" },
    privateMessageViewer: event.user,
    text: confirmationMessage
  };
}

/**
 * Extracts form input value for a given widget.
 *
 * @param {Object} event the CARD_CLICKED interaction event from Google Chat.
 * @param {String} widgetName a unique ID for the widget, specified in the widget's name field.
 * @returns the value inputted by the user, null if no value can be found.
 */
function fetchFormValue(event, widgetName) {
  const formItem = event.common.formInputs[widgetName][""];
  // For widgets that receive StringInputs data, the value input by the user.
  if (formItem.hasOwnProperty("stringInputs")) {
    const stringInput = event.common.formInputs[widgetName][""].stringInputs.value[0];
    if (stringInput != null) {
      return stringInput;
    }
  // For widgets that receive dateInput data, the value input by the user.
  } else if (formItem.hasOwnProperty("dateInput")) {
    const dateInput = event.common.formInputs[widgetName][""].dateInput.msSinceEpoch;
     if (dateInput != null) {
       return dateInput;
     }
  }

  return null;
}

/**
 * Converts date in milliseconds since epoch to user-friendly string.
 *
 * @param {Object} millis the milliseconds since epoch time.
 * @return {string} Display-friend date (English US).
 */
function convertMillisToDateString(millis) {
  const date = new Date(millis);
  const options = { year: 'numeric', month: 'long', day: 'numeric' };
  return date.toLocaleDateString('en-US', options);
}
contactForm.gs

يحتوي على التطبيقات المصغّرة التي تتلقّى بيانات النموذج من المستخدمين. يتم عرض عناصر واجهة المستخدم الخاصة بإدخال النماذج هذه في بطاقات تظهر في الرسائل ومربّعات الحوار.

عرض رمز contactForm.gs

apps-script/contact-form-app/contactForm.gs
/**
 * Copyright 2024 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * The section of the contact card that contains the form input widgets. Used in a dialog and card message.
 * To add and preview widgets, use the Card Builder: https://addons.gsuite.google.com/uikit/builder
 */
const CONTACT_FORM_WIDGETS = [
  {
    "textInput": {
      "name": "contactName",
      "label": "First and last name",
      "type": "SINGLE_LINE"
    }
  },
  {
    "dateTimePicker": {
      "name": "contactBirthdate",
      "label": "Birthdate",
      "type": "DATE_ONLY"
    }
  },
  {
    "selectionInput": {
      "name": "contactType",
      "label": "Contact type",
      "type": "RADIO_BUTTON",
      "items": [
        {
          "text": "Work",
          "value": "Work",
          "selected": false
        },
        {
          "text": "Personal",
          "value": "Personal",
          "selected": false
        }
      ]
    }
  }
];
appsscript.json

بيان Apps Script الذي يحدّد مشروع Apps Script ويضبطه لتطبيق Chat

عرض رمز appsscript.json

apps-script/contact-form-app/appsscript.json
{
  "timeZone": "America/Los_Angeles",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "chat": {}
}

العثور على رقم تعريف مشروعك على السحابة الإلكترونية

  1. في Google Cloud Console، انتقِل إلى مشروعك على السحابة الإلكترونية.

    الانتقال إلى "وحدة تحكّم Google Cloud"

  2. انقر على "الإعدادات والأدوات" > إعدادات المشروع.

  3. دوِّن القيم في حقلَي رقم المشروع ورقم تعريف المشروع. يمكنك استخدامها في الأقسام التالية.

إنشاء مشروع "برمجة تطبيقات Google"

لإنشاء مشروع في &quot;برمجة تطبيقات Google&quot; وربطه بمشروعك على Cloud، اتّبِع الخطوات التالية:

  1. انقر على الزر التالي لفتح مشروع إدارة جهات الاتصال في Google Chat على Apps Script.
    فتح المشروع
  2. انقر على نظرة عامة.
  3. في صفحة النظرة العامة، انقر على رمز إنشاء نسخة إنشاء نسخة.
  4. أدخِل اسمًا لنسخة مشروع "برمجة التطبيقات Google":

    1. انقر على نسخة من إدارة جهات الاتصال في Google Chat.

    2. في عنوان المشروع، اكتب Contact Manager - Google Chat app

    3. انقر على إعادة تسمية.

ضبط مشروع Cloud لمشروع "برمجة التطبيقات"

  1. في مشروع "برمجة تطبيقات Google"، انقر على رمز إعدادات المشروع إعدادات المشروع.
  2. ضمن مشروع Google Cloud Platform (GCP)، انقر على تغيير المشروع.
  3. في رقم مشروع Google Cloud Platform، الصِق رقم مشروع Cloud.
  4. انقر على تحديد المشروع. تم الآن ربط مشروع Cloud بمشروع "برمجة التطبيقات".

إنشاء عملية نشر في "برمجة تطبيقات Google"

بعد إعداد جميع الرموز البرمجية، يمكنك نشر مشروع Apps Script. يمكنك استخدام معرّف النشر عند إعداد تطبيق Chat في Google Cloud.

  1. في Apps Script، افتح مشروع تطبيق Chat.

    الانتقال إلى Apps Script

  2. انقر على نشر > عملية نشر جديدة.

  3. إذا لم يكن خيار إضافة محدّدًا من قبل، انقر على أنواع النشر رمز إعدادات المشروع بجانب اختيار النوع، ثم اختَر إضافة.

  4. في الوصف، أدخِل وصفًا لهذا الإصدار، مثل Test of Contact Manager.

  5. انقر على نشر. تُبلغ "برمجة التطبيقات" عن عملية النشر الناجحة وتوفّر رقم تعريف عملية النشر.

  6. انقر على نسخ لنسخ رقم تعريف عملية النشر، ثم انقر على تم.

ضبط تطبيق Chat في Google Cloud Console

يوضّح هذا القسم كيفية ضبط Google Chat API في وحدة تحكّم Google Cloud باستخدام معلومات عن تطبيق Chat، بما في ذلك معرّف عملية النشر التي أنشأتها للتو من مشروع Apps Script.

  1. في Google Cloud Console، انقر على القائمة > المزيد من المنتجات > Google Workspace > مكتبة المنتجات > Google Chat API > إدارة > الإعدادات.

    الانتقال إلى إعدادات Chat API

  2. في حقل اسم التطبيق، اكتب Contact Manager.

  3. في عنوان URL للأفاتار، اكتب https://developers.google.com/chat/images/contact-icon.png.

  4. في حقل الوصف، اكتب Manage your personal and business contacts.

  5. انقر على مفتاح التبديل تفعيل الميزات التفاعلية لتفعيل هذا الإعداد.

  6. ضمن الوظائف، اختَر الانضمام إلى المساحات والمحادثات الجماعية.

  7. ضمن إعدادات الاتصال، اختَر Apps Script.

  8. في معرّف النشر، الصِق معرّف نشر &quot;برمجة تطبيقات Google&quot; الذي نسخته في القسم السابق عند إنشاء عملية نشر &quot;برمجة تطبيقات Google&quot;.

  9. ضمن الأوامر، اضبط الأوامر التي تبدأ بشرطة مائلة /about و/addContact:

    1. انقر على إضافة أمر يبدأ بشرطة مائلة لإعداد الأمر الأول.
    2. في حقل الاسم، اكتب About.
    3. في معرّف الأمر، اكتب 1.
    4. في حقل الوصف، اكتب Learn how to use this Chat app to manage your contacts.
    5. ضمن نوع الأمر، اختَر Slash command.
    6. في اسم الأمر الذي يبدأ بشرطة مائلة، اكتب /about.
    7. انقر على يفتح مربّع حوار.
    8. انقر على تم.
    9. انقر على إضافة أمر لإعداد أمر آخر يبدأ بشرطة مائلة.
    10. في حقل الاسم، اكتب Add a contact.
    11. في معرّف الأمر، اكتب 2.
    12. في حقل الوصف، اكتب Submit information about a contact.
    13. ضمن نوع الأمر، اختَر Slash command.
    14. في اسم الأمر الذي يبدأ بشرطة مائلة، اكتب /addContact.
    15. انقر على يفتح مربّع حوار.
    16. انقر على تم.
  10. ضمن إذن الوصول، ضَع علامة في مربّع الاختيار إتاحة تطبيق Chat هذا لمستخدمين ومجموعات محدّدين في YOUR DOMAIN وأدخِل عنوان بريدك الإلكتروني.

  11. ضمن السجلات، اختَر تسجيل الأخطاء في خدمة تسجيل البيانات.

  12. انقر على حفظ. ستظهر رسالة "تم حفظ الإعدادات".

تطبيق Chat جاهز للتثبيت والاختبار في Chat.

اختبار تطبيق Chat

لاختبار تطبيق Chat، افتح مساحة رسالة مباشرة باستخدام تطبيق Chat وأرسِل رسالة:

  1. افتح Google Chat باستخدام حساب Google Workspace الذي قدّمته عند إضافة نفسك كمختبِر موثوق به.

    الانتقال إلى Google Chat

  2. انقر على محادثة جديدة.
  3. في حقل إضافة مستخدم واحد أو أكثر، اكتب اسم تطبيق Chat.
  4. اختَر تطبيق Chat من النتائج. سيتم فتح رسالة مباشرة.

  1. في الرسالة المباشرة الجديدة مع تطبيق Chat، اكتب /addContact واضغط على Enter.

  2. في مربّع الحوار الذي يظهر، أدخِل معلومات الاتصال:

    1. في حقل النص الاسم الأول واسم العائلة، أدخِل اسمًا.
    2. في أداة اختيار التاريخ ضمن تاريخ الميلاد، اختَر تاريخًا.
    3. ضمن نوع جهة الاتصال، انقر على زر الاختيار العمل أو شخصي.
  3. انقر على المراجعة والإرسال.

  4. في مربّع حوار التأكيد، راجِع المعلومات التي أرسلتها وانقر على إرسال. سيرد تطبيق Chat برسالة نصية تقول CONTACT NAME has been added to your contacts..

  5. يمكنك أيضًا اختياريًا اختبار نموذج الاتصال وإرساله بالطرق التالية:

    • استخدِم الأمر /about الذي يبدأ بشرطة مائلة. يرد تطبيق المحادثة برسالة نصية وزر في أداة ملحقة مكتوب عليه Add a contact. يمكنك النقر على الزر لفتح مربّع حوار يتضمّن نموذج معلومات الاتصال.
    • أرسِل رسالة مباشرة إلى تطبيق Chat بدون استخدام أمر يبدأ بشرطة مائلة، مثل Hello. سيردّ تطبيق Chat بنص وبطاقة تحتوي على نموذج الاتصال.

تَنظيم

لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، ننصحك بحذف مشروع Cloud.

  1. في Google Cloud Console، انتقِل إلى صفحة إدارة الموارد. انقر على القائمة > إدارة الهوية وإمكانية الوصول والمشرف > إدارة الموارد.

    الانتقال إلى "إدارة الموارد"

  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف .
  3. في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.