Una guida all'uso di SparkPost con Node.js

Uccello

1 set 2017

Email

1 min read

Una guida all'uso di SparkPost con Node.js

Conclusioni principali

    • SparkPost offre diversi modi per inviare email da Node.js — chiamate API dirette, trasporto Nodemailer e consegna multi-canale con notif.me.

    • Conservare le chiavi API nelle variabili d'ambiente, mai codificarle direttamente. SparkPost rileva automaticamente SPARKPOST_API_KEY.

    • L'API Transmissions ti offre una flessibilità potente: modelli, dati di sostituzione, allegati e tagging delle campagne.

    • Gli utenti di Nodemailer possono passare a SparkPost immediatamente con il trasporto ufficiale — senza riscritture di codice importanti.

    • notif.me offre consegna multi-canale (email, SMS, push) con strategie di fallback, rendendolo ideale per sistemi di notifiche robusti.

    • Node.js si adatta naturalmente alle moderne API email cloud e ai flussi di lavoro serverless, rendendo facile l'integrazione delle funzionalità di email direttamente all'interno della tua app.

Q&A Highlights

  • Qual è il modo più veloce per iniziare a inviare email con SparkPost in Node.js?

    Installa il pacchetto sparkpost, inizializza il client con una chiave API (preferibilmente tramite variabili di ambiente) e chiama il metodo transmissions.send() con destinatari + contenuto.

  • Ho bisogno di memorizzare la mia chiave SparkPost API nel codice?

    No — e non dovresti. Usa le variabili d'ambiente. Il client legge automaticamente SPARKPOST_API_KEY.

  • Posso inviare email utilizzando modelli invece di HTML inline?

    Sì. L'API Transmissions supporta modelli salvati, dati di sostituzione, liste di destinatari, allegati, cc/bcc e altro.

  • E se già utilizzo Nodemailer?

    Sei coperto — SparkPost viene fornito con un trasporto ufficiale per Nodemailer. Basta configurarlo con la tua chiave API e usare Nodemailer come al solito.

  • SparkPost può funzionare con sistemi di messaggistica multi-canale?

    Sì. Librerie come notifme-sdk consentono email, SMS, push e webpush con logica di fallback, e includono un provider SparkPost.

  • Is Node.js adatto per i flussi di lavoro email serverless?

    Assolutamente. Si abbina bene con Cloud Functions, Lambdas e qualsiasi ambiente serverless che utilizza l'API di SparkPost per email basate su eventi.

  • Chi dovrebbe usare la Transmissions API rispetto a Nodemailer o notif.me?

    • Usa Transmissions API quando desideri pieno controllo e prestazioni.

    • Usa Nodemailer se il tuo progetto lo utilizza già e vuoi un'integrazione rapida.

    • Usa notif.me per messaggistica multi-canale o strategie di consegna di fallback.

  • Qual è la migliore pratica da seguire quando si inviano email da Node?

    Considera la tua API key come sensibile — solo variabili d'ambiente, non commetterla mai nel codice.

Introduzione a Node.js

Come Developer Advocate per SparkPost, scrivo molte applicazioni di esempio. Il mio background è principalmente nello sviluppo front-end, quindi il mio linguaggio più forte è JavaScript. Grazie a Node.js, sono anche un discreto sviluppatore backend. Parlando di applicazioni di esempio, Node.js funziona anche alla grande per costruire funzioni serverless che si integrano con Flow Builder - come la nostra guida all'integrazione con Google Cloud Functions e Vision API. Significa questo che ora sono uno sviluppatore full stack? Comunque, era importante per me che avessimo una libreria client di SparkPost eccezionale per Node.js. Quindi, mi sono immerso completamente ed sono diventato un collaboratore (ancor prima di essere assunto).

Permettetemi di aiutarvi a iniziare ad inviare email con SparkPost nel vostro progetto Node.js. Prima di approfondire i dettagli specifici di Node.js, potreste voler comprendere i fondamentali delle API email nell'infrastruttura cloud e come si inseriscono nello sviluppo moderno delle applicazioni.

Come Developer Advocate per SparkPost, scrivo molte applicazioni di esempio. Il mio background è principalmente nello sviluppo front-end, quindi il mio linguaggio più forte è JavaScript. Grazie a Node.js, sono anche un discreto sviluppatore backend. Parlando di applicazioni di esempio, Node.js funziona anche alla grande per costruire funzioni serverless che si integrano con Flow Builder - come la nostra guida all'integrazione con Google Cloud Functions e Vision API. Significa questo che ora sono uno sviluppatore full stack? Comunque, era importante per me che avessimo una libreria client di SparkPost eccezionale per Node.js. Quindi, mi sono immerso completamente ed sono diventato un collaboratore (ancor prima di essere assunto).

Permettetemi di aiutarvi a iniziare ad inviare email con SparkPost nel vostro progetto Node.js. Prima di approfondire i dettagli specifici di Node.js, potreste voler comprendere i fondamentali delle API email nell'infrastruttura cloud e come si inseriscono nello sviluppo moderno delle applicazioni.

Come Developer Advocate per SparkPost, scrivo molte applicazioni di esempio. Il mio background è principalmente nello sviluppo front-end, quindi il mio linguaggio più forte è JavaScript. Grazie a Node.js, sono anche un discreto sviluppatore backend. Parlando di applicazioni di esempio, Node.js funziona anche alla grande per costruire funzioni serverless che si integrano con Flow Builder - come la nostra guida all'integrazione con Google Cloud Functions e Vision API. Significa questo che ora sono uno sviluppatore full stack? Comunque, era importante per me che avessimo una libreria client di SparkPost eccezionale per Node.js. Quindi, mi sono immerso completamente ed sono diventato un collaboratore (ancor prima di essere assunto).

Permettetemi di aiutarvi a iniziare ad inviare email con SparkPost nel vostro progetto Node.js. Prima di approfondire i dettagli specifici di Node.js, potreste voler comprendere i fondamentali delle API email nell'infrastruttura cloud e come si inseriscono nello sviluppo moderno delle applicazioni.

Installazione e Configurazione

Assumo che tu abbia installato Node.js. Poiché seguiamo il programma di supporto a lungo termine (LTS) di Node.js, dovrai eseguire la versione 4 o superiore. Puoi vedere quale versione stai eseguendo usando il comando `node –version` nella finestra del terminale.

Creiamo un nuovo progetto npm. Se ne hai già uno, puoi saltare questa parte.

> mkdir sparkpost-test > cd sparkpost-test > npm init --yes

Questo creerà un nuovo progetto e accetterà tutti i valori predefiniti. Puoi anche eseguire `npm init` e rispondere a tutti i prompt.

Ora possiamo installare node-sparkpost:

> npm install sparkpost --save

Una volta installato, puoi importare e creare un'istanza della classe SparkPost:

const SparkPost = require('sparkpost') const client = new SparkPost('YOUR API KEY')

È buona pratica evitare di inserire la tua chiave API nel codice. Raccomandiamo vivamente di memorizzarla al di fuori del tuo codice, perciò abbiamo configurato la libreria client per rilevare la variabile d'ambiente SPARKPOST_API_KEY.

Assumo che tu abbia installato Node.js. Poiché seguiamo il programma di supporto a lungo termine (LTS) di Node.js, dovrai eseguire la versione 4 o superiore. Puoi vedere quale versione stai eseguendo usando il comando `node –version` nella finestra del terminale.

Creiamo un nuovo progetto npm. Se ne hai già uno, puoi saltare questa parte.

> mkdir sparkpost-test > cd sparkpost-test > npm init --yes

Questo creerà un nuovo progetto e accetterà tutti i valori predefiniti. Puoi anche eseguire `npm init` e rispondere a tutti i prompt.

Ora possiamo installare node-sparkpost:

> npm install sparkpost --save

Una volta installato, puoi importare e creare un'istanza della classe SparkPost:

const SparkPost = require('sparkpost') const client = new SparkPost('YOUR API KEY')

È buona pratica evitare di inserire la tua chiave API nel codice. Raccomandiamo vivamente di memorizzarla al di fuori del tuo codice, perciò abbiamo configurato la libreria client per rilevare la variabile d'ambiente SPARKPOST_API_KEY.

Assumo che tu abbia installato Node.js. Poiché seguiamo il programma di supporto a lungo termine (LTS) di Node.js, dovrai eseguire la versione 4 o superiore. Puoi vedere quale versione stai eseguendo usando il comando `node –version` nella finestra del terminale.

Creiamo un nuovo progetto npm. Se ne hai già uno, puoi saltare questa parte.

> mkdir sparkpost-test > cd sparkpost-test > npm init --yes

Questo creerà un nuovo progetto e accetterà tutti i valori predefiniti. Puoi anche eseguire `npm init` e rispondere a tutti i prompt.

Ora possiamo installare node-sparkpost:

> npm install sparkpost --save

Una volta installato, puoi importare e creare un'istanza della classe SparkPost:

const SparkPost = require('sparkpost') const client = new SparkPost('YOUR API KEY')

È buona pratica evitare di inserire la tua chiave API nel codice. Raccomandiamo vivamente di memorizzarla al di fuori del tuo codice, perciò abbiamo configurato la libreria client per rilevare la variabile d'ambiente SPARKPOST_API_KEY.

Invio Email

Ora che hai una istanza di SparkPost, sei pronto per inviare. Ci sono molte opzioni disponibili per l'invio, ma iniziamo con un esempio semplice. Ecco come inviare un'email a un singolo destinatario, specificando il contenuto inline:

client.transmissions.send({
  content: {
    from: 'test@your-sending-domain.com',
    subject: 'Hello from node-sparkpost',
    html: '<p>Hello world</p>'
  },
  recipients: [
    { address: 'someone@somedomain.com' }
  ]
})
.then(data => {
  console.log('Woohoo! You just sent your first mailing!')
  console.log(data)
})
.catch(err => {
  console.log('Whoops! Something went wrong')
  console.log(err)
})

Nota: Questo esempio utilizza Promises, ma non preoccuparti. Noi supportiamo anche le funzioni di callback.

Per le applicazioni aziendali che richiedono una gestione completa delle email, gli sviluppatori potrebbero anche dover considerare di costruire sistemi di archiviazione delle email per gestire i requisiti di archiviazione e conformità.

Ci sono più opzioni disponibili con transmissions, tra cui specificare modelli o liste dei destinatari memorizzati, cc e bcc, aggiungere allegati, specificare una campagna, usare dati di sostituzione e molto altro ancora. Guarda gli esempi, i documenti per la risorsa Transmissions, e la documentazione dell'API Transmissions per ulteriori informazioni.

Ora che hai una istanza di SparkPost, sei pronto per inviare. Ci sono molte opzioni disponibili per l'invio, ma iniziamo con un esempio semplice. Ecco come inviare un'email a un singolo destinatario, specificando il contenuto inline:

client.transmissions.send({
  content: {
    from: 'test@your-sending-domain.com',
    subject: 'Hello from node-sparkpost',
    html: '<p>Hello world</p>'
  },
  recipients: [
    { address: 'someone@somedomain.com' }
  ]
})
.then(data => {
  console.log('Woohoo! You just sent your first mailing!')
  console.log(data)
})
.catch(err => {
  console.log('Whoops! Something went wrong')
  console.log(err)
})

Nota: Questo esempio utilizza Promises, ma non preoccuparti. Noi supportiamo anche le funzioni di callback.

Per le applicazioni aziendali che richiedono una gestione completa delle email, gli sviluppatori potrebbero anche dover considerare di costruire sistemi di archiviazione delle email per gestire i requisiti di archiviazione e conformità.

Ci sono più opzioni disponibili con transmissions, tra cui specificare modelli o liste dei destinatari memorizzati, cc e bcc, aggiungere allegati, specificare una campagna, usare dati di sostituzione e molto altro ancora. Guarda gli esempi, i documenti per la risorsa Transmissions, e la documentazione dell'API Transmissions per ulteriori informazioni.

Ora che hai una istanza di SparkPost, sei pronto per inviare. Ci sono molte opzioni disponibili per l'invio, ma iniziamo con un esempio semplice. Ecco come inviare un'email a un singolo destinatario, specificando il contenuto inline:

client.transmissions.send({
  content: {
    from: 'test@your-sending-domain.com',
    subject: 'Hello from node-sparkpost',
    html: '<p>Hello world</p>'
  },
  recipients: [
    { address: 'someone@somedomain.com' }
  ]
})
.then(data => {
  console.log('Woohoo! You just sent your first mailing!')
  console.log(data)
})
.catch(err => {
  console.log('Whoops! Something went wrong')
  console.log(err)
})

Nota: Questo esempio utilizza Promises, ma non preoccuparti. Noi supportiamo anche le funzioni di callback.

Per le applicazioni aziendali che richiedono una gestione completa delle email, gli sviluppatori potrebbero anche dover considerare di costruire sistemi di archiviazione delle email per gestire i requisiti di archiviazione e conformità.

Ci sono più opzioni disponibili con transmissions, tra cui specificare modelli o liste dei destinatari memorizzati, cc e bcc, aggiungere allegati, specificare una campagna, usare dati di sostituzione e molto altro ancora. Guarda gli esempi, i documenti per la risorsa Transmissions, e la documentazione dell'API Transmissions per ulteriori informazioni.

Bonus: Invio Email con Nodemailer

Nodemailer è una libreria popolare per Node.js che rende l'invio di email “facile come una torta.” Per coloro che scelgono di utilizzare questa libreria, abbiamo creato un trasporto SparkPost per Nodemailer. Dovrai installare i pacchetti nodemailer  e nodemailer-sparkpost-transport  nel tuo progetto.

> npm install nodemailer nodemailer-sparkpost-transport --save

Ora puoi creare un'istanza di trasporto nodemailer:

const nodemailer = require('nodemailer') 
const sparkPostTransport = require('nodemailer-sparkpost-transport') 
const transporter = nodemailer.createTransport(sparkPostTransport({ 
  'sparkPostApiKey': process.env.SPARKPOST_API_KEY 
}))

Nota come sto leggendo l'API Key da una variabile di ambiente. È ancora una buona pratica non inserirla mai direttamente nel codice.

Ci sono diverse opzioni che possono essere passate nel trasporto SparkPost, come campaign id e se il messaggio è transazionale o meno. Dai un'occhiata al README.md per tutte le opzioni.

Ecco come invieresti lo stesso messaggio sopra usando Nodemailer:

transporter.sendMail(
  {
    from: 'test@your-sending-domain.com',
    to: 'someone@somedomain.com',
    subject: 'Hello from nodemailer-sparkpost-transport',
    html: '<p>Hello world</p>'
  },
  (err, info) => {
    if (err) {
      console.error(err);
    } else {
      console.log(info);
    }
  }
);

Nodemailer è una libreria popolare per Node.js che rende l'invio di email “facile come una torta.” Per coloro che scelgono di utilizzare questa libreria, abbiamo creato un trasporto SparkPost per Nodemailer. Dovrai installare i pacchetti nodemailer  e nodemailer-sparkpost-transport  nel tuo progetto.

> npm install nodemailer nodemailer-sparkpost-transport --save

Ora puoi creare un'istanza di trasporto nodemailer:

const nodemailer = require('nodemailer') 
const sparkPostTransport = require('nodemailer-sparkpost-transport') 
const transporter = nodemailer.createTransport(sparkPostTransport({ 
  'sparkPostApiKey': process.env.SPARKPOST_API_KEY 
}))

Nota come sto leggendo l'API Key da una variabile di ambiente. È ancora una buona pratica non inserirla mai direttamente nel codice.

Ci sono diverse opzioni che possono essere passate nel trasporto SparkPost, come campaign id e se il messaggio è transazionale o meno. Dai un'occhiata al README.md per tutte le opzioni.

Ecco come invieresti lo stesso messaggio sopra usando Nodemailer:

transporter.sendMail(
  {
    from: 'test@your-sending-domain.com',
    to: 'someone@somedomain.com',
    subject: 'Hello from nodemailer-sparkpost-transport',
    html: '<p>Hello world</p>'
  },
  (err, info) => {
    if (err) {
      console.error(err);
    } else {
      console.log(info);
    }
  }
);

Nodemailer è una libreria popolare per Node.js che rende l'invio di email “facile come una torta.” Per coloro che scelgono di utilizzare questa libreria, abbiamo creato un trasporto SparkPost per Nodemailer. Dovrai installare i pacchetti nodemailer  e nodemailer-sparkpost-transport  nel tuo progetto.

> npm install nodemailer nodemailer-sparkpost-transport --save

Ora puoi creare un'istanza di trasporto nodemailer:

const nodemailer = require('nodemailer') 
const sparkPostTransport = require('nodemailer-sparkpost-transport') 
const transporter = nodemailer.createTransport(sparkPostTransport({ 
  'sparkPostApiKey': process.env.SPARKPOST_API_KEY 
}))

Nota come sto leggendo l'API Key da una variabile di ambiente. È ancora una buona pratica non inserirla mai direttamente nel codice.

Ci sono diverse opzioni che possono essere passate nel trasporto SparkPost, come campaign id e se il messaggio è transazionale o meno. Dai un'occhiata al README.md per tutte le opzioni.

Ecco come invieresti lo stesso messaggio sopra usando Nodemailer:

transporter.sendMail(
  {
    from: 'test@your-sending-domain.com',
    to: 'someone@somedomain.com',
    subject: 'Hello from nodemailer-sparkpost-transport',
    html: '<p>Hello world</p>'
  },
  (err, info) => {
    if (err) {
      console.error(err);
    } else {
      console.log(info);
    }
  }
);

Double Bonus: Inviare Email con notif.me

Sappiamo tutti che l'email è il re della comunicazione ma a volte vuoi essere in grado di raggiungere le persone tramite più canali. notif.me è una libreria Node.js per l'invio di tutti i tipi di messaggi transazionali. Se desideri inviare un'email, sms, push o webpush, puoi farlo con facilità. Ha anche strategie integrate di fall e round robin per più fornitori. Recentemente abbiamo lavorato con i creatori per costruire un provider SparkPost. Dovrai installare il pacchetto `notifme-sdk` nel tuo progetto.

> npm install notifme-sdk --save

Ora puoi creare un'istanza notifme con il provider SparkPost:

const NotifmeSdk = require('notifme-sdk').default;
const notifmeSdk = new NotifmeSdk({
  channels: {
    email: {
      providers: [
        {
          type: 'sparkpost',
          apiKey: process.env.SPARKPOST_API_KEY
        }
      ]
    }
  }
});

Ancora una volta, stiamo ottenendo l'API Key da una variabile d'ambiente. L'abbiamo detto tre volte — è così importante. 🙂

Ora ripetiamo lo stesso esempio, questa volta usando notif.me:

notifmeSdk.send({
  email: {
    from: 'test@your-sending-domain.com',
    to: 'someone@somedomain.com',
    subject: 'Hello from the SparkPost notif.me provider',
    html: '<p>Hello world</p>'
  }
})
.then(console.log)
.catch(console.error);

È veramente facile da usare e consiglio di dare un'occhiata alle altre funzionalità.

Confronto delle opzioni di invio email in Node.js

Metodo

Pacchetti richiesti

Gestione delle API Key

Migliore per

Note

SparkPost API (node-sparkpost)

sparkpost

Usa SPARKPOST_API_KEY variabile d'ambiente

Controllo API diretto, pieno accesso alle funzionalità di Transmissions

Più flessibile; supporta modelli, dati di sostituzione, allegati, campagne

Nodemailer + SparkPost Transport

nodemailer, nodemailer-sparkpost-transport

Usa variabile d'ambiente nella configurazione del trasporto

Sviluppatori già utilizzando Nodemailer

Percorso di migrazione più semplice; minime modifiche al codice

notif.me + SparkPost Provider

notifme-sdk

Usa variabile d'ambiente nella configurazione del provider

Messaggistica multicanale (email, SMS, push)

Include strategie di fallback + round-robin tra fornitori

Sappiamo tutti che l'email è il re della comunicazione ma a volte vuoi essere in grado di raggiungere le persone tramite più canali. notif.me è una libreria Node.js per l'invio di tutti i tipi di messaggi transazionali. Se desideri inviare un'email, sms, push o webpush, puoi farlo con facilità. Ha anche strategie integrate di fall e round robin per più fornitori. Recentemente abbiamo lavorato con i creatori per costruire un provider SparkPost. Dovrai installare il pacchetto `notifme-sdk` nel tuo progetto.

> npm install notifme-sdk --save

Ora puoi creare un'istanza notifme con il provider SparkPost:

const NotifmeSdk = require('notifme-sdk').default;
const notifmeSdk = new NotifmeSdk({
  channels: {
    email: {
      providers: [
        {
          type: 'sparkpost',
          apiKey: process.env.SPARKPOST_API_KEY
        }
      ]
    }
  }
});

Ancora una volta, stiamo ottenendo l'API Key da una variabile d'ambiente. L'abbiamo detto tre volte — è così importante. 🙂

Ora ripetiamo lo stesso esempio, questa volta usando notif.me:

notifmeSdk.send({
  email: {
    from: 'test@your-sending-domain.com',
    to: 'someone@somedomain.com',
    subject: 'Hello from the SparkPost notif.me provider',
    html: '<p>Hello world</p>'
  }
})
.then(console.log)
.catch(console.error);

È veramente facile da usare e consiglio di dare un'occhiata alle altre funzionalità.

Confronto delle opzioni di invio email in Node.js

Metodo

Pacchetti richiesti

Gestione delle API Key

Migliore per

Note

SparkPost API (node-sparkpost)

sparkpost

Usa SPARKPOST_API_KEY variabile d'ambiente

Controllo API diretto, pieno accesso alle funzionalità di Transmissions

Più flessibile; supporta modelli, dati di sostituzione, allegati, campagne

Nodemailer + SparkPost Transport

nodemailer, nodemailer-sparkpost-transport

Usa variabile d'ambiente nella configurazione del trasporto

Sviluppatori già utilizzando Nodemailer

Percorso di migrazione più semplice; minime modifiche al codice

notif.me + SparkPost Provider

notifme-sdk

Usa variabile d'ambiente nella configurazione del provider

Messaggistica multicanale (email, SMS, push)

Include strategie di fallback + round-robin tra fornitori

Sappiamo tutti che l'email è il re della comunicazione ma a volte vuoi essere in grado di raggiungere le persone tramite più canali. notif.me è una libreria Node.js per l'invio di tutti i tipi di messaggi transazionali. Se desideri inviare un'email, sms, push o webpush, puoi farlo con facilità. Ha anche strategie integrate di fall e round robin per più fornitori. Recentemente abbiamo lavorato con i creatori per costruire un provider SparkPost. Dovrai installare il pacchetto `notifme-sdk` nel tuo progetto.

> npm install notifme-sdk --save

Ora puoi creare un'istanza notifme con il provider SparkPost:

const NotifmeSdk = require('notifme-sdk').default;
const notifmeSdk = new NotifmeSdk({
  channels: {
    email: {
      providers: [
        {
          type: 'sparkpost',
          apiKey: process.env.SPARKPOST_API_KEY
        }
      ]
    }
  }
});

Ancora una volta, stiamo ottenendo l'API Key da una variabile d'ambiente. L'abbiamo detto tre volte — è così importante. 🙂

Ora ripetiamo lo stesso esempio, questa volta usando notif.me:

notifmeSdk.send({
  email: {
    from: 'test@your-sending-domain.com',
    to: 'someone@somedomain.com',
    subject: 'Hello from the SparkPost notif.me provider',
    html: '<p>Hello world</p>'
  }
})
.then(console.log)
.catch(console.error);

È veramente facile da usare e consiglio di dare un'occhiata alle altre funzionalità.

Confronto delle opzioni di invio email in Node.js

Metodo

Pacchetti richiesti

Gestione delle API Key

Migliore per

Note

SparkPost API (node-sparkpost)

sparkpost

Usa SPARKPOST_API_KEY variabile d'ambiente

Controllo API diretto, pieno accesso alle funzionalità di Transmissions

Più flessibile; supporta modelli, dati di sostituzione, allegati, campagne

Nodemailer + SparkPost Transport

nodemailer, nodemailer-sparkpost-transport

Usa variabile d'ambiente nella configurazione del trasporto

Sviluppatori già utilizzando Nodemailer

Percorso di migrazione più semplice; minime modifiche al codice

notif.me + SparkPost Provider

notifme-sdk

Usa variabile d'ambiente nella configurazione del provider

Messaggistica multicanale (email, SMS, push)

Include strategie di fallback + round-robin tra fornitori

Non c'è modo sbagliato di usare Node

Quando si tratta di inviare email utilizzando Node.js, hai molte opzioni. Abbiamo lavorato sodo per renderlo il più indolore possibile.

Quando si tratta di inviare email utilizzando Node.js, hai molte opzioni. Abbiamo lavorato sodo per renderlo il più indolore possibile.

Quando si tratta di inviare email utilizzando Node.js, hai molte opzioni. Abbiamo lavorato sodo per renderlo il più indolore possibile.

Altre notizie

Leggi di più da questa categoria

A person is standing at a desk while typing on a laptop.

La piattaforma nativa AI completa che si adatta al tuo business.

© 2025 Bird

A person is standing at a desk while typing on a laptop.

La piattaforma nativa AI completa che si adatta al tuo business.

© 2025 Bird