显示更多帖子

怎么编写Telegram机器人?

2026-02-11 10:37:39

编写 Telegram 机器人的核心步骤是:通过 @BotFather 获取 Token,选择合适的编程语言和 SDK 库,编写处理用户消息和命令的逻辑代码,然后运行你的程序(使用轮询或配置 Webhook)。从简单的文本回复开始,逐步添加按钮、文件处理、数据库集成等功能,你就能创建出功能强大的 Telegram 机器人。

怎么编写Telegram机器人?

Telegram 机器人是运行在 Telegram 平台上的自动化程序,它们可以帮助你完成各种任务,例如自动回复消息、管理群组、发送通知、提供信息查询、玩游戏等等。得益于 Telegram 提供的强大 Bot API,编写一个 Telegram 机器人变得相对简单。本文将带你一步步完成你的第一个 Telegram 机器人的创建和基本功能实现。

核心概念

核心概念

在开始之前,了解几个关键概念:

1.  BotFather:Telegram 官方的“机器人制造机”。你需要通过它来创建新的机器人、获取 API Token 以及管理你的机器人设置。

2.  API Token:一串类似于 123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi 的密钥。这是你的机器人访问 Telegram Bot API 的唯一凭证,务必保密!任何拥有此 Token 的人都可以控制你的机器人。

3.  Bot API: Telegram 提供的一套 HTTP 接口。你的程序(机器人后端)通过向这些接口发送 HTTP 请求(通常使用 HTTPS 协议)来接收用户发送给机器人的消息、命令,并发送回复消息、图片等内容。

4.  Webhook vs. Polling: 这是机器人接收更新的两种主要方式。

       Webhook: Telegram 服务器在有新消息或事件(如用户加入群组、发送命令)时,会主动将这些“更新”推送到你指定的服务器 URL。这种方式更高效实时,但需要你的服务器有一个公网可访问的 URL。

       Polling: 你的程序定期(例如每秒)主动向 Telegram 服务器发送请求,询问“有没有新消息?”。这种方式实现简单,适用于开发测试或没有公网 IP 的情况,但不够实时且可能增加服务器负担。

5.  机器人后端: 这是运行你编写的机器人逻辑代码的程序。它可以使用几乎任何你熟悉的编程语言(Python, JavaScript/Node.js, Java, Go, PHP 等)来实现。

编写 Telegram 机器人的步骤

步骤 1:创建你的机器人并获取 API Token

1.  在 Telegram 应用中搜索 @BotFather 并开始对话。

2.  发送 /newbot 命令给 BotFather。

3.  BotFather 会提示你为你的机器人设置一个名字(显示给用户的名称,可以随时更改)。

4.  接着,BotFather 会要求你设置一个唯一的 username(必须以 bot 结尾,例如 my_first_test_bot)。这个名字是用户用来找到你的机器人的唯一标识。

5.  创建成功后,BotFather 会发送一条消息,其中包含你新机器人的 API Token。请妥善保存好这个 Token!

步骤 2:选择一种编程语言和库/框架

为了简化与 Telegram Bot API 的交互,避免手动处理 HTTP 请求和 JSON 数据,强烈建议使用针对你选择的编程语言的 Telegram Bot SDK(软件开发工具包)。一些流行的选择包括:

1.   Python: python-telegram-bot (PTB) 是最流行、功能最全的库之一。aiogram 是另一个强大的异步库。

2.   JavaScript/Node.js: node-telegram-bot-api 是一个非常流行的库。telegraf 是另一个功能丰富的框架。

3.   Java: TelegramBots 库。

4.   Go: go-telegram-bot-api。

5.   PHP: TelegramBot PHP SDK。

选择一个你熟悉的语言和库能大大提高开发效率。本文后续示例将使用 Python和python-telegram-bot(PTB) 库进行说明。

步骤 3:安装必要的库

对于 Python + PTB:

```bash

pip install python-telegram-bot

# 如果使用的是 PTB v20.x,它是纯异步的,可能需要:

pip install python-telegram-bot[callback]

# 或者根据你的需求安装其他 extras

```

步骤 4:编写机器人代码 - 基本功能

创建一个 Python 文件(例如 my_telegram_bot.py),并开始编写代码。

示例 1:最简单的 Echo Bot (回显机器人)

```python

from telegram import Update

from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, MessageHandler, filters

# 替换成你的实际 API Token

TOKEN = "YOUR_API_TOKEN_HERE"

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:

    """处理 /start 命令。"""

    await update.message.reply_text('你好!我是你的第一个 Telegram 机器人!发送 /help 查看可用命令。')

async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:

    """处理 /help 命令。"""

    help_text = """

    可用命令:

    /start - 开始使用机器人

    /help - 显示此帮助信息

    /echo - 回复你发送的文本

    发送任何其他文本,我会尝试回复你。

    """

    await update.message.reply_text(help_text)

async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:

    """回显用户发送的文本消息。"""

    # 获取用户发送的文本

    user_text = update.message.text

    # 回复相同的文本

    await update.message.reply_text(f"你说了: {user_text}")

def main() -> None:

    """启动机器人。"""

    # 创建 Application 实例

    application = ApplicationBuilder().token(TOKEN).build()

    # 注册命令处理器

    application.add_handler(CommandHandler("start", start))

    application.add_handler(CommandHandler("help", help_command))

    application.add_handler(CommandHandler("echo", echo))

    # 注册一个消息处理器,处理所有非命令的文本消息 (回显)

    application.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), echo))

    # 开始使用轮询 (Polling) 方式获取更新

    print("机器人已启动,正在轮询...")

    application.run_polling()

if __name__ == '__main__':

    main()

```

代码解释:

1.  导入库:导入 PTB 库的必要模块。

2.  定义 Token:将 TOKEN 替换为 BotFather 给你的真实 Token。

3.  处理函数 (start, help_command, echo):这些是异步函数,用于处理用户发送的特定命令或消息。

    1.   update 对象包含了消息和用户的信息。

    2.   context 对象用于访问更广泛的功能(如存储数据)。

    3.   update.message.reply_text() 是最常用的回复消息的方法。

4.  main 函数:

    1.   ApplicationBuilder().token(TOKEN).build() 创建核心的机器人应用实例。

    2.   application.add_handler(...) 将处理函数与特定类型的用户输入关联起来。

        3.   CommandHandler("command_name", handler_function)` 处理以 / 开头的命令(如 /start)。

        4.   MessageHandler(filters, handler_function) 处理符合特定过滤条件的普通消息。这里 filters.TEXT & (~filters.COMMAND) 表示处理所有文本消息,但排除掉那些是命令的消息(由 CommandHandler 处理)。

    5.   application.run_polling() 启动机器人,使用轮询方式不断向 Telegram 服务器请求新消息。这是最简单的方式,适合开发和测试。

步骤 5:运行你的机器人

步骤 5:运行你的机器人

1.  在命令行中,导航到你保存 my_telegram_bot.py 文件的目录。

2.  运行命令:

    ```bash

    python my_telegram_bot.py

    ```

3.  如果一切正常,你会看到类似 "机器人已启动,正在轮询..."的输出。

4.  在 Telegram 中找到你的机器人(通过 BotFather 给你的 @username),发送 /start 命令测试一下!

步骤 6:进阶 - 使用 Webhook (可选,用于生产环境)

当你准备将机器人部署到生产服务器时,Webhook 是更优的选择。

1.  准备公网可访问的 URL:你需要一个可以通过 HTTPS 访问的服务器和 URL 路径。这通常涉及购买域名、配置服务器(如 Nginx/Apache)和设置 SSL 证书(可以使用 Let's Encrypt 免费获取)。

2.  修改代码使用 Webhook:

    ```python

    def main() -> None:

        application = ApplicationBuilder().token(TOKEN).build()

        # ... 注册你的处理函数 ...

        # 假设你的公网 URL 是 'https://yourdomain.com/webhook'

        PUBLIC_URL = "https://yourdomain.com/webhook"

        PORT = 8443 # 常用端口,也可以是 443, 80, 或其他可用端口

        # 设置 Webhook

        application.run_webhook(

            listen="0.0.0.0", # 监听所有网络接口

            port=PORT,

            url_path=TOKEN, # 有时建议用 Token 作为路径的一部分提高安全性,但这不是必须的

            webhook_url=PUBLIC_URL,

            # 如果你的服务器在反向代理(如 Nginx)后面处理 SSL,通常不需要证书文件

            # certificate=open('/path/to/your/cert.pem', 'rb') # 如果直接暴露 Python 服务可能需要

        )

    ```

       注意:run_webhook 的参数配置取决于你的具体服务器环境。如果使用反向代理处理 SSL 和端口转发(常见做法),通常只需要配置 listen, port, url_path, webhook_url。url_path 通常是你的 Webhook 端点路径(如 /webhook 或 /webhook/<your_token>)。

3.  配置服务器:确保你的服务器(如 Nginx)配置正确,将到达 https://yourdomain.com/webhook 的 HTTPS 请求转发到你的 Python 应用正在监听的端口(例如 localhost:8443)。

4.  启动应用:使用类似 Gunicorn 或 uWSGI 的 WSGI 服务器(对于异步应用可能需要 Uvicorn + ASGI)来运行你的 Python 应用会更稳定可靠。一个简单的 Gunicorn 命令示例(适用于同步或兼容同步的 PTB 版本):

    ```bash

    gunicorn -w 4 -b 0.0.0.0:8443 my_telegram_bot:application

    ```

    对于 PTB v20.x 等纯异步应用,需要使用 ASGI 服务器:

    ```bash

    uvicorn my_telegram_bot:app --host 0.0.0.0 --port 8443 --workers 1 # ASGI 通常单进程多协程

    ```

    (注意:my_telegram_bot:application 或 my_telegram_bot:app 需要根据你的代码结构调整,确保指向正确的 Application 实例)。

步骤 7:调试与扩展

步骤 7:调试与扩展

1.   日志:PTB 有内置的日志模块。配置日志级别 (logging.basicConfig(level=logging.INFO)) 可以帮助你查看机器人的运行状态和错误信息。

2.   错误处理: 使用 Application.add_error_handler 来捕获和处理代码中未处理的异常,避免机器人崩溃。

3.   持久化数据: 如果需要记住用户状态或数据,你需要使用数据库(如 SQLite, PostgreSQL, Redis)或文件存储。context.user_data 和 context.chat_data 是 PTB 提供的用于临时存储对话相关数据的字典。

4.   探索 API: Telegram Bot API 功能非常丰富。你可以发送图片、文件、音频、视频、位置、贴纸,创建更复杂的键盘(如 ReplyKeyboardMarkup),处理群组事件等。查阅 python-telegram-bot 的官方文档 ([https://docs.python-telegram-bot.org/](https://docs.python-telegram-bot.org/)) 和 Telegram Bot API 官方文档 ([https://core.telegram.org/bots/api](https://core.telegram.org/bots/api)) 以获取更多功能和细节。

您可能还喜欢

Telegram可以在国内使用吗?

电报在中国大陆的可用性现状电报在中国能否直接访问官方服务器被网络封锁:Telegram(电报)自2015年以来在中国大陆被全面屏蔽,无论是官方网站https://telegram.org还是应用本身,

怎么举报Telegram群组?

如何在Telegram中举报违规群组:一份详细指南。Telegram是一个功能强大的即时通讯应用,但有时您可能会遇到一些发布违规或有害内容的群组。为了保护自己和他人,了解如何正确举报这些群组非常重要。

Telegram怎么将贴纸复制到WhatsApp上?

Telegram以其丰富多样的贴纸包深受用户喜爱。当你转用WhatsApp时,可能会想念那些有趣的Telegram贴纸。遗憾的是,WhatsApp和Telegram之间没有官方支持的、直接复制粘贴贴纸