Unipile MCP · Unified Inbox
Eine Unified Inbox mit einem Coding-Agenten bauen
LinkedIn-, WhatsApp- und E-Mail-Konversationen in einer Liste, mit Antwort aus derselben Ansicht. Mit dem Unipile MCP-Serverschreibt Ihr Agent den Abruf und den Merge.
7 Tage kostenlos testen, ohne Kreditkarte.
Ihr Agent · support-console
Unipile MCP verbunden
Baue eine Unified Inbox für LinkedIn, WhatsApp und E-Mail.
Anfrage ausführenGET /v2/accounts/3 Konten
GET /api/inbox ergänzt: ein Aufruf pro Konto, eine Eintragsstruktur, nach Datum sortiert.
Nächstes Feature beschreiben…
Die Aufgabe
Was Sie erreichen wollen
Zeigen Sie Ihren Nutzern alle Konversationen aus den verbundenen Konten in einer Liste, und lassen Sie sie antworten, ohne Ihr Produkt zu verlassen. Zuerst der ehrliche Teil: account_id steht im Pfad jeder Route, eine Unified Inbox ist also ein Aufruf pro Konto plus ein Merge in Ihrer Anwendung. Vereinheitlicht wird die Struktur der Objekte, nicht die Anzahl der Aufrufe.
Ohne
Ein Client pro Anbieter, jeder mit eigener Struktur
Ein LinkedIn-Client, ein WhatsApp-Client und ein E-Mail-Client, jeder mit eigenem Modell und eigener Pagination.
Ein einziges „Mehr laden“, das Nachrichten verliert, sobald einem Konto die Seiten vor den anderen ausgehen.
Eine Antwort, die über das falsche Konto rausgeht, weil Chat und Konto nicht zusammengehalten wurden.
Mit dem Unipile MCP-Server
Das Ergebnis in Ihrer Anwendung
Eine nach Datum sortierte Liste aller Konversationen aus LinkedIn, WhatsApp und E-Mail, mit dem Kanal als Badge.
„Mehr laden“, das pro Konto einen Cursor weiterschiebt und nie eine Nachricht verliert.
Antwort direkt aus der Liste, über das Konto, dem der Chat gehört, getestet in Ihrer Development-Anwendung.
Prompt, Schritte, Code
Geben Sie Ihrem Agenten den Prompt
Zwei Prompts, jeweils mit den Unipile-Endpoints, die der Agent liest und aufruft, und dem, was in Ihrem Projekt landet. Die Pfade sind vollständig, auf der API-Basis-URL
https://api.unipile.com, mit Ihrem Scoped Key im X-API-KEY Header.Baue in dieser Anwendung eine Unified Inbox für LinkedIn, WhatsApp und E-Mail: Liste die verbundenen Konten auf, hole pro Konto eine Seite Chats und eine Seite E-Mails, normalisiere sie in eine einheitliche Eintragsstruktur und sortiere nach Datum.
Anfrage ausführenGET /v2/accounts/3 Konten
Anfrage ausführenGET /v2/{account_id}/chats200 · next_cursor
Ergänzt
GET /api/inbox: listet die Konten, ruft GET /v2/{account_id}/chats und GET /v2/{account_id}/emails parallel auf, bildet beide auf ein InboxItem ab (id, account_id, channel, counterpart, preview, date, unread) und sortiert nach Datum. Beim Öffnen eines Eintrags wird die Messages-Route dieses Chats aufgerufen. In der Development-App mit je einem LinkedIn-, WhatsApp- und Gmail-Testkonto ausgeführt.Ein Aufruf pro Konto, eine Eintragsstruktur, eine Sortierung
Der Agent liest die Chat- und E-Mail-Schemas über den Server und legt die minimale gemeinsame Struktur fest: eine ID, ein Datum, einen Absender, eine Vorschau und den Kanal. Alles Anbieterspezifische bleibt im Rohobjekt für die Detailansicht verfügbar. Instagram und Telegram laufen über dieselben Chat-Routen, ein vierter Kanal ist also ein weiteres Konto, kein weiterer Client.
Endpoints, die der Agent nutzt
GET/v2/accounts/GET/v2/{account_id}/chatsGET/v2/{account_id}/emailsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/sendPOST/v2/{account_id}/emails/send
Häufiger Fehler: Einen Query-Filter account_id suchen. Er steht im Pfad: ein Aufruf pro Konto, dann der Merge in Ihrer Anwendung.
Die LinkedIn-Seite im Detail bauen
Ergänze die Unified Inbox um Pagination: Halte einen Cursor pro verbundenem Konto, schiebe jeden bei „Mehr laden“ unabhängig weiter und stoppe ein Konto, sobald sein next_cursor fehlt.
Endpoint lesenGET /v2/{account_id}/chatsdata, total_count, next_cursor
Anfrage ausführenGET /v2/{account_id}/emails?cursor=…200 OK
Den globalen Offset ersetzt durch eine
Map<account_id, next_cursor> im Inbox-State. „Mehr laden“ schiebt jedes Konto, das noch einen Cursor hat, parallel weiter und sortiert dann die zusammengeführte Liste neu. Ein Konto ohne next_cursor wird als erschöpft markiert und übersprungen. Mit drei unterschiedlich großen Konten in der Development-App verifiziert.Der Envelope ist überall gleich: data, total_count, next_cursor
Jede Listen-Route liefert denselben Envelope. Übergeben Sie
next_cursor wieder im Parameter cursor , um die nächste Seite zu holen. Laut Vertrag nutzen Sie den Cursor, wenn der Anbieter ihn unterstützt, und offset andernfalls, und limit ist eine Obergrenze, keine Garantie: Eine kurze Seite ist nicht das Ende der Liste, erst ein fehlender next_cursor ist es.Endpoints, die der Agent nutzt
GET/v2/{account_id}/chatsGET/v2/{account_id}/emailsGET/v2/{account_id}/chats/{chat_id}/participants
Häufiger Fehler: Ein Cursor für die ganze Inbox. Jedes Konto paginiert mit seinem eigenen Cursor; ein gemeinsamer verliert Nachrichten, sobald ein Konto vor den anderen endet.
Die Liste mit Webhooks live halten
Pagination
Ein Envelope, ein Cursor pro Konto
Wörtlich aus dem v2-Vertrag, den der Agent über den Server liest. Dieselben drei Felder kommen bei jeder Listen-Route zurück.
1Der Envelopedata enthält die Seite, total_count die Größe, sofern der Anbieter sie liefert, next_cursor das Token für die nächste Seite. Ein fehlender next_cursor bedeutet das Ende der Liste dieses Kontos.GET https://api.unipile.com/v2/{account_id}/chats?limit=20
{ "object": "ChatList", "items": [ … ], "cursor": "…" }
2Cursor oder OffsetNutzen Sie next_cursor, wann immer der Anbieter es unterstützt, sonst offset. Code, der für jeden Anbieter eines von beiden voraussetzt, bricht beim ersten IMAP-Postfach.GET https://api.unipile.com/v2/{account_id}/emails?cursor=…&limit=20
GET https://api.unipile.com/v2/{account_id}/chats?offset=40&limit=20
3Die Cursor-MapEin Eintrag pro Konto im State Ihrer Anwendung. „Mehr laden“ schiebt jedes Konto weiter, das noch einen Cursor hat, und entfernt die, die keinen zurückgegeben haben.{ "acc_1a…": "eyJ…", "acc_9c…": null, "acc_f2…": "eyJ…" }
limit ist eine Obergrenze, keine Garantie
Von Development zu Production
Zuerst in einer Development-Anwendung testen
Ihr Unipile-Dashboard trennt eine Development-Anwendung von Production. Geben Sie dem Agenten einen Scoped Key aus Development und ein Testkonto pro Kanal: echte Seitengrößen, kein echter Kunde.
1Eine Seite pro Konto abrufenLinkedIn, WhatsApp und ein E-Mail-Konto, zusammengeführt in einer nach Datum sortierten Liste.
2Aus der Liste antwortenDer Send-Aufruf läuft über das Konto, dem der Chat gehört.
3Nachladen bei ungleich großen KontenKeine Nachricht verloren, erschöpfte Konten übersprungen, danach den Key auf Production umstellen.
crm-app · DevelopmentVon Ihrem Agenten genutzt
Scopedev-tests · 2 Konten
Key
scoped Account API keyKontenLinkedIn-Testkonto, Gmail-Testpostfach
Webhooks1 Endpoint · Message-Events
crm-app · ProductionUnberührt
Scopeeiner pro Workspace
Key
scoped keys, in your backend onlyKontendie eigenen Konten Ihrer Nutzer, über Hosted Auth
Fehlerbehebung
Häufige Fehler und was sie bedeuten
Die vier Fehler, die eine Unified Inbox kaputt machen, und die jeweilige Lösung. Drei davon betreffen die Pagination.
account_id als Query-Filter suchen
Ein einzelner Aufruf soll alle Konten zurückgeben.
Lösungaccount_id steht im Pfad. Rufen Sie einmal pro Konto auf und führen Sie in Ihrer Anwendung zusammen; die API vereinheitlicht die Struktur, nicht die Anzahl der Aufrufe.
Ein Cursor für die gesamte Inbox
Beim Nachladen gehen Nachrichten verloren, sobald ein Konto vor den anderen endet.
LösungHalten Sie eine Map von account_id zu next_cursor. Schieben Sie jedes Konto unabhängig weiter und stoppen Sie die, die keinen Cursor zurückgegeben haben.
Cursor und Offset vermischen
Der Code funktioniert bei einem Anbieter und bricht beim nächsten.
LösungNutzen Sie next_cursor , wenn der Anbieter es unterstützt, sonst offset , wie es der Vertrag vorgibt. Lesen Sie den Envelope jedes Kontos, statt etwas anzunehmen.
limit als Garantie behandeln
Eine kurze Seite wird als Ende der Liste gelesen.
Lösunglimit ist eine Obergrenze. Nur ein fehlender next_cursor beendet die Liste eines Kontos, eine Seite mit weniger Einträgen als angefragt nicht.
6000+
Unternehmen, die mit Unipile innovieren
Vertrauen bei Branchenführern
1 API
Rationalisierung der Abläufe für alle wichtigen Kommunikationskanäle
2 Tage
Schnelle Live-Integration mit minimaler Einrichtung
30%
Verringerung des Wartungsaufwands und der Ressourcen
Integrierte Sicherheit und Compliance
Unternehmensgerechter Schutz für Ihre Daten und Arbeitsabläufe Erfahren Sie mehr über unsere Sicherheit
SOC 2 Typ II
Zertifiziert
Unabhängig geprüfte Sicherheitskontrollen zur Gewährleistung des Datenschutzes und der betrieblichen Integrität.
GDPR
Konform
Vollständige Einhaltung der europäischen Datenschutzbestimmungen zum Schutz der Privatsphäre der Nutzer.
99.9%
Betriebszeit der Plattform in den letzten 24 Monaten
24/7
Globaler Support mit leistungsstarker API
FAQ zur Unified Inbox
Ein Aufruf pro Konto, die nötigen Endpoints, Pagination über mehrere Konten, Nachrichten- und E-Mail-Strukturen und wie die Liste aktuell bleibt.
Nein, bewusst nicht.
account_id ist Teil des Pfades, Sie rufen also einmal pro Konto auf und führen in Ihrer Anwendung zusammen. Vereinheitlicht wird die Struktur der Objekte, nicht die Anzahl der Aufrufe.GET /v2/accounts/ für die Liste der Konten, dann GET /v2/{account_id}/chats und GET /v2/{account_id}/emails pro Konto, dann GET /v2/{account_id}/chats/{chat_id}/messages , um eine Konversation zu öffnen. Antworten laufen über POST /v2/{account_id}/chats/{chat_id}/messages/send und POST /v2/{account_id}/emails/send.Ein Cursor pro Konto. Jede Listen-Route liefert
data, total_count und next_cursorÜbergeben Sie next_cursor wieder im Parameter cursor und halten Sie eine Map der Cursor, einen pro Konto, im State Ihrer Anwendung.Messaging-Konversationen sind Chat-Objekte, E-Mails sind E-Mail-Objekte, jeweils mit eigenen Feldern. Die Normalisierung passiert in Ihrer Anwendung, auf mindestens drei Feldern: ID, Datum und Absender. Der Agent liest beide Schemas über den Server und schreibt dieses Mapping.
Mit einem Webhook-Endpoint, der
message.new und email.newabonniert. Die eigene Seite dazu zeigt, wie ein Agent das einrichtet.