Max Nardit
Eigene Integration

Eigenen Webhook-Receiver für Share2Agent bauen

Baue einen eigenen Webhook-Receiver für Share2Agent in jeder beliebigen Sprache. Dieser Guide deckt das vollständige Payload-Schema, funktionierende Beispiele in Python und Node.js sowie einen curl-Befehl zum Testen ab.


Voraussetzungen

  • Python 3.x oder Node.js 18+ (je nach Stack)
  • Share2Agent Chrome-Erweiterung installiert

Payload-Schema

Share2Agent sendet einen POST-Request mit JSON-Body. Hier alle Felder:

FeldTypPflichtBeschreibung
urlstringjaDie URL der Seite
titlestringjaDer Seitentitel (aus dem <title>-Tag)
contentstringjaExtrahierter sauberer Text (HTML entfernt, Whitespace normalisiert)
commentstringneinInstruktion oder Notiz des Users (leerer String, wenn nicht gesetzt)
timestampstringjaISO-8601-Zeitstempel des Teilens
metaobjectjaMetadaten-Objekt (siehe unten)

meta-Objekt:

FeldTypBeschreibung
descriptionstringMeta-Description der Seite
og_imagestringOpen-Graph-Image-URL
authorstringAutor der Seite (aus Meta-Tags)
languagestringSprachcode der Seite (z.B. en, de)

Beispiel-Payload:

json
{
  "url": "https://example.com/article",
  "title": "Understanding WebSockets",
  "content": "WebSockets provide full-duplex communication channels...",
  "comment": "Save for later review",
  "timestamp": "2026-03-28T12:00:00.000Z",
  "meta": {
    "description": "A guide to WebSocket protocol",
    "og_image": "https://example.com/og.png",
    "author": "Jane Smith",
    "language": "en"
  }
}

Python-Receiver (Flask)

Ein minimaler Receiver in 15 Zeilen:

python
from flask import Flask, request, jsonify
 
app = Flask(__name__)
 
@app.route("/", methods=["POST"])
def receive():
    data = request.get_json()
    if not data or "content" not in data:
        return jsonify({"error": "Missing content"}), 400
 
    print(f"Received: {data.get('title', 'untitled')}")
    print(f"URL: {data.get('url', '')}")
    print(f"Comment: {data.get('comment', '')}")
    print(f"Content length: {len(data.get('content', ''))} chars")
 
    # --- Deine Logik hier ---
    # Speichere in Datenbank, rufe eine API auf, triggere eine Pipeline, etc.
 
    return jsonify({"status": "ok"})
 
if __name__ == "__main__":
    app.run(port=9876)

Starte ihn:

bash
pip install flask
python3 receiver.py

Node.js-Receiver (Express)

Derselbe Receiver in Node.js:

javascript
const express = require("express");
const app = express();
 
app.use(express.json({ limit: "5mb" }));
 
app.post("/", (req, res) => {
  const { title, url, content, comment, meta } = req.body;
  if (!content) return res.status(400).json({ error: "Missing content" });
 
  console.log(`Received: ${title || "untitled"}`);
  console.log(`URL: ${url || ""}`);
  console.log(`Comment: ${comment || ""}`);
  console.log(`Content length: ${(content || "").length} chars`);
 
  // --- Deine Logik hier ---
 
  res.json({ status: "ok" });
});
 
app.listen(9876, () => console.log("Listening on :9876"));

Starte ihn:

bash
npm install express
node receiver.js

Mit curl testen

Simuliere einen Share2Agent-Webhook, um deinen Receiver ohne Browser-Erweiterung zu testen:

bash
curl -X POST http://localhost:9876 \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/test",
    "title": "Test Page",
    "content": "This is a test of the webhook receiver.",
    "comment": "Testing integration",
    "timestamp": "2026-03-28T12:00:00.000Z",
    "meta": {
      "description": "Test page",
      "og_image": "",
      "author": "",
      "language": "en"
    }
  }'

Erwartete Antwort:

json
{"status": "ok"}

Tipps

  • Content-Type validieren - prüfe vor dem Parsen, ob der Request Content-Type: application/json enthält. Share2Agent sendet immer JSON, andere Quellen vielleicht nicht.
  • Leere Kommentare behandeln - das comment-Feld ist ein leerer String, wenn der User nichts eingegeben hat. Prüfe darauf, bevor du es als Prompt oder Instruktion verwendest.
  • Maximale Body-Größe setzen - Share2Agent begrenzt Payloads auf 5 MB. Setze dasselbe Limit auf deinem Receiver, um Missbrauch zu verhindern (express.json({ limit: "5mb" }) in Node, oder prüfe Content-Length in Python).
  • CORS-Header senden - wenn du aus einem Browser testest, füge Access-Control-Allow-Origin: * hinzu und behandle OPTIONS-Preflight-Requests. Share2Agent sendet Requests aus einem Chrome-Extension-Kontext, der CORS-Header benötigt.
  • Schnell antworten - Share2Agent wartet auf eine Antwort. Wenn deine Verarbeitung mehr als ein paar Sekunden dauert, akzeptiere den Webhook sofort mit einem 200 und verarbeite im Hintergrund.

Was als Nächstes?

  • Authentifizierung hinzufügen - hänge ein Secret-Token an die Webhook-URL (z.B. http://localhost:9876?token=mysecret) und validiere es im Receiver.
  • Verarbeitungs-Pipeline aufbauen - kombiniere deinen Receiver mit einer Message-Queue (Redis, RabbitMQ), um mehrere Seiten parallel zu verarbeiten.
  • Öffentlich deployen - stelle deinen Receiver hinter einen Reverse-Proxy (Caddy, nginx) mit HTTPS, sodass du Seiten von jedem Gerät teilen kannst, nicht nur lokal.
Eigenen Webhook-Receiver mit Share2Agent bauen