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

Grammy.js Conversation无报错自行终止问题求助

问题排查:Grammy.js Conversation模块会话终止无响应

核心问题分析

你的代码执行到发送Mahsulot haqida ma'lumot:后无响应,主要有以下几个原因:

  • 会话状态对象不一致:开头判断ctx.session.in_conversation,后续却修改conversation.session.in_conversation,两者可能并非同一实例,导致状态判断失效或会话锁死。
  • 缺少异常输入处理:第二个waitFor(["message"])未配置otherwise回调,若用户发送非文本消息(比如图片、按钮点击),会话会一直处于等待状态,无任何反馈。
  • 取消按钮未覆盖全流程:仅在第一步输入后判断取消按钮,第二步等待时用户点击取消无法触发终止逻辑,会话会挂起。
  • 变量拼写错误:descryption应为description(虽不影响当前运行,但易引发后续逻辑问题)。

修正后的代码

if (ctx.session.in_conversation === true) return;
ctx.session.in_conversation = true; // 统一使用ctx.session管理状态

await ctx.replyWithChatAction("typing");
await ctx.reply("Mahsulot nomini kiriting:", {
  reply_markup: cancelKeyboard,
});

const nameMsg = await conversation.waitFor(["message"], {
  otherwise: () => ctx.reply("Iltimos matn ko'rinishida kiriting!"),
});
const name = nameMsg.message?.text;
if (name === "❌ Bekor qilish") {
  ctx.session.in_conversation = false;
  await ctx.reply("🙅‍♂️ Amal bekor qilindi", { reply_markup: mainKeyboard });
  return;
}

await ctx.reply("Mahsulot haqida ma'lumot:");
const descriptionMsg = await conversation.waitFor(["message"], {
  // 新增异常处理,同时监听取消按钮
  otherwise: async () => {
    await ctx.reply("Iltimos matn ko'rinishida kiriting!");
    // 重新等待用户输入
    return conversation.waitFor(["message"], { otherwise: arguments.callee });
  },
});
const description = descriptionMsg.message?.text;

// 新增第二步的取消判断
if (description === "❌ Bekor qilish") {
  ctx.session.in_conversation = false;
  await ctx.reply("🙅‍♂️ Amal bekor qilindi", { reply_markup: mainKeyboard });
  return;
}

await ctx.reply(`${description}`);

ctx.session.in_conversation = false;
return;

额外注意事项

  • 确保会话状态(in_conversation)始终通过同一个对象管理(优先使用ctx.session,Grammy中会话默认绑定到ctx.session)。
  • 所有waitFor都应配置otherwise回调,处理非预期输入,避免会话无响应。
  • 全流程覆盖取消按钮的判断逻辑,确保用户随时能终止会话。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:28:27