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)
エラー処理とベストプラクティス
-
APIレート制限:
- API再試行には指数バックオフを実装
- 適切な場合はAPIレスポンスをキャッシュ
- API使用量を監視
-
データ検証:
- 売上データの形式を常に検証
- 欠損データや不正な形式のデータに適切に対応
- データの不整合をログに記録
-
セキュリティ:
- API キーは環境変数に保存
- 最小限の権限でサービスアカウントを使用
- 定期的に認証情報をローテーション
まとめ
AIを使用して週次マーケティングメールを自動化することで:
- 毎週の手作業の時間を節約
- ステークホルダーとの一貫したコミュニケーションを維持
- 戦略的なマーケティング施策に注力可能
このソリューションは以下のように拡張可能です:
- カスタムチャートやビジュアライゼーション
- 複数のデータソース
- メールコンテンツのA/Bテスト
- 受信者に基づくパーソナライゼーション
自分で試してみませんか?小規模なデータセットから始めて、徐々に機能を拡張していきましょう。自動化の可能性は無限大です!
リソース
自動化を楽しみましょう!🚀