电报机器人怎么添加自动对话?用三键快捷分流搭建客服流程

发布时间:2026-11-01 09:47:25

## 背景说明

如果顾客每天反复询问价格、营业时间和订单进度,最省事的做法不是让机器人回答所有问题,而是把高频问题变成一组一键入口:顾客点“查订单”“看价格”或“联系人工”,机器人立即给出对应指引。这样比要求用户记住命令或输入完整句子更快捷,也能减少答非所问。

下面以小型网店客服为例,演示如何用 Telegram Bot API 做一个轻量版自动对话。它包括菜单按钮、关键词触发和订单号收集提示。注意:示例不会读取真实订单数据库;如需自动查单,还要连接你的订单系统或客服平台。

第一步:创建机器人并保存访问令牌

  1. 在 Telegram 搜索官方账号 @BotFather,打开对话后发送 /newbot。
  2. 按提示填写机器人显示名称和用户名。用户名通常需要以 bot 结尾。
  3. 创建成功后,BotFather 会提供一串 Bot Token。它相当于机器人的访问密码,先保存在安全位置,不要发到群聊、网页或公开代码仓库。

这一步只创建机器人身份,不会自动产生对话逻辑。想让机器人按按钮或关键词作答,还需要配置流程并运行程序。

第二步:准备运行环境并安装组件

在电脑或服务器上安装 Python 3.10 及以上版本,然后打开终端执行:

python -m pip install python-telegram-bot

建议把 Token 设置为环境变量,而不是直接写在代码里。Linux 或 macOS 终端可执行:

export TELEGRAM_BOT_TOKEN='替换为BotFather给你的Token'

Windows PowerShell 可执行:

$env:TELEGRAM_BOT_TOKEN='替换为BotFather给你的Token'

每次打开新的终端时,可能需要重新设置环境变量。若使用托管平台运行,则在平台的环境变量设置页面添加同名变量。

第三步:设置三键菜单和自动回复规则

新建 bot.py 文件,将下面代码复制进去。示例把常见问题做成按钮,同时为“价格”“营业时间”“人工”等文字设置快捷回复;选择查订单后,机器人会提示用户发送订单号,并说明后续需要人工核对。

import os
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import Application, CommandHandler, CallbackQueryHandler, MessageHandler, ContextTypes, filters

TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
if not TOKEN:
    raise RuntimeError('请先设置 TELEGRAM_BOT_TOKEN 环境变量')

def main_keyboard():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton('查订单', callback_data='order'), InlineKeyboardButton('看价格', callback_data='price')],
        [InlineKeyboardButton('营业时间', callback_data='hours'), InlineKeyboardButton('联系人工', callback_data='human')]
    ])

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    context.user_data['waiting_order'] = False
    await update.message.reply_text('你好,请点选常见问题,少打字也能快速找到答案。', reply_markup=main_keyboard())

async def button_reply(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()
    if query.data == 'order':
        context.user_data['waiting_order'] = True
        text = '请发送订单号。我会记录你的咨询提示;当前示例不连接订单系统,订单状态需由客服核对。'
    elif query.data == 'price':
        text = '常见商品价格请查看店铺商品页。如需批量报价,请发送商品名称和数量。'
    elif query.data == 'hours':
        text = '客服时间:周一至周五 09:00–18:00。非工作时间可留言,客服上班后处理。'
    else:
        text = '请发送你的问题和相关订单号,客服会按队列回复。'
    await query.edit_message_text(text, reply_markup=main_keyboard())

async def text_reply(update: Update, context: ContextTypes.DEFAULT_TYPE):
    text = update.message.text.strip()
    if context.user_data.get('waiting_order'):
        context.user_data['waiting_order'] = False
        await update.message.reply_text('已收到你提交的内容。此演示机器人不会查询真实订单,请通过菜单联系人工核对。', reply_markup=main_keyboard())
    elif any(word in text for word in ('价格', '多少钱', '报价')):
        await update.message.reply_text('价格请查看商品页;批量购买请发送商品名称和数量。', reply_markup=main_keyboard())
    elif any(word in text for word in ('时间', '营业', '几点')):
        await update.message.reply_text('客服时间:周一至周五 09:00–18:00。', reply_markup=main_keyboard())
    elif any(word in text for word in ('人工', '客服', '真人')):
        await update.message.reply_text('请点菜单中的“联系人工”,并附上问题和订单号。', reply_markup=main_keyboard())
    else:
        await update.message.reply_text('暂时没有匹配到快捷答案,请点选菜单,或发送“价格”“营业时间”“人工”。', reply_markup=main_keyboard())

app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler('start', start))
app.add_handler(CallbackQueryHandler(button_reply))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, text_reply))
app.run_polling()

把回复文案里的营业时间、商品说明改成自己的实际信息。代码最后一行的 & 是 HTML 中表示“与”的写法;如果你从网页复制代码,粘贴到 Python 文件后应改成普通的 & 字符(即 Python 的位运算符),不能保留 HTML 实体形式。

第四步:启动机器人并测试对话

在保存 bot.py 的目录打开终端,运行:

python bot.py

回到 Telegram,搜索刚创建的机器人并发送 /start。依次点击“看价格”“营业时间”和“查订单”,再测试发送“人工”“多少钱”等关键词。检查机器人是否给出预期回复;如果没有响应,先确认程序仍在运行、Token 设置正确,并查看终端中的错误信息。

本示例使用轮询方式接收消息,适合本地试运行和低流量场景。正式部署时,可将程序放到持续运行的服务器或应用托管平台,并按部署环境配置 Token;不要同时启动多个相同轮询实例,以免出现冲突。

第五步:把快捷对话变成可维护的流程

建议把菜单控制在三到五个高频选项,按钮名称直接写用户熟悉的说法,例如“查订单”而不是“订单模块”。关键词也要覆盖常见表达:价格可以匹配“多少钱”“报价”,营业时间可以匹配“几点营业”“什么时候有人”。每次新增规则后都用几种不同说法测试,避免只测自己预想的一句话。

如果订单查询需要自动显示物流状态,下一步应在查单分支中调用店铺后台接口,并校验用户身份及订单权限。不要仅凭任何人输入的订单号就泄露地址、电话等个人信息。

注意事项

  • 保护 Token:不要把令牌贴到公开群组或截图中。若意外泄露,可通过 BotFather 撤销并重新生成。
  • 区分演示与真实业务:示例中的订单提示只是收集咨询意图,并不会访问订单数据。对用户应明确说明哪些环节需要人工处理。
  • 避免关键词误触发:关键词尽量具体,回复也应提供下一步操作;对未识别内容设置清晰的兜底菜单。
  • 注意隐私和权限:收集订单号前说明用途;接入后台接口时做好身份验证、权限检查和日志保护。
  • 保持程序在线:本地电脑关机后机器人就会停止回复。需要持续服务时,应部署到可靠的运行环境并监控进程。

常见问题

问:只用 BotFather 能添加自动对话吗?
答:BotFather 主要用于创建和管理机器人资料,本身不负责配置完整的关键词回复流程。自动回复需要代码、机器人搭建平台或其他自动化服务。

问:用户必须输入 /start 才能用吗?
答:用户通常需要先打开机器人并开始对话,才能向它发送私聊消息。之后可以使用菜单按钮和你设置的关键词。

问:机器人能不能直接查订单?
答:可以,但需要连接订单系统或物流服务的接口,并按业务要求验证用户身份。上面的示例没有接入这些服务,因此不能返回真实订单状态。

问:按钮点了没反应怎么办?
答:确认程序正在运行,检查是否注册了回调处理器,并查看终端报错。若机器人部署在服务器上,还要确认服务没有休眠或退出。