Du betrachtest gerade Zoho Books, Resend API und Zoho Billing kombinieren: Tutorial zur Rechnungs- und Abo-Automatisierung

Zoho Books, Resend API und Zoho Billing kombinieren: Tutorial zur Rechnungs- und Abo-Automatisierung

  • Beitrags-Autor:

Zoho jenseits des Standards: Wie Du mit APIs und cleveren App-Kombinationen echte Prozessautomatisierung schaffst

Wenn Du Zoho One oder einzelne Zoho Apps nutzt, kennst Du die beeindruckende Funktionsvielfalt. Doch die wahre Stärke des Zoho-Ökosystems entfaltet sich erst, wenn Du beginnst, die Grenzen der einzelnen Anwendungen zu überschreiten. Viele Unternehmen stoßen an einen Punkt, an dem Standard-Workflows nicht mehr ausreichen, insbesondere wenn externe Systeme wie DATEV oder spezielle Dienstleister ins Spiel kommen. Genau hier setzt dieser Artikel an. Wir tauchen tief in die Praxis ein und zeigen Dir, wie Du durch die intelligente Kombination von Zoho Apps, Custom Functions in Deluge und der Anbindung externer APIs komplexe Herausforderungen meisterst. Es geht nicht um theoretische Möglichkeiten, sondern um konkrete, nachbaubare Lösungen für typische Probleme aus dem Unternehmensalltag.

Die Herausforderung aus der Praxis: Rechnungsversand und Abo-Verwaltung

Stell Dir ein typisches Szenario in einem IT-Systemhaus oder einem Software-Unternehmen vor. Zwei zentrale Prozesse verursachen regelmäßig hohen manuellen Aufwand und sind fehleranfällig:

  1. Der Rechnungsversand an die Buchhaltung: Am Monatsende müssen alle Ausgangsrechnungen aus Zoho Books an die Buchhaltung oder den Steuerberater übermittelt werden. Oft läuft dies über eine spezielle E-Mail-Adresse, die direkt in ein System wie DATEV Unternehmen online importiert wird. Der direkte Versand aus Zoho Books scheitert jedoch häufig, da die E-Mail-Server von Zoho nicht auf der Whitelist des Empfängers stehen. Die Folge: Ein Mitarbeiter muss manuell alle PDFs herunterladen, in einer E-Mail sammeln und versenden – ein monotoner und zeitraubender Prozess.
  2. Die Verwaltung von Software-Abonnements: Das Unternehmen verkauft Software-Lizenzen als Jahresabonnements. Die Verwaltung dieser Abos – also die rechtzeitige Rechnungsstellung, die Überwachung der Zahlungseingänge und die anschließende Bereitstellung der neuen Lizenz – erfolgt manuell. Erinnerungen stehen im Kalender oder in Zoho Projects. Das ist nicht nur ineffizient, sondern birgt auch das Risiko, Verlängerungen zu vergessen oder Rechnungen verspätet zu stellen.

Für beide Herausforderungen zeigen wir Dir nun detaillierte Lösungswege, die den Tech-Stack von Zoho voll ausreizen und gezielt externe Dienste einbinden.

Schritt-für-Schritt-Anleitung zur Automatisierung

Lösung 1: Automatischer Rechnungsversand an DATEV via Resend.com

Um das Whitelisting-Problem zu umgehen, nutzen wir einen externen, transaktionalen E-Mail-Dienst. Ein hervorragendes Tool dafür ist Resend.com, da es eine großzügige kostenlose Stufe (bis zu 3.000 E-Mails pro Monat) und eine sehr einfach zu bedienende API bietet. Das Prinzip: Wir fangen in Zoho Books das Ereignis „Rechnung erstellt/versendet“ ab, laden das PDF herunter und übergeben es an die Resend-API, die den Versand über Deine verifizierte Domain übernimmt.

Schritt 1: Resend.com einrichten

  • Erstelle einen kostenlosen Account auf Resend.com.
  • Navigiere zum Bereich „Domains“ und füge Deine Unternehmensdomain hinzu (z.B. deinefirma.de).
  • Resend gibt Dir nun mehrere DNS-Einträge (Typ TXT und CNAME/MX), die Du bei Deinem Domain-Provider (z.B. DomainFactory, IONOS, etc.) eintragen musst. Dies dient der Verifizierung und autorisiert Resend, E-Mails in Deinem Namen zu versenden (Stichworte: SPF, DKIM).
  • Gehe zum Bereich „API Keys“ und erstelle einen neuen Schlüssel. Kopiere diesen und bewahre ihn sicher auf, zum Beispiel in Zoho Vault.

Schritt 2: Die Custom Function in Zoho Books erstellen

Wir benötigen eine Automatisierung, die immer dann anspringt, wenn eine Rechnung einen bestimmten Status erreicht. In Zoho Books gehst Du dazu wie folgt vor:

  1. Gehe zu Einstellungen > Automatisierung > Workflow-Regeln.
  2. Erstelle eine neue Regel für das Modul Rechnungen.
  3. Gib der Regel einen Namen, z.B. „Rechnung an DATEV senden“.
  4. Wähle als Auslöser: „Basierend auf einer Aktion“ und dann „Erstellt oder Bearbeitet“.
  5. Setze als Filterkriterium: Status ist Gesendet. Dies stellt sicher, dass der Workflow nur für finalisierte Rechnungen läuft.
  6. Wähle unter „Sofortige Aktionen“ den Typ „Benutzerdefinierte Funktion“ aus.

Schritt 3: Der Deluge-Code für den Versand

Jetzt kommt das Herzstück: das Deluge-Skript. Füge den folgenden Code in das Fenster für die benutzerdefinierte Funktion ein. Vergiss nicht, die Platzhalter anzupassen.

// --- Konfiguration ---
// Deine Resend API-Key (am besten aus einer Connection holen)
resend_api_key = "re_DEIN_RESEND_API_KEY";
// Die E-Mail-Adresse für den DATEV-Posteingang
datev_email = "[email protected]";
// Die Absenderadresse (muss von deiner verifizierten Domain stammen)
sender_email = "[email protected]";
// ID des Rechnungsdatensatzes, der den Workflow ausgelöst hat
invoice_id = invoice.get("invoice_id");

// --- 1. Rechnungsdetails und PDF abrufen ---
// Hole die Rechnungsdaten von der Zoho Books API
invoice_data = zoho.books.getRecordsByID("invoices", ZOHO_ORGANIZATION_ID, invoice_id);
invoice_number = invoice_data.get("invoice").get("invoice_number");
// Lade das Rechnungs-PDF als Datei-Objekt herunter
invoice_pdf = zoho.books.getRecordsByID("invoices", ZOHO_ORGANIZATION_ID, invoice_id, "print=true");

// --- 2. Optional: PDF in WorkDrive zur Archivierung speichern ---
// Erstellt einen eindeutigen Dateinamen
file_name = "Rechnung_" + invoice_number + ".pdf";
// Ordner-ID in WorkDrive, wo die PDFs abgelegt werden sollen
workdrive_folder_id = "deine_workdrive_folder_id"; 
upload_response = zoho.workdrive.uploadFile(invoice_pdf, workdrive_folder_id, file_name, true, "deine_workdrive_connection");
info "PDF in WorkDrive hochgeladen: " + upload_response;

// --- 3. E-Mail über die Resend API versenden ---
// Setze die URL für die Resend API
resend_url = "https://api.resend.com/emails";

// Bereite die Header für die API-Anfrage vor
headers = Map();
headers.put("Authorization", "Bearer " + resend_api_key);
headers.put("Content-Type", "application/json");

// Bereite die Anhänge vor: Das PDF muss Base64-codiert werden
attachments_list = list();
attachment_map = Map();
attachment_map.put("filename", file_name);
attachment_map.put("content", invoice_pdf.toFile().toString("base64"));
attachments_list.add(attachment_map);

// Erstelle den Body der E-Mail
email_body = Map();
email_body.put("from", sender_email);
email_body.put("to", {datev_email});
email_body.put("subject", "Neue Rechnung: " + invoice_number);
email_body.put("html", "<p>Anbei die neue Ausgangsrechnung " + invoice_number + " für die Verbuchung.</p>");
email_body.put("attachments", attachments_list);

// Sende die Anfrage an die Resend API
response = invokeurl
[
	url :resend_url
	type :POST
	headers:headers
	parameters:email_body.toString()
];

// Gib die Antwort der API im Protokoll aus (für die Fehlersuche)
info "Resend API Response: " + response;

Speichere die Funktion und die Workflow-Regel. Sobald Du nun eine Rechnung in Zoho Books auf den Status „Gesendet“ setzt, wird diese automatisch und zuverlässig an Deine DATEV-Adresse geschickt.

Lösung 2: Abonnements mit Zoho Billing automatisieren

Um die manuelle Verwaltung von Software-Lizenzen abzulösen, ist Zoho Billing das perfekte Werkzeug. Es ist für die Verwaltung wiederkehrender Umsätze konzipiert und arbeitet nahtlos mit Zoho Books zusammen.

Schritt 1: Grundkonfiguration und Synchronisation

Der wichtigste erste Schritt ist die saubere Verbindung zwischen Zoho Billing und Zoho Books. Stelle sicher, dass Kontenpläne, Steuersätze und Zahlungsgateways korrekt synchronisiert sind. Dies verhindert später doppelte Buchungen und Abstimmungsaufwand.

Schritt 2: Produkte und Pläne definieren

In Zoho Billing legst Du Deine Software als „Produkt“ an. Zu jedem Produkt kannst Du einen oder mehrere „Pläne“ definieren. Ein Plan beschreibt die Abrechnungsmodalitäten, z.B.:

  • Produkt: Premium Software Lizenz
  • Plan 1: „Jahresabo“, Preis: 1.200 €, Abrechnungsintervall: 1 Jahr
  • Plan 2: „Monatsabo“, Preis: 110 €, Abrechnungsintervall: 1 Monat

Schritt 3: Vom Angebot zum aktiven Abonnement

Der Vertriebsprozess sieht nun so aus: Ein Angebot wird direkt in Zoho Billing (oder Zoho CRM) für den entsprechenden Plan erstellt. Sobald der Kunde das Angebot annimmt, kannst Du es mit einem Klick in ein aktives Abonnement umwandeln. Zoho Billing übernimmt ab sofort den Rest:

  • Automatische Erstellung und Versand der Rechnungen zum Fälligkeitsdatum.
  • Verwaltung von Upgrades, Downgrades oder Kündigungen.
  • Automatische Verbuchung der wiederkehrenden Umsätze in Zoho Books.

Schritt 4: Automatisierte Lizenz-Provisionierung

Jetzt gehen wir noch einen Schritt weiter. Wir wollen, dass nach Zahlungseingang automatisch eine E-Mail mit der Lizenzdatei an den Kunden geht. Auch das lässt sich mit einer Custom Function umsetzen, diesmal ausgelöst in Zoho Billing.

Erstelle in Zoho Billing eine Workflow-Regel (Einstellungen > Automatisierung > Workflow-Regeln) für das Modul Rechnungen mit dem Auslöser „Bezahlt“.

// Dieses Skript wird ausgelöst, wenn eine Abo-Rechnung bezahlt wird
// Rechnungs-ID wird vom Workflow übergeben
invoice_id = invoice.get("invoice_id");

// 1. Kundendaten aus der Rechnung holen
invoice_details = zoho.billing.getRecordById("invoices", invoice_id);
customer_id = invoice_details.get("customer_id");
customer_details = zoho.billing.getRecordById("contacts", customer_id);
customer_email = customer_details.get("contact").get("email");
customer_name = customer_details.get("contact").get("contact_name");

// 2. Eine einfache Lizenz generieren (Beispiel)
// In der Realität könntest du hier eine externe Lizenzierungs-API aufrufen
license_key = "LIC-" + zoho.encryption.getRandomString(8, "ALPHANUMERIC") + "-" + today.toString("yyyy");
expiry_date = today.addYear(1).toString("dd-MM-yyyy");

// Erstelle den Inhalt der Lizenzdatei (z.B. als JSON)
license_content = {
    "customer": customer_name,
    "key": license_key,
    "valid_until": expiry_date
};

// 3. Lizenz per E-Mail versenden (hier mit Zoho ZeptoMail)
// Zoho ZeptoMail ist für den transaktionalen Versand optimiert
email_details = {
    "from": {"address": "[email protected]"},
    "to": [{"email_address": {"address": customer_email, "name": customer_name}}],
    "subject": "Deine neue Software-Lizenz",
    "htmlbody": "Hallo " + customer_name + ",<br><br>vielen Dank für deine Verlängerung! Anbei findest du deine neue Lizenzdatei.<br><br>Viele Grüße,<br>Dein Team",
    "attachments": [{
        "name": "license.json",
        "content": license_content.toString().toFile().toString("base64"),
        "mime_type": "application/json"
    }]
};

// Sende die E-Mail über die ZeptoMail API
// 'zeptomail_connection' ist der Name deiner Zoho ZeptoMail Verbindung
send_mail_response = zoho.zeptomail.sendMail(email_details, "zeptomail_connection");
info "Lizenz versendet: " + send_mail_response;

Mit diesem Workflow hast Du den gesamten Lebenszyklus eines Abonnements – von der Rechnungserstellung bis zur Lizenzbereitstellung – vollständig automatisiert.

Tipps und Best Practices

  • Sichere Verwaltung von API-Keys: Speichere sensible Daten wie API-Schlüssel niemals direkt im Code. Nutze stattdessen die „Connections“ in Zoho. Diese verwalten die Authentifizierung sicher und machen Deinen Code wiederverwendbar. Für die zentrale Ablage ist Zoho Vault ideal.
  • Fehlerbehandlung einbauen: Was passiert, wenn eine API nicht erreichbar ist? Baue in Deine Deluge-Skripte `try…catch`-Blöcke ein, um Fehler abzufangen. Bei einem Fehlschlag kannst Du Dir z.B. eine automatische Nachricht in einen Zoho Cliq Channel senden lassen, um sofort informiert zu sein.
  • Denke in Prozessen, nicht in Apps: Der Schlüssel liegt darin, den gesamten Prozess zu betrachten und dann die passenden Werkzeuge – ob Zoho-intern oder extern – auszuwählen. Manchmal ist ein kleiner externer Service wie Resend die robusteste und schnellste Lösung.
  • Weitere Potenziale nutzen: Denke darüber nach, was als Nächstes kommt. Ein Webshop für Ersatzteile mit Zoho Commerce? Die Nachverfolgung von Website-Besuchern aus dem CRM mit Zoho SalesIQ? Oder die Verwaltung komplexer Stücklisten und Seriennummern mit Zoho Inventory?

Fazit: Dein Zoho-System als maßgeschneiderte Schaltzentrale

Die vorgestellten Beispiele zeigen eindrücklich: Die wahre Kraft von Zoho liegt in seiner Flexibilität und Offenheit. Indem Du die nativen Funktionen mit der Programmierbarkeit von Deluge und der Anbindung externer APIs kombinierst, kannst Du Dein Zoho-System von einer Sammlung guter Einzelanwendungen in eine hochgradig automatisierte, maßgeschneiderte Geschäftszentrale verwandeln. Du reduzierst manuelle Arbeit, minimierst Fehlerquellen und schaffst Freiräume für wertschöpfendere Tätigkeiten. Der Aufwand, solche Automatisierungen einmalig einzurichten, amortisiert sich durch die tägliche Zeitersparnis und die gewonnene Prozesssicherheit um ein Vielfaches.

Verwendete Zoho Apps in diesem Artikel: