概要
このコードは、Google Adsのキャンペーンレポートから前日の広告費を取得し、それぞれのキャンペーン費用と合計費用を整形してSlackに通知するGoogle Apps Scriptです。コピペして使えます。
コードの概要
main関数
- SlackのBotトークンとチャンネルIDを設定
- タイムゾーンを日本標準時に設定
- 前日のGoogle Adsキャンペーンデータを取得
- キャンペーンごとの費用と合計費用を計算
- 結果をSlackへ通知
getGoogleAdsData関数
- Google Adsのレポート機能を使い、前日(YESTERDAY)のデータを取得
- 有効なキャンペーンで費用が0より大きいもののみ取得
- 取得したデータをキャンペーン名と費用に分けて格納
sendMessageToSlack関数
- Slack APIにメッセージを送信
- Slack APIのURLは
https://slack.com/api/chat.postMessageを利用 - 送信が失敗した場合はエラーをログに記録
コード例(実働です)
function main() {
const slackBotToken = "YOUR_SLACK_BOT_TOKEN";
const slackChannel = "YOUR_SLACK_CHANNEL_ID";
const timezone = "Asia/Tokyo";
const date = Utilities.formatDate(new Date(Date.now() - 86400000), timezone, "yyyy-MM-dd");
const campaignData = getGoogleAdsData();
const totalCost = campaignData.reduce((sum, c) => sum + c.cost, 0);
const campaignMessages = campaignData
.map(c => `${c.name}: ${Math.round(c.cost).toLocaleString("ja-JP")}円`)
.join("\n");
const message = `${date} 広告費\n---\n${campaignMessages}\n---\n合計:${totalCost.toLocaleString("ja-JP")}円`;
sendMessageToSlack(slackBotToken, slackChannel, message);
}
function getGoogleAdsData() {
const query = [
"SELECT CampaignName, Cost",
"FROM CAMPAIGN_PERFORMANCE_REPORT",
"WHERE CampaignStatus = 'ENABLED' AND Cost > 0",
"DURING YESTERDAY"
].join(" ");
const rows = AdsApp.report(query).rows();
const campaigns = [];
while (rows.hasNext()) {
const row = rows.next();
campaigns.push({
name: row["CampaignName"],
cost: parseFloat(row["Cost"].replace(/,/g, ''))
});
}
return campaigns;
}
function sendMessageToSlack(token, channel, text) {
const options = {
method: "post",
contentType: "application/json",
headers: { "Authorization": `Bearer ${token}` },
payload: JSON.stringify({ channel, text })
};
try {
const response = UrlFetchApp.fetch("https://slack.com/api/chat.postMessage", options);
Logger.log(response.getContentText());
} catch (error) {
Logger.log("Slackへの送信に失敗しました: " + error);
}
}