Skip to content

Troubleshooting

AddTelegramBot must be called before ...

Framework handler и transport APIs требуют Telegram bot services.

Правильный order:

builder.Services.AddTelegramBot(options => options.Token = token);
builder.Services.AddTelegramHandlersFromAssembly(typeof(Program).Assembly);
builder.Services.AddLongPolling();

Assembly does not contain generated Telegram handler metadata

AddTelegramHandlersFromAssembly(...) требует IWF.TeleFlow.Generators.

Исправление:

<PackageReference Include="IWF.TeleFlow.Generators" Version="..." PrivateAssets="all" />

Потом пересобери application.

Если generated registration не нужен, используй:

builder.Services.AddTelegramHandler<StartHandler>();

Или:

builder.Services.AddTelegramHandlersFromAssemblyReflection(typeof(Program).Assembly);

Можно ли читать token из appsettings.json?

Да. TeleFlow не важно, откуда пришёл token. Прочитай его через обычную .NET configuration и явно передай resolved value:

builder.Services.AddTelegramBot(options =>
{
    options.Token = configuration["Telegram:BotToken"]
        ?? throw new InvalidOperationException("Telegram:BotToken is not configured.");
});

Смотри Конфигурация и секреты.

Handler не срабатывает

Проверь:

  • update type: message, callback, chat member;
  • command prefix;
  • text exact match vs contains;
  • state requirement;
  • class-level filters;
  • custom filter return value;
  • allowed updates for long polling.

State недоступен

Зарегистрируй state storage:

builder.Services.AddMemoryStateStorage();

Для custom storage убедись, что IStateStore и state middleware registered.

Wizard back не работает

Wizard back требует state history storage. AddMemoryStateStorage() его регистрирует. Custom storage должен предоставить IStateHistoryStore.

Callback data слишком длинная

Telegram callback data ограничен 64 UTF-8 bytes. Используй compact payloads:

[CallbackData("t")]
public sealed record TicketAction(long Id, string A);

Не клади large JSON payloads в callback data.

Webhook возвращает unauthorized

Проверь SecretToken configuration и Telegram webhook settings. Incoming request должен использовать expected secret token.

Бот получает старые updates после рестарта

Telegram может вернуть pending updates после downtime. Current public API не документирует drop-pending-updates option. Deployment и startup behavior нужно проектировать с учётом pending updates.