SDK

SDK Python

SDK Python senza dipendenze di terze parti: SMS, contatti, liste, sender ID ed email SMTP.

Runtime

Python 3.9+

Pacchetto

messageglobe

PyPI · in arrivo

Dipendenze

Nessuna: l'SDK usa solo urllib, smtplib ed email della libreria standard.

Licenza

MIT

Codice sorgente aperto su GitHub

L'SDK non ha dipendenze da framework e si integra senza attriti in Django, Flask, FastAPI, worker Celery o uno script. Un solo API token — quello della dashboard sviluppatori — autorizza tutte le funzioni REST: SMS, contatti, liste e sender ID. L'email si configura a parte via SMTP.

Funzionalità

Cinque moduli, una sola integrazione

SMS

REST API v3

invio, stato di consegna

Gestione contatti

REST API v3

creazione, eliminazione

Liste (gruppi)

REST API v3

creazione, lettura, aggiornamento, eliminazione, elenco

Sender ID

REST API v3

elenco, dettaglio, creazione, eliminazione

Email

SMTP

invio (HTML + testo, allegati)

Installazione

Aggiungi l'SDK al progetto

Shell
pip install messageglobe

Il pacchetto non è ancora pubblicato su PyPI: installalo direttamente da GitHub.

Shell
pip install git+https://github.com/Message-Globe/messageglobe-python.git

Avvio rapido

Dal token al primo invio

Usa la facade unificata oppure ogni client singolarmente. Il token si copia dalla dashboard sviluppatori e vale per tutte le funzioni REST.

Python
from messageglobe import ContactRequest, EmailMessage, MessageGlobe, SmsMessage mg = MessageGlobe.create(    # Copia il tuo token dalla dashboard sviluppatori.    # Un solo token abilita tutte le funzioni REST.    api_token="XX|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",    smtp={        "host": "smtp.messageglobe.com",        "port": 587,        "from_address": "[email protected]",        "from_name": "YourApp",        "username": "smtp-user",        "password": "smtp-password",        "encryption": "tls",    },) # Invia un SMSresponse = mg.sms.send(    SmsMessage(to="393612345678", sender_id="YourName", message="This is a test message"))print(response.message_id) # Crea un contattocontact = mg.contacts.create("list_uid_example", ContactRequest(phone="393310000000"))print(contact.uid) # Invia una emailmg.email.send(    EmailMessage(        to="[email protected]",        subject="Welcome",        html="<h1>Hi Jane</h1>",        text="Hi Jane",    ))
Ottieni il tuo API token

SMS

Invio, gateway e report di consegna

La stessa configurazione è condivisa da ogni client REST. Puoi impostare la lingua delle risposte dell'API su italiano o inglese.

Python
from messageglobe import ApiConfig, SmsClient client = SmsClient(ApiConfig("XX|your-api-token")) # Lingua delle risposte API: "en" oppure "it".client = SmsClient(ApiConfig("XX|your-api-token", accept_language=ApiConfig.LANGUAGE_IT))

Gateway HQ high_quality()

Sender ID personalizzato e report di consegna. Il campo mittente è obbligatorio.

Gateway LQ low_quality()

Nessun mittente personalizzato e nessun report di consegna.

Invio di un messaggio
from messageglobe import SmsMessage response = client.send(    SmsMessage(        to="393612345678",          # un numero, "n1,n2" oppure una lista        sender_id="YourName",       # max 11 caratteri se alfanumerico        message="Hello world",        dlr_callback_url="https://yourapp.com/webhooks/dlr",  # opzionale, solo HQ    )) result = response.first()print(result.message_id)   # "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"print(result.status)       # "Sent"print(result.cost)         # 0.06

Il tipo di messaggio (plain o unicode) è impostato su plain. Lascia che sia l'SDK a dedurlo dal contenuto: i testi con caratteri non‑GSM (emoji, cirillico, …) partono come unicode.

Tipo automatico
SmsMessage(to="393612345678", sender_id="YourName", message="Привет 😀", auto_type=True)# sms_type diventa "unicode" automaticamente # I mutatori sono concatenabili anche dopo la costruzione:message = SmsMessage().to("393612345678").set_message("Hello world").low_quality()
Destinatari multipli
response = client.send(    SmsMessage(        to=["393612345678", "880172145789"],  # oppure "393612345678,880172145789"        sender_id="YourName",        message="Hello everyone",    )) for result in response:    print(result.recipient, "=>", result.message_id)
Verifica dello stato
result = client.status("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") print(result.status)       # es. "Delivered"print(result.updated_at)

Con il gateway HQ e una callback DLR, MessageGlobe invia in POST un payload JSON al tuo endpoint a ogni aggiornamento di consegna.

Payload webhook DLR
{    "message_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",    "recipient": "393612345678",    "sender_id": "YourName",    "status_code": 1,    "status": "Delivered",    "updated_at": "2024-06-28T11:41:51.000000Z"}

Valori di status_code: 1 Delivered, 2 Failed, 8 Sent.

Scopri le API Messaggi

Gestione contatti

Anagrafiche dentro le tue liste

I contatti vivono all'interno di una lista identificata dal suo group id. Si usa lo stesso API token degli SMS.

Python
from messageglobe import ApiConfig, ContactRequest, ContactsClient client = ContactsClient(ApiConfig("XX|your-api-token")) # Almeno uno tra phone ed email è obbligatorio.contact = client.create(    "list_uid_example",    ContactRequest(phone="393310000000", first_name="Jane", last_name="Doe"),) print(contact.uid)          # "contact_uid_example"print(contact.status)       # "subscribe" # Elimina indicando la lista e l'uid del contatto.client.delete("list_uid_example", "contact_uid_example")

Liste (gruppi)

Il contenitore dei contatti

Una lista — o gruppo — è il contenitore a cui appartengono i contatti: il suo uid è il group id usato dal client Contatti.

Python
from messageglobe import ApiConfig, GroupsClient client = GroupsClient(ApiConfig("XX|your-api-token")) group = client.create("Newsletter subscribers")uid = group.uid group = client.show(uid)group = client.update(uid, "VIP subscribers") client.delete(uid) # Elenca tutte le liste (dati grezzi, paginati)page = client.all()

Sender ID

Gestisci i mittenti del tuo account

I sender ID sono i mittenti personalizzati usati dal gateway HQ. Puoi elencarli, consultarli, richiederne di nuovi ed eliminarli via API.

Python
from messageglobe import ApiConfig, SenderIdRequest, SendersClient client = SendersClient(ApiConfig("XX|your-api-token")) # Elenca tutti i sender IDfor sender in client.all():    print(sender.sender_id, "=>", sender.status)  # "active" / "pending" # Cerca un sender ID per nomesender = client.show("YourName") # Creane uno nuovo: tutti i campi sono obbligatori, 3-11 caratteri.sender = client.create(    SenderIdRequest(        sender_id="YourName",        company="Your Company",        tax_code="ABCDEF12G34H567I",        vat_code="01234567890",        address="Via Roma 1",        city="Rome",        province="RM",        country="IT",        email_address="[email protected]",        phone="391234567890",        pec_address="[email protected]",    )) # Elimina per nomeclient.delete("YourName")

In Italia gli alias alfanumerici seguono il codice di condotta AGCOM: i nuovi sender ID vengono inviati per approvazione.

Leggi il codice di condotta AGCOM

Email

Email transazionali via SMTP

Invia email HTML e testo con allegati, CC, BCC e reply‑to. Le opzioni di cifratura sono TLS (STARTTLS), SSL (SMTPS) oppure nessuna.

Python
from messageglobe import Attachment, EmailClient, EmailMessage, SmtpConfig client = EmailClient(    SmtpConfig(        host="smtp.messageglobe.com",        port=587,        from_address="[email protected]",        from_name="YourApp",        username="smtp-user",        password="smtp-password",        encryption=SmtpConfig.ENCRYPTION_TLS,    )) message = (    EmailMessage(subject="Your report")    .to("[email protected]", "Jane Doe")    .cc("[email protected]")    .reply_to("[email protected]")    .html("<h1>Report ready</h1><p>See attachment.</p>")    .text("Report ready. See attachment.")    .attach(Attachment.from_path("/path/to/report.pdf"))    .attach(Attachment.from_content(csv_string, "data.csv", "text/csv"))) client.send(message)

MessageGlobe espone un server SMTP su dashboard.messageglobe.com:465 (SSL): lo username è il tuo login e la password è l'API token. Esiste un preset dedicato.

Preset SMTP MessageGlobe
config = SmtpConfig.for_messageglobe(    "[email protected]",      # username di accesso a MessageGlobe    "XX|your-api-token",      # API token, usato come password SMTP    "[email protected]",    "YourApp",) client = EmailClient(config)
Scopri le API Email

Gestione errori

Un solo tipo base da intercettare

Ogni errore sollevato dall'SDK deriva da un tipo comune: puoi gestirli tutti in un unico punto, oppure distinguere caso per caso.

Python
from messageglobe import ApiError, MessageGlobeError, ValidationError try:    client.send(sms)except ValidationError:    # Validazione lato client fallita    ...except ApiError as exc:    # L'API ha restituito un errore    print(exc.message)            # "Invalid params"    print(exc.api_error_code)     # 200    print(exc.http_status_code)   # 422    print(exc.errors)except MessageGlobeError:    # Qualsiasi altro errore dell'SDK    ...
TipoQuando viene sollevato
ConfigurationErrorConfigurazione mancante o non valida.
ValidationErrorUn messaggio o un contatto non supera la validazione lato client.
ApiErrorUn endpoint REST (SMS, Contatti, Liste, Sender ID) restituisce un errore.
TransportErrorErrore di rete, timeout o risposta non decodificabile.
EmailErrorLa consegna SMTP fallisce.

Tipo base comune a tutti gli errori: MessageGlobeError

Client HTTP

Usa il tuo stack di rete

Ogni client REST usa un trasporto predefinito senza dipendenze. Puoi sostituirlo con il tuo — comodo per i test, per aggiungere retry o per riusare lo stack HTTP dell'applicazione.

Python
import requests from messageglobe import HttpResponse  class RequestsHttpClient:    def request(self, method, url, headers=None, body=None):        response = requests.request(method, url, headers=dict(headers or {}), data=body)         return HttpResponse(            status_code=response.status_code,            body=response.text,            headers=dict(response.headers),        )  client = SmsClient(config, RequestsHttpClient())

Altri SDK

Stessa API, altri linguaggi

Gli SDK ufficiali sono allineati per funzionalità: cambia il linguaggio, non il flusso di lavoro.

Pronto a integrare?

Apri un account, genera il tuo API token e invia il primo messaggio in pochi minuti.

Supporto MessageGlobe

Compila il modulo e ti risponderemo al più presto.

Sto verificando la disponibilità operatori…