feat(api): Telegram — темы, очередь повторов, «Система», /setup
telegram/client: Bot API на fetch с таймаутом 5 с; ошибки делятся на повторяемые (сеть, таймаут, 429, 5xx) и конфигурационные (400/403…), токен не попадает ни в тексты ошибок, ни в tg_last_error. format: заявка и уточнение по шаблону плана, HTML с экранированием, источник из utm / referrer, первый визит. outbox: Notifier с отправкой после ответа и тиком раз в минуту, пауза 1, 2, 4… мин, уточнение только после своей заявки, после 10 попыток — в «Систему». system: тема «Система» с троттлингом ×N за период. bot: long polling, только TELEGRAM_ADMIN_ID, /setup создаёт темы и присылает id в личку. config: всё окружение в одном месте.
This commit is contained in:
@@ -17,6 +17,8 @@ export type AppDeps = {
|
||||
/** Адреса, от которых верим X-Real-IP, помимо loopback. */
|
||||
trustedProxies?: readonly string[];
|
||||
version?: string;
|
||||
/** 500: сообщить в «Систему». Ответ клиенту от этого не зависит. */
|
||||
onServerError?: (err: unknown) => void;
|
||||
};
|
||||
|
||||
export const MAX_BODY_BYTES = 16 * 1024;
|
||||
@@ -41,6 +43,7 @@ export function createApp(deps: AppDeps) {
|
||||
|
||||
app.onError((err) => {
|
||||
console.error(err);
|
||||
deps.onServerError?.(err);
|
||||
return reply({ ok: false, error: 'server' }, 500);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user