...A-Za-z0-9äöüÄÖÜß]+", "_", title)
    title = title.strip("_")
    # Falls nach dem Säubern nichts übrig bleibt
    return title or "chat"

def extract_messages(conv: dict):
    """Gibt eine sortierte Liste (timestamp, role, text) zurück."""
    mapping = conv.get("mapping", {})
    messages = []

    for node in mapping.values():
        msg = node.get("message")
        if not msg:
            continu...