> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.es/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Extensión de videoconferencia

export const postmanIcon = <svg xmlns="http://www.w3.org/2000/svg" width={25} height={25} preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
    <path fill="#FF6C37" d="M254.953 144.253c8.959-70.131-40.569-134.248-110.572-143.206C74.378-7.912 10.005 41.616 1.047 111.619c-8.959 70.003 40.569 134.248 110.572 143.334 70.131 8.959 134.248-40.569 143.334-110.7Z" />
    <path fill="#FFF" d="m174.2 82.184-54.007 54.007-15.229-15.23c53.11-53.11 58.358-48.503 69.236-38.777Z" />
    <path fill="#FF6C37" d="M120.193 137.47c-.384 0-.64-.128-.895-.384l-15.358-15.229a1.237 1.237 0 0 1 0-1.792c54.007-54.006 59.638-48.887 71.028-38.649.255.256.383.512.383.896s-.128.64-.383.896l-54.007 53.878c-.128.256-.512.384-.768.384Zm-13.437-16.509 13.437 13.438 52.087-52.087c-9.47-8.446-15.87-11.006-65.524 38.65Z" />
    <path fill="#FFF" d="m135.679 151.676-14.718-14.718 54.007-54.006c14.46 14.59-7.167 38.265-39.29 68.724Z" />
    <path fill="#FF6C37" d="M135.679 152.956c-.384 0-.64-.128-.896-.384l-14.718-14.718c-.256-.256-.256-.512-.256-.896s.128-.64.384-.895L174.2 82.056a1.237 1.237 0 0 1 1.791 0 15.58 15.58 0 0 1 4.991 11.902c-.256 14.206-16.38 32.25-44.28 58.614-.383.256-.767.384-1.023.384Zm-12.926-15.998c8.19 8.319 11.646 11.646 12.926 12.926 21.5-20.476 42.36-41.464 42.488-55.926.128-3.327-1.152-6.655-3.327-9.214l-52.087 52.214Z" />
    <path fill="#FFF" d="m105.22 121.345 10.878 10.878c.256.256.256.512 0 .768-.128.128-.128.128-.256.128l-22.524 4.863c-1.152.128-2.175-.64-2.431-1.791-.128-.64.128-1.28.512-1.664l13.053-13.054c.256-.256.64-.384.768-.128Z" />
    <path fill="#FF6C37" d="M92.934 139.262c-1.92 0-3.327-1.536-3.327-3.455 0-.896.384-1.792 1.024-2.432l13.053-13.054c.768-.64 1.792-.64 2.56 0l10.878 10.878c.768.64.768 1.792 0 2.56-.256.256-.512.384-.896.512l-22.524 4.863c-.256 0-.512.128-.768.128Zm11.902-16.51-12.542 12.543c-.256.256-.383.64-.128 1.024.128.383.512.511.896.383l21.116-4.607-9.342-9.342Z" />
    <path fill="#FFF" d="M202.739 52.238c-8.191-7.935-21.373-7.679-29.307.64-7.935 8.318-7.679 21.372.64 29.306A20.678 20.678 0 0 0 199.155 85l-14.59-14.59 18.174-18.172Z" />
    <path fill="#FF6C37" d="M188.405 89.223c-12.158 0-22.012-9.854-22.012-22.012 0-12.158 9.854-22.012 22.012-22.012 5.631 0 11.134 2.176 15.23 6.143.255.256.383.512.383.896s-.128.64-.384.895L186.357 70.41l13.566 13.566c.512.512.512 1.28 0 1.792l-.256.256c-3.327 2.047-7.295 3.199-11.262 3.199Zm0-41.337c-10.75 0-19.452 8.703-19.324 19.453 0 10.75 8.702 19.452 19.452 19.324 2.944 0 5.887-.64 8.575-2.047l-13.438-13.31c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l17.149-17.15c-3.456-2.943-7.807-4.479-12.414-4.479Z" />
    <path fill="#FFF" d="m203.122 52.622-.255-.256-18.301 18.044 14.461 14.462c1.408-.896 2.816-1.92 3.967-3.072a20.51 20.51 0 0 0 .128-29.178Z" />
    <path fill="#FF6C37" d="M199.155 86.28c-.384 0-.64-.128-.896-.384l-14.589-14.59c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l18.173-18.173a1.237 1.237 0 0 1 1.791 0l.384.256c8.575 8.574 8.575 22.396.128 31.098-1.28 1.28-2.687 2.432-4.223 3.328-.384.128-.64.256-.768.256Zm-12.798-15.87 12.926 12.926c1.024-.64 2.048-1.536 2.816-2.304 7.294-7.294 7.678-19.196.64-26.875L186.357 70.41Z" />
    <path fill="#FFF" d="M176.375 84.488a7.879 7.879 0 0 0-11.134 0l-48.247 48.247 8.063 8.063 51.062-44.792c3.328-2.816 3.584-7.807.768-11.134-.256-.128-.384-.256-.512-.384Z" />
    <path fill="#FF6C37" d="M124.929 142.077c-.384 0-.64-.128-.896-.383l-8.063-8.063a1.237 1.237 0 0 1 0-1.792l48.247-48.247a9.115 9.115 0 0 1 12.926 0 9.115 9.115 0 0 1 0 12.926l-.384.384-51.063 44.792c-.128.255-.384.383-.767.383Zm-6.143-9.342 6.27 6.271 50.167-44.024c2.816-2.304 3.072-6.527.768-9.342-2.303-2.816-6.526-3.072-9.342-.768-.128.128-.256.256-.512.384l-47.351 47.48Z" />
    <path fill="#FFF" d="M80.009 187.637c-.512.256-.768.768-.64 1.28l2.175 9.214c.512 1.28-.256 2.816-1.663 3.2-1.024.384-2.176 0-2.816-.768l-14.077-13.95 45.943-45.943 15.87.256 10.75 10.75c-2.56 2.175-18.045 17.149-55.542 35.961Z" />
    <path fill="#FF6C37" d="M78.985 202.61c-1.024 0-2.048-.383-2.688-1.151l-13.95-13.95c-.255-.256-.383-.512-.383-.896 0-.383.128-.64.384-.895l45.944-45.944c.256-.256.64-.384.895-.384l15.87.256c.383 0 .64.128.895.384l10.75 10.75c.256.256.384.64.384 1.024s-.128.64-.512.896l-.895.767c-13.566 11.902-31.995 23.804-54.902 35.194l2.175 9.086c.384 1.664-.384 3.456-1.92 4.352-.767.384-1.407.512-2.047.512Zm-14.078-15.997 13.182 13.054c.384.64 1.152.896 1.792.512.64-.384.896-1.152.512-1.792l-2.176-9.214c-.256-1.152.256-2.176 1.28-2.688 22.652-11.39 40.952-23.163 54.39-34.81l-9.47-9.47-14.718-.256-44.792 44.664Z" />
    <path fill="#FFF" d="m52.11 197.62 11.006-11.007 16.38 16.381-26.107-1.791c-1.151-.128-1.92-1.152-1.791-2.304 0-.512.128-1.024.512-1.28Z" />
    <path fill="#FF6C37" d="m79.497 204.146-26.236-1.791c-1.92-.128-3.199-1.792-3.071-3.712.128-.768.384-1.535 1.024-2.047L62.22 185.59a1.237 1.237 0 0 1 1.792 0l16.38 16.38c.385.385.512.897.257 1.408-.256.512-.64.768-1.152.768Zm-16.381-15.74-10.11 10.11c-.384.255-.384.895 0 1.151.127.128.255.256.511.256l22.652 1.536-13.053-13.054ZM104.452 146.557c-.768 0-1.28-.64-1.28-1.28 0-.384.128-.64.384-.896l12.414-12.414a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-20.477 4.352h-.256Zm12.414-11.902-8.446 8.446 13.821-2.943-5.375-5.503Z" />
    <path fill="#FFF" d="m124.8 140.926-14.077 3.071c-1.024.256-2.048-.384-2.303-1.408-.128-.64 0-1.28.511-1.791l7.807-7.807 8.063 7.935Z" />
    <path fill="#FF6C37" d="M110.467 145.277a3.168 3.168 0 0 1-3.2-3.2c0-.895.385-1.663.897-2.303l7.806-7.807a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-14.078 3.072h-.64Zm6.399-10.622-6.91 6.91c-.257.257-.257.512-.129.768s.384.384.768.384l11.774-2.56-5.503-5.502ZM203.25 64.907c-.256-.767-1.151-1.151-1.92-.895-.767.255-1.151 1.151-.895 1.92 0 .127.128.255.128.383.768 1.536.512 3.455-.512 4.863-.512.64-.384 1.536.128 2.048.64.512 1.536.384 2.048-.256 1.92-2.432 2.303-5.503 1.023-8.063Z" />
  </svg>;

<Card title="Run in Postman" href="https://app.getpostman.com/run-collection/26126890-8f5582df-b553-403f-b001-6fe4cbafe4e4" icon={postmanIcon} horizontal={true} />

<DndSection>
  <DndModule numCols={10}>
    <div>
      # Extensión de videoconferencia

      <RelatedApiLink />
    </div>
  </DndModule>

  <DndModule numCols={2} />
</DndSection>

Con la API de videoconferencias, puedes configurar una [aplicación pública](/apps/legacy-apps/public-apps/overview) para dar a los usuarios de HubSpot la capacidad de agregar un enlace a una videoconferencia al [crear una reunión](https://knowledge.hubspot.com/meetings-tool/create-and-edit-scheduling-pages#overview), similar a la integración con [Google Meet](https://knowledge.hubspot.com/integrations/use-hubspots-integration-with-google-meet) y con [Zoom](https://knowledge.hubspot.com/integrations/use-hubspots-integration-with-zoom). El uso de esta API implicará lo siguiente:

1. Debes configurar tu aplicación pública con los webhooks de la extensión de videoconferencias. Tendrás que configurar tu aplicación con las URI que HubSpot usará para notificarte cuando se estén creando, actualizando o eliminando reuniones.
2. Debes ajustar un back-end personalizado para gestionar la creación de reuniones y actualizar los webhooks.
3. Si fuera necesario, debes hacer ajustes en tu back-end para gestionar los webhooks de verificación de la identidad del usuario.

Todas las solicitudes a la API de videoconferencias deben autenticarse usando la clave de la API de desarrollador de tu cuenta. Puedes incluir la clave en un parámetro `hapikey` de consulta al final de la URL de la solicitud. Puedes [encontrar la clave de la API de desarrollador](/apps/legacy-apps/public-apps/overview#developer-api-keys) en tu cuenta de desarrollador.

## Requisitos previos

Antes de comenzar, asegúrate de haber creado una [cuenta de desarrollador](/getting-started/account-types#developer-accounts) y una [aplicación pública](/apps/legacy-apps/public-apps/overview) dentro de ella.

## Configurar URLs de webhooks

Para que HubSpot sepa dónde enviar notificaciones cuando se creen, actualicen o eliminen reuniones, primero debes configurar las URL de los webhooks de la extensión.

Para ello, envía una solicitud `PUT` a `/crm/v3/extensions/videoconferencing/settings/{appId}?hapikey=YOUR_HUBSPOT_DEVELOPER_API_KEY`.

En el cuerpo de la solicitud, deberás incluir el campo `createMeetingUrl` para definir la URL que HubSpot enviará a las cargas útiles de creación de reuniones del webhook. Opcionalmente, puedes incluir URLs de webhooks adicionales. Estos valores pueden actualizarse posteriormente usando la misma URL de solicitud.

```json theme={null}
// Example request

{
  "createMeetingUrl": "https://example.com/create-meeting",
  "updateMeetingUrl": "https://example.com/update-meeting",
  "deleteMeetingUrl": "https://example.com/delete-meeting"
}
```

| Campo              | Tipo   | Descripción                                                                                                                                                                                           |
| ------------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `createMeetingUrl` | Cadena | La URL que HubSpot notificará cuando se cree una nueva reunión. Esta incluirá una carga útil JSON con los detalles de la reunión. La URL debe usar el protocolo `https`.                              |
| `updateMeetingUrl` | Cadena | La URL que HubSpot notificará cuando se actualice una reunión existente. Esta acción incluirá una carga útil JSON con los detalles actualizados de la reunión. La URL debe usar el protocolo `https`. |
| `deleteMeetingUrl` | Cadena | La URL que HubSpot notificará cuando se elimine una reunión existente. Incluirá un `conferenceId` de las reuniones eliminadas. La URL debe usar el protocolo `https`.                                 |
| `userVerifyUrl`    | Cadena | La URL que HubSpot utilizará para verificar que un usuario está en el sistema externo de videoconferencia.                                                                                            |

**Respuesta de ejemplo:**

```json theme={null}
// Example 200 response
{
  "createMeetingUrl": "https://example.com/create-meeting",
  "updateMeetingUrl": "https://example.com/update-meeting",
  "deleteMeetingUrl": "https://example.com/delete-meeting"
}
```

### Recuperar URLs de webhooks

Para recuperar URLs de webhook configuradas para una aplicación existente, haz una solicitud `GET` a `/crm/v3/extensions/videoconferencing/settings/{appId}`.

La respuesta incluirá las URL de webhooks configuradas en ese momento.

```json theme={null}
// Example 200 response
{
  "createMeetingUrl": "https://example.com/create-meeting",
  "updateMeetingUrl": "https://example.com/update- meeting",
  "deleteMeetingUrl": "https://example.com/delete-meeting",
  "userVerifyUrl": "https://example.com/user-verify"
}
```

## Cargas útiles de webhooks

Una vez que se configuran las URL de los webhook, HubSpot enviará cargas útiles a esas URL cuando ocurra un evento de creación, actualización o eliminación de reuniones.

<Info>
  Todos los webhooks enviados por HubSpot están firmados por HMAC usando el secreto de tu aplicación. Puedes obtener más información a este respecto en la [documentación de seguridad de webhooks](/api-reference/webhooks-webhooks-v3/guide#security) (el resto de la página no hace referencia a estos webhooks de la extensión de videoconferencia).
</Info>

### Webhook de creación de reuniones

Cuando se crea una reunión, HubSpot enviará una solicitud a la URL especificada en el campo `createMeetingUrl`. La carga útil de la solicitud incluye información sobre la cuenta de HubSpot, el usuario asociado de HubSpot y los detalles de la reunión.

```json theme={null}
// Example payload
{
  "portalId": 123123,
  "userId": 123,
  "userEmail": "test.user@example.com",
  "topic": "A Test Meeting",
  "source": "MEETINGS",
  "startTime": 1534197600000,
  "endTime": 1534201200000
}
```

| Campo       | Tipo   | Descripción                                                                                                                                                                                                                                                                                                                                                                      |
| ----------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `portalId`  | Número | El ID de la cuenta de HubSpot de la que proviene la solicitud.                                                                                                                                                                                                                                                                                                                   |
| `userId`    | Número | El ID del usuario de HubSpot asignado a la reunión.                                                                                                                                                                                                                                                                                                                              |
| `userEmail` | Cadena | La dirección de correo electrónico del usuario de HubSpot asignado a la reunión.                                                                                                                                                                                                                                                                                                 |
| `topic`     | Cadena | El título de la reunión.                                                                                                                                                                                                                                                                                                                                                         |
| `source`    | Cadena | Indica dónde se creó la reunión. Puede ser cualquiera de las siguientes opciones:<ul><li>`MEETINGS`: la reunión se creó a partir de una [página de programación de reuniones](https://knowledge.hubspot.com/meetings-tool/create-and-edit-scheduling-pages#create-scheduling-pages).</li><li>`MANUAL`: la reunión se creó manualmente a partir de un registro del CRM.</li></ul> |
| `startTime` | Número | La hora de inicio de la reunión. en milisegundos epoch.                                                                                                                                                                                                                                                                                                                          |
| `endTime`   | Número | La hora de finalización de la reunión, en milisegundos epoch.                                                                                                                                                                                                                                                                                                                    |

Para gestionar correctamente este webhook, debes generar una videoconferencia de esta reunión (o vincularla a una línea de conferencias existente) y responder con información sobre dicha conferencia. Los campos previstos en la respuesta son:

* `conferenceId`: un ID único asociado con la conferencia en este evento.
  Este ID debe ser globalmente único dentro de tu sistema. HubSpot devolverá este ID en el webhook de actualización.

* `conferenceUrl:` la URL que los usuarios pueden utilizar para unirse a la conferencia.

* `conferenceDetails`: invitación en texto sin formato. Debe describir cómo los asistentes pueden acceder a la videoconferencia de este evento. Las nuevas líneas se mantendrán en las representaciones de este texto, pero no puede usarse ningún otro formato.

Por ejemplo, la respuesta podría tener el siguiente aspecto:

```json theme={null}
//example response
{
  "conferenceId": "some-unique-id",
  "conferenceUrl": "https://example.com/join",
  "conferenceDetails": "Click here to join: https://example.com/join"
}
```

### Webhook de actualización de reuniones

Si especificaste un `updateMeetingUrl`, HubSpot enviará esta URI a una solicitud cuando se hayan modificado detalles relevantes de una reunión. Esta notificación es necesaria si necesitas mantener siempre al día el tema o los horarios de una videoconferencia. La carga útil de la solicitud incluye información sobre la cuenta de HubSpot, el usuario asociado de HubSpot y los detalles de la reunión.

```json theme={null}
//example request
{
  "conferenceId": "some-unique-id",
  "userId": 123,
  "userEmail": "test.user@example.com",
  "portalId": 123123,
  "topic": "A Test Meeting (updated)",
  "startTime": 1534197600000,
  "endTime": 1534201200000
}
```

| Campo          | Tipo   | Descripción                                                                                                                                                          |
| -------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `conferenceId` | Cadena | El identificador único de la conferencia, proporcionado por la integración en la respuesta al webhook de creación de la reunión.                                     |
| `userId`       | Número | El ID del usuario de HubSpot asignado a la reunión. Siempre será el mismo usuario que el de la carga útil de la creación de la reunión.                              |
| `userEmail`    | Cadena | La dirección de correo electrónico del usuario de HubSpot asignado a la reunión. Siempre será el mismo usuario que el de la carga útil de la creación de la reunión. |
| `portalId`     | Número | El ID de la cuenta de HubSpot de la que proviene la solicitud.                                                                                                       |
| `topic`        | Cadena | El título de la reunión.                                                                                                                                             |
| `startTime`    | Número | La hora de inicio de la reunión, en milisegundos epoch.                                                                                                              |
| `endTime`      | Número | La hora de finalización de la reunión, en milisegundos epoch.                                                                                                        |

No se requiere un cuerpo de respuesta al responder a estas solicitudes. Solo se requiere un código de respuesta `200` o `204` para indicar a HubSpot que este webhook se recibió correctamente.

### Webhook de eliminación de una reunión

Cuando se elimine una reunión en HubSpot, se enviará una solicitud a la URL especificada en el campo `deleteMeetingUrl`. La carga incluirá el `conferenceId` de la reunión eliminada.

```json theme={null}
// Example payload
{
  "conferenceId": "some-unique-id"
}
```

No se requiere un cuerpo de respuesta al responder a estas solicitudes. Solo se requiere un código de respuesta `200` o `204` para indicar a HubSpot que este webhook se recibió correctamente.

### Webhook de verificación de usuario

Los sistemas de HubSpot siempre se comunican contigo sobre sus usuarios en términos de su ID de usuario de HubSpot y su dirección de correo electrónico de cuenta de HubSpot. Puede darse el caso de que un usuario del sistema de HubSpot pueda estar en tu sistema con una dirección de correo electrónico o un identificador diferente.

Antes de que HubSpot haga una llamada a tu sistema para crear, actualizar o eliminar un enlace de conferencia de video, primero verificará la configuración de la aplicación en un campo `userVerifyUrl`. Si esa URL ha sido definida, HubSpot la llamará para obtener tu identificador de usuario nativo. Luego enviará ese identificador como la dirección de correo electrónico del usuario en la llamada subsiguiente. Si no configuras esta URL, HubSpot asumirá siempre que la identidad del usuario está verificada.

Este ajuste es opcional y tú debes determinar si es necesario. Si necesitas mantener un mapeo de usuarios dentro de tu sistema, quizá lo mejor sea asociar el ID del usuario de HubSpot o su correo electrónico a tu ID de usuario interno en cada llamada.

La carga útil de este webhook contiene el ID de la cuenta de HubSpot y la dirección de correo electrónico del usuario.

```json theme={null}
//example request
{
  "portalId": 123123,
  "userEmail": "test.user@example.com"
}
```

Puedes volver a usar una respuesta `200` o cualquier código de error (por ejemplo, `404` sería un código adecuado). Si devuelves una respuesta `200`, debes devolver una carga que contenga la nueva identificación que debemos usar en lugar de la dirección de correo electrónico:

```json theme={null}
//example response
{
  "id": "any-string-id"
}
```
