ERPNext 3CX

Start / Installation

Installation und Ersteinrichtung

Für Administration und IT · vom API-Zugang bis zum ersten Popup, etwa eine Stunde

Die Einrichtung hat zwei Seiten: In der 3CX legst du einen API-Zugang an, im ERPNext installierst du die App, trägst den Zugang ein und schaltest die Funktionen nacheinander ein. Jede Stufe lässt sich einzeln prüfen, bevor die nächste folgt.
Ablauf
  1. Voraussetzungen prüfen
  2. 3CX: API-Zugang anlegen
  3. ERPNext: App installieren
  4. Verbindung einrichten und testen
  5. Nebenstellen zuordnen
  6. Anrufliste importieren
  7. Telefonbuch-Abgleich einschalten
  8. Live-Ereignisse und Popup einschalten
  9. Abnahmetest

1. Voraussetzungen

BereichAnforderung
3CXVersion 20, AI- oder Enterprise-Edition. API-Zugänge („Dienstprinzipale") gibt es nur in diesen Editionen. Gehostet oder lokal ist egal.
ERPNextFrappe und ERPNext 16 mit Bench-Installation, Zugriff auf die Kommandozeile als Bench-Benutzer und Rechte für Supervisor.
NetzwerkDas ERP muss die 3CX per HTTPS auf Port 443 erreichen. Das ist die einzige nötige Verbindung. Sie geht immer vom ERP aus, eine Freigabe ins ERP ist nicht nötig.
RechteAdministrator-Zugang zur 3CX-Verwaltung und die Rolle System Manager im ERP.

Die Edition steht in der 3CX unter Admin → Systemübersicht, Kachel System Information:

3CX Systeminformation mit AI Edition
Die Edition steht ganz links, hier AI Edition.

In kleineren Editionen zeigt die API-Seite einen Hinweis statt des Formulars:

3CX API-Seite mit Hinweis auf die AI Edition
Admin → Integrationen → API: „Diese Funktion ist nur in der AI Edition verfügbar."
Nach einem Lizenz-Upgrade die 3CX-Verwaltung im Browser komplett neu laden oder neu anmelden. Die Oberfläche liest die Lizenz nur beim Anmelden. Sonst bleibt Speichern im API-Formular ohne Fehlermeldung gesperrt.

2. 3CX: API-Zugang anlegen

  1. Dienstprinzipal hinzufügen

    Admin → Integrationen → API → Hinzufügen. Als Client-ID zum Beispiel erpnext eintragen.

  2. Konfigurations-API (XAPI) freischalten

    Haken bei Aktivieren dieser Anwendung für den Zugriff auf die 3CX-Konfigurations-API. Abteilung DEFAULT, Rolle „Systemeigentümer".

    Wichtig: Mit der Rolle „Systemadministrator" verweigert die 3CX die Anrufberichte (HTTP 403). Dann funktionieren Verbindungstest und Telefonbuch, aber die Anrufliste lässt sich nicht importieren.
  3. Call Control API freischalten

    Haken bei Aktivieren des Zugriffs auf die 3CX Call Control API. Keine DID-Nummern eintragen, denn die Integration beobachtet Anrufe nur und nimmt selbst keine an. Die Chat-API bleibt aus.

    3CX Formular des API-Zugangs mit Rolle Systemeigentümer
    Der fertige API-Zugang: XAPI mit Rolle Systemeigentümer, Call Control API aktiv, keine DIDs.
  4. Nebenstellen auswählen

    Über Nebenstellen auswählen alle Nummern markieren, deren Anrufe das ERP sehen soll: die Benutzer-Nebenstellen und auch Warteschleifen und Ringgruppen. Nur so erkennt das Popup, dass ein Anruf über die Zentrale kommt.

    3CX Auswahl der Nebenstellen für den API-Zugang
    Einfach alle Einträge übernehmen. Namen sind hier unkenntlich gemacht.
  5. Speichern und API-Schlüssel sichern

    Nach dem Speichern zeigt die 3CX den API-Schlüssel genau einmal an. Kopiere ihn direkt in das ERP (Schritt 4) oder in deinen Passwort-Tresor. Geht er verloren, erzeugst du im API-Zugang mit API-Schlüssel generieren einen neuen. Der alte wird damit ungültig.

    3CX Dialog mit dem einmalig angezeigten API-Schlüssel
    Der Schlüssel erscheint nur in diesem Dialog.
Ein Zugang je ERP-System. Die 3CX akzeptiert pro API-Zugang nur die jeweils jüngste Anmeldung. Nutzen ein Produktiv- und ein Testsystem denselben Zugang, melden sie sich gegenseitig ab. Lege für ein Testsystem einen eigenen Zugang an.

3. ERPNext: App installieren

Auf dem ERP-Server als Bench-Benutzer, vorher ein Backup:

cd ~/frappe-bench
bench --site erp.example.com backup
bench get-app https://github.com/itsdave-de/frappe_3cx --branch main
bench --site erp.example.com install-app frappe_3cx
bench --site erp.example.com migrate
bench build --app frappe_3cx
sudo supervisorctl restart all

Ersetze erp.example.com durch den Namen deiner Site. Die App bringt keine zusätzlichen Python-Pakete mit. Die Verbindung zur 3CX nutzt Bibliotheken, die Frappe ohnehin installiert.

Kein Zugriff auf das Repository? Die App wird von itsdave bereitgestellt. Den Zugang, zum Beispiel einen nur lesenden Deploy-Key für deinen Server, erhältst du auf Anfrage.

4. Verbindung einrichten und testen

Im ERP ThreeCX → ThreeCX Settings öffnen:

  1. Zugangsdaten eintragen

    Aktiviert setzen, PBX-URL der 3CX (zum Beispiel https://ihre-firma.3cx.de), Client-ID und Client Secret (den API-Schlüssel) eintragen und speichern.

  2. Verbindung testen

    Mit Verbindung testen holt das ERP ein Token von der 3CX. Erwartet wird „Verbindung erfolgreich!". Ein Fehler hier bedeutet fast immer eine falsche URL, einen falschen Schlüssel oder eine fehlende Netzfreigabe von ERP zu 3CX auf Port 443.

ThreeCX Settings mit Verbindungseinstellungen
Verbindungseinstellungen. Das Feld Webhook-Secret bleibt leer (siehe Administration).

5. Nebenstellen zuordnen

Jeder Benutzer, der Popups bekommen oder per Klick anrufen soll, braucht eine Zuordnung zu seiner Nebenstelle.

  1. Automatisch abgleichen

    Nebenstellen von 3CX synchronisieren legt Zuordnungen überall dort an, wo die E-Mail-Adresse in der 3CX und im ERP übereinstimmt. Bestehende Zuordnungen bleiben unverändert.

  2. Rest von Hand ergänzen

    Unter ThreeCX User Extension → Hinzufügen Benutzer und Nebenstellennummer eintragen. Das ist nötig, wenn in der 3CX andere E-Mail-Adressen hinterlegt sind als im ERP.

Liste der Nebenstellen-Zuordnungen
Zuordnungen: Ein Benutzer kann mehrere Nebenstellen haben, eine Nebenstelle mehrere Benutzer (hier die geteilte 200).

Was die Felder Popup bei eingehenden Anrufen und Primäre Nebenstelle bewirken, steht unter Funktionen im Detail.

6. Anrufliste importieren

Das ERP holt alle 5 Minuten die Anrufe seit dem jüngsten vorhandenen Eintrag im Anrufprotokoll. Ist das Protokoll noch leer, importiert der erste Lauf die gesamte Historie der 3CX. Bei großen Datenmengen startest du diesen Erstimport besser selbst auf dem Server, dort läuft er ohne Zeitlimit:

bench --site erp.example.com execute frappe_3cx.tasks.sync_call_history

Bei wenigen tausend Anrufen reicht auch der Button Anrufprotokoll von 3CX synchronisieren. Der Import ist wiederholbar, bereits vorhandene Anrufe werden erkannt und nicht doppelt angelegt.

Reihenfolge beachten: Den Erstimport abschließen, bevor du in Schritt 8 die Live-Ereignisse einschaltest. Der Abgleich beginnt beim jüngsten Anruf im Protokoll. Legt der Listener vorher schon einen aktuellen Anruf an, holt der Abgleich die ältere Historie nicht mehr.

7. Telefonbuch-Abgleich einschalten

  1. Probelauf

    Telefonbuch-Abgleich prüfen (Probelauf) zeigt, wie viele Kontakte angelegt, geändert und gelöscht würden, ohne etwas zu schreiben.

  2. Erster Abgleich

    Telefonbuch jetzt abgleichen überträgt die Kontakte. Das Ergebnis steht rechts im Feld Ergebnis des letzten Abgleichs.

  3. Automatik einschalten

    Telefonbuch-Abgleich aktivieren setzen und speichern. Danach gleicht das ERP alle 15 Minuten ab.

Bestehende 3CX-Kontakte bleiben unberührt. Die Integration verwaltet nur Einträge, die sie selbst angelegt und markiert hat. Kontakte aus Microsoft 365, Google oder von Hand gepflegte Einträge ändert sie nie.

8. Live-Ereignisse und Popup einschalten

Für Popup und Live-Anrufprotokoll hält ein Hintergrunddienst, der Listener, eine dauerhafte Verbindung zur 3CX. Er läuft als eigenes Supervisor-Programm neben den übrigen Frappe-Diensten.

  1. Supervisor-Programm anlegen

    Als root die Datei /etc/supervisor/conf.d/frappe-3cx-callcontrol.conf anlegen. Pfade, Benutzer und Site-Namen an deine Installation anpassen:

    [program:frappe-3cx-callcontrol]
    command=/home/frappe/frappe-bench/env/bin/python -m frappe.utils.bench_helper frappe --site erp.example.com threecx-callcontrol
    directory=/home/frappe/frappe-bench/sites
    user=frappe
    autostart=true
    autorestart=true
    startsecs=10
    stopsignal=TERM
    stopwaitsecs=15
    stopasgroup=true
    killasgroup=true
    stdout_logfile=/home/frappe/frappe-bench/logs/threecx-callcontrol.log
    stderr_logfile=/home/frappe/frappe-bench/logs/threecx-callcontrol.error.log
    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl status frappe-3cx-callcontrol

    Die eigene Datei überlebt bench setup supervisor, das nur die von Bench erzeugte Konfiguration neu schreibt.

  2. Live-Ereignisse aktivieren

    In den Einstellungen Live-Anrufereignisse aktivieren setzen und speichern. Innerhalb von etwa 30 Sekunden verbindet sich der Listener. Der Status des Listeners wechselt auf Verbunden und zeigt die Zahl der überwachten Nummern.

    Einstellungen mit Telefonbuch-Abgleich und Listener-Status
    Telefonbuch-Abgleich aktiv, Listener verbunden, alle Funktionen eingeschaltet.
  3. Funktionen prüfen

    Im Abschnitt Funktionen sind Click-to-Call, Popup und Anrufprotokollierung ab Werk eingeschaltet. Unter Telefonnummer-Zuordnung steht die Landesvorwahl, für Deutschland 49.

Nach dem Einschalten müssen die Benutzer das ERP einmal neu laden, damit Telefonsymbole, Schnellwahl und Menüeinträge erscheinen.

9. Abnahmetest

TestErwartung
Von einem Handy eine Nebenstelle anrufen, deren Benutzer das ERP geöffnet hat. Popup erscheint beim Klingeln. Ist die Handynummer als Kontakt gepflegt, mit Name und Übersicht. Neuer Eintrag im Anrufprotokoll.
Den Anruf an einem anderen Telefon der Gruppe annehmen. Das Popup bei den übrigen Benutzern schließt sich.
Im ERP auf ein Telefonsymbol klicken. Das eigene Telefon klingelt, nach dem Abnehmen wird die Nummer gewählt. Ausgehender Eintrag im Anrufprotokoll.
Nach 15 Minuten einen neuen ERP-Kontakt mit Nummer in der 3CX-App suchen. Kontakt ist im Firmentelefonbuch vorhanden.
Einen Anruf über die Zentrale (Warteschleife oder Ringgruppe) testen. Popup zeigt die Gruppe als blaues Kennzeichen.

Klappt ein Punkt nicht, hilft die Fehlersuche.