Kostenloser Lead-Bot in Telegram mit Python und Yandex Cloud
Solo-Entwickler und kleine Teams können mit einem Telegram-Bot eine einfache CRM-Lösung aufbauen – ohne Kosten. Der Bot qualifiziert eingehende Leads mit nur zwei interaktiven Fragen, erstellt für jeden Kunden einen eigenen Themenbereich in einer Supergroup und ermöglicht eine vollständige bidirektionale Nachrichtenübermittlung. Bereitstellen auf Yandex Cloud Functions mit Free-Tier: 1 Million Aufrufe und 1 GB Objektspeicher pro Monat.
Ablauf: Nutzer folgt einem Deep Link von der Website → Bot fragt nach Branchentyp und Ziel → erstellt ein Thema wie »Iwan — E-Commerce — KI-Agent« → alle Kommunikation ist zentralisiert im Gruppenchat mit Suchfunktion und Benachrichtigungen.
Leichtgewichtiges Wrapper über die Telegram-Bot-API
Für Cloud-Funktionen funktionieren leichte Lösungen ohne schwere Frameworks wie aiogram am besten. Die Cold-Start-Zeit wird minimiert, indem ausschließlich httpx verwendet wird. Die gesamte API-Schicht umfasst nur 57 Zeilen:
"""telegram_api.py — minimaler Wrapper über die Bot-API."""
import os
import httpx
BOT_TOKEN = os.environ.get("BOT_TOKEN", "")
BASE_URL = f"https://api.telegram.org/bot{BOT_TOKEN}"
def _call(method: str, **kwargs) -> dict:
resp = httpx.post(f"{BASE_URL}/{method}", json=kwargs, timeout=10)
return resp.json()
def send_message(chat_id, text, reply_markup=None, message_thread_id=None):
params = {"chat_id": chat_id, "text": text, "parse_mode": "HTML"}
if reply_markup:
params["reply_markup"] = reply_markup
if message_thread_id:
params["message_thread_id"] = message_thread_id
return _call("sendMessage", **params)
def create_forum_topic(chat_id, name):
return _call("createForumTopic", chat_id=chat_id, name=name)
def copy_message(chat_id, from_chat_id, message_id, message_thread_id=None):
params = {"chat_id": chat_id, "from_chat_id": from_chat_id, "message_id": message_id}
if message_thread_id:
params["message_thread_id"] = message_thread_id
return _call("copyMessage", **params)
copy_message wird gegenüber forward_message bevorzugt: Es entfernt den Text »Weitergeleitet von…« und hält die Nachrichten sauber.
Webhook-Handler mit Validierung
Die Yandex Cloud Function verarbeitet direkt HTTPS-Anfragen von Telegram (allow-unauthenticated-invoke). Die Validierung erfolgt mittels X-Telegram-Bot-Api-Secret-Token:
def handler(event, context):
"""Einstiegspunkt für Yandex Cloud Function."""
headers = event.get("headers", {})
secret = headers.get("X-Telegram-Bot-Api-Secret-Token") or \
headers.get("x-telegram-bot-api-secret-token", "")
if secret != WEBHOOK_SECRET:
return {"statusCode": 403, "body": "Forbidden"}
body = event.get("body", "{}")
update = json.loads(body) if isinstance(body, str) else body
if "callback_query" in update:
_handle_callback(update["callback_query"])
elif "message" in update:
_handle_message(update["message"])
return {"statusCode": 200, "body": "ok"}
Die Trennung der Logik in _handle_callback und _handle_message hält den Code übersichtlich und wartbar.
Zustandslose Lead-Qualifizierung
Der Befehl /start löst eine zweiteilige Umfrage aus: Erstens zum Branchentyp, zweitens zum Ziel. Die Callback-Daten kodieren beide Antworten: q2:sales:ecommerce. Die 64-Byte-Grenze wird für vorgegebene Optionen beachtet.
Beispiel für die erste Frage:
def _handle_start(chat_id, from_user):
if storage.get_topic_id_by_user(chat_id):
tg.send_message(chat_id,
"Sie haben bereits eine Anfrage abgeschickt. Wir melden uns bald bei Ihnen.
" "Wenn Sie etwas ergänzen möchten, antworten Sie einfach hier.")
return
keyboard = {"inline_keyboard": [
[{"text": "E-Commerce / Marktplätze", "callback_data": "q1:ecommerce"}],
[{"text": "Dienstleistungen / SaaS", "callback_data": "q1:services"}],
[{"text": "Fertigung", "callback_data": "q1:production"}],
[{"text": "IT / Startup", "callback_data": "q1:it"}],
[{"text": "Sonstiges", "callback_data": "q1:other"}],
]}
tg.send_message(chat_id, f"Hallo, {from_user.get('first_name', '')}! Ich bin der VexAI-Bot.
" "Beantworten Sie 2 kurze Fragen, dann kontaktieren wir Sie.")
tg.send_message(chat_id, "<b>Welche Art von Unternehmen betreiben Sie?</b>", reply_markup=keyboard)
Duplikatvermeidung: Überprüfung der Zuordnung im Objektspeicher. Für »Sonstiges« wird eine temporäre Statusdatei genutzt.
Die zweite Frage funktioniert ähnlich und überträgt den q1_key in den Callback-Daten.
Themen-Erstellung und Nachrichtenweiterleitung
Nach Abschluss der Umfrage wird ein Thema mit einer Länge von maximal 128 Zeichen erstellt:
def _finalize(chat_id, from_user, q1_answer, q2_answer):
tg.send_message(chat_id, "Danke! Wir melden uns kurz bei Ihnen.")
full_name = f"{from_user.get('first_name', '')} {from_user.get('last_name', '')}".strip()
topic_title = f"{full_name} — {q1_answer} — {q2_answer}"
if len(topic_title) > 128:
topic_title = topic_title[:125] + "..."
result = tg.create_forum_topic(ADMIN_GROUP_ID, topic_title)
topic_id = result["result"]["message_thread_id"]
summary = (f"<b>Neuer Lead</b>\n\n"
f"<b>Name:</b> {full_name}\n"
f"<b>Branche:</b> {q1_answer}\n"
f"<b>Ziel:</b> {q2_answer}\n"
f"<b>Quelle:</b> Webseite")
tg.send_message(ADMIN_GROUP_ID, summary, message_thread_id=topic_id)
storage.save_topic_mapping(topic_id, chat_id)
storage.save_user_mapping(chat_id, topic_id)
Nachrichtenweiterleitung in _handle_message:
- Admin antwortet im Thema → kopiert an den Kunden.
- Kunde schreibt an den Bot → kopiert ins Thema.
Deep Links werden unterstützt: /start website zur Quellenverfolgung.
Einrichtung und Einschränkungen
- Erstellen Sie eine Supergroup und aktivieren Sie Themen.
- Fügen Sie den Bot als Admin hinzu: Themen verwalten, Nachrichten senden.
- Konfigurieren Sie Yandex Cloud: Service Account mit
storage.editor, Bucket, Zugriffsschlüssel. - Richten Sie den Webhook mit Token-Token ein.
Sie erhalten:
- Durchsuchbare Lead-Historie.
- Echtzeit-Benachrichtigungen.
- Pinnierte Lead-Karten.
Einschränkungen: Kein Verkaufsfunnel, keine Analytics, kein Team-Work. Ideal für bis zu 20 Leads pro Monat.
Wichtige Erkenntnisse
- Kostenlose Bereitstellung: Yandex Cloud Functions + Objektspeicher im Free-Tier.
- Zustandslose Architektur: Callback-Daten speichern den Zustand; minimaler Speicherbedarf.
- Vollständige Weiterleitung: Alle Gespräche sind in Themen zentralisiert – keine externen Tools nötig.
- Sicherheit: Secret-Token + Duplikat-Schutz.
- Skalierbarkeit: Unterstützt bis zu 20 Leads pro Monat ohne kostenpflichtige CRM-Software.
— Editorial Team
Noch keine Kommentare.