You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Telegram用户ID并在会话结束后移除以保障Telethon机器人并发正常运行

解决方案

你可以通过全局集合存储处于人工会话状态的用户ID,实现多用户隔离,互不影响,具体实现逻辑如下:

  1. 全局定义集合存储人工会话用户ID,查询/增删效率远高于普通数组
  2. 收到用户消息时先判断用户是否在人工会话集合中,在则跳过自动回复、转发给人工;不在则走正常自动回复逻辑
  3. 人工会话结束时从集合中移除对应用户ID即可恢复自动回复

完整代码示例

首先定义全局变量:

# 全局集合:存储正在人工服务中的用户ID
in_human_support = set()

主消息处理逻辑:

@client.on(events.NewMessage(incoming=True))
async def _(event):
    # 仅处理私聊消息
    if not event.is_private:
        return
    # 直接获取用户ID,无需额外调用get_entity(性能更高)
    user_id = event.from_id.user_id

    # 判断用户是否处于人工服务状态
    if user_id in in_human_support:
        # 此处补充你的消息转发逻辑:把用户消息转发给人工客服账号/客服群
        # await client.forward_messages(客服账号ID, event.message)
        return # 跳过后续自动回复逻辑

    # 以下为正常自动回复逻辑
    msg_text = event.message.message.strip()
    if msg_text == '1':
        await event.reply('XXXXXXXXXXXXXXXXXXXX')
    elif msg_text == '联系人工客服':
        # 用户触发人工服务,ID加入集合
        in_human_support.add(user_id)
        await event.reply('已为您转接人工客服,请稍候~')
    # 其他自动回复规则可自行补充

人工会话结束移除用户ID的逻辑:
你可以给客服账号配置结束会话指令,示例如下:

# 仅允许你的客服账号调用该指令,把下面的ID换成你实际的客服账号ID
@client.on(events.NewMessage(from_users=['你的客服账号ID']))
async def end_human_session(event):
    cmd = event.message.message.strip()
    if cmd.startswith('/end'):
        try:
            # 指令格式:/end 待结束会话的用户ID
            target_user_id = int(cmd.split()[1])
            if target_user_id in in_human_support:
                in_human_support.remove(target_user_id)
                await event.reply(f'已结束用户{target_user_id}的人工会话,用户将恢复自动响应')
                # 可选:给用户发会话结束通知
                await client.send_message(target_user_id, '本次人工服务已结束,后续将为您自动回复')
        except (IndexError, ValueError):
            await event.reply('指令格式错误,正确格式为:/end 对应用户ID')

注意事项

  • 上述示例用的是内存级集合,机器人重启后数据会清空,需要持久化的话可以替换为redis、sqlite等存储,启动时读取正在人工服务的用户ID写入集合即可
  • 若机器人多进程部署,不要用内存集合,换成共享存储(如redis)即可实现多进程状态同步

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:09:03