Improve timeout resilience for Telegram and n8n integrations.

Add configurable Telethon retry/connect settings, enable retry-on-fail for external n8n nodes, and document recovery steps for Telegram and workflow activation timeouts.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-24 00:46:26 +03:00
parent 1c5fad898e
commit 98b1469488
4 changed files with 112 additions and 10 deletions

View File

@@ -13,6 +13,12 @@ N8N_WEBHOOK_URL = os.getenv("N8N_WEBHOOK_URL", "http://n8n:5678/webhook/tg-inbox
HISTORY_CHECK_FILE = os.getenv("HISTORY_CHECK_FILE", "/app/session/history_done.flag")
SESSION_FILE_PATH = os.getenv("SESSION_FILE_PATH", "/app/session/session.session")
SESSION_STRING = os.getenv("TG_SESSION_STRING", "")
TG_USE_IPV6 = os.getenv("TG_USE_IPV6", "false").lower() in {"1", "true", "yes"}
TG_CONNECT_TIMEOUT = int(os.getenv("TG_CONNECT_TIMEOUT", "20"))
TG_REQUEST_RETRIES = int(os.getenv("TG_REQUEST_RETRIES", "10"))
TG_CONNECTION_RETRIES = int(os.getenv("TG_CONNECTION_RETRIES", "20"))
TG_RETRY_DELAY = int(os.getenv("TG_RETRY_DELAY", "5"))
TG_RECONNECT_WAIT = int(os.getenv("TG_RECONNECT_WAIT", "15"))
def load_session_string() -> str:
@@ -39,7 +45,17 @@ def validate_config() -> None:
validate_config()
client = TelegramClient(StringSession(load_session_string()), API_ID, API_HASH)
client = TelegramClient(
StringSession(load_session_string()),
API_ID,
API_HASH,
use_ipv6=TG_USE_IPV6,
timeout=TG_CONNECT_TIMEOUT,
request_retries=TG_REQUEST_RETRIES,
connection_retries=TG_CONNECTION_RETRIES,
retry_delay=TG_RETRY_DELAY,
auto_reconnect=True,
)
def build_author(sender) -> dict:
if not sender:
@@ -130,7 +146,25 @@ async def handler(event):
await send_to_n8n(event.message)
async def main():
await client.start()
print(
"Connecting to Telegram with settings:",
{
"use_ipv6": TG_USE_IPV6,
"connect_timeout": TG_CONNECT_TIMEOUT,
"request_retries": TG_REQUEST_RETRIES,
"connection_retries": TG_CONNECTION_RETRIES,
"retry_delay": TG_RETRY_DELAY,
},
)
while True:
try:
await client.start()
break
except Exception as e:
print(f"Telegram connect failed: {e}. Retrying in {TG_RECONNECT_WAIT}s...")
await asyncio.sleep(TG_RECONNECT_WAIT)
print("UserBot started...")
if not os.path.exists(HISTORY_CHECK_FILE):