Busca K 
Appearance
Essa integração permite que você utilize o Webphone próprio para fazer chamadas telefônicas diretamente do seu CRM. Com essa integração, você pode fazer chamadas telefônicas, registrar chamadas, enviar mensagens de voz e muito mais.
Primeiramente, você precisa criar uma nova conta que será única para a sua empresa. Para isso, acesse o Portal da Api4Com, preencha o formulário de cadastro e clique em "Criar conta".
Você também poder criar uma nova conta através da API. Para isso, utilize o seguinte código:
Os campos obrigatórios são:
organization_name: Nome da empresadomain: Domínio da empresa na Api4Com, deve ser único e terminar com .api4com.comemail: E-mail do usuário, deve ser únicopassword: Senha do usuáriophone: Número de telefone da empresacrm: CRM utilizado pela empresa user_quantity: Quantidade de usuários const axios = require('axios');
const url = 'https://api.api4com.com/api/v1/accounts/signup';
const payload = {
  organization_name: 'Nome da Empresa',
  domain: 'seudominio.api4com.com',
  email: 'email@usuario.com',
  password: 'senha123',
  phone: '+554833328530',
  crm: 'Outros',
  user_quantity: '1-5'
};
axios.post(url, payload).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error);
});Resposta de sucesso:
{
  "status": 201,
  "message": "Cadastro realizado com sucesso!"
}Importante:
Para criar um Token de Acesso que nunca expira, utilize o seguinte código:
const axios = require('axios');
const url = 'https://api.api4com.com/api/v1/users/accessTokens';
const config = {
  headers: {
    'Authorization': '<token>'
  }
};
const payload = {
  ttl: -1
};
axios.post(url, payload, config).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error);
});Resposta de sucesso:
{
  "id": "YggyHfrLEHAWmKiUFbXsT93Tkw2xjwHUbwJ6mgw4Vz5YGubReFGw34HmhrhZDUBM",
  "ttl": -1,
  "created": "2025-01-01T00:00:00.000
}Importante:
Authorization.Para configurar o Webhook é necessário criar uma Integração de Usuário via API.
Segue um exemplo de como criar uma Integração de Usuário:
const axios = require('axios');
const url = 'https://api.api4com.com/api/v1/integrations';
const config = {
  headers: {
    'Authorization': '<token>'
  }
};
const payload = {
  gateway: 'integration-test',
  webhook: true,
  webhookConstraint: {
    metadata: {
      gateway: 'integration-test'
    }
  },
  metadata: {
    webhookUrl: 'https://seu-webhook.com/callback',
    webhookVersion: 'v1.4',
    webhookTypes: ['channel-hangup']
  }
};
axios.patch(url, payload, config).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error);
});Resposta de sucesso:
{
  "id": 123,
  "gateway": "integration-test",
  "webhook": true,
  "webhookConstraint": {
    "metadata": {
      "gateway": "integration-test"
    }
  },
  "metadata": {
    "webhookUrl": "https://seu-webhook.com/callback",
    "webhookVersion": "v1.4",
    "webhookTypes": ["channel-hangup"]
  }
}Importante:
gateway deve ser preenchido com o nome do seu gateway.webhookUrl deve ser preenchido com a URL do seu webhook.metadata.Para criar novos ramais para os usuários, utilize a API de Ramais.
Segue um exemplo de como criar um novo ramal:
const axios = require('axios');
const url = 'https://api.api4com.com/api/v1/extensions';
const config = {
  headers: {
    'Authorization': '<token>'
  }
};
// Descobrir qual é o próximo ramal disponível
async function getNextAvailableExtension() {
  const POSSIBLE_EXTENSIONS = [...Array(99000).keys()].map(i => String(i + 1000))
  const urlExtensions = 'https://api.api4com.com/api/v1/extensions?filter=%7B%22fields%22%3A%7B%22ramal%22%3Atrue%7D%7D'
  const availableExtensions = await axios.get(urlExtensions, config).then(response => {
    return response.data.map(ext => ext.ramal)
  }).then(extensions => {
    return POSSIBLE_EXTENSIONS.filter(extension => !extensions.includes(extension))
  }).catch(error => console.error(error))
  if (availableExtensions.length > 0) {
    return availableExtensions.shift()
  } else {
    throw new Error('No available extensions')
  }
}
async function createExtension() {
  const payload = {
    ramal: await getNextAvailableExtension(),
    senha: 'PwDLooL',
    bina: '4833328530',
    first_name: 'Nome',
    last_name: 'do Usuário',
    email_address: 'email@usuario2.com',
    gravar_audio: 1
  }
  axios.post(url, payload, config).then(response => {
    console.log(response.data);
  }).catch(error => {
    console.error(error);
  });
};
createExtension();Resposta de sucesso:
{
  "id": 123,
  "ramal": "1001",
  "senha": "PwDLooL",
  "bina": "4833328530",
  "first_name": "Nome",
  "last_name": "do Usuário 2",
  "email_address": "email@usuario2.com",
  "gravar_audio": 1
}Importante:
Para criar um Webphone, utilize a documentação do VoIP / SIP.
Importante:
Para realizar uma chamada, utilize o seguinte código:
const axios = require('axios');
const url = 'https://api.api4com.com/api/v1/dialer';
const config = {
  headers: {
    'Authorization': '<token>'
  }
};
const payload = {
  extension: '1000',
  phone: '+554833328530',
  metadata: {
    gateway: 'integration-test',
    userId: 123,
    entityId: 456
  }
};
axios.post(url, payload, config).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error);
});Resposta de sucesso:
{
  "id": "bdf199fa-f85b-4378-80cd-0ac28c1355e9",
  "message": "successfull"
}Importante:
Authorization deve ser preenchido com o token de acesso gerado.extension deve ser preenchido com o número do ramal do usuário que irá realizar a chamada, neste caso, o número do seu ramal, que você guardou ao instalar o Webphone.phone deve ser preenchido com o número de telefone que você deseja ligar.metadata deve ser preenchido com os dados que você deseja enviar para o webhook.Quando uma chamada é finalizada, o webhook é acionado e envia uma requisição POST para a URL configurada. O corpo da requisição é um JSON com as informações da chamada.
Segue um exemplo de webhook:
{
  "version": "v1.4",
  "eventType": "channel-hangup",
  "id": "2ee13fa4-975c-499d-bbb8-5177ff418316",
  "domain": "seudominio.api4com.com",
  "direction": "outbound",
  "caller": "1000",
  "called": "04833328530",
  "startedAt": "2025-01-01 00:00:00",
  "answeredAt": "2025-01-01 00:00:05",
  "endedAt": "2025-01-01 00:00:10",
  "duration": 5,
  "hangupCause": "NORMAL_CLEARING",
  "hangupCauseCode": "16",
  "recordUrl": "https://listener.api4com.com/files/listen/2ee13fa4-975c-499d-bbb8-5177ff418316.mp3",
  "metadata": {
    "gateway": "integration-test",
    "userId": 123,
    "entityId": 456
  }
}Os campos retornados são:
version indica a versão do webhook.eventType indica o tipo de evento.id é o identificador da chamada.domain é o domínio da empresa.direction indica se a chamada é de entrada ou saída.caller é o número do ramal que realizou a chamada.called é o número de telefone que recebeu a chamada.startedAt é a data e hora de início da chamada.answeredAt é a data e hora que a chamada foi atendida.endedAt é a data e hora que a chamada foi finalizada.duration é a duração da chamada em segundos.hangupCause é o motivo do desligamento da chamada.hangupCauseCode é o código do motivo do desligamento da chamada.recordUrl é a URL do arquivo de áudio da chamada.metadata é um objeto com os dados enviados na requisição de chamada.Agora para continuar a integração, você pode:
Neste guia, você aprendeu como integrar a Api4Com com o seu CRM utilizando o Webphone próprio. Com essa integração, você pode fazer chamadas telefônicas, registrar chamadas, enviar mensagens de voz e muito mais. Caso tenha alguma dúvida, entre em contato com o nosso suporte.
A documentação completa da Api4Com está disponível em https://docs.api4com.com.
Se você tiver alguma dúvida ou precisar de ajuda, entre em contato com o suporte da Api4Com.