Última modificação: 28 de agosto de 2025

Run in Postman

O SDK de Extensão de Chamadas permite que aplicativos ofereçam uma opção de chamada personalizada para usuários da HubSpot diretamente de um registro do CRM, semelhante à ferramenta de chamadas fornecida pela HubSpot. Quando um usuário realiza uma chamada usando seu aplicativo, a HubSpot cria um engajamento na linha do tempo de atividades do registro do CRM e, em seguida, troca dados com seu aplicativo para preencher os detalhes. Uma extensão de chamadas consiste em três componentes principais:
  1. O SDK de extensões de chamada, um SDK JavaScript que permite a comunicação entre seu aplicativo e o HubSpot.
  2. Os pontos de extremidade de configurações de chamada são usados para definir as configurações de chamadas para o seu aplicativo. Cada conta da HubSpot conectada ao seu aplicativo usará essas configurações.
  3. O iframe de chamadas, que é onde seu aplicativo aparece para usuários do HubSpot e é configurado usando as configurações de chamada.
Se não tiver um aplicativo, você pode criar um da sua conta do desenvolvedor da HubSpot. Se você ainda não tiver uma conta de desenvolvedor da HubSpot, faça login aqui.

Observação:

A documentação abaixo cobre chamadas de saída via SDK. Saiba mais sobre como usar o SDK para receber chamadas recebidas (BETA).

Execute a demonstração do aplicativo de chamadas

Você tem a opção de testar o SDK de extensões de chamadas em dois aplicativos de demonstração diferentes:
  • A demo-minimum-js CSS apresenta uma implementação mínima do SDK usando JavaScript, HTML e Veja como o SDK é instanciado em index.js.
  • Demo-react-ts apresenta uma implementação real do SDK usando React, TypeScript e Styled Components para agir como um modelo para seu aplicativo. Veja como o SDK é instanciado em useCti.ts.

Observação:

Esses aplicativos de demonstração não são aplicativos de chamadas totalmente funcionais e usam dados simulados para fornecer uma experiência mais realista.

Instalar a demonstração do aplicativo de chamadas

Você pode executar os aplicativos de demonstração com ou sem instalação. Para instalar a demonstração no seu ambiente local:
  1. Instale o Node.js em seu ambiente.
  2. Clone, bifurque ou baixe o ZIP deste repositório.
  3. Abra o terminal e navegue até o diretório raiz do projeto.
  4. Execute um dos seguintes comandos:
    • Para demo-minimal-js:
cd demos/demo-minimal-js && npm i && npm start
  • Para demo-react-ts:
cd demos/demo-react-ts && npm i && npm start
Isso mudará para o diretório de demonstração desejado, instalará as dependências Node.js necessárias para o projeto usando a CLI npm e iniciará o aplicativo.

Observação:

O comando npm start abrirá automaticamente uma nova guia no seu navegador em https://localhost:9025/, e talvez seja necessário ignorar um aviso “Sua conexão não é segura” para acessar o aplicativo.

Iniciar o aplicativo de chamadas do HubSpot

  1. Acesse os registros:
    • Contatos: na sua conta da HubSpot, acesse Contatos > Contatos.
    • Empresa: na sua conta da HubSpot, acesse Contatos > Empresas.
  2. Abra o console de desenvolvedor do navegador e execute o seguinte comando:
    • Se você tiver concluído as etapas de instalação, para demo-minimal-js ou demo-react-ts:
localStorage.setItem('LocalSettings:Calling:installDemoWidget', 'local');
  • Se você ignorou as etapas de instalação:
    • Para demo-minimal-js:
localStorage.setItem('LocalSettings:Calling:installDemoWidget', 'app:js');
  • Para demo-react-ts:
localStorage.setItem('LocalSettings:Calling:installDemoWidget', 'app');
  1. Atualize a página e clique no ícone Chamar na barra lateral esquerda. Clique no menu suspenso Chamar de e selecione o nome do aplicativo de demonstração da etapa 2 (por exemplo, Aplicativo de Demonstração Local, Aplicativo de Demonstração JS, Aplicativo de Demonstração React).
call-app-in-record
  1. Clique em Chamar para ver como o aplicativo de demonstração se integra à HubSpot por meio do SDK de extensões de chamadas. Você também pode ver os eventos registrados no console de desenvolvedor do navegador.
calling-sdk-in-app

Instalar o SDK de extensões de chamadas no seu aplicativo de chamadas

Para adicionar o SDK de extensões de chamadas como uma dependência do Node.js no seu aplicativo de chamadas:
  • Para npm, execute:
npm i --save @hubspot/calling-extensions-sdk
Para yarn, execute:
yarn add @hubspot/calling-extensions-sdk

Usar o SDK de extensões de chamada

O SDK de extensões de chamadas expõe uma API simples para a troca de mensagens entre o HubSpot e um aplicativo de chamadas. As mensagens são enviadas por meio de métodos expostos pelo SDK e recebidas por meio do eventHandlers. Você pode encontrar uma lista completa dos eventos disponíveis na seção Eventos. A seguir, uma descrição dos eventos:
  1. Número de discagem: o HubSpot envia o evento de número de discagem.
  2. Chamada de saída iniciada: o aplicativo notifica o HubSpot quando a chamada é iniciada.
  3. Criar engajamento: o HubSpot cria um engajamento de chamada com informações mínimas, se solicitado pelo aplicativo.
  4. Engajamento criado: o HubSpot criou um engajamento.
  5. EngagementId enviado para o aplicativo: o HubSpot envia o engagementId para o aplicativo.
  6. Chamada encerrada: o aplicativo notifica quando a chamada é encerrada.
  7. Chamada concluída: o aplicativo notifica quando o usuário termina a experiência no aplicativo.
  8. Atualizar engajamento: o aplicativo busca o engajamento pelo engagementId e o mescla e atualiza com detalhes adicionais da chamada. Saiba mais sobre atualizar um engajamento de chamada através da APIou através do SDK.
Para começar, crie uma instância do objeto CallingExtensions. Você pode definir o comportamento da sua extensão fornecendo o objeto de uma opção ao criar sua instância de extensões. O objeto desta opção fornece um campo eventHandlers onde você pode especificar o comportamento da sua extensão. O bloco de código a seguir ilustra as opções disponíveis e os manipuladores de eventos que você pode 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);

Teste seu aplicativo

Para iniciar as extensões de chamadas do iFrame para usuários finais, o HubSpot exige os parâmetros do iFrame descritos abaixo.
{
   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 o ponto de extremidade das configurações de chamada

Usando sua ferramenta de API (por exemplo, Postman), envie a carga útil a seguir para a API de configurações do HubSpot. Certifique-se de obter o APP_ID de seu aplicativo de chamadas e seu aplicativo DEVELOPER_ACCOUNT_API_KEY.

Observação:

O sinalizador isReady indica se o aplicativo está pronto para produção. Este sinalizador deve ser definido como false durante o teste.
# 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

Substitua as configurações de extensão utilizando localStorage

Você pode substituir qualquer uma das suas configurações de extensão para fins de teste. Abra o console de desenvolvedor do navegador a partir de uma guia do HubSpot, edite as configurações abaixo e execute o comando:
const myExtensionSettings = {
  isReady: true,
  name: 'My app name',
  url: 'My local/qa/prod URL',
};

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

Preparar o aplicativo para produção

Depois de definir as configurações do seu aplicativo usando o configurações de endpoint de chamada , use o ponto de extremidade PATCH para alterar isReady para verdade.
# 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}'

Publicar o aplicativo de chamadas no marketplace da HubSpot

Depois que seu aplicativo estiver configurado, os usuários poderão instalá-lo em suas contas usando a URL de instalação do aplicativo. Se você quiser listá-lo publicamente para que outros usuários da HubSpot o encontrem, também pode escolher listá-lo no HubSpot App Marketplace. Isso não é necessário se o aplicativo for apenas para uso interno.

Eventos

Eventos de chamadas disponíveis:

Enviar mensagens para a HubSpot

O objeto extensions fornece os seguintes manipuladores de eventos que você pode invocar para enviar mensagens para o HubSpot ou para especificar outro comportamento associado. Veja os exemplos abaixo.

inicializado: Obrigatório

Envia uma mensagem indicando que o soft phone está pronto para interação.
const payload = {
  isLoggedIn: boolean,
  engagementId: number,
  isAvailable: boolean,
};

extensions.initialized(payload);
PropriedadeTipoDescrição
isLoggedInBooleanoCriar menus que se adaptam ao fato de o usuário estar conectado ou não.
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
isAvailableNúmeroVerifica se um usuário está disponível ou não.

userAvailable

Envia uma mensagem indicando que o usuário está disponível.
extensions.userAvailable();

userUnavailable

Envia uma mensagem indicando que o usuário não está disponível.
extensions.userUnavailable();

userLoggedIn

Envia uma mensagem indicando que o usuário fez login.
// This message is only needed when user isn't logged in when initialized
extensions.userLoggedIn();

userLoggedOut

Envia uma mensagem indicando que o usuário efetuou logout.
extensions.userLoggedOut();

incomingCall

Envia uma mensagem para notificar o HubSpot de que uma chamada de entrada foi iniciada.
const callInfo = {
  externalCallId: string,
  callStartTime: number,
  createEngagement: boolean,
  fromNumber: string,
  tonumber: string,
};
extensions.incomingCall(callInfo);
PropriedadeTipoDescrição
externalCallIdStringUm ID de chamada criado por um aplicativo de chamadas. Usado para habilitar as chamadas no help desk.
callStartTimeNúmeroHora de início da chamada, em milissegundos.
createEngagementBooleanoSe o HubSpot deve criar um engajamento para esta chamada. Quando verdadeiro, o HubSpot responderá com onCreateEngagementSucceeded ou onCreateEngagementFailed.
fromNumberStringO número do chamador. Parâmetro obrigatório.
toNumberStringO número de telefone do destinatário.

outgoingCall

Envia uma mensagem para notificar o HubSpot de que uma chamada de saída foi iniciada.
const callInfo = {
  phoneNumber: string /** @deprecated Use toNumber instead **/,
  callStartTime: number,
  createEngagement: true,
  toNumber: string,
  fromNumber: string,
  dialingContext: onDialEventPayload,
};
extensions.outgoingCall(callInfo);
PropriedadeTipoDescrição
callStartTimeNúmeroHora de início da chamada, em milissegundos.
createEngagementBooleanoSe o HubSpot deve criar um engajamento para esta chamada. Quando verdadeiro, o HubSpot responderá com onCreateEngagementSucceeded ou onCreateEngagementFailed.
toNumberStringO número de telefone do destinatário.
fromNumberStringO número do chamador. Parâmetro obrigatório.
dialingContextObjetoO contexto de discagem é usado para criação de tickets e/ou engajamento quando aplicável. O objeto inclui todas as propriedades da onDialNumber carga útil. Essa propriedade ajuda a garantir a consistência dos dados ao repassar o contexto de discagem completo entre a HubSpot e seu aplicativo de terceiros.

callAnswered

Envia uma mensagem para notificar o HubSpot de que uma chamada de saída está sendo atendida.
const payload = {
  externalCallId: string,
};
extensions.callAnswered();
PropriedadeTipoDescrição
externalCallIdStringUm ID de chamada criado por um aplicativo de chamadas. Usado para habilitar as chamadas no help desk.

callEnded

Envia uma mensagem para notificar o HubSpot de que a chamada foi encerrada.
// After receiving the call ended event, the user can navigate away, can close the call widget.
extensions.callEnded({
  externalCallId: string,
  engagementId: number,
  callEndStatus: EndStatus,
});
PropriedadeTipoDescrição
externalCallIdStringUm ID de chamada criado por um aplicativo de chamadas. Usado para habilitar as chamadas no help desk.
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
callEndStatusEnumeraçãoO status da chamada uma vez encerrada. Status disponíveis:
  • COMPLETED
  • FAILED
  • CANCELED
  • BUSY
  • NO_ANSWER
  • REJECTED
  • MISSED

callCompleted

Envia uma mensagem para notificar o HubSpot de que a chamada foi concluída. As propriedades de engajamento são de propriedade da HubSpot e não precisam mais ser criadas ou atualizadas manualmente (consulte o destaque).

Observação:

A propriedade hideWidget será ignorada quando o usuário estiver em uma fila de tarefas com o tipo de tarefa 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);
PropriedadeTipoDescrição
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
hideWidgetBooleanoSe o widget deve ser ocultado quando a chamada é encerrada. Parâmetro opcional. Assume o padrão true.
engagementPropertiesStringAceite os engajamentos hs adicionando propriedades. Faz com que o HubSpot responda com onUpdateEngagementSucceeded ou onUpdateEngagementFailed.
externalCallIdStringUm ID de chamada criado por um aplicativo de chamadas. Usado para habilitar as chamadas no help desk.

publishToChannel

Publica a chamada em um canal conectado. Isso não é necessário para engajamentos de propriedade da HubSpot.
const payload = {
  externalCallId,
  engagementId,
};
extensions.publishToChannel(payload);
PropriedadeTipoDescrição
externalCallIdStringUm ID de chamada criado por um aplicativo de chamadas. Usado para habilitar as chamadas no help desk.
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
Este evento é chamado ao navegar para um registro.
onNavigateToRecord {
    const {
      engagementId: number,
      objectCoordinates: object coordinates
    } = data;
      ...
}
PropriedadeTipoDescrição
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
objectCoordinatesCoordenadas do objetoReferências a portalId, objectId, e objectTypeID.

sendError

Envia uma mensagem para notificar o HubSpot de que o aplicativo de chamada encontrou um erro.
// 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);
PropriedadeTipoDescrição
messageStringMensagem de erro a ser exibida no pop-up de alerta.

resizeWidget

Envia uma mensagem para notificar o HubSpot de que o aplicativo de chamada precisa ser redimensionado.
// 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);
PropriedadeTipoDescrição
heightNúmeroAltura desejada do widget da chamada.
widthNúmeroLargura desejada do widget da chamada.

Receber mensagens do HubSpot

O objeto extensions fornece manipuladores de eventos que você pode invocar ao receber mensagens no HubSpot ou para especificar outro comportamento associado. Veja os exemplos abaixo.

onReady

Mensagem indicando que o HubSpot está pronto para receber mensagens.
// Example snippet for handling onReady event
onReady() {
    extensions.initialized(payload);
}
PropriedadeTipoDescrição
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
iframeLocationEnumerarwidget: o widget de arrastar e soltar mostrado nas páginas de registro ao chamar o aplicativo não funciona suporte a chamadas de entrada.
remote: quadro na barra de navegação ao chamar o aplicativo que oferece suporte a chamadas de entrada.
window: iframe na janela de chamada quando o aplicativo de chamada oferece suporte a chamadas de entrada.
ownerIdString ou NúmeroO ID do usuário conectado (no HubSpot).
PortalIdNúmeroO ID da conta da HubSpot.
userIdNúmeroO ID do usuário da HubSpot.

onDialNumber

Este evento será disparado quando um usuário no HubSpot fizer uma chamada. O evento onDialNumber fornecerá uma payload que inclui todos os campos pertinentes associados à chamada. Estes campos são detalhados na tabela abaixo:
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;
    ...
}
PropriedadeTipoDescrição
phoneNumberStringO número de telefone da pessoa que foi chamada.
ownerIdString ou NúmeroO ID do usuário conectado (no HubSpot).
subjectIdNúmeroO ID do assunto.
objectIdNúmeroTipo de objeto do número de telefone.
objectTypeStringO tipo de objeto associado ao número de telefone discado (por exemplo, o número de telefone do contato ou da empresa). Os possíveis valores são "CONTACT" ou "COMPANY".
portalIdNúmeroO ID do portal da HubSpot.
countryCodeStringO código do país do número de telefone.
calleeInfoMatrizMais informações sobre o autor da chamada. Deve incluir o seguinte:
  • calleeID: number
  • calleeObjectTypeId: string
startTimestampNúmeroData/hora do início da chamada.
toPhoneNumberSrcStringO nome da ’ propriedade dos números de telefone no HubSpot. A propriedade pode ser um valor de propriedade padrão ou uma propriedade personalizada. Por exemplo, um contato pode ter três números de telefone de contato, um pode ser rotulado Escritório, outro pode ser rotulado Pessoal e o outro, Celular.

onEngagementCreated

Descontinuado. Em vez disso, use o filtro onCreateEngagementSucceeded.
/** @deprecated Use onCreateEngagementSucceeded instead **/
onEngagementCreated(data) {
    const {
      engagementId: number,
    } = data;
      ...
}
PropriedadeTipoDescrição
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.

onCreateEngagementSucceeded

O HubSpot envia uma mensagem para notificar o parceiro do aplicativo de chamada de que a atualização do engajamento foi bem-sucedida.
onCreateEngagementSucceeded: (event) => {};

onCreateEngagementFailed

O HubSpot envia uma mensagem para notificar ao parceiro do aplicativo de chamada de que a criação do engajamento falhou.
onCreateEngagementFailed: (event) => {};

onNavigateToRecordFailed

Este evento é chamado quando a navegação para um registro falha.
onNavigateToRecordFailed {
    const {
      engagementId: number,
      objectCoordinates: object coordinates
    } = data;
      ...
}
PropriedadeTipoDescrição
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
objectCoordinatesCoordenadas do objetoReferências a portalId, objectId, e objectTypeID.

onPublishToChannelSucceeded

Este evento é chamado quando a publicação em um canal é bem-sucedida.
onPublishToChannelSucceeded{
    const {
      engagementId: number,
      externalCallId: string
    } = data;
      ...
}
PropriedadeTipoDescrição
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
externalCallIdStringUm ID de chamada criado por um aplicativo de chamadas. Usado para habilitar as chamadas no help desk.

onPublishToChannelFailed

Este evento é chamado quando a publicação em um canal falha.
onPublishToChannelFailed{
    const {
      engagementId: number,
      externalCallId: string
    } = data;
      ...
}
PropriedadeTipoDescrição
engagementIdNúmeroUm ID de engajamento criado pelo HubSpot.
externalCallIdStringUm ID de chamada criado por um aplicativo de chamadas. Usado para habilitar as chamadas no help desk.

onCallerIdMatchSucceeded

Este evento é chamado quando a correspondência do ID do chamador é bem-sucedida.
onCallerIdMatchSucceeded: (event) => {};

onCallerIdMatchFailed

Este evento é chamado quando a correspondência do ID do chamador falha.
onCallerIDMatchFailed: (event) => {};

onVisibilityChanged

Mensagem que indica se o usuário minimizou ou ocultou o aplicativo de chamada.
onVisibilityChanged(data) {
    const { isMinimized, isHidden } = data;
    ...
}

defaultEventHandler

Manipulador padrão para eventos.
defaultEventHandler(event) {
   console.info("Event received. Do you need to handle it?", event);
}

SDK de chamadas | Perguntas frequentes

Como a autenticação do usuário é tratada?

O aplicativo de chamadas deve lidar com a autenticação.

As Extensões de chamada estão hospedadas em uma CDN?

Sim. Você pode instalar o SDK de Extensões de Chamada via jsDeliver. Por exemplo, para instalar calling-extensions-sdk@0.2.2, você pode usar https://cdn.jsdelivr.net/npm/@hubspot/calling-extensions-sdk@0.2.2/dist/main.js.

Quando um engajamento deve ser criado ou atualizado?

Um usuário pode iniciar uma chamada diretamente da interface do HubSpot e fora dela (por exemplo, aplicativo móvel, número redirecionado etc.) Se uma chamada for iniciada a partir da interface do HubSpot, o HubSpot criará um engajamento de chamada e o enviará para o aplicativo de chamadas. Quando a chamada terminar, o aplicativo poderá atualizar esse engajamento com detalhes adicionais da chamada. Se uma chamada for iniciada fora da interface do usuário do HubSpot, o aplicativo deverá criar o engajamento de chamada.

Quais escopos são necessários como parte da integração?

Adicionar contatos e escopos de linha do tempo são obrigatórios. Esses escopos garantem que o aplicativo tenha acesso aos contatos e à capacidade de criar e atualizar engajamentos de chamadas no CRM.

Esta funcionalidade pode ser adicionada a um aplicativo existente no marketplace ou preciso criar um novo aplicativo?

Se você já tiver um aplicativo existente que atenda ao caso de uso de chamadas, poderá adicionar diretamente essa funcionalidade a ele. Todos os clientes que já têm o aplicativo instalado terão acesso a essa nova funcionalidade sem precisar instalá-lo novamente.

Posso integrar meu aplicativo de soft phone existente ao SDK?

Sim, é muito fácil integrar seu aplicativo de soft phone existente. Basta seguir as etapas na documentação acima para colocar seu aplicativo em funcionamento.

Os usuários podem usar várias integrações ao mesmo tempo?

Sim, os usuários podem usar várias integrações de chamadas de terceiros ao mesmo tempo. Eles podem usar a opção de troca de provedor mostrada depois de clicar no botão de chamada para alternar entre os provedores.

Os usuários gratuitos podem instalar integrações de aplicativos?

Sim, todos os usuários podem instalar o aplicativo.

Se um usuário já tiver meu aplicativo instalado, a integração será exibida automaticamente?

Sim, se um usuário já tiver instalado o aplicativo e você estiver atualizando esse mesmo aplicativo com as extensões de chamadas, a integração aparecerá automaticamente. Atualmente, não há maneira de o desenvolvedor habilitar o aplicativo de chamadas apenas para um subconjunto de clientes.

Qualquer usuário pode instalar ou desinstalar um aplicativo?

Não, apenas os usuários com as permissões necessárias podem instalar e desinstalar um aplicativo. Saiba mais sobre como analisar as permissões de usuário.

Como posso criar uma propriedade de chamada personalizada?

Sim, é possível criar uma propriedade personalizada utilizando a API de properties.

Posso fazer uma chamada a partir de um objeto personalizado?

Sim, as integrações podem iniciar chamadas de objetos personalizados, desde que somente usem o SDK para criar a chamada. Cada integração precisará confirmar que somente usa o SDK de chamadas para criar chamadas e notificar o HubSpot no evento outgoingCall Primeiro, verifique se a integração usa o SDK de chamadas para criar engajamentos no evento outgoingCall:
outgoingCall({ createEngagement: true });
Se createEngagement for verdadeiro, saiba como atualizar as informações do seu aplicativo aqui. Veja o exemplo para todo o 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);