LangChain, n8n et AutoGPT partagent un angle mort commun : ils peuvent naviguer, rechercher, écrire, appeler des API et orchestrer des flux complexes — mais dès qu'une plateforme demande un numéro de téléphone pour la vérification SMS, l'agent s'arrête. Ce guide vous montre exactement comment donner à votre agent un vrai numéro de téléphone persistant qu'il peut utiliser de manière autonome.

Pourquoi les solutions évidentes échouent

Les API de numéros virtuels (Twilio, Vonage, etc.) sont la première réponse évidente. Le problème : les plateformes qui exigent une vérification SMS sont souvent celles qui investissent dans la détection des numéros virtuels. Une recherche d'opérateur sur un numéro Twilio renvoie un marqueur VoIP. Beaucoup de services financiers et de réseaux sociaux rejettent silencieusement ces numéros à l'inscription.

La deuxième réponse évidente est d'utiliser son propre numéro mobile. C'est fragile en production : un seul signalement affecte tous les agents utilisant ce numéro simultanément.

La solution qui fonctionne réellement est une carte SIM physique dans un modem USB sur la même machine que l'agent. Elle s'enregistre comme un vrai abonné mobile avec de vraies métadonnées d'opérateur, passe tous les contrôles de recherche d'opérateur, et vous donne un contrôle programmatique complet sur la réception SMS.

Matériel nécessaire

Vous avez besoin de deux choses : une SIM physique sans KYC et un modem LTE USB. Les Huawei E3372, ZTE MF833 et Sierra Wireless sont tous bien supportés sous Linux. Coût : 20–40 € pour le modem, 25 $ pour la SIM. La SIM est activée avant l'expédition — aucune étape de configuration de votre côté.

ls /dev/ttyUSB*   # avant branchement
ls /dev/ttyUSB*   # après — la nouvelle entrée est votre modem

Le module de lecture SMS

# sms_reader.py
import serial, re, time

def init_modem(port='/dev/ttyUSB0'):
    m = serial.Serial(port, 115200, timeout=5)
    m.write(b'AT+CMGF=1 ')
    m.write(b'AT+CNMI=2,2,0,0,0 ')
    return m

def lire_otp(modem, timeout=90, filtre_expediteur=None):
    limite = time.time() + timeout
    expediteur = ''
    while time.time() < limite:
        ligne = modem.readline().decode('utf-8', errors='ignore').strip()
        if ligne.startswith('+CMT:'):
            expediteur = ligne
        elif expediteur:
            if filtre_expediteur and filtre_expediteur not in expediteur:
                expediteur = ''; continue
            m = re.search(r'\d{4,8}', ligne)
            if m: return m.group()
            expediteur = ''
    return None

Intégration LangChain

from langchain.tools import tool
from sms_reader import init_modem, lire_otp

modem = init_modem()

@tool
def recevoir_otp_sms(expediteur: str = '', timeout: int = 90) -> str:
    """Attend un OTP par SMS. Filtre optionnel par expéditeur.
    Retourne le code OTP ou 'TIMEOUT'."""
    code = lire_otp(modem, timeout=timeout, filtre_expediteur=expediteur or None)
    return code if code else 'TIMEOUT'

Intégration n8n

Dans n8n, exposez le lecteur SMS comme un endpoint HTTP avec FastAPI ou Flask, puis appelez-le depuis le nœud HTTP Request de n8n :

from fastapi import FastAPI
from sms_reader import init_modem, lire_otp

app = FastAPI()
modem = init_modem()

@app.get("/otp")
def obtenir_otp(expediteur: str = '', timeout: int = 90):
    code = lire_otp(modem, timeout=timeout, filtre_expediteur=expediteur or None)
    return {"otp": code, "success": code is not None}

Dans votre workflow n8n : après avoir déclenché un envoi SMS sur la plateforme cible, ajoutez un nœud HTTP Request pointant vers http://localhost:8000/otp?expediteur=Plateforme&timeout=90.

Plusieurs agents, plusieurs numéros

Pour des configurations avec plusieurs agents nécessitant des numéros isolés, utilisez un modem USB par agent via un hub USB alimenté. Chaque modem apparaît comme un périphérique série distinct. Simbotica permet jusqu'à trois SIM par commande, ce qui rend les configurations à trois agents simples à provisionner en une seule transaction.

Acquisition autonome de la SIM

Si vous construisez un agent qui doit s'auto-provisionner son propre numéro, l'endpoint de commande Simbotica supporte le protocole de paiement x402. L'agent envoie un POST à /api/submit-order-base, reçoit un 402 avec les conditions de paiement, signe une autorisation USDC avec un portefeuille EVM, et renvoie le POST avec l'en-tête de paiement. La SIM est expédiée à l'adresse que l'agent spécifie. Aucun compte, aucune clé API, aucune approbation humaine requise.

Obtenez la SIM Dont Votre Agent a Besoin

SIM physique. Sans KYC. Vrai numéro mobile. Compatible LangChain, n8n, AutoGPT. 25 $.

Commander maintenant →