Raccogliere e gestire i contatti in Google Chat

Questo tutorial mostra come creare un'app Google Chat che aiuti gli utenti di Google Chat a gestire i propri contatti personali e aziendali. Per raccogliere informazioni, l'app Chat chiede agli utenti di compilare un modulo di contatto nei messaggi e nelle finestre di dialogo delle schede.

Guarda l'app Chat in azione:

  • Modulo di contatto dal comando slash.
    Figura 1. L'app di chat risponde al comando slash /about con un messaggio di testo e un pulsante che apre un modulo di contatto.
  • Modulo di contatto in una finestra di dialogo.
    Figura 2. L'app Chat apre una finestra di dialogo in cui gli utenti possono inserire informazioni su un contatto.
  • Finestra di dialogo di conferma e revisione.
    Figura 3. L'app Chat restituisce una finestra di dialogo di conferma in modo che gli utenti possano esaminare e confermare le informazioni prima dell'invio.
  • Un messaggio che conferma il nuovo contatto.
    Figura 4. Dopo l'invio del modulo, l'app Chat invia un messaggio di testo privato per confermare l'invio.
  • Modulo di contatto da un messaggio della scheda.
    Figura 5. L'app Chat chiede anche agli utenti di aggiungere un contatto da una scheda in un messaggio.

Prerequisiti

Obiettivi

Architettura

L'app Chat è integrata in Google Apps Script e utilizza eventi di interazione per elaborare e rispondere agli utenti di Chat.

Di seguito viene mostrato come un utente potrebbe interagire in genere con l'app Chat:

  1. Un utente apre un messaggio diretto con l'app Chat o aggiunge l'app Chat a uno spazio esistente.

  2. L'app Chat chiede all'utente di aggiungere un contatto creando e visualizzando un modulo di contatto come oggetto card. Per presentare il modulo di contatto, l'app Chat risponde agli utenti nei seguenti modi:

    • Risponde alle @menzioni e ai messaggi diretti con un messaggio scheda che contiene il modulo di contatto.
    • Risponde al comando slash /addContact aprendo una finestra di dialogo con il modulo di contatto.
    • Risponde al comando slash /about con un messaggio di testo che include un pulsante Aggiungi un contatto su cui gli utenti possono fare clic per aprire una finestra di dialogo con il modulo di contatto.
  3. Quando viene visualizzato il modulo di contatto, l'utente inserisce i dati di contatto nei seguenti campi e widget:

    • Nome e cognome: un textInput widget che accetta stringhe.
    • Data di nascita: un dateTimePicker widget che accetta solo date.
    • Tipo di contatto: un selectionInput widget di pulsanti di opzione che consente agli utenti di selezionare e inviare un singolo valore stringa (Personal o Work).
    • Pulsante Rivedi e invia: un buttonList array con il widget button su cui l'utente fa clic per inviare i valori che inserisce.
  4. L'app Google Chat gestisce un evento di interazione CARD_CLICKED per elaborare i valori inseriti dall'utente e li visualizza in una scheda di conferma.

  5. L'utente esamina la scheda di conferma e fa clic sul pulsante Invia per finalizzare i dati di contatto.

  6. L'app Google Chat invia un messaggio privato che conferma l'invio.

Prepara l'ambiente

Questa sezione mostra come creare e configurare un progetto Google Cloud per l'app di chat.

Crea un progetto Google Cloud

Console Google Cloud

  1. Nella console Google Cloud, vai a Menu > IAM e amministrazione > Crea un progetto.

    Vai a Crea un progetto

  2. Nel campo Nome progetto, inserisci un nome descrittivo per il progetto.

    (Facoltativo) Per modificare l'ID progetto, fai clic su Modifica. L'ID progetto non può essere modificato dopo la creazione del progetto, quindi scegli un ID che soddisfi le tue esigenze per l'intera durata del progetto.

  3. Nel campo Posizione, fai clic su Sfoglia per visualizzare le potenziali posizioni per il tuo progetto. Quindi, fai clic su Seleziona.
  4. Fai clic su Crea. La console Google Cloud passa alla pagina Dashboard e il progetto viene creato entro pochi minuti.

Interfaccia a riga di comando gcloud

In uno dei seguenti ambienti di sviluppo, accedi a Google Cloud CLI (gcloud):

  • Cloud Shell: per utilizzare un terminale online con gcloud CLI già configurato, attiva Cloud Shell.
    Attiva Cloud Shell
  • Shell locale: per utilizzare un ambiente di sviluppo locale, installa e inizializza gcloud CLI.
    Per creare un progetto Cloud, utilizza il comando gcloud projects create:
    gcloud projects create PROJECT_ID
    Sostituisci PROJECT_ID impostando l'ID del progetto che vuoi creare.

Configurare l'autenticazione e l'autorizzazione

Le app Google Chat richiedono la configurazione di una schermata per il consenso OAuth in modo che gli utenti possano autorizzare la tua app nelle applicazioni Google Workspace, tra cui Google Chat.

In questo tutorial, esegui il deployment di un'app Chat solo per test e uso interno, quindi puoi utilizzare informazioni segnaposto per la schermata di consenso. Prima di pubblicare l'app Chat, sostituisci le informazioni segnaposto con informazioni reali.

  1. Nella console Google Cloud, vai a Menu > > Branding.

    Vai a Branding

  2. Se hai già configurato , puoi configurare le seguenti impostazioni della schermata per il consenso OAuth in Branding, Pubblico e Accesso ai dati. Se viene visualizzato un messaggio che indica non ancora configurata, fai clic su Inizia:

    1. In Informazioni sull'app, nella sezione Nome app, digita Contact Manager.
    2. In Email di assistenza utenti, seleziona il tuo indirizzo email o un gruppo Google appropriato.
    3. Fai clic su Avanti.
    4. Nella sezione Pubblico, seleziona Interno. Se non riesci a selezionare Interno, seleziona Esterno.
    5. Fai clic su Avanti.
    6. Nella sezione Informazioni di contatto, inserisci un indirizzo email a cui ricevere notifiche relative a eventuali modifiche al tuo progetto.
    7. Fai clic su Avanti.
    8. In Fine, esamina le Norme relative ai dati utente dei servizi API di Google e, se le accetti, seleziona Accetto le Norme relative ai dati utente dei servizi API di Google.
    9. Fai clic su Continua.
    10. Fai clic su Crea.
    11. Se hai selezionato Esterno per il tipo di utente, aggiungi utenti di test:
      1. Fai clic su Segmento di pubblico.
      2. Nella sezione Utenti di test, fai clic su Aggiungi utenti.
      3. Inserisci il tuo indirizzo email e gli altri utenti di test autorizzati, quindi fai clic su Salva.

Creare e distribuire l'app di chat

Nella sezione seguente, copierai e aggiornerai un intero progetto Apps Script che contiene tutto il codice dell'applicazione richiesto per la tua app di chat, quindi non è necessario copiare e incollare ogni file.

Se vuoi, puoi visualizzare l'intero progetto su GitHub.

Visualizza su GitHub

Ecco una panoramica di ogni file:

main.gs

Gestisce tutta la logica dell'app, inclusi gli eventi di interazione relativi al momento in cui gli utenti inviano messaggi all'app Chat, fanno clic sui pulsanti di un messaggio dell'app Chat o aprono e chiudono le finestre di dialogo.

Visualizza il codice 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

Contiene i widget che ricevono i dati del modulo dagli utenti. Questi widget di input del modulo vengono visualizzati nelle schede che compaiono nei messaggi e nelle finestre di dialogo.

Visualizza il codice 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

Il manifesto Apps Script che definisce e configura il progetto Apps Script per l'app Chat.

Visualizza il codice appsscript.json

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

Trovare il numero e l'ID del progetto Cloud

  1. Nella console Google Cloud, vai al tuo progetto Cloud.

    Vai alla console Google Cloud

  2. Fai clic su Impostazioni e utilità > Impostazioni progetto.

  3. Prendi nota dei valori nei campi Numero progetto e ID progetto. Li utilizzerai nelle sezioni seguenti.

Crea il progetto Apps Script

Per creare un progetto Apps Script e connetterlo al tuo progetto Cloud:

  1. Fai clic sul seguente pulsante per aprire il progetto Apps Script Gestisci contatti in Google Chat.
    Apri il progetto
  2. Fai clic su Panoramica.
  3. Nella pagina di panoramica, fai clic su L&#39;icona per creare una copia Crea una copia.
  4. Assegna un nome alla tua copia del progetto Apps Script:

    1. Fai clic su Copia di Gestisci i contatti in Google Chat.

    2. In Titolo del progetto, digita Contact Manager - Google Chat app

    3. Fai clic su Rinomina.

Imposta il progetto cloud del progetto Apps Script

  1. Nel tuo progetto Apps Script, fai clic su L&#39;icona delle impostazioni del progetto Impostazioni progetto.
  2. In Progetto Google Cloud (GCP), fai clic su Cambia progetto.
  3. In Numero di progetto Google Cloud, incolla il numero di progetto del tuo progetto Cloud.
  4. Fai clic su Imposta progetto. Il progetto Cloud e il progetto Apps Script sono ora connessi.

Crea un deployment Apps Script

Ora che tutto il codice è a posto, esegui il deployment del progetto Apps Script. Utilizzi l'ID deployment quando configuri l'app Chat in Google Cloud.

  1. In Apps Script, apri il progetto dell'app Chat.

    Vai ad Apps Script

  2. Fai clic su Esegui il deployment > Nuovo deployment.

  3. Se Componente aggiuntivo non è già selezionato, accanto a Seleziona tipo, fai clic sui tipi di deployment L&#39;icona delle impostazioni del progetto e seleziona Componente aggiuntivo.

  4. In Descrizione, inserisci una descrizione per questa versione, ad esempio Test of Contact Manager.

  5. Fai clic su Esegui il deployment. Apps Script segnala la riuscita del deployment e fornisce un ID deployment.

  6. Fai clic su Copia per copiare l'ID deployment, quindi fai clic su Fine.

Configurare l'app Chat nella console Google Cloud

Questa sezione mostra come configurare l'API Google Chat nella console Google Cloud con informazioni sulla tua app di chat, incluso l'ID del deployment che hai appena creato dal tuo progetto Apps Script.

  1. Nella console Google Cloud, fai clic su Menu > Altri prodotti > Google Workspace > Libreria di prodotti > API Google Chat > Gestisci > Configurazione.

    Vai alla configurazione dell'API Chat

  2. In Nome app, digita Contact Manager.

  3. In URL avatar, digita https://developers.google.com/chat/images/contact-icon.png.

  4. In Descrizione, digita Manage your personal and business contacts.

  5. Fai clic sul pulsante di attivazione/disattivazione Abilita funzionalità interattive in modo che sia impostato su On.

  6. In Funzionalità, seleziona Partecipa a spazi e conversazioni di gruppo.

  7. Nella sezione Impostazioni di connessione, seleziona Apps Script.

  8. In ID deployment, incolla l'ID deployment di Apps Script che hai copiato nella sezione precedente quando hai creato il deployment di Apps Script.

  9. Nella sezione Comandi, configura i comandi slash /about e /addContact:

    1. Fai clic su Aggiungi un comando slash per configurare il primo comando slash.
    2. In Nome, digita About.
    3. In ID comando, digita 1.
    4. In Descrizione, digita Learn how to use this Chat app to manage your contacts.
    5. In Tipo di comando, seleziona Slash command.
    6. In Nome comando slash, digita /about.
    7. Seleziona Apre una finestra di dialogo.
    8. Fai clic su Fine.
    9. Fai clic su Aggiungi un comando per configurare un altro comando slash.
    10. In Nome, digita Add a contact.
    11. In ID comando, digita 2.
    12. In Descrizione, digita Submit information about a contact.
    13. In Tipo di comando, seleziona Slash command.
    14. In Nome comando slash, digita /addContact.
    15. Seleziona Apre una finestra di dialogo.
    16. Fai clic su Fine.
  10. In Visibilità, seleziona la casella di controllo Rendi disponibile l'app di chat a utenti e gruppi specifici in YOUR DOMAIN e inserisci il tuo indirizzo email.

  11. In Log, seleziona Errori di log in Logging.

  12. Fai clic su Salva. Viene visualizzato un messaggio di conferma del salvataggio della configurazione.

L'app Chat è pronta per l'installazione e il test in Chat.

Testare l'app Chat

Per testare l'app Chat, apri uno spazio di messaggi diretti con l'app Chat e invia un messaggio:

  1. Apri Google Chat utilizzando l'account Google Workspace che hai fornito quando ti sei aggiunto come tester attendibile.

    Vai a Google Chat

  2. Fai clic su Nuova chat.
  3. Nel campo Aggiungi una o più persone, digita il nome della tua app Chat.
  4. Seleziona l'app di chat dai risultati. Si apre un messaggio diretto.

  1. Nel nuovo messaggio diretto con l'app Chat, digita /addContact e premi Invio.

  2. Nella finestra di dialogo che si apre, inserisci i dati di contatto:

    1. Nel campo di testo Nome e cognome, inserisci un nome.
    2. Nel selettore della data Data di nascita, seleziona una data.
    3. In Tipo di contatto, seleziona il pulsante di opzione Lavoro o Personale.
  3. Fai clic su Rivedi e invia.

  4. Nella finestra di dialogo di conferma, rivedi le informazioni che hai inviato e fai clic su Invia. L'app Chat risponde con un messaggio di testo che dice CONTACT NAME has been added to your contacts..

  5. In alternativa, puoi testare e inviare il modulo di contatto nei seguenti modi:

    • Utilizza il comando slash /about. L'app di chat risponde con un messaggio di testo e un pulsante del widget accessorio con il testo Add a contact. Puoi fare clic sul pulsante per aprire una finestra di dialogo con il modulo di contatto.
    • Invia all'app Chat un messaggio diretto senza un comando slash, ad esempio Hello. L'app Chat risponde con un testo e una scheda che contiene il modulo di contatto.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, ti consigliamo di eliminare il progetto Cloud.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse. Fai clic su Menu > IAM e amministrazione > Gestisci risorse.

    Vai a Resource Manager

  2. Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina .
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.