VoIP Client SDK
Cliente Python para a API interna (Laravel Nova) de painéis VoIP. Permite realizar automações de CRUD de usuários, ramais (subscribers), busca de DIDs, e extração de dados do dashboard.
Estrutura do Projeto
O repositório está organizado de forma a separar o código da biblioteca dos artefatos de apoio e desenvolvimento:
voip_client/
├── voip_client/ ← O pacote Python (código-fonte da biblioteca)
│ ├── __init__.py
│ ├── __main__.py
│ ├── client.py
│ ├── auth.py
│ ├── transport.py
│ ├── resources.py
│ ├── users.py
│ ├── subscribers.py
│ ├── dids.py
│ ├── dashboard.py
│ ├── exceptions.py
│ ├── py.typed
│ └── cli.py
│
├── tests/ ← Testes automatizados e smoke test
│ ├── test_voip_client.py
│ └── smoke_test.py
│
├── examples/ ← Scripts de exemplo de uso
│ └── basic_usage.py
│
├── pyproject.toml ← Metadados e dependências do pacote
├── requirements.txt ← Alternativa simples de dependências
├── INSTRUCOES_ATUALIZACAO.md ← Guia de manutenção, testes e release
├── README.md ← Esta documentação
├── .gitlab-ci.yml ← Pipeline CI/CD GitLab
├── .gitignore ← Arquivos ignorados pelo Git
└── .env.example ← Modelo de variáveis de ambiente
Instalação
Instalação via PyPI
pip install voip-client-sdk
Instalação de Desenvolvimento
Para instalar o pacote em modo editável junto com as dependências de teste e desenvolvimento:
pip install -e ".[dev]"
Instalação Simples
Para instalar apenas as dependências de execução básicas:
pip install -r requirements.txt
Configuração
Copie o arquivo .env.example para .env e preencha as variáveis de ambiente necessárias:
cp .env.example .env
Edite o arquivo .env:
VOIP_BASE_URL=https://voip.suaempresa.com.br
VOIP_EMAIL=seu_email@empresa.com.br
VOIP_PASSWORD=sua_senha_secreta
Como Usar
Biblioteca Python
Você pode importar e utilizar o cliente em seus scripts Python. Veja o exemplo em examples/basic_usage.py para uma demonstração completa:
import os
from voip_client import VoipClient
# Conectar e autenticar (lê automaticamente VOIP_EMAIL e VOIP_PASSWORD das env vars)
with VoipClient(base_url="https://voip.suaempresa.com.br") as client:
# Buscar dados do dashboard
dados = client.get_dashboard(range_days=30)
print(dados)
Manipulação de Cookies (Ex.: Banco de Dados)
Se você preferir persistir a sessão em um banco de dados em vez do arquivo cookies.txt, o cliente expõe a propriedade cookies e aceita o parâmetro initial_cookies:
from voip_client import VoipClient
# Carrega cookies previamente salvos do seu banco de dados
cookies_salvos = obter_cookies_do_banco() # Deve retornar um Dict[str, str] ou None
with VoipClient(
base_url="https://voip.suaempresa.com.br",
initial_cookies=cookies_salvos,
) as client:
# O cliente usará os cookies informados. Se forem válidos, não realizará login de novo.
dados = client.get_dashboard()
# Ao final da execução, armazene os cookies atualizados no banco
cookies_atualizados = client.cookies
salvar_cookies_no_banco(cookies_atualizados)
Interface de Linha de Comando (CLI)
O pacote também pode ser executado diretamente via terminal:
# Ajuda geral
voip-client --help
# Efetuar login e gerar/atualizar cookies.txt
voip-client --base-url "https://voip.suaempresa.com.br" login
# Consultar o dashboard
voip-client --base-url "https://voip.suaempresa.com.br" dashboard --range 30
# Rodar um teste CRUD completo (Smoke Test) contra o painel
voip-client --base-url "https://voip.suaempresa.com.br" crud-test --did-mask "0113"
Executando os Testes
Os testes unitários utilizam mocks para evitar chamadas de rede reais, rodando instantaneamente:
pytest tests/
⚠️ Aviso de Segurança
verify_ssl
O parâmetro verify_ssl controla se o certificado TLS do servidor é validado.
O padrão é True (seguro). Use verify_ssl=False somente em ambientes
de homologação com certificado autoassinado e nunca em produção — desabilitar a
validação expõe credenciais de login e cookies de sessão a ataques MITM.
# ✅ Produção (padrão seguro)
client = VoipClient(base_url="https://voip.empresa.com.br")
# ⚠️ Homologação com certificado autoassinado
client = VoipClient(base_url="https://homolog.empresa.com.br", verify_ssl=False)
Senhas de ramais no dashboard
O método get_dashboard() não inclui senhas de ramais por padrão. Para
obter as senhas, passe include_passwords=True explicitamente:
# Padrão: sem senhas (recomendado para uso geral / logging)
dados = client.get_dashboard()
# Com senhas: use somente quando necessário e nunca logue o resultado
dados_com_senhas = client.get_dashboard(include_passwords=True)
Dados sensíveis em logs
Campos como password e cpf são automaticamente mascarados (***) nas
mensagens de erro geradas pelo cliente. Ainda assim, evite logar em nível
DEBUG em produção, pois outros dados de resposta (como tokens) podem aparecer.
Metadata
Release files for voip-client-sdk 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| voip_client_sdk-0.2.0.tar.gz | 22.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| voip_client_sdk-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.5 kB
Release files / voip_client_sdk-0.2.0.tar.gz
| Download URL | voip_client_sdk-0.2.0.tar.gz |
|---|---|
| Size | 22.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b991cb1aa83fade1301e1adcbae38207ea95871dfb6f97142c0a2f19b2218267
|
|
BLAKE2b-256 checksum How to use checksums |
b7bf579d2aeb8134115edd905f3cae63ea4c468872520f37b7e322358fc5280d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / voip_client_sdk-0.2.0-py3-none-any.whl
| Download URL | voip_client_sdk-0.2.0-py3-none-any.whl |
|---|---|
| Size | 21.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0a012c9eeaa5f4541d2fc2827a282d860e23d54f2346e34e3916dfea2f19fd79
|
|
BLAKE2b-256 checksum How to use checksums |
5621739e443c08799f8795e13536b627391d4939a16db3e641f0ed8b8464c0da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|