Deployment¶
TeleFlow deployment - это обычный .NET deployment. Framework не требует custom process model.
Сначала выбери transport:
- long polling: один long-running worker владеет
getUpdates; - webhooks: ASP.NET Core принимает HTTPS requests от Telegram;
- raw transports: приложение само владеет dispatching, queueing и acknowledgement semantics.
Long polling worker¶
Long polling проще всего deploy-ить как worker process:
var builder = TeleFlowApplication.CreateBuilder(args);
builder.Services.AddTelegramBot(options => options.Token = token);
builder.Services.AddTelegramHandlersFromAssembly(typeof(Program).Assembly);
builder.Services.AddLongPolling();
await using var app = builder.Build();
await app.RunAsync();
Operational rules:
- запускай один active long polling worker на bot token, если специально не строишь worker coordination;
- по возможности делай handlers idempotent;
- передавай cancellation от host;
- используй durable state storage перед multi-instance или restart-sensitive workflows;
- держи logs searchable по update id, chat id, handler и exception type.
Webhook app¶
Webhook deployment - это ASP.NET Core app:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTelegramBot(options => options.Token = token);
builder.Services.AddTelegramHandlersFromAssembly(typeof(Program).Assembly);
builder.Services.AddWebhook(options =>
{
options.Path = "/telegram/webhook";
options.SecretToken = webhookSecret;
});
var app = builder.Build();
app.MapTelegramWebhook();
await app.RunAsync();
Operational rules:
- expose HTTPS;
- держи webhook path стабильным;
- настраивай Telegram webhook URL вне request handler;
- валидируй
SecretToken; - держи request handling коротким;
- long-running work выноси за свою queue, когда это нужно.
Configuration¶
Production tokens должны приходить из platform, а не из committed files:
options.Token = configuration["Telegram:BotToken"]
?? throw new InvalidOperationException("Telegram:BotToken is not configured.");
Используй environment variables, secret managers, CI/CD variables, Docker secrets, Kubernetes secrets или secret storage своего cloud provider.
Смотри Конфигурация и секреты.
Docker¶
TeleFlow bot publish-ится как обычное .NET app:
Для containers:
- передавай token через environment или secrets;
- не bake-ай secrets в image;
- отправляй logs в stdout/stderr;
- настрой graceful shutdown;
- не используй memory storage для workflows, которые должны переживать container restarts.
Long polling containers обычно должны работать в одном replica на bot token. Webhook containers можно масштабировать горизонтально, если handlers и storage готовы к concurrency.
systemd¶
Для небольшого Linux host можно запустить long polling под systemd:
[Service]
WorkingDirectory=/opt/teleflow-bot
ExecStart=/usr/bin/dotnet /opt/teleflow-bot/MyBot.dll
Restart=on-failure
Environment=Telegram__BotToken=123456:ABC
По возможности держи secrets в environment file с ограниченными permissions.
Kubernetes¶
Для Kubernetes:
- используй
Deploymentдля webhook apps; - используй один replica для long polling, если нет worker coordination;
- храни tokens в
Secret; - expose webhooks через ingress с TLS;
- используй readiness/liveness probes для ASP.NET Core webhook apps;
- используй external storage для state.
Pending updates¶
Telegram может хранить updates, пока бот offline. При long polling pending updates могут прийти после restart.
Current public TeleFlow docs не заявляют drop_pending_updates option. Пока такого API нет, startup behavior нужно считать operational decision:
- handlers должны терпеть duplicate или delayed user actions;
- critical flows должны быть idempotent;
- deployments не должны создавать долгий downtime;
- если old updates вредны для продукта, explicit drop-pending support нужно запланировать до production launch.
Release checklist¶
Перед production:
- используется generated registration или reflection use задокументирован;
IWF.TeleFlow.Generatorsprivate;- token и webhook secret не committed;
- transport choice documented;
- state storage подходит под deployment topology;
- logs и errors observable;
- CI запускает build и tests;
- smoke test покрывает
/start, один callback, один state flow и один Telegram API call.