Zoho CRM jenseits der Standards: Automatisierte KYC-Prüfung und komplexe Angebote für die Finanzbranche
In regulierten Branchen wie FinTech, Rechtsberatung oder Unternehmensfinanzierung sind die Anforderungen an die Sorgfaltspflicht enorm. Die manuelle Recherche von Unternehmensstrukturen, die Ermittlung der wirtschaftlich Berechtigten (Ultimate Beneficial Owners, UBOs) und die Erstellung maßgeschneiderter, komplexer Angebote sind nicht nur zeitaufwendig, sondern auch fehleranfällig. Genau hier zeigt sich die wahre Stärke des Zoho-Ökosystems: die Fähigkeit, über Standardfunktionen hinauszugehen und durch die intelligente Kombination von Apps, Custom Functions und externen APIs hochspezialisierte Prozesse zu automatisieren. Dieser Artikel zeigt Dir an einem praxisnahen Beispiel, wie Du Dein Zoho CRM zu einem leistungsstarken Werkzeug für Compliance-Prüfungen und dynamische Angebotserstellung ausbauen kannst, das weit über die übliche Lead- und Deal-Verwaltung hinausgeht.
Praxisbeispiel: KYC und Angebotsprozess bei einem Zahlungsdienstleister
Stell Dir einen Zahlungsdienstleister vor, der neue Geschäftskunden onboarden möchte. Bevor ein Vertrag zustande kommt, muss das Unternehmen im Rahmen des Know-Your-Customer-Prozesses (KYC) eine genaue Prüfung durchführen. Eine zentrale Herausforderung dabei ist die Identifizierung der UBOs, also der natürlichen Personen, die letztlich hinter einer Firma stehen. Dies wird besonders komplex, wenn es sich um verschachtelte Holding-Strukturen mit mehreren Untergesellschaften handelt.
Die zweite Herausforderung liegt in der Angebotserstellung. Die Angebote sind keine simplen Produktlisten mit Artikelnummern. Stattdessen handelt es sich um beschreibende, modular aufgebaute Dokumente, die verschiedene Dienstleistungskategorien wie Hardware-Miete, Transaktionsgebühren oder Implementierungsservices kombinieren. Das Standard-Angebotsmodul in Zoho CRM stößt hier an seine Grenzen.
Die Aufgabe ist also zweigeteilt:
- Ein automatisierter Prozess, der auf Knopfdruck Firmendaten anreichert, die gesamte Gesellschafterstruktur rekursiv abfragt, die UBOs berechnet und alle relevanten Dokumente (z.B. Handelsregisterauszüge) zentral ablegt.
- Eine flexible Lösung zur Erstellung von komplexen, kategorisierten Angeboten, die das Corporate Design exakt widerspiegelt und ohne starre Produktkataloge auskommt.
Schritt-für-Schritt Anleitung zur Automatisierung
Wir teilen die Lösung in zwei Hauptmodule auf: Die automatisierte Datenanreicherung und die dynamische Angebotserstellung.
Teil 1: Automatisierte UBO- und Firmendaten-Analyse
Das Ziel ist es, einen Button im Firmen-Modul (Accounts) von Zoho CRM zu erstellen, der den gesamten KYC-Prozess anstößt.
Schritt 1: Die Grundlage in Zoho CRM und die externe API
Als Basis dient das Modul „Firmen“ in Zoho CRM. Um externe Firmendaten abzufragen, benötigst Du Zugang zu einer kommerziellen API für Unternehmensdaten, wie sie beispielsweise von Anbietern wie North Data, Dun & Bradstreet oder lokalen Handelsregistern bereitgestellt wird. Für diesen Prozess benötigst Du einen API-Schlüssel, den Du sicher in Zoho Vault hinterlegen solltest.
Schritt 2: Der Custom Button und die Deluge-Funktion
Erstelle im Firmen-Modul einen neuen Button, z.B. mit dem Namen „KYC-Prüfung starten“. Dieser Button ruft eine benutzerdefinierte Funktion auf, die in Deluge, der Scriptsprache von Zoho, geschrieben ist. Diese Funktion ist das Herzstück der Automatisierung.
Schritt 3: Asynchrone Abfragen für komplexe Firmenstrukturen
Eine einfache API-Abfrage würde bei komplexen Strukturen schnell an die Laufzeitgrenzen von Deluge stoßen. Der Trick besteht darin, die Abfragen asynchron zu gestalten. Die Hauptfunktion startet die Abfrage für die erste Firma und stößt für jede gefundene Gesellschafter-Firma eine weitere, unabhängige Abfrage an. So wird eine Kaskade von Abfragen parallel verarbeitet, was den Prozess enorm beschleunigt.
Hier ein vereinfachtes Deluge-Codebeispiel für eine solche Funktion, die eine externe API aufruft:
// Hauptfunktion, die durch den Button im CRM ausgelöst wird
// accountId ist die ID der Firma, die geprüft werden soll
void processCompanyUBO(int accountId)
{
// API-Key sicher aus Zoho Vault holen
apiKey = zoho.vault.getSecret("ExternalRegisterAPI_Key");
// Firmeninformationen aus CRM abrufen
companyDetails = zoho.crm.getRecordById("Accounts", accountId);
companyName = companyDetails.get("Account_Name");
// URL zur externen API zusammenbauen
apiUrl = "https://api.unternehmensregister.de/v1/company/" + companyName + "?apiKey=" + apiKey;
// API asynchron aufrufen
// 'invokeurl' mit dem Parameter 'invokeAsynchronously' stellt die Anfrage in eine Warteschlange
// und lässt das Skript weiterlaufen, ohne auf eine Antwort zu warten.
// Eine Callback-Funktion wird benötigt, um die Antwort zu verarbeiten.
paramMap = Map();
paramMap.put("callback_function", "handleApiResponse");
paramMap.put("original_account_id", accountId); // Wichtig: ID der Hauptfirma mitgeben
response = invokeurl
[
url :apiUrl
type :GET
parameters:paramMap
connection:"my_api_connection"
invokeAsynchronously:true
];
info "UBO-Prüfung für " + companyName + " gestartet. Verarbeitung läuft im Hintergrund.";
}
// Callback-Funktion, die die API-Antwort verarbeitet (wird von Zoho im Hintergrund aufgerufen)
void handleApiResponse(map response, map params)
{
// Die ID der ursprünglichen Hauptfirma aus den Parametern extrahieren
mainAccountId = params.get("original_account_id").toLong();
// API-Antwort parsen
jsonResponse = response.get("response").toJSON();
shareholders = jsonResponse.get("shareholders");
// Dokumente herunterladen und in WorkDrive speichern
registerExtractUrl = jsonResponse.get("documents").get("register_extract_url");
shareholderListUrl = jsonResponse.get("documents").get("shareholder_list_url");
// Funktion aufrufen, die die Dokumente in WorkDrive ablegt
storeDocumentsInWorkDrive(mainAccountId, jsonResponse.get("companyName"), registerExtractUrl, shareholderListUrl);
// Für jeden Gesellschafter prüfen, ob es eine weitere Firma ist und den Prozess rekursiv starten
for each shareholder in shareholders
{
if(shareholder.get("type") == "company")
{
// Hier würde man eine weitere asynchrone Abfrage für die Gesellschafter-Firma starten
// und dabei immer die ID der Hauptfirma (mainAccountId) weitergeben.
}
else
{
// Natürliche Person gefunden -> UBO-Berechnung durchführen und in CRM speichern
}
}
}
Schritt 4: Zentrale Dokumentenablage mit Zoho WorkDrive
Eine Schlüsselfunktion ist die zentrale Ablage aller gefundenen Dokumente. Statt die Gesellschafterliste einer Unterfirma bei eben dieser zu speichern, sollen alle Dokumente im Zoho WorkDrive-Ordner der Hauptfirma landen. Dies erfordert die Übergabe der ID der Hauptfirma durch alle rekursiven Aufrufe.
Die Deluge-Funktion zum Hochladen der Datei könnte so aussehen:
// Funktion zum Speichern der Dokumente im WorkDrive-Ordner der Hauptfirma
void storeDocumentsInWorkDrive(int mainAccountId, string subCompanyName, string documentUrl1, string documentUrl2)
{
// WorkDrive-Ordner-ID der Hauptfirma abrufen (z.B. aus einem benutzerdefinierten Feld)
mainCompanyRecord = zoho.crm.getRecordById("Accounts", mainAccountId);
workdriveFolderId = mainCompanyRecord.get("WorkDrive_Folder_ID");
if(workdriveFolderId != null)
{
// Dokument 1 (z.B. Handelsregisterauszug) herunterladen
fileContent1 = invokeurl[url: documentUrl1 type: GET];
fileName1 = subCompanyName + "_Handelsregisterauszug.pdf";
// Datei in den richtigen WorkDrive-Ordner hochladen
uploadResponse1 = zoho.workdrive.uploadFile(fileContent1, workdriveFolderId, fileName1, true);
info "Dokument 1 hochgeladen: " + uploadResponse1;
// Das gleiche für Dokument 2 (Gesellschafterliste)
fileContent2 = invokeurl[url: documentUrl2 type: GET];
fileName2 = subCompanyName + "_Gesellschafterliste.pdf";
uploadResponse2 = zoho.workdrive.uploadFile(fileContent2, workdriveFolderId, fileName2, true);
info "Dokument 2 hochgeladen: " + uploadResponse2;
}
}
Teil 2: Dynamische Angebotsvorlagen für Dienstleistungen
Nachdem die Compliance-Hürde genommen ist, geht es an die Angebotserstellung. Hier benötigen wir eine flexible Lösung jenseits des Standard-Produktmoduls.
Schritt 1: Alternative zum Produktmodul: Subformulare nutzen
Da die Angebote nicht auf Artikeln mit SKUs basieren, ist das Standard-Produktmodul ungeeignet. Eine weitaus flexiblere Methode ist die Verwendung eines Subformulars direkt im Angebotsmodul. Erstelle ein Subformular mit den Feldern, die Du wirklich benötigst:
- Kategorie (Dropdown, z.B. „Hardware“, „Transaktionsdienste“, „Einrichtung“)
- Leistungsbeschreibung (Mehrzeiliger Text)
- Menge (Zahl)
- Preis (Währung)
- Gesamt (Formelfeld)
Dies ermöglicht es Dir, Angebote frei und beschreibend zu gestalten, ohne auf einen starren Produktkatalog angewiesen zu sein.
Schritt 2: Die Angebotsvorlage erstellen
Gehe zu den Angebotsvorlagen in den CRM-Einstellungen. Hier kannst Du HTML-basierte Vorlagen erstellen. Die größte Herausforderung ist oft, das Corporate Design pixelgenau nachzubilden. Dies kann eine detailintensive Arbeit sein, ist aber entscheidend für einen professionellen Außenauftritt.
Schritt 3: Daten aus dem Subformular in die Vorlage laden
Um die Daten aus dem Subformular in der Vorlage darzustellen, musst Du durch die Einträge des Subformulars iterieren. Der Deluge-Code innerhalb der Vorlage (Mail Merge) ist dafür ideal. Du kannst die Einträge nach der Kategorie gruppieren.
Ein Code-Schnipsel innerhalb der HTML-Vorlage könnte so aussehen:
<!-- Angenommen, der API-Name des Subformulars ist 'Leistungsposten' -->
<h3>Kategorie: Hardware</h3>
<table>
<tr><th>Beschreibung</th><th>Menge</th><th>Preis</th></tr>
<%
// Durch alle Zeilen des Subformulars loopen
for each posten in angebotsdetails.get("Leistungsposten")
{
// Nur die Posten der Kategorie 'Hardware' anzeigen
if(posten.get("Kategorie") == "Hardware")
{
%>
<tr>
<td><%=posten.get("Leistungsbeschreibung")%></td>
<td><%=posten.get("Menge")%></td>
<td><%=posten.get("Preis")%></td>
</tr>
<%
}
}
%>
</table>
<!-- Dieser Block müsste für jede weitere Kategorie wiederholt werden -->
<h3>Kategorie: Transaktionsdienste</h3>
<!-- ... ähnlicher Code wie oben ... -->
Tipps und Best Practices
- User Experience bei Asynchronität: Da der UBO-Prozess im Hintergrund läuft, sieht der Anwender das Ergebnis nicht sofort. Informiere den Nutzer aktiv über den Abschluss, z.B. durch eine automatische Benachrichtigung in Zoho Cliq oder durch das Setzen eines Statusfeldes in der Firma von „Prüfung läuft…“ auf „Prüfung abgeschlossen“.
- Fehlerbehandlung: Baue in Deine Deluge-Skripte immer eine `try…catch`-Logik ein, um auf Fehler der externen API (z.B. „Firma nicht gefunden“ oder „API nicht erreichbar“) reagieren zu können.
- Skalierbarkeit: Für extrem komplexe Backend-Prozesse, die die Deluge-Grenzen überschreiten könnten, solltest Du einen Blick auf Zoho Catalyst werfen. Es bietet eine serverlose Plattform für anspruchsvollere Anwendungen.
- Prozessübergreifende Integration: Denke den Prozess zu Ende. Sobald das Angebot erstellt ist, kann es mit Zoho Sign zur digitalen Signatur versendet werden. Die gewonnenen Unternehmensdaten können in Zoho Analytics für Compliance-Berichte visualisiert werden. Für eine No-Code-Alternative zu Teilen dieses Prozesses kann auch Zoho Flow eine gute Option sein.
Fazit
Dieses Praxisbeispiel zeigt eindrücklich, dass Zoho mehr ist als die Summe seiner Teile. Durch die Kombination von Zoho CRM als Datenzentrale, Deluge für die individuelle Logik, Zoho WorkDrive für die sichere Ablage und die Anbindung externer APIs entsteht eine maßgeschneiderte Lösung, die einen echten Wettbewerbsvorteil schafft. Du automatisierst nicht nur einen manuellen und fehleranfälligen Prozess, sondern erhöhst auch die Datenqualität, stellst die Compliance sicher und beschleunigst Deinen Vertriebszyklus. Die Investition in das Verständnis der Integrationsmöglichkeiten von Zoho zahlt sich aus, indem Du die Plattform exakt an die spezifischen und komplexen Anforderungen Deines Unternehmens anpassen kannst.
Verwendete Zoho Apps in dieser Lösung:
- Zoho CRM
- Zoho WorkDrive
- Zoho Vault (empfohlen)
