MDH GROUP · BLOG

Campanhas sazonais: atualização em lote de destinos QR dinâmicos via API (Guia PHP)

Imagine isto: a sua cadeia de restaurantes imprimiu centenas de displays de mesa e cartazes com códigos QR que apontam para promoções. Agora começa a época de verão — várias ofertas precisam ser substituídas ou ativadas por agendamento. Reimprimir é caro e demorado.

← Todos os artigos

Campanhas sazonais: atualização em lote de destinos QR dinâmicos via API (Guia PHP)

Um problema prático: o menu de verão está impresso — mas as ofertas mudam

Imagine isto: a sua cadeia de restaurantes imprimiu centenas de displays de mesa e cartazes com códigos QR que apontam para promoções. Agora começa a época de verão — várias ofertas precisam ser substituídas ou ativadas por agendamento. Reimprimir é caro e demorado. A solução: atualizar centralmente destinos QR dinâmicos em lote via API, sem alterar uma única peça impressa.

Por que faz sentido um update em lote via API

  • O código QR impresso permanece inalterado; você altera apenas o destino.
  • Gestão centralizada: mídia, branding e destinos ficam num único lugar.
  • Escalável rapidamente: campanhas sazonais para centenas ou milhares de shortlinks num único processo.
  • Integração: pode ser automatizado a partir do seu ERP, CMS ou de um planeador de marketing.

Pré‑requisitos e procedimento

Antes de começar, esclareça estes pontos:

  • Acesso à API: token/chave da API e a URL base da sua instância Linkentra (Cloud ou Self‑Hosted).
  • Mapeamento de campos: quais campos a API espera (URL de destino, título, slug/identificador, ativo/desativado, regras agendadas). Ajuste os payloads de exemplo conforme a documentação da sua API.
  • Tamanho do lote: teste com lotes pequenos (p.ex. 50–200) e aumente o tamanho conforme os rate limits.
  • Backup: exporte os shortlinks/IDs existentes antes das alterações (CSV/JSON), para que possa planear um rollback.

Caso prático: fluxo para campanha sazonal

Sequência de passos em resumo:

  • Exportar todos os shortlinks relevantes (p.ex. categoria "Sommerpromo") com IDs.
  • Criar um conjunto de dados com as novas URLs de destino e opcionalmente mídia/meta.
  • Atualização em lote via API: atribuir novos destinos, ajustar título/branding, definir agendamento.
  • Monitorização: verificações de códigos de estado, controlo simples por scanner após publicação.

Exemplo em PHP: criação em lote de destinos QR

O script abaixo serve como modelo. Substitua $apiBase, $token e os endpoints pelos dados reais da documentação do seu Linkentra.


// Configuração
$apiBase = 'https://IHRE‑LINKENTRA‑INSTANZ'; // URL base da API da sua instância
$token = 'MEIN_API_TOKEN';
$batchSize = 100; // Quantidade por lote
// Dados de exemplo: um array com destinos para a temporada
$items = [
['slug'=>'sommer-angebot-1', 'target'=>'https://example.com/sommer/angebot1', 'title'=>'Oferta de Verão 1'],
['slug'=>'sommer-angebot-2', 'target'=>'https://example.com/sommer/angebot2', 'title'=>'Oferta de Verão 2'],
// ... mais entradas
];
function apiRequest($method, $path, $data = null) {
global $apiBase, $token;
$url = rtrim($apiBase, '/') . '/' . ltrim($path, '/');
$ch = curl_init($url);
$headers = [ 'Authorization: Bearer ' . $token, 'Accept: application/json' ];
if ($data !== null) {
$payload = json_encode($data);
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Definir método
switch (strtoupper($method)) {
case 'POST': curl_setopt($ch, CURLOPT_POST, true); break;
case 'PUT': curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); break;
case 'PATCH': curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH'); break;
case 'DELETE': curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); break;
}
$resp = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($resp === false) { $err = curl_error($ch); curl_close($ch); throw new Exception('Erro cURL: '.$err); }
curl_close($ch);
return ['http'=>$http, 'body'=>json_decode($resp, true)];
}
// Criação em lote
$chunks = array_chunk($items, $batchSize);
foreach ($chunks as $i => $chunk) {
foreach ($chunk as $entry) {
$payload = [
'slug' => $entry['slug'],
'target' => $entry['target'],
'title' => $entry['title'],
// outros campos conforme necessário: branding, media_id, start_at, end_at
];
$res = apiRequest('POST', '/targets', $payload); // ajustar o caminho
if ($res['http'] >= 200 && $res['http'] < 300) {
// Sucesso: guardar ou registar o Id
// Exemplo: file_put_contents('created_ids.csv', $res['body']['id']."\n", FILE_APPEND);
} else {
// Tratamento de erro: Retry/Log
}
}
// pequena pausa entre lotes para respeitar limites de taxa
sleep(1);
}
?>

Exemplo em PHP: Atualização em massa (p.ex. para novas URLs de destino para a temporada)

Se pretende atualizar shortlinks existentes, normalmente trabalha com os IDs que exportou quando os criou.


// Exemplo: $updates = [ ['id'=>123, 'target'=>'https://...'], ... ];
foreach ($updates as $u) {
$payload = ['target' => $u['target']];
$res = apiRequest('PATCH', '/targets/'.$u['id'], $payload); // Ajuste o caminho/nomes de campo conforme necessário
if ($res['http'] >= 200 && $res['http'] < 300) {
// OK
} else {
// Registre e implemente retry se necessário
}
usleep(200000); // Pausa de 200ms }
?>

Exemplo em PHP: Desativar (temporariamente) ou Apagar

Dependendo do comportamento desejado, desative links (o shortlink permanece, mas não redireciona) ou apague o link.


// Desativar via PATCH
foreach ($idsToDeactivate as $id) {
$res = apiRequest('PATCH', '/targets/'.$id, ['active' => false]);
// Ou: apiRequest('DELETE', '/targets/'.$id); se desejar apagar
}
?>

CSV em massa: abordagem híbrida (gerar CSV, usar API/import)

Linkentra oferece opções de importação em massa (CSV/JSON) como alternativa ao loop puro de API. Um procedimento comprovado:

  • 1) Gere um CSV com colunas para slug,target,title,start_at,end_at.
  • 2) Valide o CSV localmente (duplicados, URLs inválidas, slugs em falta).
  • 3) Faça upload do ficheiro via upload da API ou através da interface web.

Trecho PHP para gerar o CSV (exemplo):


$fp = fopen('bulk_import.csv', 'w');
fputcsv($fp, ['slug','target','title','start_at','end_at']);
foreach ($items as $row) { fputcsv($fp, [$row['slug'],$row['target'],$row['title'],'','']); }
fclose($fp);
// Depois, upload via API ou botão na interface de administração ?>

Dicas práticas para automação robusta

  • Tamanho do batch: teste diferentes tamanhos — muito grande = timeouts, muito pequeno = tempos de execução longos.
  • Trate respostas HTTP e códigos de status; implemente estratégia de backoff para 429/5xx.
  • Idempotência: use slugs ou IDs externas para que requests repetidos não gerem duplicados.
  • Logging & Backup: armazene URLs de destino antigas e IDs de links para rollback rápido.
  • Agendamento: se a API suportar campos de tempo, defina start_at/end_at em vez de ativar manualmente.
  • Segurança: guarde tokens de API de forma segura (variáveis de ambiente, Secrets Manager).

Integração no dia a dia

Para equipas de marketing e operadores isto significa: planeie campanhas como um conjunto de dados (CSV ou tabela DB), automatize a publicação via script e monitorize as leituras com os relatórios de uso. Em instalações self‑hosted, os administradores de TI mantêm a soberania dos dados; a opção cloud permite um onboarding mais rápido.

Conclusão e próximos passos

Atualizações em massa pela API simplificam mudanças sazonais: evitam reimpressão, permitem gerir destinos centralmente e programar publicações. Utilize os modelos PHP apresentados como ponto de partida, ajuste os caminhos e os nomes dos campos à sua API Linkentra e teste com pequenos grupos antes de implementar em larga escala.

Experimente agora: descubra o Linkentra e teste no seu ambiente: https://linkentra.de

Se desejar, posso ajustar os exemplos de script à sua documentação real da API Linkentra (caminho do endpoint, nomes de campos esperados, tipo de autenticação) — forneça-me os detalhes e eu prepararei um script de integração pronto.

Próximo passo

Experimente o Linkentra

Códigos QR dinâmicos com controlo sobre alojamento e dados: altere conteúdos posteriormente, ajuste a marca, gere media de forma centralizada e analise as digitalizações – disponível tanto em infraestrutura própria (Self‑Hosted) como imediatamente na nuvem Linkentra. Funcionalidades dependentes da edição para equipas, API e white‑label.

Descobrir o Linkentra