Envía mensajes a Google Chat con webhooks entrantes

Los webhooks entrantes te permiten enviar mensajes asíncronos a Google Chat desde aplicaciones que no son de Chat. Por ejemplo, puedes configurar una aplicación de supervisión para notificar al personal de guardia en Google Chat cuando un servidor falle.

Para enviar, actualizar o borrar un mensaje de forma asíncrona en un espacio de Chat con una app de Chat, consulta Crea, lee, actualiza y borra mensajes.

Arquitectura de webhooks entrantes para enviar mensajes asíncronos a Google Chat.

Requisitos previos

Para ejecutar el ejemplo de esta guía, necesitas lo siguiente:

Python

  • Python 3.10.7 o superior.
  • Acceso a Internet y un navegador web
  • Una cuenta de Google Workspace con acceso a Google Chat
  • Un espacio de Google Chat existente
  • La biblioteca httplib2 Si es necesario, ejecuta el siguiente comando de la interfaz de línea de comandos (CLI) para instalar la biblioteca con pip:

    pip install httplib2
    

Node.js

Apps Script

Java

Crea un webhook

Para crear un webhook, regístralo en el espacio de Google Chat en el que quieres recibir mensajes y, luego, escribe una secuencia de comandos que envíe mensajes.

Paso 1: Registra el webhook entrante

  1. Abre Google Chat.
  2. Abre el espacio en el que deseas agregar un webhook.
  3. Junto al título del espacio, haz clic en la flecha para expandir más y, luego, en Integraciones y apps.
  4. Haz clic en Agregar webhooks.
  5. En el campo Name, ingresa Quickstart Webhook.
  6. En el campo URL del avatar, ingresa https://developers.google.com/chat/images/chat-product-icon.png.
  7. Haz clic en Guardar.
  8. Para copiar la URL del webhook, haz clic en Más y, luego, en Copiar vínculo.

Paso 2: Escribe la secuencia de comandos del webhook

La secuencia de comandos del webhook de ejemplo publica un mensaje en el espacio en el que está registrado el webhook mediante la PUBLICACIÓN de una solicitud de creación de mensaje en la URL de webhook. La API de Google Chat responde con una instancia de Message.

Elige uno de los siguientes lenguajes para obtener instrucciones específicas sobre cómo crear la secuencia de comandos del webhook:

Python

  1. En el directorio de trabajo, crea un archivo llamado quickstart.py.

  2. En quickstart.py, copia y pega el siguiente código:

    python/webhook/quickstart.py
    from json import dumps
    
    from httplib2 import Http
    
    WEBHOOK_URL = "[URL FROM WEBHOOK]"
    
    def main():
        """Google Chat incoming webhook quickstart."""
        url = WEBHOOK_URL
        app_message = {
            'text': 'Hello from a Python script!'}
        message_headers = {'Content-Type': 'application/json; charset=UTF-8'}
        http_obj = Http()
        response = http_obj.request(
            uri=url,
            method='POST',
            headers=message_headers,
            body=dumps(app_message),
        )
        print(response)
    
    
    if __name__ == '__main__':
        main()
  3. Reemplaza el valor de la variable url por la URL de webhook que copiaste en el Paso 1: Registra el webhook entrante.

Node.js

  1. En el directorio de trabajo, crea un archivo llamado index.js.

  2. En index.js, copia y pega el siguiente código:

    node/webhook/index.js
    /**
     * Sends asynchronous message into Google Chat
     * @return{obj} response
     */
    function webhook() {
      const fetch = require('node-fetch');
      const webhookURL = 'https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=u9IG_MuTBXw-tnqupPrPNinY2spKFcRBDp6dSldGUAw%3D';
    
      const data = JSON.stringify({
        'text': 'Hello from a Node script!',
      });
      let resp;
      fetch(webhookURL, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json; charset=UTF-8',
        },
        body: data,
      }).then((response) => {
        resp = response;
        console.log(response);
      });
      return resp;
    }
    
  3. Reemplaza el valor de la variable webhookURL por la URL de webhook que copiaste en el Paso 1: Registra el webhook entrante.

Apps Script

  1. Ve a la página Apps Script.

  2. Haz clic en New Project.

  3. Copia y pega el siguiente código:

    apps-script/webhook/webhook.gs
    function webhook() {
      const url = "https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages";
      const options = {
        "method": "post",
        "headers": {
          "Content-Type": "application/json; charset=UTF-8"
        },
        "payload": JSON.stringify({
          "text": "Hello from Apps Script!"
        })
      };
      const response = UrlFetchApp.fetch(url, options);
      Logger.log(response);
    }
  4. Reemplaza el valor de la variable url por la URL de webhook que copiaste en el Paso 1: Registra el webhook entrante.

Java

  1. En el directorio de trabajo, crea un archivo llamado pom.xml.

  2. En pom.xml, copia y pega lo siguiente:

    java/webhook/pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.google.chat.webhook</groupId>
      <artifactId>java-webhook-app</artifactId>
      <version>0.1.0</version>
    
      <name>java-webhook-app</name>
      <url>https://github.com/googleworkspace/google-chat-samples/tree/main/java/webhook</url>
    
      <properties>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
      </properties>
    
      <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.1</version>
        </dependency>
      </dependencies>
    
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
  3. En tu directorio de trabajo, crea la siguiente estructura de directorio src/main/java.

  4. En el directorio src/main/java, crea un archivo llamado App.java.

  5. En App.java, copia y pega el siguiente código:

    java/webhook/src/main/java/com/google/chat/webhook/App.java
    import com.google.gson.Gson;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.Map;
    import java.net.URI;
    
    public class App {
      private static final String URL = "https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages";
      private static final Gson gson = new Gson();
      private static final HttpClient client = HttpClient.newHttpClient();
    
      public static void main(String[] args) throws Exception {
        String message = gson.toJson(Map.of("text", "Hello from Java!"));
    
        HttpRequest request = HttpRequest.newBuilder(
            URI.create(URL))
            .header("accept", "application/json; charset=UTF-8")
            .POST(HttpRequest.BodyPublishers.ofString(message))
            .build();
    
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    
        System.out.println(response.body());
      }
    }
  6. Reemplaza el valor de la variable URL por la URL de webhook que copiaste en el Paso 1: Registra el webhook entrante.

Paso 3: Ejecuta la secuencia de comandos del webhook

Ejecuta el siguiente comando desde el directorio de trabajo en la CLI para ejecutar la muestra:

Python

  python3 quickstart.py

Node.js

  node index.js

Apps Script

  • Haga clic en Ejecutar

Java

  mvn compile exec:java -Dexec.mainClass=App

Cuando ejecutas el código de muestra, el webhook envía un mensaje al espacio en el que lo registraste.

Iniciar o responder una conversación de mensajes

Puedes iniciar una conversación de mensajes o responder una si agregas el parámetro threadKey a la URL de webhook. Cada threadKey es único para la app que lo configura. Si dos apps de Chat o webhooks diferentes configuran el mismo threadKey, se inician dos subprocesos diferentes.

Cómo iniciar una conversación de mensajes

Para publicar el primer mensaje de un subproceso con un webhook, agrega los parámetros threadKey y messageReplyOption a la URL de webhook. Configura threadKey como una string arbitraria, pero recuerda qué es. Deberás volver a especificarla para publicar una respuesta en la conversación.

  https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?threadKey=ARBITRARY_STRING&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD

Cómo responder a una conversación de mensajes

Para enviar un mensaje a una conversación de mensajes existente, agrega los parámetros threadKey y messageReplyOption a la URL de webhook con el valor utilizado para iniciar la conversación. Por ejemplo, si envías un mensaje a la siguiente URL, se publica una respuesta a la conversación, donde threadKey es MY-THREAD y messageReplyOption es REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD:

  https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?threadKey=MY-THREAD&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD

Límites y consideraciones

Cuando configures webhooks, ten en cuenta estos límites y consideraciones:

  • Cada webhook solo funciona en el espacio de Chat en el que está registrado.

  • No puedes publicar webhooks en Google Workspace Marketplace.

  • Los webhooks no son conversacionales. No pueden responder ni recibir mensajes de los usuarios ni de los eventos de interacción de la app de Chat.

  • Si solo las unidades organizativas (UO) de tu dominio tienen apps de chat habilitadas, los webhooks entrantes mostrarán el siguiente error:

    {
      "error": {
        "code": 403,
        "message": "The caller does not have permission",
        "status": "PERMISSION_DENIED"
      }
    }
    
  • Los webhooks entrantes funcionan en los mensajes directos, pero solo cuando todos los usuarios tienen habilitadas las aplicaciones de chat.

  • Dado que El ícono para administrar webhooks Administrar webhooks solo está disponible desde un navegador web, los webhooks se deben configurar desde la aplicación web de Chat. Los webhooks no se pueden configurar desde la aplicación de Chat para dispositivos móviles.