SMS in Ingresso
Noleggia un numero di telefono dedicato e ricevi tutti gli SMS in ingresso in tempo reale. Agile Telecom ospita la SIM e inoltra i messaggi a te via email o webhook — perfetto per linee di supporto clienti, promemoria appuntamenti o risposte automatiche.
Metodi di Consegna
Scegli come vuoi ricevere i messaggi:
Consegna Email
I messaggi arrivano nella tua posta in arrivo automaticamente da smsin@agiletelecom.com con l'oggetto "Agile Telecom -- SMS ricevuto".
| Campo | Formato | Esempio |
|---|---|---|
| Da | Numero di telefono del mittente | +393301234567 |
| A | Il tuo numero SIM noleggiato | +393331234333 |
| Data/Ora | YYYYMMDDHHMMSS | 20260408143052 |
| Corpo | Testo SMS | News ON |
La posta elettronica è ideale per messaggi a basso volume o integrazione con sistemi basati su email.
Webhook HTTP POST
I messaggi sono inviati al tuo webhook URL in tempo reale. Scegli questo per automazione, database ed elaborazione immediata.
Formato Richiesta POST
Il tuo webhook riceve un POST con questi parametri del form:
| Parametro | Descrizione | Esempio |
|---|---|---|
| originator | Numero di telefono del mittente | +393301234567 |
| destination | Il tuo numero SIM | +393331234333 |
| date_time | Timestamp di ricezione (YYYYMMDDHHMMSS) | 20260408143052 |
| text | Corpo del messaggio SMS | News ON |
Risposta Obbligatoria
Il tuo server DEVE rispondere esattamente con:
+OK
Se non rispondi con +OK entro 30 secondi, Agile Telecom tratta la consegna come fallita e riprova dopo 15 minuti. Dopo 3 tentativi falliti, il messaggio è scartato. Mantieni il tuo webhook veloce — scarica l'elaborazione pesante su job in background.
Esempi di Implementazione Webhook
- Python (Flask)
- Node.js (Express)
- PHP
from flask import Flask, request
app = Flask(__name__)
@app.route('/webhook/sms', methods=['POST'])
def receive_sms():
# Estrai parametri
originator = request.form.get('originator')
destination = request.form.get('destination')
date_time = request.form.get('date_time')
text = request.form.get('text')
# Elabora il messaggio (async in background)
print(f"SMS from {originator}: {text}")
# Salva nel database
save_to_database(originator, destination, date_time, text)
# CRITICO: rispondi con +OK immediatamente
return '+OK'
def save_to_database(originator, destination, date_time, text):
# La tua logica del database qui
pass
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
**Distribuisci con Gunicorn (produzione):**
```bash
pip install flask gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded(\{ extended: false \}));
app.post('/webhook/sms', (req, res) => \{
const \{ originator, destination, date_time, text \} = req.body;
// Rispondi immediatamente con +OK (CRITICO)
res.send('+OK');
// Elabora il messaggio async
processMessage(originator, destination, date_time, text);
\});
async function processMessage(originator, destination, date_time, text) \{
console.log(`SMS from $\{originator\}: $\{text\}`);
// Salva nel database
await saveToDatabase(originator, destination, date_time, text);
\}
async function saveToDatabase(originator, destination, date_time, text) \{
// La tua logica del database qui
\}
app.listen(5000, () => console.log('Listening on port 5000'));
Esegui con PM2 (produzione):
npm install express body-parser pm2
pm2 start app.js -i max
<?php
// webhook-sms.php
// Estrai parametri POST
$originator = isset($_POST['originator']) ? $_POST['originator'] : '';
$destination = isset($_POST['destination']) ? $_POST['destination'] : '';
$date_time = isset($_POST['date_time']) ? $_POST['date_time'] : '';
$text = isset($_POST['text']) ? $_POST['text'] : '';
// CRITICO: rispondi con +OK immediatamente
header('Content-Type: text/plain');
echo '+OK';
// Elabora il messaggio in modo asincrono
logMessage($originator, $destination, $date_time, $text);
function logMessage($originator, $destination, $date_time, $text) \{
// Registra su file o database
$log = sprintf(
"[%s] From: %s, To: %s, Text: %s\n",
$date_time,
$originator,
$destination,
$text
);
file_put_contents('/var/log/sms.log', $log, FILE_APPEND);
// Oppure salva nel database
// saveToDatabase($originator, $destination, $date_time, $text);
\}
?>
Esegui con PHP (produzione):
php -S 0.0.0.0:5000
# Oppure: supervisor con php-fpm
## Best Practice
**Rispondi Velocemente**
Restituisci `+OK` entro 1 secondo. Elabora il messaggio in una coda in background, non nel gestore webhook.
**Gestisci i Duplicati**
Agile Telecom potrebbe riprovare le consegne fallite. Memorizza un hash di originator + timestamp per rilevare i duplicati ed evitare di elaborare lo stesso messaggio due volte.
**Registra Tutto**
Mantieni un registro di tutti i messaggi ricevuti per debug e conformità. Includi timestamp, originator e tempo di risposta.
**Monitora i Fallimenti**
Se la consegna fallisce 3 volte, il messaggio è scartato. Monitora il tempo di attività del tuo webhook e avvisa su fallimenti consecutivi.
**Esempio: Rilevamento Duplicati (Python)**
```python
import hashlib
from datetime import datetime, timedelta
processed_messages = {} # In produzione, usa Redis o un database
@app.route('/webhook/sms', methods=['POST'])
def receive_sms():
originator = request.form.get('originator')
date_time = request.form.get('date_time')
text = request.form.get('text')
# Crea una chiave univoca
message_hash = hashlib.md5(f"{originator}{date_time}".encode()).hexdigest()
# Controlla il duplicato (stesso mittente negli ultimi 5 minuti)
if message_hash in processed_messages:
return '+OK' # Già elaborato
# Contrassegna come elaborato
processed_messages[message_hash] = datetime.now()
# Ripulitura voci vecchie
cutoff = datetime.now() - timedelta(minutes=5)
processed_messages = {k: v for k, v in processed_messages.items() if v > cutoff}
# Elabora nuovo messaggio
save_to_database(originator, request.form.get('destination'), date_time, text)
return '+OK'
Qual è il Prossimo?
- Protocollo SMPP – Protocollo di connessione persistente per messaggistica ad alto volume
- Verifica Crediti – Monitora il saldo del tuo account
- MNP Lookup – Interroga informazioni sulla rete mobile