Última modificación: 28 de agosto de 2025

Run in Postman

El SDK de extensiones de llamadas permite que las aplicaciones ofrezcan a los usuarios de HubSpot una opción personalizada para realizar llamadas directamente desde un registro del CRM, de manera similar a la herramienta de llamadas de HubSpot. Cuando un usuario realiza una llamada desde la aplicación, HubSpot registrará una interacción en la cronología de actividades del CRM y luego intercambiará datos con la aplicación para completar los detalles. Una extensión de llamadas consta de tres componentes principales:
  1. El SDK de extensiones de llamada, un SDK de JavaScript que permite la comunicación entre la aplicación y HubSpot.
  2. Los endpoints de la configuración de llamadas, que se usan para definir la configuración de llamada de la aplicación. Cada cuenta de HubSpot que se conecta a la aplicación utilizará esta configuración.
  3. El iframe de llamadas, que es donde aparece la aplicación para los usuarios de HubSpot y está configurado usando los endpoints de la configuración de llamadas.
Si no tienes una aplicación, puedes crear una desde tu cuenta de desarrollador de HubSpot. Si aún no tienes una cuenta de desarrollador de HubSpot, regístrate para crear una.

Nota:

La documentación que aparece a continuación abarca las llamadas salientes a través del SDK. Más información sobre el uso del SDK para recibir llamadas entrantes (BETA).

Ejecutar la aplicación de llamadas de demostración

Tienes la opción de probar el SDK de extensiones de llamada en dos aplicaciones de demostración diferentes:
  • El demo-minimal-js representa una implementación mínima del SDK usando JavaScript, HTML y CSS. Consulta más información sobre cómo se instala el SDK en index.js.
  • El demo-react-ts representa una implementación en tiempo real del SDK utilizando React, TypeScript y Styled Components que puedes usar como modelo para la aplicación. Consulta más información sobre cómo instalar el SDK en useCti.ts.

Nota:

Estas aplicaciones de demostración no son aplicaciones de llamadas completamente funcionales y usan datos simulados para proporcionar una experiencia más realista.

Instalar la aplicación de llamadas de demostración

Puedes ejecutar las aplicaciones de demostración con o sin instalación. Para instalar la demostración en tu entorno local:
  1. Instala Node.js en tu entorno.
  2. Clona, bifurca o descarga el ZIP de este repositorio.
  3. Abre tu terminal y ve al directorio raíz del proyecto.
  4. Ejecuta uno de los siguientes comandos:
    • Con demo-minimal-js:
cd demos/demo-minimal-js && npm i && npm start
  • Con demo-react-ts:
cd demos/demo-react-ts && npm i && npm start
Estos cambiarán al directorio de demostración que quieras, instalarán las dependencias de Node.js requeridas para el proyecto utilizando npm CLI e iniciarán la aplicación.

Nota:

El comando npm start abrirá automáticamente una nueva pestaña en tu navegador, en https://localhost:9025/, y para acceder a la aplicación puede que debas omitir un mensaje advirtiéndote de que tu conexión no es segura.

Iniciar la aplicación de llamadas de demostración desde HubSpot

  1. Ve a tus registros:
    • Contactos: en tu cuenta de HubSpot, ve a Contactos > Contactos.
    • Empresa: en tu cuenta de HubSpot, ve a Contactos > Empresas.
  2. Abre la consola del desarrollador de tu navegador y ejecuta el siguiente comando:
    • Si completaste los pasos de instalación de demo-minimal-js o de demo-react-ts:
localStorage.setItem('LocalSettings:Calling:installDemoWidget', 'local');
  • Si has omitido los pasos de instalación:
    • Con demo-minimal-js:
localStorage.setItem('LocalSettings:Calling:installDemoWidget', 'app:js');
  • Con demo-react-ts:
localStorage.setItem('LocalSettings:Calling:installDemoWidget', 'app');
  1. Actualiza la página y haz clic en el ícono Llamar de la barra lateral izquierda. Haz clic en el menú desplegable Llamar desde y selecciona el nombre de la aplicación de demostración del paso 2 (por ejemplo, Demo App Local, Demo App JS, Demo App React).
call-app-in-record
  1. Haz clic en Llamar para ver cómo se integra la aplicación de demostración con HubSpot a través del SDK de extensiones de llamada. También puedes ver los eventos registrados en la consola de desarrolladores de tu navegador.
calling-sdk-in-app

Instalar el SDK de extensiones de llamada en tu aplicación de llamadas

Para agregar el SDK de extensiones de llamada como dependencia de Node.js a tu aplicación de llamadas:
  • Con npm, ejecuta:
npm i --save @hubspot/calling-extensions-sdk
  • Con yarn, ejecuta:
yarn add @hubspot/calling-extensions-sdk

Usar la SDK de extensiones de llamada

El SDK de extensiones de llamada proporciona una API simple para HubSpot y una aplicación de llamadas para intercambiar mensajes. Los mensajes se envían a través de métodos proporcionados por el SDK y se reciben a través de eventHandlers. Puedes encontrar una lista completa de los eventos disponibles en la sección Eventos. La siguiente es una descripción de los eventos:
  1. Número de marcación: HubSpot envía el evento de número de marcación.
  2. Llamada saliente iniciada: la aplicación notifica a HubSpot cuando se inicia la llamada.
  3. Crear interacción: HubSpot crea una interacción de llamada con información mínima si la aplicación lo solicita.
  4. Interacción creada: indica que HubSpot creó una interacción.
  5. EngagementId enviado a la aplicación: HubSpot envía el engagementId a la aplicación.
  6. Llamada finalizada: la aplicación notifica cuando finaliza la llamada.
  7. Llamada completada: la aplicación notifica cuando el usuario ha terminado con la experiencia de usuario de la aplicación.
  8. Actualizar interacción: la aplicación obtiene la interacción a partir del engagementId, luego combina y actualiza la interacción con detalles adicionales de la llamada. Más información sobre cómo actualizar la interacción en una llamada a través de la API o del SDK.
Para comenzar, crea una instancia del objeto CallingExtensions. Puedes definir el comportamiento de tu extensión proporcionando el objeto de una opción al crear tu instancia de extensiones. El objeto de esta opción proporciona un campo eventHandlers donde puedes especificar el comportamiento de tu extensión. El siguiente bloque de código ilustra las opciones disponibles y los controladores de eventos que puedes definir:
import CallingExtensions from "@hubspot/calling-extensions-sdk";

const options = {
  /** @property {boolean} debugMode - Whether to log various inbound/outbound debug messages to the console. If false, console.debug will be used instead of console.log */
  debugMode: boolean,
  // eventHandlers handle inbound messages
  eventHandlers: {
    onReady: () => {
      /* HubSpot is ready to receive messages. */
    },
    onDialNumber: event => {
      /* HubSpot sends a dial number from the contact */
    },
    onCreateEngagementSucceeded: event => {
      /* HubSpot has created an engagement for this call. */
    }
    onEngagementCreatedFailed: event => {
      /* HubSpot has failed to create an engagement for this call. */
    }
    onUpdateEngagementSucceeded: event => {
      /* HubSpot has updated an engagement for this call. */
    },
    onUpdateEngagementFailed: event => {
      /* HubSpot has failed to update an engagement for this call. */
    }
    onVisibilityChanged: event => {
      /* Call widget's visibility is changed. */
    }
  }
};

const extensions = new CallingExtensions(options);

Probar la aplicación

Para iniciar las extensiones de llamada iFrame para usuarios finales, HubSpot requiere los siguientes parámetros iFrame.
{
   name: string /* The name of your calling app to display to users. */,
   url: string  /* The URL of your calling app, built with the Calling Extensions SDK */,
   width: number /* The iFrame's width */,
   height: number /* The iFrame's height */,
   isReady: boolean /* Whether the widget is ready for production (defaults to true) */,
   supportsCustomObjects : true /* Whether calls can be placed from a custom object */
}

Usar el endpoint de configuración de llamadas

Usa una herramienta de API (por ejemplo, Postman) para enviar la siguiente carga útil a la API de configuración de HubSpot. Asegúrate de obtener el APP_ID de tu aplicación de llamadas y el DEVELOPER_ACCOUNT_API_KEY.

Nota:

La etiqueta isReady indica si la aplicación está lista para la producción. Esta marca debe definirse como false durante la prueba.
# Example payload to add the call widget app settings
curl --request POST \
 --url 'https://api.hubapi.com/crm/v3/extensions/calling/APP_ID/settings?hapikey=DEVELOPER_ACCOUNT_API_KEY' \
 --header 'accept: application/json' \
 --header 'content-type: application/json' \
 --data '{"name":"demo widget","url":"https://mywidget.com/widget","height":600,"width":400,"isReady":false}'

# Note that this endpoint also supports PATCH, GET and DELETE

Anular la configuración de tu extensión con localStorage

Puedes anular cualquiera de los ajustes de tu extensión para fines de prueba. Abre la consola de desarrollador de tu navegador desde una pestaña de HubSpot, configura estos parámetros y ejecuta el comando:
const myExtensionSettings = {
  isReady: true,
  name: 'My app name',
  url: 'My local/qa/prod URL',
};

localStorage.setItem(
  'LocalSettings:Calling:CallingExtensions',
  JSON.stringify(myExtensionSettings)
);

Prepara tu aplicación para la producción

Una vez que hayas definido los ajustes de la aplicación mediante el endpoint de la configuración de llamadas, utiliza el endpoint PATCH para cambiar isReady a “true”.
# Example payload to add the call widget app settings

curl --request PATCH \
 --url 'https://api.hubapi.com/crm/v3/extensions/calling/APP_ID/settings?hapikey=DEVELOPER_ACCOUNT_API_KEY' \
 --header 'accept: application/json' \
 --header 'content-type: application/json' \
 --data '{"isReady":true}'

Publica tu aplicación de llamadas en el mercado de HubSpot

Una vez que tu aplicación esté configurada, los usuarios pueden instalarla en su cuenta utilizando la URL de instalación de la aplicación. Si quieres publicarla para que otros usuarios de HubSpot puedan encontrarla, también puedes elegir publicarla en el mercado de aplicaciones de HubSpot. Esto no es necesario si la aplicación es solo para uso interno.

Eventos

Eventos de llamadas disponibles:

Enviar mensajes a HubSpot

El objeto extensions proporciona los siguientes controladores de eventos que puedes utilizar para enviar mensajes a HubSpot o para especificar otro comportamiento asociado. Consulta los siguientes ejemplos.

inicializado: requerido

Envía un mensaje que indica que el software telefónico está listo para la interacción.
const payload = {
  isLoggedIn: boolean,
  engagementId: number,
  isAvailable: boolean,
};

extensions.initialized(payload);
PropiedadTipoDescripción
isLoggedInBooleanoComprueba si un usuario ha iniciado sesión o no.
engagementIdNúmeroID de la interacción creado por HubSpot.
isAvailableNúmeroComprueba si un usuario está disponible o no.

userAvailable

Envía un mensaje que indica que el usuario está disponible.
extensions.userAvailable();

userUnavailable

Envía un mensaje que indica que el usuario no está disponible.
extensions.userUnavailable();

userLoggedIn

Envía un mensaje que indica que el usuario ha iniciado sesión.
// This message is only needed when user isn't logged in when initialized
extensions.userLoggedIn();

userLoggedOut

Envía un mensaje que indica que el usuario ha cerrado sesión.
extensions.userLoggedOut();

incomingCall

Envía un mensaje para notificar a HubSpot que se ha iniciado una llamada.
const callInfo = {
  externalCallId: string,
  callStartTime: number,
  createEngagement: boolean,
  fromNumber: string,
  tonumber: string,
};
extensions.incomingCall(callInfo);
PropiedadTipoDescripción
externalCallIdCadenaID de llamada creada por la aplicación de llamadas. Se utiliza para habilitar las llamadas en el centro de ayuda.
callStartTimeNúmeroHora de inicio de la llamada, en milisegundos.
createEngagementBooleanoSi HubSpot debería crear una interacción para esta llamada o no. Cuando es “true”, HubSpot responderá con onCreateEngagementSucceeded o onCreateEngagementFailed.
fromNumberCadenaEl número de la persona que llama. Parámetro obligatorio.
toNumberCadenaEl número de teléfono del destinatario.

outgoingCall

Envía un mensaje para notificar a HubSpot que se ha iniciado una llamada saliente.
const callInfo = {
  phoneNumber: string /** @deprecated Use toNumber instead **/,
  callStartTime: number,
  createEngagement: true,
  toNumber: string,
  fromNumber: string,
  dialingContext: onDialEventPayload,
};
extensions.outgoingCall(callInfo);
PropiedadTipoDescripción
callStartTimeNúmeroHora de inicio de la llamada, en milisegundos.
createEngagementBooleanoSi HubSpot debería crear una interacción para esta llamada o no. Cuando es “true”, HubSpot responderá con onCreateEngagementSucceeded o onCreateEngagementFailed.
toNumberCadenaEl número de teléfono del destinatario.
fromNumberCadenaEl número de la persona que llama. Parámetro obligatorio.
dialingContextObjetoEl contexto de marcado se utiliza para la creación de tickets o interacciones, cuando corresponde. El objeto incluye todas las propiedades de la carga útil onDialNumber. Esta propiedad ayuda a garantizar la coherencia entre los datos devolviendo el contexto de marcación completo entre HubSpot y la aplicación de terceros.

callAnswered

Envía un mensaje para notificar a HubSpot que se está respondiendo una llamada saliente.
const payload = {
  externalCallId: string,
};
extensions.callAnswered();
PropiedadTipoDescripción
externalCallIdCadenaID de llamada creada por la aplicación de llamadas. Se utiliza para habilitar las llamadas en el centro de ayuda.

callEnded

Envía un mensaje para notificar a HubSpot que la llamada ha finalizado.
// After receiving the call ended event, the user can navigate away, can close the call widget.
extensions.callEnded({
  externalCallId: string,
  engagementId: number,
  callEndStatus: EndStatus,
});
PropiedadTipoDescripción
externalCallIdCadenaID de llamada creada por la aplicación de llamadas. Se utiliza para habilitar las llamadas en el centro de ayuda.
engagementIdNúmeroID de la interacción creado por HubSpot.
callEndStatusEnumeraciónEl estado de la llamada cuando finaliza. Estados disponibles:
  • COMPLETED
  • FAILED
  • CANCELED
  • BUSY
  • NO_ANSWER
  • REJECTED
  • MISSED

callCompleted

Envía un mensaje para notificar a HubSpot que la llamada se ha completado. Las propiedades de interacción son propiedad de HubSpot y ya no es necesario crearlas o actualizarlas manualmente (ver resaltado).

Nota:

La propiedad hideWidget se ignorará cuando el usuario esté en una cola de tareas con el tipo de tarea Call.
// After receiving the call completed event, HubSpot will
//   1) insert the engagement into the timeline
//   2) set the default associations on the engagement
//   3) closes the widget unless `hideWidget` is set to false.
//   4) update the engagement with any engagement properties
const data = {
  engagementId: number,
  hideWidget: boolean,
  engagementProperties: { [key: string]: string },
  externalCallId: string,
}
extensions.callCompleted(data);
PropiedadTipoDescripción
engagementIdNúmeroID de la interacción creado por HubSpot.
hideWidgetBooleanoSi el widget debe ocultarse cuando finaliza la llamada. Parámetro opcional. El valor predeterminado es “true”.
engagementPropertiesCadenaHabilita las interacciones propias de HubSpot agregar propiedades. Hace que HubSpot responda con onUpdateEngagementSucceeded o con onUpdateEngagementFailed.
externalCallIdCadenaID de llamada creada por la aplicación de llamadas. Se utiliza para habilitar las llamadas en el centro de ayuda.

publishToChannel

Publica la llamada a un canal conectado. Esto no es necesario para las interacciones que son propiedad de HubSpot.
const payload = {
  externalCallId,
  engagementId,
};
extensions.publishToChannel(payload);
PropiedadTipoDescripción
externalCallIdCadenaID de llamada creada por la aplicación de llamadas. Se utiliza para habilitar las llamadas en el centro de ayuda.
engagementIdNúmeroID de la interacción creado por HubSpot.
Este evento se llama cuando se navega a un registro.
onNavigateToRecord {
    const {
      engagementId: number,
      objectCoordinates: object coordinates
    } = data;
      ...
}
PropiedadTipoDescripción
engagementIdNúmeroID de la interacción creado por HubSpot.
objectCoordinatesCoordenadas del objetoIncluye el portalId, objectId, y objectTypeID.

sendError

Envía un mensaje para notificar a HubSpot que la aplicación que llama ha encontrado un error.
// After receiving the sendError event, HubSpot will display an alert popup to the user with the error message provided.
const data = {
  message: string,
};
extensions.sendError(data);
PropiedadTipoDescripción
messageCadenaMensaje de error que aparecerá en la ventana emergente de alerta.

resizeWidget

Envía un mensaje para notificar a HubSpot que la aplicación de llamada necesita ser redimensionada.
// After receiving the resizeWidget event, HubSpot will use the provided height and width to resize the call widget.
const data = {
  height: number,
  width: number,
};
extensions.resizeWidget(data);
PropiedadTipoDescripción
heightNúmeroAltura deseada del widget de llamada.
widthNúmeroAnchura deseada del widget de llamada.

Recibir mensajes en HubSpot

El objeto extensions proporciona los siguientes controladores de eventos que puedes utilizar al recibir mensajes en HubSpot o para especificar otro comportamiento asociado. Consulta los siguientes ejemplos.

onReady

Mensaje que indica que HubSpot está listo para recibir mensajes.
// Example snippet for handling onReady event
onReady() {
    extensions.initialized(payload);
}
PropiedadTipoDescripción
engagementIdNúmeroID de la interacción creado por HubSpot.
iframeLocationEnumeraciónwidget: widget de arrastrar y soltar que se muestra en las páginas de registros cuando la aplicación de llamadas no admite llamadas entrantes.
remote: marco en la barra de navegación cuando la aplicación de llamadas admite llamadas entrantes.
window: iframe en la ventana de llamadas cuando la aplicación de llamadas admite llamadas entrantes.
ownerIdCadena o númeroEl ID del usuario que ha iniciado sesión en HubSpot.
PortalIdNúmeroEl ID de la cuenta de HubSpot.
userIdNúmeroEl ID del usuario de HubSpot.

onDialNumber

Este evento se activará cuando un usuario inicie una llamada saliente en HubSpot. El evento onDialNumber proporcionará una carga útil que incluye todos los campos pertinentes asociados con la llamada. Estos campos se detallan en la siguiente tabla:
onDialNumber(data) {
  const {
    phoneNumber: string,
    ownerId: number,
    subjectId: number,
    objectId: number,
    objectType: CONTACT | COMPANY,
    portalId: number,
    countryCode: string,
    calleeInfo {
        calleeId: number,
        calleeObjectTypeId: string,
    },
    startTimestamp: number,
    toPhoneNumberSrc: string,
   } = data;
    ...
}
PropiedadTipoDescripción
phoneNumberCadenaEl número de teléfono de la persona a la que llamó el usuario de HubSpot.
ownerIdCadena o númeroEl ID del usuario que ha iniciado sesión en HubSpot.
subjectIdNúmeroEl ID del sujeto.
objectIdNúmeroEl tipo de objeto del número de teléfono.
objectTypeCadenaEl tipo de objeto asociado al número de teléfono que se marcó (por ejemplo, el número de teléfono del contacto o de la empresa). Los valores posibles aquí son "CONTACT" o "COMPANY".
portalIdNúmeroEl ID del portal de HubSpot.
countryCodeCadenaEl código del país del número de teléfono.
calleeInfoMatrizInformación sobre el destinatario de la llamada. Debe incluir lo siguiente:
  • calleeID: number
  • calleeObjectTypeId: string
startTimestampNúmeroMarca de tiempo del inicio de la llamada.
toPhoneNumberSrcCadenaEl nombre de la propiedad de los números de teléfono’ en HubSpot. La propiedad puede ser un valor de propiedad estándar o una propiedad personalizada. Por ejemplo, un contacto puede tener tres números de teléfono de contacto, uno puede estar etiquetado como Oficina, otro puede estar etiquetado como Personal y el otro puede estar etiquetado como Móvil.

onEngagementCreated

Obsoleto. En su lugar, utiliza onCreateEngagementSucceeded.
/** @deprecated Use onCreateEngagementSucceeded instead **/
onEngagementCreated(data) {
    const {
      engagementId: number,
    } = data;
      ...
}
PropiedadTipoDescripción
engagementIdNúmeroID de la interacción creado por HubSpot.

onCreateEngagementSucceeded

HubSpot envía un mensaje para notificar al partner de la aplicación de llamadas que la actualización de la interacción tuvo éxito.
onCreateEngagementSucceeded: (event) => {};

onCreateEngagementFailed

HubSpot envía un mensaje para notificar al partner de la aplicación de llamadas que falló la creación de la interacción.
onCreateEngagementFailed: (event) => {};

onNavigateToRecordFailed

Este evento se llama cuando falla la navegación a un registro.
onNavigateToRecordFailed {
    const {
      engagementId: number,
      objectCoordinates: object coordinates
    } = data;
      ...
}
PropiedadTipoDescripción
engagementIdNúmeroID de la interacción creado por HubSpot.
objectCoordinatesCoordenadas del objetoIncluye el portalId, objectId, y objectTypeID.

onPublishToChannelSucceeded

Este evento se llama cuando la publicación en un canal es existosa.
onPublishToChannelSucceeded{
    const {
      engagementId: number,
      externalCallId: string
    } = data;
      ...
}
PropiedadTipoDescripción
engagementIdNúmeroID de la interacción creado por HubSpot.
externalCallIdCadenaID de llamada creada por la aplicación de llamadas. Se utiliza para habilitar las llamadas en el centro de ayuda.

onPublishToChannelFailed

Este evento se llama cuando falla la publicación en un canal.
onPublishToChannelFailed{
    const {
      engagementId: number,
      externalCallId: string
    } = data;
      ...
}
PropiedadTipoDescripción
engagementIdNúmeroID de la interacción creado por HubSpot.
externalCallIdCadenaID de llamada creada por la aplicación de llamadas. Se utiliza para habilitar las llamadas en el centro de ayuda.

onCallerIdMatchSucceeded

Este evento se llama cuando el ID de llamada coincide.
onCallerIdMatchSucceeded: (event) => {};

onCallerIdMatchFailed

Este evento se llama cuando el ID de llamada no coincide.
onCallerIDMatchFailed: (event) => {};

onVisibilityChanged

Mensaje que indica si el usuario ha minimizado u ocultado la aplicación de llamada.
onVisibilityChanged(data) {
    const { isMinimized, isHidden } = data;
    ...
}

defaultEventHandler

Controlador predeterminado para eventos.
defaultEventHandler(event) {
   console.info("Event received. Do you need to handle it?", event);
}

SDK para llamadas | Preguntas frecuentes

¿Cómo se gestiona la autenticación de usuarios?

La aplicación de llamada debe manejar la autenticación.

¿Las extensiones de llamada están alojadas en una CDN?

Sí. Puedes instalar el SDK de extensiones de llamada a través de jsDeliver. Por ejemplo, para instalar calling-extensions-sdk@0.2.2, puedes usar https://cdn.jsdelivr.net/npm/@hubspot/calling-extensions-sdk@0.2.2/dist/main.js.

¿Cuándo debería crearse o actualizarse una interacción?

Un usuario puede iniciar una llamada desde dentro y fuera de la interfaz de usuario de HubSpot (por ejemplo, aplicación móvil, número redirigido, etc.) Si se inicia una llamada desde la interfaz de usuario de HubSpot, HubSpot creará una interacción de llamada y enviará la interacción a la aplicación de llamada. Una vez que finaliza la llamada, la aplicación de llamadas puede actualizar esta interacción con detalles adicionales de la llamada. Si se inicia una llamada fuera de la interfaz de usuario de HubSpot, la aplicación debe crear la interacción de la llamada.

¿Qué permisos se requieren como parte de la integración?

Se deben agregar permisos de contactos y de cronología de actividades. Estos permisos aseguran que tu aplicación tenga acceso a los contactos y que pueda crear y actualizar interacciones de llamada en el CRM.

¿Se puede agregar esta funcionalidad a una aplicación ya existente en el mercado o debo crear una nueva aplicación?

Si ya tienes una aplicación de llamadas, puedes agregarle esta funcionalidad directamente. Todos los clientes que ya tienen tu aplicación instalada tendrán acceso a esta nueva funcionalidad sin tener que volver a instalar la aplicación.

¿Puedo integrar una aplicación de software telefónico que ya tenga en el SDK?

Sí, integrar una aplicación de software telefónico que ya tengas debería ser muy fácil. Simplemente sigue los pasos de la documentación anterior para tener tu aplicación en funcionamiento.

¿Se pueden usar varias integraciones al mismo tiempo?

Sí, los usuarios pueden usar múltiples integraciones externas de llamadas al mismo tiempo. Pueden usar el conmutador del proveedor que se presenta después de hacer clic en el botón de llamada para cambiar sin problemas entre proveedores.

¿Los usuarios gratuitos pueden instalar integraciones de aplicaciones?

Sí, todos los usuarios pueden instalar la aplicación.

Si un usuario ya tiene mi aplicación instalada, ¿la integración aparece automáticamente?

Sí, si un usuario ya ha instalado tu aplicación y estás actualizando la misma aplicación con las extensiones de llamada, la integración aparecerá automáticamente. Actualmente, no hay manera de que el desarrollador habilite la aplicación de llamada solo para un grupo de clientes.

¿Cualquier usuario puede instalar o desinstalar una aplicación?

No, solo los usuarios que tengan los permisos necesarios pueden instalar y desinstalar una aplicación. Más información sobre cómo revisar los permisos de un usuario.

¿Puedo crear una propiedad de llamadas personalizada?

Sí, puedes crear una propiedad de llamada personalizada utilizando la API de propiedades.

¿Puedo realizar una llamada desde un objeto personalizado?

Sí, las integraciones de llamadas pueden realizar llamadas desde objetos personalizados siempre y cuando solo usen el SDK para crear la llamada. Cada integración deberá verificar que solo usan el SDK para llamadas para crear llamadas y notificar a HubSpot en el evento outgoingCall. Primero, verifica que la integración esté usando el SDK de llamadas para crear interacciones en el evento outgoingCall:
outgoingCall({ createEngagement: true });
Si createEngagement es “true”, conoce cómo actualizar la información de tu aplicación aquí. Este es el ejemplo de todo el evento outgoingCall:
const callInfo = {
  phoneNumber: string, // optional unless call is initiated by the widget
  createEngagement: true // whether HubSpot should create an engagement for this call
  callStartTime: number // optional unless call is initiated by the widget
};
extensions.outgoingCall(callInfo);