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
SMTP
invio (HTML + testo, allegati)
Installazione
Aggiungi l'SDK al progetto
pip install messageglobeIl pacchetto non è ancora pubblicato su PyPI: installalo direttamente da GitHub.
pip install git+https://github.com/Message-Globe/messageglobe-python.gitAvvio 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.
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", ))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.
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.
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.06Il 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.
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()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)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.
{ "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.
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.
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.
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.
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.
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.
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.
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)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.
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 ...| Tipo | Quando viene sollevato |
|---|---|
| ConfigurationError | Configurazione mancante o non valida. |
| ValidationError | Un messaggio o un contatto non supera la validazione lato client. |
| ApiError | Un endpoint REST (SMS, Contatti, Liste, Sender ID) restituisce un errore. |
| TransportError | Errore di rete, timeout o risposta non decodificabile. |
| EmailError | La 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.
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.