PHPackages                             con2net/contao-activecampaign-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. con2net/contao-activecampaign-bundle

ActiveContao-bundle[API Development](/categories/api)

con2net/contao-activecampaign-bundle
====================================

ActiveCampaign Bundle - DSGVO-konforme API-Integration mit optionaler manueller Übertragung

v1.0.1(5mo ago)02MITPHPPHP ^8.2 || ^8.3

Since Nov 27Pushed 5mo agoCompare

[ Source](https://github.com/con2net/contao-activecampaign-bundle)[ Packagist](https://packagist.org/packages/con2net/contao-activecampaign-bundle)[ RSS](/packages/con2net-contao-activecampaign-bundle/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (3)Used By (0)

ActiveCampaign Bundle für Contao
================================

[](#activecampaign-bundle-für-contao)

**DSGVO-konforme ActiveCampaign-Integration für Contao 4.13 und 5.3**

Integriere ActiveCampaign nahtlos in deine Contao-Website – ganz ohne externe Tracking-Skripte oder Widgets!

---

Features
--------

[](#features)

- DSGVO-konform – Serverseitige API-Integration, keine externen Skripte
- Einfach – Content Element, kein Code nötig
- Flexibel – Standard-Felder + Custom Fields Support
- Sicher – Optionale manuelle Übertragung für Freigabe vor dem Transfer
- Kompatibel – Contao 4.13 LTS und 5.3 LTS

---

Inhaltsverzeichnis
------------------

[](#inhaltsverzeichnis)

1. [Installation](#installation)
2. [Konfiguration](#konfiguration)
3. [Verwendung](#verwendung)
4. [Feldnamen-Mapping](#feldnamen-mapping)
5. [Manuelle Übertragung (Delayed Transfer)](#manuelle-%C3%BCbertragung-delayed-transfer)
6. [Troubleshooting](#troubleshooting)
7. [FAQ](#faq)
8. [Haftungsausschluss](#haftungsausschluss)

---

Installation
------------

[](#installation)

### Via Contao Manager (empfohlen)

[](#via-contao-manager-empfohlen)

1. Contao Manager öffnen
2. Suche nach "ActiveCampaign Bundle"
3. Bundle installieren
4. Installation durchführen
5. Datenbank-Migration ausführen (siehe unten)

### Via Composer

[](#via-composer)

```
composer require con2net/contao-activecampaign-bundle
```

Anschließend:

1. Cache leeren:

    ```
    rm -rf var/cache/*
    php vendor/bin/contao-console cache:clear
    ```
2. Datenbank-Migration ausführen:

    ```
    php vendor/bin/contao-console contao:migrate
    ```

---

Konfiguration
-------------

[](#konfiguration)

### 1. ActiveCampaign API-Keys holen

[](#1-activecampaign-api-keys-holen)

1. In ActiveCampaign einloggen
2. Settings → Developer → API Access
3. API URL und API Key notieren

### 2. API-Credentials in Contao eintragen

[](#2-api-credentials-in-contao-eintragen)

Erstelle/Bearbeite die Datei `.env.local` im Root-Verzeichnis deiner Contao-Installation:

```
###> con2net/contao-activecampaign-bundle ###
ACTIVECAMPAIGN_API_URL=https://DEIN-ACCOUNT.api-us1.com
ACTIVECAMPAIGN_API_KEY=dein-api-key
###< con2net/contao-activecampaign-bundle ###
```

**Hinweis für Contao 4.13:** Falls du noch keine `.env.local` nutzt, funktioniert diese Konfigurationsmethode trotzdem. Contao 4.13 unterstützt ENV-Variablen.

### 3. Cache leeren

[](#3-cache-leeren)

```
rm -rf var/cache/*
php vendor/bin/contao-console cache:clear
```

---

Verwendung
----------

[](#verwendung)

### Schritt 1: Contao-Formular erstellen

[](#schritt-1-contao-formular-erstellen)

1. Backend → Formulare → Neues Formular
2. Formular-Felder hinzufügen:
    - E-Mail (Pflichtfeld!) mit Feldname: `email`
    - Vorname mit Feldname: `firstName`
    - Nachname mit Feldname: `lastName`
    - Telefon mit Feldname: `phone`
    - Submit-Button

**Tipp:** Die Feldnamen sind wichtig! Siehe [Feldnamen-Mapping](#feldnamen-mapping)

### Schritt 2: Listen-ID in ActiveCampaign finden

[](#schritt-2-listen-id-in-activecampaign-finden)

1. In ActiveCampaign einloggen
2. Lists öffnen
3. Gewünschte Liste anklicken
4. In der URL steht die ID: `.../list/view?id=8` → 8 ist die Listen-ID

### Schritt 3: Content Element einfügen

[](#schritt-3-content-element-einfügen)

1. Backend → Artikel bearbeiten → Neues Element
2. Element-Typ: Include-Elemente → ActiveCampaign Formular
3. Konfigurieren:

    - Formular: Dein Formular auswählen
    - Listen-ID: `8` (Beispiel)
    - Tags: `Website-Kontakt, DE` (komma-getrennt, optional)
4. Speichern → Fertig!

### Schritt 4: Testen

[](#schritt-4-testen)

1. Seite im Frontend öffnen
2. Formular ausfüllen und absenden
3. In ActiveCampaign prüfen ob der Kontakt angelegt wurde

**Debug:** Schaue in `var/logs/` nach Einträgen mit "activecampaign"

Beispiel für Log-Dateinamen:

```
# Die Log-Dateien enthalten das aktuelle Datum im Namen:
var/logs/prod-2025-11-24.log
var/logs/prod-2025-11-25.log
```

Suche nach ActiveCampaign-Einträgen:

```
grep "activecampaign" var/logs/prod-2025-11-24.log
```

---

Feldnamen-Mapping
-----------------

[](#feldnamen-mapping)

Das Bundle erkennt automatisch bestimmte Feldnamen und ordnet sie ActiveCampaign-Feldern zu.

### Standard-Felder

[](#standard-felder)

ActiveCampaignContao FeldnameAlternativenE-Mail`email``e-mail`, `e_mail`, `mail`Vorname`firstName``firstname`, `first_name`, `vorname`Nachname`lastName``lastname`, `last_name`, `nachname`Telefon`phone``telefon`, `telephone`, `tel`**Wichtig:** Groß-/Kleinschreibung beachten! `firstName` ist korrekt, `firstname` funktioniert auch, aber `FirstName` nicht optimal.

### Custom Fields

[](#custom-fields)

Für alle anderen Felder nutze das Format: **`acf_ID`**

#### Custom Field IDs herausfinden

[](#custom-field-ids-herausfinden)

**Option 1: Link im Backend (empfohlen für Redakteure)**

Im Content Element beim Feld "ActiveCampaign Listen-ID" findest du im Hilfetext einen klickbaren Link: **» Custom Field IDs anzeigen**

Dieser öffnet eine übersichtliche Anzeige aller verfügbaren Felder mit ihren IDs.

**Option 2: Console-Command**

```
php vendor/bin/contao-console activecampaign:debug-fields
```

Zeigt alle verfügbaren Felder mit IDs an.

**Option 3: Im Browser**

Öffne: `https://deine-domain.de/activecampaign/fields`

Zeigt eine schöne Übersicht aller Felder im Browser!

**Option 4: ActiveCampaign Backend**

1. Settings → Fields → Manage Fields
2. Feld anklicken
3. In der URL steht die ID: `.../field/edit?id=6`

#### Beispiel

[](#beispiel)

Du hast in ActiveCampaign folgende Custom Fields:

- Company (ID: 6)
- City (ID: 18)
- Message (ID: 8)

Dann benenne deine Contao-Formularfelder:

- `acf_6` → Firma
- `acf_18` → Stadt
- `acf_8` → Nachricht

**Fertig!** Das Bundle überträgt die Werte automatisch zu ActiveCampaign.

---

Manuelle Übertragung (Delayed Transfer)
---------------------------------------

[](#manuelle-übertragung-delayed-transfer)

Die manuelle Übertragung ermöglicht Freigabe **vor** der Übertragung zu ActiveCampaign.

### Wofür ist das gut?

[](#wofür-ist-das-gut)

- Qualitätskontrolle vor der Übertragung
- SPAM-Prüfung durch Menschen
- Compliance-Anforderungen
- Test-Formulare ohne Live-Übertragung

### Aktivierung

[](#aktivierung)

1. Content Element bearbeiten
2. "Manuelle Übertragung (Delayed Transfer)" aktivieren
3. "Auto-Löschung nach Tagen:" `10` (empfohlen)
4. Speichern

### Workflow

[](#workflow)

1. User füllt Formular aus → Submit
2. Daten werden in DB gespeichert (NICHT zu ActiveCampaign)
3. E-Mail an Admin mit allen Daten + Transfer-Link
4. Admin prüft E-Mail:
    - Sieht gut aus? → Klick auf Link
    - SPAM? → E-Mail ignorieren
5. Klick auf Link → Daten werden zu ActiveCampaign übertragen
6. Erfolgsseite wird angezeigt

### E-Mail-Template (Notification Center)

[](#e-mail-template-notification-center)

**Betreff:**

```
Neue Anfrage über Kontaktformular

```

**Text:**

```
Neue Anfrage:

Name: ##form_firstName## ##form_lastName##
E-Mail: ##form_email##
Telefon: ##form_phone##
Nachricht: ##form_message##

Zu ActiveCampaign übertragen:
##form_activecampaign_transfer_link##

```

**Wichtig:** Das Token `##form_activecampaign_transfer_link##` enthält den Transfer-Link!

### Sicherheit

[](#sicherheit)

- Token ist kryptographisch sicher (32+ Zeichen)
- Token ist einmalig verwendbar
- Automatische Löschung nach X Tagen
- Daten bleiben auf deinem Server

---

Troubleshooting
---------------

[](#troubleshooting)

### "No email address found in form data"

[](#no-email-address-found-in-form-data)

**Problem:** Formular hat kein E-Mail-Feld oder falscher Feldname.

**Lösung:**

- Formular muss ein Feld mit Namen `email` enthalten
- Alternativen: `e-mail`, `e_mail`, `mail`

### "ActiveCampaign API Error (HTTP 401)"

[](#activecampaign-api-error-http-401)

**Problem:** Falsche API-Credentials.

**Lösung:**

1. Prüfe `.env.local`
2. API URL korrekt? (z.B. `https://yourname.api-us1.com`)
3. API Key korrekt kopiert?
4. Teste mit: `php vendor/bin/contao-console activecampaign:debug-fields`

### "Contact added but fields are empty"

[](#contact-added-but-fields-are-empty)

**Problem:** Feldnamen-Mapping funktioniert nicht.

**Lösung:**

- Standard-Felder: `firstName`, `lastName`, `phone` (mit großem N!)
- Custom Fields: `acf_ID` Format verwenden
- IDs prüfen mit Link im Backend oder Console-Command

---

FAQ
---

[](#faq)

### Ist das Bundle DSGVO-konform?

[](#ist-das-bundle-dsgvo-konform)

**Ja!** Das Bundle nutzt eine serverseitige API-Integration. Es werden:

- Keine externen Skripte eingebunden
- Keine Cookies gesetzt
- Kein Tracking vor dem Submit
- Daten bleiben bis zum Submit auf deinem Server
- Übertragung erst nach explizitem Submit

**Wichtig:** Dein Formular muss trotzdem eine DSGVO-konforme Einwilligungserklärung enthalten!

### Kann ich mehrere Formulare mit verschiedenen Listen verbinden?

[](#kann-ich-mehrere-formulare-mit-verschiedenen-listen-verbinden)

**Ja!** Erstelle einfach mehrere Content Elemente mit verschiedenen Formularen und Listen-IDs.

### Funktioniert das mit Multi-Language-Sites?

[](#funktioniert-das-mit-multi-language-sites)

**Ja!** Erstelle für jede Sprache:

- Ein eigenes Formular
- Ein eigenes Content Element
- Unterschiedliche Tags (z.B. `Website-DE`, `Website-EN`)

### Was passiert bei API-Fehlern?

[](#was-passiert-bei-api-fehlern)

**Das Formular funktioniert trotzdem!**

- E-Mail wird normal versendet
- User sieht die Bestätigungsseite
- Nur die ActiveCampaign-Übertragung schlägt fehl
- Fehler wird geloggt

**Rationale:** Lieber Daten in der E-Mail als gar nichts!

### Kann ich das Bundle mit anderen Extensions kombinieren?

[](#kann-ich-das-bundle-mit-anderen-extensions-kombinieren)

**Ja!** Das Bundle ist kompatibel mit:

- Notification Center 1.x und 2.x
- Standard Contao E-Mail
- Anti-SPAM Extensions (z.B. con2net/contao-anti-spam-form-bundle)
- Anderen Form-Extensions

---

Haftungsausschluss
------------------

[](#haftungsausschluss)

Dieses Bundle wurde mit größter Sorgfalt entwickelt. Dennoch können sich die technischen Rahmenbedingungen (ActiveCampaign API, Contao-Versionen, PHP-Versionen etc.) jederzeit ändern.

**Die Nutzung erfolgt auf eigene Verantwortung.**

Der Entwickler übernimmt keine Garantie für:

- Korrekte Datenübertragung zu ActiveCampaign
- Vollständigkeit der übertragenen Daten
- Kompatibilität mit zukünftigen Versionen
- Funktionsfähigkeit nach Änderungen durch Drittanbieter

Es wird empfohlen, die Übertragung nach der Installation zu testen und regelmäßig zu prüfen.

**Bei geschäftskritischen Anwendungen sollte die manuelle Übertragung (Delayed Transfer) genutzt werden, um vor der Übertragung eine Kontrolle durchzuführen.**

---

Lizenz
------

[](#lizenz)

LGPL-3.0-or-later

Dieses Bundle ist freie Software und darf verwendet, verändert und weitergegeben werden gemäß den Bedingungen der GNU Lesser General Public License.

---

Weiterführende Links
--------------------

[](#weiterführende-links)

- ActiveCampaign API Docs:
- Contao Dokumentation:

---

**Hinweis:** Dieses Bundle wird ohne Gewährleistung bereitgestellt. Teste es gründlich vor dem produktiven Einsatz und passe die Einstellungen an deine Bedürfnisse an.

Entwickelt mit ❤️ in Norddeutschland von **connect2Net webServices** / Stefan Meise

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance70

Regular maintenance activity

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

2

Last Release

168d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ac0762d9bbef65a1c45415f29d26173d842821dcc779f4496d899b16fcdb98c3?d=identicon)[con2net](/maintainers/con2net)

---

Top Contributors

[![con2net](https://avatars.githubusercontent.com/u/13145836?v=4)](https://github.com/con2net "con2net (4 commits)")

### Embed Badge

![Health badge](/badges/con2net-contao-activecampaign-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/con2net-contao-activecampaign-bundle/health.svg)](https://phpackages.com/packages/con2net-contao-activecampaign-bundle)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[cravler/maxmind-geoip-bundle

Bundle integrating MaxMind GeoIP2 database into symfony application

27615.8k2](/packages/cravler-maxmind-geoip-bundle)[sulu/headless-bundle

Bundle that provides controllers and services for using Sulu as headless content management system

55133.7k2](/packages/sulu-headless-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
