IT
Unipile MCP · Inbox unificata

Creare una inbox unificata con un coding agent

Conversazioni LinkedIn, WhatsApp ed email in una sola lista, con la risposta dalla stessa schermata. Con il Server MCP Unipile, il suo agente scrive il recupero e l'unione dei dati.
Prova gratuita di 7 giorni, senza carta di credito.
Il suo agente · support-console
Unipile MCP connesso
Sarah
Costruisci una inbox unificata LinkedIn, WhatsApp ed email.
Esecuzione richiestaGET /v2/accounts/3 account
Aggiunta GET /api/inbox: una chiamata per account, un'unica forma degli elementi, ordinamento per data.
3 file modificati · 3 canali in una sola lista
Descriva la prossima funzionalità…
L'obiettivo

Che cosa si vuole ottenere

Mostrare ai suoi utenti, in una sola lista, tutte le conversazioni degli account che hanno collegato, e permettere di rispondere senza uscire dal suo prodotto. Prima la parte onesta: account_id si trova nel percorso di ogni route, quindi una inbox unificata è una chiamata per account seguita da un merge nella sua applicazione. L'API unifica la forma degli oggetti, non il numero di chiamate.
Senza Un client per provider, una forma ciascuno
Un client LinkedIn, un client WhatsApp e un client email, ognuno con il proprio modello e la propria paginazione.
Un unico « carica altro » che perde messaggi non appena un account esaurisce le pagine prima degli altri.
Una risposta inviata dall'account sbagliato, perché la chat e l'account non sono stati tenuti insieme.
Con il server MCP di Unipile Il risultato nella sua applicazione
Una sola lista di conversazioni su LinkedIn, WhatsApp ed email, ordinata per data, con il canale come badge.
Un carica altro che fa avanzare un cursore per account e non perde mai un messaggio.
La risposta dalla lista, sull'account proprietario della chat, testata sulla sua applicazione Development.
Prompt, passaggi, codice

Dia il prompt al suo agente

Due prompt, ciascuno con gli endpoint Unipile che l'agente legge ed esegue e ciò che arriva nel suo progetto. I percorsi sono completi, sull'URL di base dell'API https://api.unipile.com, con la sua chiave scoped passata nell'header X-API-KEY della richiesta.
Il suo agente · support-consoleApp Development
Costruisci una inbox unificata LinkedIn, WhatsApp ed email in questa applicazione: elenca gli account collegati, recupera una pagina di chat e una pagina di email per account, normalizzale in un'unica forma di elemento e ordinale per data.
Esecuzione richiestaGET /v2/accounts/3 account
Esecuzione richiestaGET /v2/{account_id}/chats200 · next_cursor
Aggiunta GET /api/inbox: elenca gli account, lancia GET /v2/{account_id}/chats e GET /v2/{account_id}/emails in parallelo, mappa entrambi su un unico InboxItem (id, account_id, channel, counterpart, preview, date, unread) e ordina per data. Aprire un elemento chiama la route dei messaggi di quella chat. Eseguita sull'app Development con un account di test LinkedIn, uno WhatsApp e uno Gmail.4 file modificati · testato sull'app Development

Una chiamata per account, una forma di elemento, un ordinamento

L'agente legge gli schemi Chat ed Email tramite il server e sceglie la forma comune minima: un identificatore, una data, un mittente, un'anteprima e il canale. Tutto ciò che è specifico del provider resta disponibile sull'oggetto grezzo per la vista di dettaglio. Instagram e Telegram passano dalle stesse route di chat, quindi un quarto canale è un account in più, non un client in più.
Endpoint usati dall'agente
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
Errore comune: cercare un filtro di query account_id. Si trova nel percorso: una chiamata per account, poi l'unione nella sua applicazione.
Costruire in dettaglio la parte LinkedIn
Il suo agente · support-consoleApp Development
Aggiungi la paginazione alla inbox unificata: mantieni un cursore per ogni account collegato, fai avanzare ciascuno in modo indipendente al carica altro e ferma un account quando il suo next_cursor è assente.
Lettura endpointGET /v2/{account_id}/chatsdata, total_count, next_cursor
Esecuzione richiestaGET /v2/{account_id}/emails?cursor=…200 OK
Sostituito l'offset globale con una Map<account_id, next_cursor> mantenuta nello stato della inbox. Il carica altro fa avanzare in parallelo ogni account che ha ancora un cursore, poi riordina la lista unita. Un account senza next_cursor viene marcato come esaurito e saltato. Verificato con tre account di dimensioni diverse sull'app Development.2 file modificati · nessun messaggio perso al carica altro

La envelope è la stessa ovunque: data, total_count, next_cursor

Ogni route di lista restituisce la stessa envelope. Rimandi next_cursor nel parametro cursor per ottenere la pagina successiva. Il contratto indica di usare il cursore quando il provider lo supporta e offset negli altri casi, e che limit è un limite massimo, non una garanzia: una pagina corta non segna la fine della lista, solo l'assenza di next_cursor la segna.
Endpoint usati dall'agente
GET/v2/{account_id}/chatsGET/v2/{account_id}/emailsGET/v2/{account_id}/chats/{chat_id}/participants
Errore comune: Un solo cursore per tutta la inbox. Ogni account pagina con il proprio cursore; uno condiviso perde messaggi non appena un account finisce prima degli altri.
Mantenere la lista aggiornata con i webhook
Paginazione

Una envelope, un cursore per account

Testuale dal contratto v2 che l'agente legge tramite il server. Gli stessi tre campi tornano su ogni route di lista.
1L'envelopedata contiene la pagina, total_count la dimensione quando il provider la fornisce, next_cursor il token per la pagina successiva. L'assenza di next_cursor indica la fine della lista di quell'account.GET https://api.unipile.com/v2/{account_id}/chats?limit=20 { "object": "ChatList", "items": [ … ], "cursor": "…" }
2Cursore o offsetUsi next_cursor quando il provider lo supporta, offset negli altri casi. Un codice che presuppone sempre uno dei due si rompe sulla prima casella IMAP.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
3La mappa dei cursoriUna voce per account nello stato della sua applicazione. Il carica altro fa avanzare ogni account che ha ancora un cursore ed elimina quelli che non ne hanno restituito alcuno.{ "acc_1a…": "eyJ…", "acc_9c…": null, "acc_f2…": "eyJ…" } limit è un limite massimo, non una garanzia
Dallo sviluppo alla produzione

Testare prima su un'applicazione Development

La dashboard Unipile separa un' applicazione Development dalla Produzione. Basta fornire all'agente una chiave scoped di Development e un account di test per canale: dimensioni di pagina reali, nessun cliente reale.
1Recuperare una pagina per accountLinkedIn, WhatsApp e un account email, uniti in una sola lista ordinata per data.
2Rispondere dalla listaLa chiamata di invio parte dall'account proprietario della chat.
3Carica altro con account disomogeneiNessun messaggio perso, account esauriti saltati, poi si passa la chiave alla Produzione.
crm-app · DevelopmentUsata dal suo agente
Scopedev-tests · 2 account
Chiavescoped Account API key
AccountAccount LinkedIn di test, casella Gmail di test
Webhooks1 endpoint · eventi message
crm-app · ProductionIntatta
Scopeuno per workspace
Chiavescoped keys, in your backend only
Accountgli account dei suoi utenti, tramite Hosted Auth
Troubleshooting

Errori frequenti e cosa significano

I quattro errori che rompono una inbox unificata, e come risolverli. Tre riguardano la paginazione.
Cercare account_id come filtro di query
Ci si aspetta che una sola chiamata restituisca tutti gli account. Soluzioneaccount_id si trova nel percorso. Chiami una volta per account e unisca nella sua applicazione; l'API unifica la forma, non il numero di chiamate.
Un solo cursore per tutta la inbox
Il carica altro perde messaggi quando un account finisce prima degli altri. SoluzioneMantenere una mappa da account_id a next_cursor. Far avanzare ogni account in modo indipendente e fermare quelli che non hanno restituito alcun cursore.
Mescolare cursore e offset
Il codice funziona su un provider e si rompe su un altro. SoluzioneUsare next_cursor quando il provider lo supporta e offset negli altri casi, come indica il contratto. Legga l'envelope di ogni account invece di dare per scontato.
Considerare limit una garanzia
Una pagina corta viene letta come la fine della lista. Soluzionelimit è un limite massimo. Solo l'assenza di next_cursor chiude la lista di un account; una pagina con meno elementi di quelli richiesti no.
6000+ Aziende che innovano con Unipile
Fiducia da parte dei leader del settore
1 API
Semplificare le operazioni per tutti i principali canali di comunicazione
2 giorni
Integrazione rapida con una configurazione minima
30%
Riduzione dell'impegno e delle risorse per la manutenzione

Sicurezza e conformità integrate

Protezione di livello aziendale per i vostri dati e flussi di lavoro Per saperne di più sulla nostra sicurezza
SOC 2 Tipo II
SOC 2 Tipo II
Certificato
Controlli di sicurezza verificati in modo indipendente che garantiscono la protezione dei dati e l'integrità operativa.
GDPR
GDPR
Conforme
Piena conformità alle normative europee sulla protezione dei dati per la privacy degli utenti.
99.9%
Uptime della piattaforma negli ultimi 24 mesi
24/7
Supporto globale con API ad alte prestazioni

FAQ inbox unificata

Una chiamata per account, gli endpoint necessari, la paginazione tra account, la forma di messaggi ed email e come mantenere la lista aggiornata.
No, per scelta di progetto. account_id fa parte del percorso, quindi si chiama una volta per account e si unisce nella propria applicazione. L'API unifica la forma degli oggetti, non il numero di chiamate.
GET /v2/accounts/ per l'elenco degli account, poi GET /v2/{account_id}/chats e GET /v2/{account_id}/emails per ogni account, poi GET /v2/{account_id}/chats/{chat_id}/messages per aprire una conversazione. Le risposte passano da POST /v2/{account_id}/chats/{chat_id}/messages/send e POST /v2/{account_id}/emails/send.
Un cursore per account. Ogni route di lista restituisce data, total_count e next_cursor. Rimandi next_cursor nel parametro cursor e mantenga una mappa di cursori, uno per account, nello stato della sua applicazione.
Le conversazioni di messaggistica sono oggetti Chat e le email sono oggetti Email, ognuno con i propri campi. La normalizzazione avviene nella sua applicazione su almeno tre campi: identificatore, data e mittente. L'agente legge entrambi gli schemi tramite il server e scrive questa mappatura.
Con un endpoint webhook sottoscritto a message.new e email.new. La pagina dedicata mostra come un agente lo configura.