API de SMS em Node.js: exemplo com fetch
No Node.js 18 ou mais novo, o fetch já vem embutido, então a integração com a API do Flash SMS não precisa de pacote extra. Uma função monta a URL com URLSearchParams, faz a chamada e devolve o texto, e um laço com await consulta o status até o código chegar.
- Guarde a chave.
- Crie a função flash.
- Compre e separe.
- Espere com um laço.
- Finalize.
Passo a passo
API de SMS em Node.js: exemplo com fetch
Guarde a chave
Leia a chave de process.env.FLASH_KEY. Num arquivo .env local, use o carregador da sua preferência, e nunca envie esse arquivo para o repositório.
Crie a função flash
Ela recebe um objeto de parâmetros, junta com api_key em new URLSearchParams, faz await fetch(API + '?' + query) e devolve (await res.text()).trim().
Compre e separe
Chame await flash({ action: 'getNumber', service: 'wa', country: 73 }). Se não começar com ACCESS_NUMBER, lance um erro; senão, faça const [, id, numero] = r.split(':').
Espere com um laço
Num for de até 240 voltas, aguarde 5 segundos com uma Promise e setTimeout, chame getStatus com o id e pare em STATUS_OK ou STATUS_CANCEL.
Finalize
Ao receber o código, chame flash({ action: 'setStatus', id, status: 6 }).
Onde rodar esse código
Esse código é de servidor. Em Express, Fastify ou numa rota de API do Next.js, a rota de compra chama getNumber, grava a ativação e responde logo ao navegador. A espera pelo código fica num processo separado, como um worker com fila, ou num setInterval no próprio servidor que percorre as ativações abertas.
Não faça essas chamadas no React, no Vue ou em qualquer código que roda no navegador. A chave ficaria visível para quem abrir as ferramentas do navegador.
Tratando as respostas
- Use startsWith para checar ACCESS_NUMBER, STATUS_OK e ACCESS_BALANCE.
- Para getNumberV2 e getPrices, a resposta é JSON: use res.json() em vez de res.text().
- Trate NO_NUMBERS mostrando outra opção ao usuário, como outro servidor com server: 2 ou 3.
- Em ERROR_SQL, espere alguns segundos e repita.
Detalhes que evitam bugs
O valor de status e de country pode ir como número, porque URLSearchParams converte para texto. O número volta com o código do país, como 5511987654321; se for mostrar para digitação no WhatsApp, separe o 55. Guarde o id como string, porque ele é um identificador e não deve ser somado nem arredondado.
Em TypeScript, crie um tipo para os estados da ativação (aguardando, código recebido, cancelada, finalizada) e converta a resposta da API para esse tipo num único lugar.
Dúvidas
Perguntas frequentes
Funciona em versões antigas do Node?
Antes do Node 18 não há fetch nativo. Use um pacote como node-fetch ou axios com a mesma lógica.
Posso usar POST em vez de GET?
Sim. A documentação aceita GET ou POST no mesmo endereço, com os mesmos parâmetros.
Existe exemplo pronto?
Sim. A página da API de revenda tem o arquivo exemplo.mjs na aba JavaScript (Node), com este mesmo fluxo.
Dá para rodar em funções serverless?
A compra, sim. A espera de até 20 minutos costuma passar do tempo limite dessas funções, então use uma função agendada que consulta as ativações abertas.
API e integrações
Continue lendo
API de SMS em PHP: comprar número e receber o código
http_build_query, file_get_contents e um laço com sleep.
Saldo para revendedores: como funciona o saldo usado pela API
Um saldo só para painel e API, debitado por número comprado.
Número virtual para agências de marketing: como organizar as contas dos clientes
Verificação sem o chip da equipe, contas em nome do cliente e acesso documentado.
Google Play Console: como verificar o telefone da conta de desenvolvedor
O número de contato do desenvolvedor é confirmado por código e precisa continuar seu.
API de revenda de números virtuais: como começar a revender
Padrão sms-activate, preços em reais e saldo por Pix.
API de SMS para desenvolvedores: receba códigos por HTTP
Compre números e leia o SMS com chamadas HTTP simples.
Receba seu primeiro código hoje
Cadastro em menos de um minuto, recarga por Pix, cartão ou cripto e o SMS no painel. Se não chegar, o valor volta.
Criar conta grátis