Webhook स्वचालन
मेमोरी बदलने पर बाहरी सिस्टम्स को ट्रिगर करें — सिंक, सूचना, स्वचालन।
Webhook स्वचालन
Webhooks आपको Synapse इवेंट्स फायर होने पर बाहरी सिस्टम्स को ट्रिगर करने की सुविधा देते हैं। यह गाइड सामान्य स्वचालन पैटर्न को कवर करती है।
सामान्य पैटर्न
पैटर्न 1: महत्वपूर्ण मेमोरी पर सूचित करें
महत्वपूर्ण मेमोरी स्टोर होने पर Slack संदेश भेजें:
# Webhook handler (your server)
@app.post("/webhook")
async def handle(request):
payload = await request.json()
# Verify signature
if not verify_signature(payload, request.headers):
return 401
if payload["event"] == "memory.store":
memory = payload["data"]
if memory.get("priority") == "critical":
# Send Slack notification
await slack.post(
f"🚨 Critical memory stored: {memory['key']}\n{memory['content'][:200]}"
)
return 200Webhook रजिस्टर करें:
curl -X POST https://synapse.schaefer.zone/webhooks \
-H "Authorization: Bearer YOUR_MIND_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://my-app.com/webhook",
"events": "memory.store",
"secret": "my-hmac-secret"
}'पैटर्न 2: बाहरी सिस्टम में सिंक करें
मेमोरीज़ को Notion, Obsidian, या किसी बाहरी KB में सिंक करें:
@app.post("/webhook")
async def sync_to_notion(request):
payload = await request.json()
if payload["event"] == "memory.store":
memory = payload["data"]
# Create Notion page
await notion.create_page(
title=memory["key"],
content=memory["content"],
tags=memory.get("tags", [])
)
elif payload["event"] == "memory.delete":
# Delete from Notion
await notion.delete_page(memory_id=payload["data"]["id"])
return 200पैटर्न 3: CI/CD ट्रिगर करें
"release" मेमोरी स्टोर होने पर डिप्लॉयमेंट ट्रिगर करें:
@app.post("/webhook")
async def trigger_deploy(request):
payload = await request.json()
if payload["event"] == "memory.store":
memory = payload["data"]
if memory.get("key", "").startswith("release_"):
# Trigger GitLab pipeline
await gitlab.trigger_pipeline(
project="synapse",
ref="main",
variables={"RELEASE_MEMORY_ID": memory["id"]}
)
return 200पैटर्न 4: मानव संदेश पर एजेंट को जगाएँ
मानव द्वारा चैट संदेश भेजने पर LLM एजेंट रन ट्रिगर करें:
@app.post("/webhook")
async def wake_agent(request):
payload = await request.json()
if payload["event"] == "chat.message_received":
message = payload["data"]
# Queue agent processing job
await job_queue.enqueue(
"process_message",
message_id=message["id"],
content=message["content"]
)
return 200पैटर्न 5: समग्र मेट्रिक्स
मेमोरी वृद्धि, चैट गतिविधि, कार्य पूर्णता ट्रैक करें:
@app.post("/webhook")
async def track_metrics(request):
payload = await request.json()
event = payload["event"]
metrics = {
"memory.store": "memories_stored_total",
"memory.delete": "memories_deleted_total",
"chat.message_received": "messages_received_total",
"task.created": "tasks_created_total",
"task.completed": "tasks_completed_total",
}
if event in metrics:
await prometheus.increment(metrics[event])
return 200सिग्नेचर सत्यापन
स्पूफिंग रोकने के लिए हमेशा webhook सिग्नेचर सत्यापित करें:
import hmac
import hashlib
def verify_signature(payload_body: bytes, headers, secret: str) -> bool:
signature = headers.get("X-Synapse-Signature", "")
if not signature.startswith("sha256="):
return False
expected = hmac.new(
secret.encode(),
payload_body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)पुनः प्रयास लॉजिक
Synapse विफल webhooks को एक्सपोनेंशियल बैकऑफ़ के साथ पुनः प्रयास करता है। आपके हैंडलर को यह करना चाहिए:
- तेज़ी से 200 लौटाएँ — भारी कार्य सिंक्रोनस रूप से न करें
- कार्य कतारबद्ध करें — बैकग्राउंड जॉब सिस्टम का उपयोग करें
- Idempotent बनें — समान इवेंट दो बार डिलीवर हो सकता है
@app.post("/webhook")
async def handle(request):
payload = await request.json()
# Queue for async processing
await job_queue.enqueue("process_webhook", payload)
# Return immediately
return 200Webhooks डिबग करना
डिलीवरी इतिहास जाँचें
Webhook डिलीवरी लॉग की जाती है। अपने webhook की हालिया डिलीवरी जाँचें:
# Get webhook details including recent deliveries
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
https://synapse.schaefer.zone/webhooks/wh_001Webhook मैन्युअली टेस्ट करें
# Trigger a test event
curl -X POST https://synapse.schaefer.zone/webhooks/wh_001/test \
-H "Authorization: Bearer YOUR_MIND_KEY"सामान्य समस्याएँ
| समस्या | समाधान |
|---|---|
| 4xx रिस्पॉन्स | जाँचें कि हैंडलर 200 लौटाता है |
| 5xx रिस्पॉन्स | सर्वर त्रुटि — अपने ऐप लॉग जाँचें |
| Timeout | तेज़ी से 200 लौटाएँ, कार्य एसिंक कतारबद्ध करें |
| डुप्लिकेट डिलीवरी | हैंडलर को idempotent बनाएँ |
| सिग्नेचर मिसमैच | सत्यापित करें कि secret सही है |