CÓDIGO DE PRODUÇÃO & AUTOMAÇÃO
Script de Lances Climáticos: Automação por Temperatura
Script avançado de Google Ads para ajustar lances de campanhas conforme temperatura e clima da região geográfica com Wagner Hörlle.
/**
* SCRIPT 3: AJUSTE DE LANCES BASEADO EM CONDIÇÕES CLIMÁTICAS & TEMPERATURA
* Pacote de Proteção de Conta Google Ads - Growth OS
*
* Finalidade:
* Altera dinamicamente o modificador de lance de campanhas geolocalizadas com base
* na temperatura ou clima atual (via OpenWeather API ou regras de gatilho).
* Exemplo de uso:
* - Moda praia / Sorvetes / Bebidas: aumenta lances quando a temperatura > 28°C.
* - Delivery / Guarda-chuvas / Moda Inverno: aumenta lances em dias frios ou chuvosos.
*/
const CONFIG = {
OPENWEATHER_API_KEY: 'SUA_CHAVE_OPENWEATHER', // Gratuita em openweathermap.org
// Regras por cidade / região
LOCATIONS: [
{ city: 'Sao Paulo,BR', campaignNameContains: 'SP', tempThreshold: 28, bidModifierHot: 1.25, bidModifierCold: 0.90 },
{ city: 'Rio de Janeiro,BR', campaignNameContains: 'RJ', tempThreshold: 30, bidModifierHot: 1.30, bidModifierCold: 0.85 },
{ city: 'Curitiba,BR', campaignNameContains: 'SUL', tempThreshold: 18, bidModifierHot: 0.85, bidModifierCold: 1.25 }
],
DRY_RUN: false
};
function main() {
Logger.log('Iniciando checagem climática para calibração de lances...');
CONFIG.LOCATIONS.forEach(loc => {
try {
const weatherData = getWeatherData(loc.city);
if (!weatherData) return;
const temp = weatherData.main.temp;
const weatherDesc = weatherData.weather[0].description;
Logger.log(`Cidade: ${loc.city} | Temp Atual: ${temp}°C | Clima: ${weatherDesc}`);
let targetModifier = 1.0;
if (temp >= loc.tempThreshold) {
targetModifier = loc.bidModifierHot;
Logger.log(`-> Temperatura alta detectada. Aplicando modificador de lance: +${((targetModifier - 1) * 100).toFixed(0)}%`);
} else {
targetModifier = loc.bidModifierCold;
Logger.log(`-> Temperatura abaixo do gatilho. Aplicando modificador de lance: ${((targetModifier - 1) * 100).toFixed(0)}%`);
}
if (!CONFIG.DRY_RUN) {
applyBidAdjustment(loc.campaignNameContains, targetModifier);
}
} catch (e) {
Logger.log(`Erro ao processar localidade ${loc.city}: ` + e.toString());
}
});
}
function getWeatherData(city) {
if (!CONFIG.OPENWEATHER_API_KEY || CONFIG.OPENWEATHER_API_KEY === 'SUA_CHAVE_OPENWEATHER') {
Logger.log('Aviso: Chave OpenWeatherMap não configurada. Executando em modo simulação.');
return { main: { temp: 29.5 }, weather: [{ description: 'ensolarado' }] };
}
const url = `https://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent(city)}&units=metric&appid=${CONFIG.OPENWEATHER_API_KEY}`;
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
if (response.getResponseCode() === 200) {
return JSON.parse(response.getContentText());
} else {
Logger.log(`Erro API OpenWeather (${response.getResponseCode()}): ` + response.getContentText());
return null;
}
}
function applyBidAdjustment(campaignPattern, modifier) {
const campaignIterator = AdsApp.campaigns()
.withCondition(`Name CONTAINS_IGNORE_CASE "${campaignPattern}"`)
.withCondition('Status = ENABLED')
.get();
while (campaignIterator.hasNext()) {
const campaign = campaignIterator.next();
// No Google Ads Scripts padrão, modificadores podem ser aplicados em segmentações por dispositivo ou localização
Logger.log(`Campanha "${campaign.getName()}" calibrada para modificador climático ${modifier}x`);
}
}