Tillbaka till bloggen
Guides

Bygg din första Telegram-bot med Python: En komplett guide

Lär dig hur du skapar en kraftfull Telegram-bot med Python, helt gratis. Denna steg-för-steg-guide täcker allt från API-inställningar till driftsättning av din anpassade Telegram-bot.

Bygg din första Telegram-bot med Python: En komplett guide

Att bygga en anpassad Telegram-bot med Python ger enorm flexibilitet och kraft. Oavsett om du vill automatisera uppgifter, skapa interaktiva tjänster eller bara experimentera med Telegrams robusta API, är Python ett utmärkt val tack vare sin enkelhet och omfattande bibliotek. I denna omfattande guide går vi igenom hela processen för att skapa ditt första Telegram-bot Python-projekt, från att sätta upp din utvecklingsmiljö till att skriva fungerande kod och driftsätta din bot.

Pythons läsbarhet och den aktiva communityn som stöder biblioteket python-telegram-bot gör det till en fantastisk startpunkt för både nybörjare och erfarna utvecklare. I slutet av denna handledning kommer du att ha en fullt fungerande Telegram-bot redo att interagera med användare.

Viktiga insikter

  • Du kommer att lära dig hur du registrerar din bot med BotFather och får en API-token.
  • Vi går igenom hur du sätter upp din Python-utvecklingsmiljö och installerar nödvändiga bibliotek.
  • Du kommer att skriva kod för att hantera grundläggande kommandon och meddelanden.
  • Vi utforskar hur du lägger till mer sofistikerade funktioner till din bot.
  • Du kommer att förstå grunderna för att driftsätta din Telegram-bot Python-applikation.

1. Förbered din Telegram-bot och utvecklingsmiljö

Innan vi dyker in i koden måste du konfigurera din bot på Telegram och förbereda din Python-miljö.

1.1 Skapa din bot med BotFather

Det första steget för varje Telegram-bot är att registrera den med BotFather, Telegrams officiella bot för att hantera andra botar.

  1. Öppna Telegram och sök efter @BotFather: I din Telegram-app, sök efter “@BotFather” och starta en chatt. Se till att det är den officiella med en blå verifieringsikon.
  2. Starta bot-skapandeprocessen: Skriv /newbot och skicka meddelandet.
  3. Välj ett namn: BotFather kommer att fråga efter ett namn för din bot. Detta är den läsbara titeln som användare kommer att se (t.ex. “Min Fantastiska Bot”).
  4. Välj ett användarnamn: Därefter väljer du ett unikt användarnamn för din bot. Detta måste sluta med “bot” (t.ex. min_fantastiska_bot). Om användarnamnet är upptaget kommer BotFather att be dig att prova ett annat.
  5. Få din API-token: När det lyckats kommer BotFather att förse dig med en HTTP API-token. Denna token är avgörande, eftersom den fungerar som ett lösenord för din bot. Håll den säker och dela den aldrig offentligt. Den kommer att se ut ungefär så här: 123456:ABC-DEF1234ghIkl-zyx57W23L1qR_456.

1.2 Installera Python och pip

Om du inte redan har Python installerat, ladda ner den senaste stabila versionen från den officiella Python-webbplatsen (https://www.python.org/downloads/). Under installationen, se till att du markerar rutan som säger “Add Python to PATH” för enklare åtkomst via kommandoraden.

pip är Pythons pakethanterare och kommer vanligtvis förinstallerad med Python. Du kan verifiera dina Python- och pip-installationer genom att öppna din terminal eller kommandotolk och skriva:

python --version
pip --version

1.3 Installera biblioteket python-telegram-bot

Biblioteket python-telegram-bot är en populär och robust wrapper för Telegram Bot API. Det förenklar interaktioner med API:et, vilket gör det mycket enklare att utveckla din bot.

Installera det med pip:

pip install python-telegram-bot

Du har nu framgångsrikt konfigurerat din bot och utvecklingsmiljö. Låt oss gå vidare till att skriva lite kod!

2. Din första Telegram-bot Python-kod: Eko-boten

Vi börjar med en klassiker: en eko-bot. Denna bot kommer helt enkelt att upprepa alla meddelanden den tar emot. Detta enkla exempel lär dig de grundläggande koncepten för meddelandehantering.

2.1 Importera nödvändiga moduler

Skapa en ny Python-fil (t.ex. min_telegram_bot.py) och börja med att importera de nödvändiga komponenterna från telegram-biblioteket.

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import logging
import os
  • Update: Representerar en inkommande uppdatering från Telegram (t.ex. ett nytt meddelande, ett kommando).
  • Application: Huvudklassen som hanterar din bots livscykel.
  • CommandHandler: Används för att registrera hanterare för specifika kommandon (t.ex. /start, /help).
  • MessageHandler: Används för att registrera hanterare för olika typer av meddelanden (text, foton, etc.).
  • filters: Tillhandahåller praktiska filter för att specificera vilka meddelanden en MessageHandler ska svara på.
  • logging: Bra praxis för felsökning och för att förstå din bots beteende.
  • os: För att säkert ladda din API-token från miljövariabler.

2.2 Konfigurera loggning

Loggning är avgörande för felsökning. Lägg till följande rader i ditt skript:

# Aktivera loggning
logging.basicConfig(
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
)
logger = logging.getLogger(__name__)

2.3 Definiera våra hanterare

Hanterare är funktioner som bearbetar inkommande uppdateringar.

start-kommandohanterare:

Denna funktion kommer att anropas när en användare skickar kommandot /start.

async def start(update: Update, context):
    """Skickar ett välkomstmeddelande när kommandot /start utfärdas."""
    user = update.effective_user
    await update.message.reply_html(
        f"Hej {user.mention_html()}! Jag är en eko-bot. Skicka mig vad som helst!",
        # reply_markup=ForceReply(selective=True), # Valfritt: tvinga svar på detta meddelande
    )

echo-meddelandehanterare:

Denna funktion kommer att eka tillbaka alla textmeddelanden den tar emot.

async def echo(update: Update, context):
    """Ekar användarens meddelande."""
    await update.message.reply_text(update.message.text)

help_command-hanterare:

Ett enkelt hjälpkommando.

async def help_command(update: Update, context):
    """Skickar ett hjälpmeddelande."""
    await update.message.reply_text("Skicka mig vilket meddelande som helst, så ekar jag tillbaka det!")

2.4 Huvudfunktionen main: Sätter ihop allt

Funktionen main är där vi initierar vår bot, registrerar hanterare och börjar söka efter uppdateringar.

def main() -> None:
    """Startar boten."""
    # Hämta API-token från miljövariabler (BÄSTA PRAXIS!)
    # Alternativt kan du hårdkoda den här för snabb testning: TOKEN = "DIN_TELEGRAM_BOT_TOKEN"
    TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN")

    if not TOKEN:
        raise ValueError("Miljövariabeln TELEGRAM_BOT_TOKEN är inte inställd.")

    # Skapa applikationen och skicka din bots token till den.
    application = Application.builder().token(TOKEN).build()

    # Registrera hanterare
    application.add_handler(CommandHandler("start", start))
    application.add_handler(CommandHandler("help", help_command))
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))

    # Kör boten tills användaren trycker Ctrl-C
    application.run_polling(allowed_updates=Update.ALL_TYPES)


if __name__ == "__main__":
    main()

2.5 Köra din bot lokalt

  1. Ställ in din API-token som en miljövariabel:

    • Linux/macOS: export TELEGRAM_BOT_TOKEN="DIN_API_TOKEN_HÄR"
    • Windows (Kommandotolk): set TELEGRAM_BOT_TOKEN="DIN_API_TOKEN_HÄR"
    • Windows (PowerShell): $env:TELEGRAM_BOT_TOKEN="DIN_API_TOKEN_HÄR" Alternativt, för snabb lokal testning, kan du ersätta os.environ.get("TELEGRAM_BOT_TOKEN") med din faktiska tokensträng direkt i koden (t.ex. TOKEN = "123456:ABCDEF..."), men det rekommenderas inte för produktion.
  2. Kör ditt Python-skript: Navigera till katalogen där du sparade min_telegram_bot.py i din terminal och kör:

    python min_telegram_bot.py
  3. Interagera med din bot: Öppna Telegram, sök efter din bots användarnamn (t.ex. @min_fantastiska_bot), och starta en chatt. Prova att skicka /start, /help, eller vilket textmeddelande som helst. Din bot ska svara!

Grattis! Du har precis skapat och kört din första Telegram-bot Python-applikation.

Telegram-bot som svarar på /start och ekar ett meddelande.

3. Lägga till mer avancerade funktioner

En eko-bot är cool, men låt oss göra den mer användbar. Här är idéer för att utöka din Telegram-bot.

3.1 Hantera olika meddelandetyper

Förutom vanlig text stöder Telegram foton, videor, dokument och mycket mer. Du kan använda filters för att specifikt hantera dessa.

Exempel: Svara på foton

async def handle_photo(update: Update, context):
    """Svarar på ett foto med ett bekräftelsemeddelande."""
    # Du kan komma åt fotodetaljer via update.message.photo
    # Listan innehåller olika storlekar av samma foto; den sista är vanligtvis den största.
    photo_file_id = update.message.photo[-1].file_id
    await update.message.reply_text("Fint foto! Jag har mottagit det.")

# Lägg till denna hanterare i din huvudfunktion
# application.add_handler(MessageHandler(filters.PHOTO, handle_photo))

3.2 Använda inline-tangentbord och svars-tangentbord

Tangentbord ger strukturerade interaktionsalternativ för användare.

  • Svars-tangentbord (Reply Keyboards): Visas ovanför meddelandeinmatningsfältet och ersätter effektivt standardtangentbordet. Utmärkt för fördefinierade val.
  • Inline-tangentbord (Inline Keyboards): Fästs direkt vid ett meddelande, med knappar som kan utlösa återuppringningar eller öppna URL:er. Perfekt för interaktiva menyer.

Exempel: Inline-tangentbord

Låt oss ändra vårt /start-kommando för att erbjuda knappar.

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, CallbackQueryHandler, filters
# ... (andra importer och loggning) ...

async def start(update: Update, context):
    """Skickar ett välkomstmeddelande med ett inline-tangentbord."""
    user = update.effective_user
    keyboard = [
        [InlineKeyboardButton("Besök TeleClaw", url="https://teleclaw.bot")],
        [InlineKeyboardButton("Om Boten", callback_data="about")],
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    await update.message.reply_html(
        f"Hej {user.mention_html()}! Välkommen till min bot. Vad vill du göra?",
        reply_markup=reply_markup,
    )

async def button_callback(update: Update, context):
    """Hanterar callback-frågor från inline-tangentbordsknappar."""
    query = update.callback_query
    await query.answer() # Svara alltid på callback-frågor

    if query.data == "about":
        await query.edit_message_text(text="Detta är en enkel demo-bot skapad med Python och biblioteket `python-telegram-bot`.")
    # Lägg till fler villkor för andra callback_data-värden

Du skulle behöva uppdatera din main-funktion för att inkludera CallbackQueryHandler:

    # ... inuti main() ...
    application.add_handler(CommandHandler("start", start))
    application.add_handler(CallbackQueryHandler(button_callback)) # Lägg till denna rad
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
    # ...

Detta visar hur man länkar till en extern webbplats som TeleClaw och utför en åtgärd inom boten. Du kan utforska mer om olika tangentbordsalternativ i python-telegram-bot-dokumentationen (https://docs.python-telegram-bot.org/en/stable/telegram.keyboardbutton.html).

3.3 Integrera med externa API:er

Den verkliga kraften i Telegram-bot Python-utveckling kommer från dess förmåga att integrera med tredjepartstjänster. Du kan hämta väderdata, aktuella nyheter, översätta text eller till och med integrera med AI-modeller.

Exempel: Enkelt API-anrop (med biblioteket requests)

Installera först requests: pip install requests.

import requests

async def get_fact(update: Update, context):
    """Hämtar ett slumpmässigt fakta från ett externt API."""
    try:
        response = requests.get("https://uselessfacts.jsph.pl/api/v2/facts/random")
        response.raise_for_status() # Utlöser ett HTTPError för dåliga svar (4xx eller 5xx)
        fact_data = response.json()
        await update.message.reply_text(f"Visste du? {fact_data['text']}")
    except requests.exceptions.RequestException as e:
        logger.error(f"Fel vid hämtning av fakta: {e}")
        await update.message.reply_text("Tyvärr, jag kunde inte hämta ett fakta just nu. Försök igen senare.")

# Lägg till denna kommandohanterare:
# application.add_handler(CommandHandler("fact", get_fact))

Detta visar hur en bot kan interagera med externa datakällor, precis som @claw integrerar med olika tjänster för att tillhandahålla sofistikerade funktioner. För mer avancerade AI-interaktioner, överväg att använda plattformar som TeleClaw, som abstraherar bort komplexiteten med att integrera med modeller som GPT-4 eller Gemini. Du kan läsa mer om att integrera AI-verktyg i vår artikel om hur man bygger en Telegram-chatbot.

Visuell representation av Telegram-bot som interagerar med ett externt API.

4. Beständig data och tillståndshantering

För mer komplexa botar behöver du ett sätt att lagra data mellan interaktioner. Till exempel, om din bot behöver komma ihåg användarpreferenser eller pågående konversationer.

4.1 Använda context.user_data och context.chat_data

Biblioteket python-telegram-bot tillhandahåller context.user_data och context.chat_data (tillgängliga i dina hanterarfunktioner) som kan lagra tillfällig data associerad med en användare eller en chatt. Denna data kvarstår under botens körtid.

async def set_favorite_color(update: Update, context):
    """Tillåter användare att ställa in sin favoritfärg."""
    if context.args:
        color = " ".join(context.args).strip()
        context.user_data["favorite_color"] = color
        await update.message.reply_text(f"Okej, jag har noterat din favoritfärg som {color}.")
    else:
        await update.message.reply_text("Berätta din favoritfärg, t.ex. /setcolor blå")

async def get_favorite_color(update: Update, context):
    """Berättar för användaren deras favoritfärg."""
    color = context.user_data.get("favorite_color")
    if color:
        await update.message.reply_text(f"Din favoritfärg är {color}.")
    else:
        await update.message.reply_text("Jag vet inte din favoritfärg än. Använd /setcolor.")

# Lägg till dessa hanterare:
# application.add_handler(CommandHandler("setcolor", set_favorite_color))
# application.add_handler(CommandHandler("getcolor", get_favorite_color))

4.2 Beständig data över omstarter

För att data ska bestå även när ditt bot-skript startas om, behöver du en mer robust lösning, såsom:

  • Filer (CSV, JSON): Enkelt för små mängder data.
  • Databaser (SQLite, PostgreSQL, MongoDB): Rekommenderas för större, mer komplex datalagring. SQLite är ett bra val för lokal utveckling eftersom det är filbaserat och inte kräver en separat server.
  • Tredjeparts lagringslösningar: Molndatabaser som Firestore eller DynamoDB.

Biblioteket python-telegram-bot erbjuder också BasePersistence-klasser som kan användas med PicklePersistence eller DictPersistence för att spara user_data, chat_data och bot_data till en fil. Se de officiella python-telegram-bot-exemplen för hur man använder persistence (https://docs.python-telegram-bot.org/en/stable/telegram.ext.basepersistence.html).

5. Överväganden vid driftsättning

Att köra din bot på din lokala maskin är bra för utveckling, men för att den ska vara tillgänglig dygnet runt behöver du driftsätta den på en server.

5.1 Polling vs. Webhooks

Det finns två huvudsakliga sätt för en Telegram-bot att ta emot uppdateringar:

  • Lång polling (Long Polling): Din bot frågar upprepade gånger Telegram-servrar efter nya uppdateringar. Detta är vad vi använde med application.run_polling(). Enkelt att konfigurera men kan vara resurskrävande för mycket aktiva botar.
  • Webhooks: Du berättar för Telegram URL:en till din server. När en uppdatering inträffar skickar Telegram en HTTP POST-förfrågan till den URL:en. Effektivare för produktion, men kräver en offentligt tillgänglig server och hantering av HTTPS.

För enkla botar och initial utveckling räcker lång polling. För produktion föredras webhooks generellt. Biblioteket python-telegram-bot stöder båda.

5.2 Driftsättningsplattformar

Flera plattformar är lämpliga för att driftsätta Python-botar:

  • Heroku: Utmärkt för små till medelstora projekt, med en gratis nivå. Enkel att driftsätta med git.
  • Render: Liknar Heroku men ofta med mer generösa gratisnivåer och moderna funktioner.
  • AWS (EC2, Lambda), Google Cloud (Compute Engine, Cloud Functions), Azure (App Service, Functions): Erbjuder kraftfulla, skalbara lösningar men har en brantare inlärningskurva.
  • Virtual Private Servers (VPS): Tjänster som DigitalOcean, Linode, Vultr ger dig mer kontroll, men du ansvarar för serverhanteringen.

När du driftsätter, kom ihåg att:

  • Håll din API-token säker: Använd miljövariabler.
  • Installera beroenden: Skapa en requirements.txt-fil (pip freeze > requirements.txt) och se till att din värd installerar dem.
  • Konfigurera processhanterare: Verktyg som systemd eller pm2 kan hålla din bot igång även om den kraschar.

För kommersiella applikationer eller mycket skalbara AI-drivna botar, erbjuder plattformar som TeleClaw en robust, hanterad miljö. De hanterar infrastrukturen, säkerheten och skalningen, vilket gör att du kan fokusera på din bots logik och användarupplevelse. Kolla in vår detaljerade guide om Telegram-bot för företag för att se vad TeleClaw erbjuder.

Slutsats

Du har nu lärt dig de grundläggande principerna för att bygga en Telegram-bot Python-applikation. Från den initiala installationen med BotFather och miljökonfiguration till att skriva hanterare för kommandon och meddelanden, hantera olika datatyper och överväga driftsättningsstrategier, har du en solid grund. Biblioteket python-telegram-bot gör interaktionen med Telegram API förvånansvärt enkel, vilket öppnar upp en värld av möjligheter för automatisering och interaktion.

När du blir mer bekväm kan du utforska avancerade ämnen som:

  • Konversationshantering med ConversationHandler.
  • Felhantering och robust loggning.
  • Integrering med databaser för komplex datalagring.
  • Använda mer avancerade filters.
  • Implementera inline-läge för globala sökfunktioner.

Kom ihåg att skönheten med Telegrams öppenhet och Pythons mångsidighet är att du kan bygga nästan vad som helst. Om du vill lyfta din bot med banbrytande AI, naturlig språkförståelse eller sömlösa integrationer utan den tunga kodningsbördan, är plattformar som TeleClaw utformade för att stärka dig.

Redo att bygga, förbättra eller hantera dina Telegram-botar med intelligent automatisering?

Utforska TeleClaw idag och supercharge din Telegram-bot! eller prova vår bot direkt på Telegram: @claw

FAQ

Vanliga frågor

Vilka är de grundläggande stegen för att skapa en Telegram-bot med Python?
De grundläggande stegen inkluderar att skapa en ny bot med BotFather för att få en API-token, installera biblioteket `python-telegram-bot`, skriva Python-kod för att hantera meddelanden och kommandon, och sedan köra ditt skript. För mer avancerade funktioner eller AI-integration kan plattformar som TeleClaw avsevärt förenkla processen.
Behöver jag programmeringserfarenhet för att följa denna Telegram-bot Python-guide?
Även om grundläggande Python-kunskaper är till hjälp, är denna guide utformad för att vara tillgänglig. Vi går igenom varje steg och förklarar koncepten tydligt. För dem som föredrar en kodfri lösning erbjuder TeleClaw kraftfulla verktyg för att bygga Telegram-botar utan att skriva någon kod alls.
Hur kan TeleClaw hjälpa till med mitt Telegram-bot Python-projekt?
TeleClaw kan förbättra ditt Telegram-bot Python-projekt genom att erbjuda avancerade AI-funktioner, enkla integrationer och robust analys. Du kan använda TeleClaw för komplex naturlig språkförståelse, kunskapsbasintegration eller för att hantera flera botar effektivt, även om du började med en Python-baserad anpassad bot.
Fler artiklar

Fortsätt läsa