App Activity API v1
Emperor holt registrierte Nutzer und Tagesaktivität per gemeinsamem Vertrag aus Anwendungen. Jede Anwendung kann ihn umsetzen, nicht nur eigene. Die Anwendung bleibt die Quelle; spätere Syncs aktualisieren Daten. Derselbe Mensch aus mehreren Apps erzeugt keine doppelte Person.
Diese Seite richtet sich an Teams, die den Vertrag implementieren. Das maschinenlesbare OpenAPI-3.1-Dokument ist die App-Activity-API-Spezifikation.
v1 ist ein Entwurf und kann sich bis zur Finalisierung ändern. Nach der Finalisierung kommen inkompatible Änderungen als /v2.
Ressourcen
Die Anwendung stellt drei GET-Ressourcen unter /v1 bereit, relativ zur App-Activity-API-URL:
/v1/manifest— Vertragsversion (1), Anwendungsname, IANA-Zeitzone für Aktivitätstage und der Katalog der Aktivitätsschlüssel mit Labels./v1/users— Nutzer. Query:updatedSince,cursor,limit./v1/activity— Tagesaggregate, eine Zeile je Nutzer, Kalendertag und Schlüssel aus dem Katalog. Dieselben Query-Parameter wie bei users.
Ist contractVersion nicht 1, lehnt Emperor die Verbindung mit einem klaren Fehler ab.
Cursor und Überschreiben der Aktivität
updatedSince ist ein ISO-8601-DateTime mit Offset oder Z. Es kommen Datensätze mit updatedAt größer oder gleich diesem Wert. Ohne Parameter: voller Export. cursor ist ein undurchsichtiger String aus dem nextCursor der vorigen Seite. limit ist standardmäßig 100, höchstens 100.
Listenantworten sind { "data": [...], "nextCursor": null | string }. nextCursor ist null auf der letzten Seite.
Eine spätere Aktivitätszeile für dasselbe (externalUserId, day, metricKey) ersetzt den gespeicherten Zähler. Anwendungen senden Tagessummen, keine Rohereignisse.
E-Mail oder Telefon
Jeder Nutzer braucht email, phone (E.164, zum Beispiel +79991234567) oder beides. Ein Datensatz ohne beides wird vom Vertrag abgelehnt. Emperor zählt ihn im Sync als abgelehnt und legt keine Person an.
Wie Emperor Kontakte zuordnet
Ein Mensch im CRM ist Person. E-Mail und Telefon sind Kontakte. Die Anwendungsidentität liegt auf einem eigenen Link: eine Person, mehrere Apps.
- E-Mail wird normalisiert (Trim und Kleinbuchstaben). Telefon steht in E.164.
- Eine bereits verknüpfte Identität (
LINKED) aktualisiert nur den Identitätsschnitt und die Aktivität. Der Name der Person bleibt unverändert. - Eine verworfene Identität wird nicht zugeordnet.
- Eine neue Identität ohne Treffer erzeugt eine Person und E-Mail-/Telefon-Kontakte.
- Jeder Treffer auf eine vorhandene Person, inklusive Konflikt bei E-Mail/Telefon oder einer zweiten App mit derselben E-Mail, landet in
PENDING_REVIEW. Es gibt keine zweite Person und kein automatisches Zusammenführen.
Treffer prüfen
Öffnen Sie CRM → Treffer aus Anwendungen. Die Warteschlange sind Treffer, die auf Prüfung warten. Jede Zeile zeigt den Profilschnitt aus der App, E-Mail und Telefon, Kandidaten-Personen und den Grund (E-Mail, Telefon, beides oder Konflikt E-Mail/Telefon).
Vergleichen Sie die eingehenden Daten mit Kontakten und verknüpften Anwendungen jedes Kandidaten und wählen Sie eine Aktion:
- Verknüpfen mit dem gewählten Kandidaten. Fehlende E-Mail und Telefon werden als Kontakte ergänzt. Die Identität wird
LINKED. Es entsteht keine zweite Person, der Name bleibt. - Anlegen einer neuen Person, wie bei einer Synchronisation ohne Treffer. Die Identität wird
LINKED. - Verwerfen. Die Identität wird
DISCARDED. Die nächste Synchronisation setzt sie nicht erneut in die Warteschlange. Emperor speichert, wer entschieden hat und wann.
Checkliste für den Anschluss
/v1/manifest,/v1/usersund/v1/activityin Production nur über HTTPS anbieten.- Ein Bearer-Token mit hoher Entropie pro Projekt–Anwendung ausstellen, nur Leserechte für diese API. Kein dienstweiter Schlüssel.
- Token zeitkonstant vergleichen. Eine Anfrage ohne gültiges Bearer liefert
401als RFC-7807application/problem+json. Nicht unterscheiden, ob der Token fehlt oder falsch ist. User-Agent: Emperor-AppProvider/1.0undX-Request-Id(UUID) annehmen. Dieselbe Id in Problem-Dokumenten bei Fehlern zurückgeben.- Bei
429Retry-Aftersenden. - Rotation: im Rotationsfenster aktuellen und vorherigen Token akzeptieren, danach den alten widerrufen.
Anwendung in Emperor verbinden
Im Development-Projekt Anwendungen öffnen (Schnellaktion oder Projekteinstellungen). Eine vorhandene Publikation mit App-Activity-API-Verbindung verknüpfen oder eine neue Publikation anlegen (Name, UID, Domain, Server, App-Activity-API-URL, Token). Das Token ist nur schreibbar: die UI zeigt danach nur den Fingerabdruck.
Auf den Bearbeitungs- und Ansichtsseiten der Publikation heißt der Block App-Aktivität. Die Ansicht zeigt die URL vollständig (nicht „Konfiguriert“) und den Token-Fingerabdruck.
Prüfen ruft GET {baseUrl}/v1/manifest auf. Synchronisieren in der Zeile oder Alle synchronisieren holt users und danach activity in derselben HTTP-Anfrage (höchstens fünf Minuten). Trennen löscht die Projektbindung und die Cursor; die Publikation bleibt.
Emperor speichert Verbindung, Synchronisationscursor und Laufverlauf. Derselbe Sync ordnet Identitäten zu: ohne Treffer entsteht eine Person; jeder bestehende Treffer geht in die Prüfliste.
Auf der Person-Karte listet Anwendungen verknüpfte Identitäten, Registrierung, zuletzt gesehen und Aktivität für Zeitraum und Metrik. Die CRM-Kontaktliste filtert Personen mit einer verknüpften Identität einer gewählten Anwendung.
Grenzen
- Eine Sync-Anfrage, die länger als fünf Minuten läuft, wird beendet.
- Bleibt ein Sync hängen und antwortet mit HTTP
409, beendet Sperre aufheben in der Zeile Anwendungen den Lauf alsFAILED, ohne Cursor zu verschieben. Danach erneut Synchronisieren. - Aktivität eines wegen fehlender E-Mail und Telefonnummer abgelehnten Nutzers kommt nach einer Profilkorrektur erst zurück, wenn sich
updatedAtdieser Aktivitätszeile ändert. Ein vollständiger Neuabzug erfordert Trennen und erneutes Verknüpfen.
Sicherheit und Audit-Log der Anwendung
v1 ist HTTPS plus Bearer-Token an der Bindung Projekt–Anwendung.
Empfohlen: jede App-Activity-API-Anfrage mit Zeit, Quell-IP, X-Request-Id, User-Agent, Ressource (manifest / users / activity), updatedSince, HTTP-Status und Anzahl gelieferter Datensätze loggen. Token, Authorization, E-Mail, Telefon und Antwortkörper nicht loggen.
Ebenfalls empfohlen: ein Token nur für diese API; Rate-Limit; Alarme bei einer 401-Serie, fremdem User-Agent, unerwarteter IP oder plötzlichem Mengensprung. Keine IP-Allowlist verlangen: die ausgehenden Adressen von Emperor sind keine einzelne feste IP.