Loading
Loading
يمكنك استخدام Claude في n8n بطريقتين: عبر Anthropic Node المدمج، أو عبر HTTP Request Node للتحكم الكامل.
claude-haiku-4-5-20251001 (سرعة + تكلفة منخفضة)Method: POST
URL: https://api.anthropic.com/v1/messages
Headers:
x-api-key: {{ $credentials.anthropicApi.apiKey }}
anthropic-version: 2023-06-01
content-type: application/json
Body (JSON):
{
"model": "claude-haiku-4-5-20251001",
"max_tokens": 600,
"system": "{{ $json.system_prompt }}",
"messages": [
{
"role": "user",
"content": "{{ $json.user_message }}"
}
]
}
// Prompt ديناميكي يستخدم بيانات Gmail Trigger
{
"model": "claude-haiku-4-5-20251001",
"max_tokens": 500,
"messages": [{
"role": "user",
"content": "من: {{ $('Gmail Trigger').first().json.from }}\nالموضوع: {{ $('Gmail Trigger').first().json.subject }}"
}]
}
بعد استدعاء Claude:
// استخراج النص من رد Claude
{{ $json.content[0].text }}
// إذا أرجع Claude JSON نظيف
{{ JSON.parse($json.content[0].text).category }}
{{ JSON.parse($json.content[0].text).priority }}
[Gmail Trigger]
↓
[HTTP Request: Claude API]
يُرسل: from + subject + body
↓
[Set Node]
analysis = JSON.parse(رد Claude)
priority = analysis.priority
↓
[IF Node: priority == "high"?]
↓ نعم ↓ لا
[Slack Alert] [Gmail Auto Reply]
↓
[Google Sheets: تسجيل]
أضف Wait Node بين طلبات Claude المتعاقبة:
[Loop] → [Claude API] → [Wait: 1s] → [Next Item]
# ربط Claude API بـ n8n — Python Simulation
# Connecting Claude API to n8n — Full Workflow Simulation
import os
import json
import anthropic
client = anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY", "your-key"))
SYSTEM_PROMPT = """أنت نظام ذكي لتصنيف البريد الإلكتروني.
حلّل البريد وأعد JSON بهذا الشكل فقط:
{
"category": "technical|billing|sales|hr|general",
"priority": "high|medium|low",
"sentiment": "positive|neutral|negative|urgent",
"auto_reply": "رد مهني ومناسب للعميل",
"requires_human": false,
"summary": "ملخص موجز في جملة واحدة"
}"""
def claude_node(email_data: dict) -> dict:
"""
محاكاة n8n HTTP Request Node → Claude API
في n8n الفعلي: POST https://api.anthropic.com/v1/messages
"""
prompt = (
f"بريد وارد:\n"
f"من: {email_data['from']}\n"
f"الموضوع: {email_data['subject']}\n"
f"المحتوى:\n{email_data['body']}"
)
response = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=600,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": prompt}],
)
raw = response.content[0].text.strip()
if raw.startswith("```"):
raw = raw.split("```")[1].replace("json", "").strip()
return {
"analysis": json.loads(raw),
"tokens": response.usage.input_tokens + response.usage.output_tokens,
"model": response.model,
}
def set_node(data: dict) -> dict:
"""محاكاة n8n Set Node — تعيين الحقول"""
a = data["analysis"]
return {
**data,
"priority": a.get("priority", "low"),
"category": a.get("category", "general"),
"sentiment": a.get("sentiment", "neutral"),
"auto_reply": a.get("auto_reply", ""),
"requires_human": a.get("requires_human", False),
"summary": a.get("summary", ""),
}
def if_node_urgent(data: dict) -> bool:
"""محاكاة n8n IF Node"""
return data.get("priority") == "high"
def slack_node(data: dict):
"""Action: Slack تنبيه للحالات العاجلة"""
print(f"\n 📢 Slack #urgent @here:")
print(f" من: {data['email']['from']}")
print(f" الفئة: {data['category']} | {data['sentiment']}")
print(f" الملخص: {data['summary']}")
def gmail_reply_node(data: dict):
"""Action: إرسال رد تلقائي بـ Gmail"""
if data.get("auto_reply") and not data.get("requires_human"):
print(f"\n 📧 Gmail Reply → {data['email']['from']}")
print(f" '{data['auto_reply'][:70]}...'")
def sheets_node(data: dict):
"""Action: تسجيل في Google Sheets"""
row = (f"{data['email']['from']} | {data['category']} | "
f"{data['priority']} | {data['tokens']} tokens")
print(f"\n 📊 Google Sheets: {row}")
# ─── تشغيل سير العمل ──────────────────────────────────────
def run_workflow(email: dict):
print(f"\n{'='*58}")
print(f"📨 معالجة: {email['subject'][:50]}")
result = claude_node(email)
result["email"] = email
result = set_node(result)
print(f" 🔄 Set: {result['category']} | {result['priority']} | {result['tokens']}t")
if if_node_urgent(result):
slack_node(result)
else:
gmail_reply_node(result)
sheets_node(result)
return result
# ─── بيانات الاختبار ─────────────────────────────────────
test_emails = [
{
"from": "vip@enterprise.com",
"subject": "الخادم معطل منذ ساعتين — نفقد الطلبات!",
"body": "نظامنا لا يعمل والمبيعات تتأثر. نحتاج حلاً فورياً.",
},
{
"from": "happy@customer.com",
"subject": "شكراً على الخدمة الرائعة",
"body": "كل شيء يعمل بشكل ممتاز. أريد ترقية خطتي.",
},
]
for email in test_emails:
run_workflow(email)
print("\n🎉 اكتمل سير العمل!")