Importa datos a Google Chat

Con la API de Google Chat, puedes importar datos de tus otras plataformas de mensajería a Google Chat. Puedes importar mensajes, archivos adjuntos, reacciones, membresías y entidades de espacios existentes de tus otras plataformas de mensajería a los recursos de la API de Chat correspondientes. Para importar estos datos, crea espacios de Chat en el modo de importación y, luego, importa los datos a esos espacios. Cuando el proceso se complete correctamente, estos espacios se convertirán en espacios estándar de Chat.

A continuación, se describe el proceso de importación completo:

  1. Planifica tu importación
  2. Cómo configurar la autorización para la app de Chat
  3. Crea un espacio en modo de importación
  4. Importa recursos
  5. Cómo validar los recursos importados
  6. Reconcilia las diferencias de recursos importados de los datos de origen
  7. Modo de importación completa
  8. Cómo otorgar acceso al espacio después del modo de importación
  9. Solución de problemas

Requisitos previos

Apps Script

Python

Planifica la importación

Planifica según corresponda la cantidad de datos que se importarán, comprende cómo los límites y las cuotas de uso pueden afectar el proceso de importación y los tipos de espacios de Chat compatibles con la importación a un espacio nuevo.

Revisa los límites de uso de la API

El tiempo necesario para importar datos a Chat puede variar mucho según la cantidad de recursos de Chat que se importen. Revisa los límites de uso de tu app de Chat y la cantidad de datos programados para la importación desde la plataforma de mensajería de origen para determinar un cronograma estimado.

Cuando importes mensajes a un espacio, te recomendamos que distribuyas las llamadas al método messages.create() en diferentes conversaciones.

Identifica los espacios compatibles para importar

El modo de importación solo admite SpaceType de SPACE y GROUP_CHAT. No es compatible con DIRECT_MESSAGE. Consulta la documentación de SpaceType para obtener más información.

Crea un espacio en modo de importación

Para crear un espacio en el modo de importación, llama al método create en el recurso Space y establece importMode en true.

Cuando crees el espacio en modo de importación, ten en cuenta lo siguiente.

  • La fecha y la hora: Recuerda que el modo de importación se debe completar en un plazo de 30 días. Si el espacio aún está en modo de importación después de 30 días desde que se llamó al método spaces.create(), se borra automáticamente y se vuelve inaccesible y no se puede recuperar.
    • No uses el valor del campo createTime para hacer un seguimiento del vencimiento del período de 30 días. Esto no siempre es lo mismo que cuando llamas al método spaces.create(). Cuando se usa el modo de importación, el campo createTime se puede establecer en la marca de tiempo histórica en la que se creó el espacio en la fuente para preservar la hora de creación original.
  • Nombre del recurso del espacio (name): Es el identificador único que se usa para recuperar información sobre el espacio específico y al que se hace referencia en pasos posteriores cuando se importa contenido al espacio.

Para conservar el tiempo de creación de la entidad de espacio equivalente de la plataforma de mensajería de origen, puedes establecer el createTime del espacio. Este createTime debe establecerse en un valor entre el 1 de enero de 2000 y la fecha actual.

Para crear un espacio externo en el modo de importación, establece externalUserAllowed en true. Una vez que se complete la importación correctamente, podrás agregar usuarios externos.

En el siguiente ejemplo, se muestra cómo crear un espacio en modo de importación:

Apps Script

function createSpaceInImportMode() {
  const space = Chat.Spaces.create({
      spaceType: 'SPACE',
      displayName: 'DISPLAY_NAME',
      importMode: true,
      createTime: (new Date('January 1, 2000')).toJSON()
  });
  console.log(space.name);
}

Python

"""Create a space in import mode."""

import datetime

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

result = (
    service.spaces()
    .create(
        body={
            'spaceType': 'SPACE',
            'displayName': 'DISPLAY_NAME',
            'importMode': True,
            'createTime': f'{datetime.datetime(2000, 1, 1).isoformat()}Z',
        }
    )
    .execute()
)

print(result)

Reemplaza lo siguiente:

  • EMAIL: La dirección de correo electrónico de la cuenta de usuario de la que robas la identidad con autoridad en todo el dominio.
  • DISPLAY_NAME: Es el nombre del espacio creado en el modo de importación. Debe ser un nombre único para el espacio que se muestra a los usuarios de Chat. Te recomendamos que uses el mismo nombre visible que el del espacio desde el que importas datos.

Importa recursos

Para importar recursos desde otras plataformas de mensajería, crea recursos de Google Chat (como mensajes, reacciones y archivos adjuntos) en el espacio del modo de importación. Cuando creas un recurso en el espacio, especificas los datos del recurso relacionado de la plataforma de mensajes desde la que migras.

Mensajes

Tus apps de Chat pueden importar mensajes con su propia autoridad o en nombre de un usuario mediante la suplantación de identidad. El autor del mensaje se establece en la cuenta de usuario suplantada. Para obtener más información, consulta Cómo autorizar apps de Chat. Para importar un mensaje en un espacio de modo de importación, llama al método create en el recurso Message. Para conservar la hora de creación del mensaje original de la plataforma de mensajería de origen, puedes establecer el createTime del mensaje. Este createTime debe establecerse en un valor entre la hora de creación del espacio que estableciste anteriormente y la hora actual.

Los mensajes en el mismo espacio no pueden contener el mismo createTime, incluso si se borran los mensajes anteriores con ese tiempo.

Los mensajes que contienen URLs de terceros en espacios de modo de importación no pueden renderizar vistas previas de vínculos en Google Chat.

Cuando creas los mensajes en modo de importación, los espacios no notifican ni envían correos electrónicos a ningún usuario, incluidos los mensajes que contienen menciones de usuarios.

En el siguiente ejemplo, se muestra cómo crear un mensaje en un espacio en modo de importación:

Python

"""Create a message in import mode space."""

import datetime

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

NAME = 'spaces/SPACE_NAME'
result = (
    service.spaces()
    .messages()
    .create(
        parent=NAME,
        body={
            'text': 'Hello, world!',
            'createTime': f'{datetime.datetime(2000, 1, 2).isoformat()}Z',
        },
    )
    .execute()
)

print(result)

Reemplaza lo siguiente:

Reacciones

Tu app de Chat puede importar reacciones para los mensajes con la API de Chat. Para obtener información sobre los métodos de recursos y los tipos de compatibilidad con la autenticación en espacios de modo de importación, consulta Cómo autorizar apps de Chat.

Archivos adjuntos

Tu app de Chat puede subir archivos adjuntos con la API de Chat. Para obtener información sobre los métodos de recursos y los tipos de compatibilidad con la autenticación en espacios de modo de importación, consulta Cómo autorizar apps de Chat. Sin embargo, te recomendamos que uses la API de Google Drive para subir archivos adjuntos como archivos de Google Drive y vincular los URIs de los archivos a los mensajes correspondientes en los espacios del modo de importación para importar archivos adjuntos desde otras plataformas de mensajería y evitar alcanzar el límite interno de Google Chat para la carga de archivos adjuntos.

Historial de membresías

Las membresías históricas son membresías creadas para los usuarios que ya abandonaron la entidad de espacio original de la plataforma de mensajería de origen, pero quieres retener sus datos en Chat. Si quieres obtener información para agregar miembros nuevos después de que el espacio ya no esté en modo de importación, consulta Cómo crear un recurso de membresía.

En muchos casos, cuando esos miembros históricos están sujetos a una política de retención de datos de Google, deseas conservar los datos (como los mensajes y las reacciones) creados por las membresías históricas en un espacio antes de importarlos a Chat. Mientras el espacio esté en modo de importación, puedes importar esas membresías históricas al espacio con el método create en el recurso Membership. Para conservar la hora de salida de la membresía histórica, debes configurar el deleteTime de la membresía. La hora de salida debe ser precisa, ya que afecta qué datos se retendrán para esas membresías. Además, este deleteTime debe ser posterior a la marca de tiempo de creación del espacio y no debe ser una marca de tiempo futura.

Además de deleteTime, también puedes configurar createTime para preservar el tiempo de unión original de la membresía histórica. A diferencia de deleteTime, createTime es opcional. Si no se establece, createTime se calcula automáticamente restando 1 microsegundo de deleteTime. Si se establece, createTime debe estar antes de deleteTime y debe estar en la hora de creación del espacio o después de ella. Esta información de createTime no se usa para determinar la retención de datos y no es visible en las herramientas de administración, como la Consola del administrador de Google y Google Vault.

Si bien puede haber varias formas en que un usuario puede unirse y salir de un espacio en la plataforma de mensajería de origen (a través de invitaciones, unirse por su cuenta o que otro usuario lo agregue), en Chat, esas acciones se representan con los campos de membresía histórica createTime y deleteTime como agregados o quitados.

En el siguiente ejemplo, se muestra cómo crear una membresía histórica en un espacio de modo de importación:

Python

"""Create a historical membership in import mode space."""

import datetime

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

NAME = 'spaces/SPACE_NAME'
USER = 'users/USER_ID'
result = (
    service.spaces()
    .members()
    .create(
        parent=NAME,
        body={
            'createTime': f'{datetime.datetime(2000, 1, 3).isoformat()}Z',
            'deleteTime': f'{datetime.datetime(2000, 1, 4).isoformat()}Z',
            'member': {'name': USER, 'type': 'HUMAN'},
        },
    )
    .execute()
)

print(result)

Reemplaza lo siguiente:

Importa recursos en un espacio externo

Solo puedes crear un espacio externo con el modo de importación usando credenciales que pertenezcan a usuarios dentro de tu organización de Workspace. Esto solo se aplica mientras el espacio está en modo de importación. Una vez que el espacio complete el modo de importación, se pueden invitar a usuarios externos a unirse a los espacios importados (consulta la sección de acceso) y se pueden usar sus credenciales para llamar a la API de Chat.

Valida los recursos importados

Tu app de Chat puede volver a leer y validar el contenido de un espacio en modo de importación llamando al método list en el recurso Message. Puedes leer los recursos Reaction y Attachment desde los campos emojiReactionSummaries y attachment de cualquier mensaje que se muestre. Las apps de chat solo pueden llamar a este método en nombre de un usuario mediante el robo de identidad. Para obtener más información, consulta Autoriza apps de Chat.

Tu app de chat también puede leer mensajes individuales para su validación llamando al método get en el recurso Message. Las apps de chat solo pueden llamar a este método para leer sus propios mensajes con su propia autoridad. Para obtener más información, consulta Cómo autorizar apps de Chat.

Las apps de chat también pueden enumerar las membresías históricas llamando al método list en el recurso Membership. Después de que el espacio salga del modo de importación, el método list ya no expondrá las membresías históricas. Las apps de Chat solo pueden llamar a este método en nombre de un usuario mediante el robo de identidad. Para obtener más información, consulta Cómo autorizar apps de Chat.

Puedes leer las propiedades de un espacio de modo de importación llamando al método get en el recurso Space. Las apps de chat solo pueden llamar a este método con su propia autoridad. Para obtener más información, consulta Cómo autorizar apps de Chat.

Reconcilia las diferencias de recursos importados de los datos de origen

Si algún recurso importado ya no coincide con la entidad original de la plataforma de mensajería fuente debido a cambios en la entidad original durante la importación, las apps de Chat pueden llamar a la API de Chat para modificar el recurso de chat importado. Por ejemplo, si un usuario edita un mensaje en la plataforma de mensajería de origen después de que se creó en Chat, las apps de Chat pueden actualizar el mensaje importado para que refleje el contenido actual del mensaje original.

Mensajes

Para actualizar los campos admitidos en un mensaje en un espacio de modo de importación, llama al método update en el recurso Message. Las apps de chat solo pueden llamar a este método con la misma autoridad que se usó durante la creación inicial del mensaje. Si usaste la suplantación de identidad del usuario durante la creación del mensaje inicial, debes usar el mismo usuario suplantado para actualizar ese mensaje.

Para borrar un mensaje en un espacio de modo de importación, llama al método delete en el recurso Message. No es necesario que el creador del mensaje original borre los mensajes en un espacio de modo de importación, ya que se puede borrar suplantando la identidad de cualquier usuario del dominio. Las apps de chat solo pueden borrar sus propios mensajes con su propia autoridad. Para obtener más información, consulta Cómo autorizar apps de Chat.

Reacciones

Para borrar una reacción de un mensaje en un espacio de modo de importación, usa el método delete en el recurso reactions. Para obtener información sobre los métodos de recursos y los tipos de compatibilidad con la autenticación en espacios de modo de importación, consulta Cómo autorizar apps de Chat.

Archivos adjuntos

Para actualizar los archivos adjuntos de un mensaje en un espacio de modo de importación, usa el método upload en el recurso media. Para obtener información sobre los métodos de recursos y los tipos de compatibilidad de autenticación en espacios de modo de importación, consulta Cómo autorizar apps de Chat.

Membresías históricas

Para borrar una membresía histórica en un espacio de modo de importación, usa el método delete en el recurso Membership. Después de que un espacio sale del modo de importación, el método delete ya no te permite borrar las membresías históricas.

No puedes actualizar una membresía histórica en un espacio en modo de importación. Si quieres corregir una membresía histórica importada de forma incorrecta, primero debes borrarla y, luego, volver a crearla mientras el espacio esté en modo de importación.

Espacios

Para actualizar los campos admitidos en un espacio de modo de importación, usa el método patch en el recurso spaces.

Para borrar un espacio de modo de importación, usa el método delete en el recurso spaces.

Para obtener información sobre los métodos de recursos y los tipos de compatibilidad de autenticación en los espacios de modo de importación, consulta Cómo autorizar apps de Chat.

Modo de importación completa

Antes de llamar al método completeImport, debes asegurarte de que se hayan completado la validación y la reconciliación de las diferencias de recursos. Salir de un espacio del modo de importación es un proceso irreversible y convierte el espacio del modo de importación en un espacio normal. En Chat, no hay un indicador que atribuya estos espacios a una importación de datos.

Toma nota de la fecha y hora en la que llamas a completeImport, el nombre del recurso del usuario que realizó la llamada y la respuesta que se mostró. Esto puede ser útil si tienes algún problema y debes investigarlo.

Para completar el modo de importación y permitir que los usuarios accedan al espacio, la app de Chat puede llamar al método completeImport en el recurso Space. Las apps de chat solo pueden llamar a este método en nombre de un usuario a través de la suplantación de identidad. Para obtener más información, consulta Cómo autorizar apps de Chat. El usuario suplantado se agrega al espacio como administrador una vez que se completa este método. Se debe llamar a este método en un plazo de 30 días a partir de la llamada inicial al método create.space. Si intentas llamar a este método después de que transcurra el período de 30 días, la llamada fallará porque se borrará el espacio del modo de importación y la app de Chat ya no podrá acceder a él.

El usuario suplantado en el método completeImport no necesita ser el creador del espacio.

En el siguiente ejemplo, se muestra cómo completar el modo de importación:

Python

"""Complete import."""

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Specify required scopes.
SCOPES = [
    'https://www.googleapis.com/auth/chat.import',
]

CREDENTIALS = (
    service_account.Credentials.from_service_account_file('credentials.json')
    .with_scopes(SCOPES)
    .with_subject('EMAIL')
)

# Build a service endpoint for Chat API.
service = build('chat', 'v1', credentials=CREDENTIALS)

NAME = 'spaces/SPACE_NAME'
result = service.spaces().completeImport(name=NAME).execute()

print(result)

Reemplaza lo siguiente:

Otorga acceso al espacio después del modo de importación

Para permitir que los usuarios de Chat accedan al espacio importado recientemente, las apps de Chat pueden seguir usando el permiso chat.import y la suplantación de identidad del usuario dentro de los 30 días posteriores a la llamada inicial al método create.space() para hacer lo siguiente:

Para usar estos métodos con el permiso chat.import, el usuario suplantado debe ser un administrador de espacios.

En el caso de los espacios externos, el método create() de membresía también permite invitar a usuarios ajenos a tu organización de Workspace. Asegúrate de comprender todas las limitaciones conocidas para los usuarios externos.

Solución de problemas

Si tienes problemas para importar espacios de Chat, consulta los siguientes problemas para obtener asistencia. Si encuentras una respuesta de error, toma nota de ella (copia y pega el texto en un documento o guarda una captura de pantalla) para consultarla en el futuro y solucionar el problema.

Cuando se importa un espacio correctamente, CompleteImportSpace se completa con un estado de OK.

No completaste la importación antes de que venciera el período de 30 días

Como se describió anteriormente en Cómo crear un espacio en modo de importación, si el espacio aún está en modo de importación después de 30 días desde que se llamó al método de creación, se borra automáticamente y se vuelve inaccesible y no se puede recuperar.

Lamentablemente, el espacio borrado ya no está disponible ni se puede recuperar, y el proceso de importación debe volver a iniciarse.

Cómo encontrar espacios faltantes

Si no puedes encontrar el nuevo espacio de Chat, revisa la siguiente tabla para ver la respuesta que recibiste de CompleteImportSpace y obtener una explicación y una solución.

Respuesta recibida Pasos de la investigación Explicación Solución
CompleteImportSpace arroja una excepción y la llamada a GetSpace muestra PERMISSION_DENIED. Consulta tus registros para ver cuándo se creó el espacio y, si tiene más de 30 días, significa que se borró automáticamente. Además, no hay un registro del espacio importado en la herramienta de administración de espacios o en el registro de auditoría. Transcurrieron más de 30 días desde que se inició el proceso de importación y el espacio no pudo salir correctamente de la migración. Crea un espacio nuevo y vuelve a ejecutar el proceso de importación.
CompleteImportSpace muestra OK y llamar a GetSpace muestra PERMISSION_DENIED. No hay registro del espacio importado en la herramienta de administración de espacios, pero se muestra que se borró en el registro de auditoría. El espacio se importó correctamente, pero se borró posteriormente. Crea un espacio nuevo y vuelve a ejecutar el proceso de importación.