売上データから週次マーケティングメールを自動生成するAIアシスタントの作り方

売上データから週次マーケティングメールを自動生成するAIアシスタントの作り方

Python、OpenAI GPT、Google Sheets APIを使用して、売上データを魅力的なコンテンツに変換する自動化の方法を学びましょう。

Subash RIjal
Subash RIjal
Software Developer
2025年5月29日
3 分で読めます
Share:

Table of Contents

AIマーケティングメールアシスタントの構築

マーケターとして、毎週の売上実績をメールにまとめるのに何時間も費やしていました。この時間のかかる反復作業は、自動化に最適なタスクでした。そこで、売上データから自動的に週次マーケティングメールを生成するAIアシスタントを構築しました。その方法をご紹介します!

構築するもの

以下の機能を持つPythonスクリプトを作成します:

  • Google Sheetsから売上データを取得
  • GPTを使用して魅力的な要約を生成
  • マーケティングメールの形式に整形
  • 週次で自動実行
graph LR
    A[Google Sheets] --> B[Pythonスクリプト]
    B --> C[OpenAI GPT]
    C --> D[メール形式]
    D --> E[Gmail/HubSpot]

Google Sheetsと売上データのセットアップ

まず、売上データを含むGoogle Sheetを作成します。以下は基本的な構造です:

日付,製品,売上,販売数,地域
2024-02-01,製品A,150000,3,北部
2024-02-02,製品B,75000,5,南部
2024-02-03,製品A,200000,4,東部

Google Sheets APIへの接続

Google Sheetsとの接続をセットアップしましょう:

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from google.oauth2 import service_account

def setup_sheets_api():
    # サービスアカウントファイルから認証情報を読み込み
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
    creds = service_account.Credentials.from_service_account_file(
        'service-account.json', scopes=SCOPES)
    
    # サービスの構築
    service = build('sheets', 'v4', credentials=creds)
    return service

def get_sales_data(service, spreadsheet_id, range_name):
    try:
        result = service.spreadsheets().values().get(
            spreadsheetId=spreadsheet_id,
            range=range_name
        ).execute()
        
        rows = result.get('values', [])
        return rows
    except Exception as e:
        print(f"データ取得エラー: {e}")
        return None

GPTを使用した売上データの処理と要約

OpenAIのGPTを使用してメールコンテンツを生成します:

from openai import OpenAI
import pandas as pd

def prepare_sales_summary(sales_data):
    # DataFrameに変換して処理を簡単に
    df = pd.DataFrame(sales_data[1:], columns=sales_data[0])
    
    # 主要な指標を計算
    total_revenue = df['売上'].astype(float).sum()
    top_product = df.groupby('製品')['売上'].sum().idxmax()
    total_units = df['販売数'].astype(int).sum()
    
    return {
        'total_revenue': total_revenue,
        'top_product': top_product,
        'total_units': total_units
    }

def generate_email_content(metrics):
    client = OpenAI()
    
    prompt = f"""今週の売上を要約するプロフェッショナルなマーケティングメールを作成してください:
    - 総売上: ¥{metrics['total_revenue']:,.0f}
    - 売上トップ製品: {metrics['top_product']}
    - 総販売数: {metrics['total_units']}
    
    魅力的な内容で、主要な成果を強調し、前向きな展望を含めてください。
    """
    
    try:
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{
                "role": "system",
                "content": "あなたはプロフェッショナルなマーケティングコピーライターです。"
            }, {
                "role": "user",
                "content": prompt
            }],
            temperature=0.7
        )
        
        return response.choices[0].message.content
    except Exception as e:
        print(f"コンテンツ生成エラー: {e}")
        return None

メールの形式設定と送信

Gmail APIを使用してメールを形式化し送信する関数を作成します:

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from googleapiclient.discovery import build

def send_email(service, sender, to, subject, content):
    message = MIMEMultipart()
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    
    # HTML本文の追加
    html_content = f"""
    <html>
        <body>
            <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
                {content}
                <hr>
                <p style="color: #666; font-size: 12px;">
                    このメールはAIマーケティングアシスタントによって生成されました
                </p>
            </div>
        </body>
    </html>
    """
    
    message.attach(MIMEText(html_content, 'html'))
    
    try:
        raw_message = base64.urlsafe_b64encode(message.as_bytes()).decode('utf-8')
        service.users().messages().send(userId='me', body={'raw': raw_message}).execute()
        return True
    except Exception as e:
        print(f"メール送信エラー: {e}")
        return False

週次スケジュールでの自動化

最後に、Pythonのscheduleライブラリを使用して週次実行を設定します:

import schedule
import time

def weekly_report_job():
    # APIのセットアップ
    sheets_service = setup_sheets_api()
    gmail_service = setup_gmail_api()
    
    # 売上データの取得
    sales_data = get_sales_data(sheets_service, SPREADSHEET_ID, 'Sheet1!A1:E')
    if not sales_data:
        return
    
    # コンテンツの生成
    metrics = prepare_sales_summary(sales_data)
    content = generate_email_content(metrics)
    if not content:
        return
    
    # メール送信
    send_email(
        gmail_service,
        'your-email@company.com',
        'marketing-team@company.com',
        '週次売上実績レポート',
        content
    )

# ジョブのスケジュール設定
schedule.every().monday.at("09:00").do(weekly_report_job)

while True:
    schedule.run_pending()
    time.sleep(60)

エラー処理とベストプラクティス

  1. APIレート制限:

    • API再試行には指数バックオフを実装
    • 適切な場合はAPIレスポンスをキャッシュ
    • API使用量を監視
  2. データ検証:

    • 売上データの形式を常に検証
    • 欠損データや不正な形式のデータに適切に対応
    • データの不整合をログに記録
  3. セキュリティ:

    • API キーは環境変数に保存
    • 最小限の権限でサービスアカウントを使用
    • 定期的に認証情報をローテーション

まとめ

AIを使用して週次マーケティングメールを自動化することで:

  • 毎週の手作業の時間を節約
  • ステークホルダーとの一貫したコミュニケーションを維持
  • 戦略的なマーケティング施策に注力可能

このソリューションは以下のように拡張可能です:

  • カスタムチャートやビジュアライゼーション
  • 複数のデータソース
  • メールコンテンツのA/Bテスト
  • 受信者に基づくパーソナライゼーション

自分で試してみませんか?小規模なデータセットから始めて、徐々に機能を拡張していきましょう。自動化の可能性は無限大です!

リソース

自動化を楽しみましょう!🚀

関連投稿

Continue your learning journey with these handpicked articles

AWS EC2へのLaravelアプリケーションのデプロイ方法
Tutorials

AWS EC2へのLaravelアプリケーションのデプロイ方法

AWS EC2インスタンスにLaravelアプリケーションをデプロイするための包括的なガイド。サーバー設定、データベース構成、デプロイのベストプラクティスを網羅しています。

2 分で読めます
Read More →
Laravelアプリケーションをデプロイする方法
Tutorials

Laravelアプリケーションをデプロイする方法

Laravelアプリケーションを本番環境にデプロイするためのステップバイステップガイド

1 分で読めます
Read More →
Astroチュートリアル: 多言語ブログのセットアップ
Tutorials

Astroチュートリアル: 多言語ブログのセットアップ

Astroを使用して多言語ブログをセットアップするためのステップバイステップガイド

1 分で読めます
Read More →