Google Adsキャンペーンレポートから前日の広告費をSlackへ通知するGoogle Apps Scriptコード【コピペ可】

この記事の内容について、業務や開発でお困りの場合は個別に対応できます。

概要
このコードは、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);
  }
}

ZIDOOKA!

この記事の内容について、対応できます

この記事に関連する技術トラブルや開発上の問題について個別対応を行っています。

個別対応は3,000円〜 内容・工数により事前にお見積りします
最後までお読みいただきありがとうございました

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AI活用に関するポリシー

当サイトでは、記事の執筆補助にAIを活用する場合がありますが、全面的な委任は行いません。