Fix Telegram double-message: skip TaskBeat reply if agent already sent via <send_telegram>, strip command blocks from response

This commit is contained in:
eric 2026-02-23 08:03:09 +00:00
parent be1f375071
commit 558c2d46f0

53
app.py
View file

@ -2264,21 +2264,29 @@ def process_beat_tasks():
logger.info("[TaskBeat] Task #%d abgeschlossen.", task['id']) logger.info("[TaskBeat] Task #%d abgeschlossen.", task['id'])
# Agent-Kommandos parsen (@SEND_EMAIL, @UPDATE_TEAM_MEMBER, etc.) # Agent-Kommandos parsen (@SEND_EMAIL, @UPDATE_TEAM_MEMBER, etc.)
# Merken ob der Agent selbst schon eine Telegram-Nachricht verschickt hat
agent_sent_telegram = bool(re.search(r'<send_telegram>', response, re.IGNORECASE))
try: try:
parse_agent_commands('orchestrator', response, task_id=task['id']) parse_agent_commands('orchestrator', response, task_id=task['id'])
except Exception as e: except Exception as e:
logger.error("[TaskBeat] parse_agent_commands Fehler: %s", str(e)) logger.error("[TaskBeat] parse_agent_commands Fehler: %s", str(e))
# Telegram-Antwort senden # Telegram-Antwort senden — aber nur wenn der Agent nicht schon selbst
if task.get('type') == 'telegram' and task.get('telegram_chat_id'): # eine Nachricht über <send_telegram> geschickt hat (sonst Doppel-Nachricht)
if task.get('type') == 'telegram' and task.get('telegram_chat_id') and not agent_sent_telegram:
try: try:
telegram_msg = ( # Kommando-Blöcke aus der Antwort entfernen bevor wir sie senden
f"✅ Task #{task['id']} abgeschlossen!\n\n" clean_response = re.sub(
f"📝 Anfrage: {task.get('title', 'N/A')}\n\n" r'<(send_telegram|create_task|update_knowledge|update_agent_reminder|ask_orchestrator|send_email)[^>]*>.*?</\1>',
f"💬 Antwort:\n{response[:4000]}" '', response, flags=re.DOTALL | re.IGNORECASE
) ).strip()
send_telegram_message(task['telegram_chat_id'], telegram_msg) if clean_response:
logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id']) telegram_msg = (
f"✅ Task #{task['id']} abgeschlossen!\n\n"
f"💬 {clean_response[:4000]}"
)
send_telegram_message(task['telegram_chat_id'], telegram_msg)
logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id'])
except Exception as e: except Exception as e:
logger.error("[TaskBeat] Fehler beim Senden der Telegram-Antwort: %s", str(e)) logger.error("[TaskBeat] Fehler beim Senden der Telegram-Antwort: %s", str(e))
continue continue
@ -2388,15 +2396,26 @@ Arbeite diesen Teil ab und liefere ein vollständiges Ergebnis.""",
logger.info("[TaskBeat] Task #%d abgeschlossen.", task['id']) logger.info("[TaskBeat] Task #%d abgeschlossen.", task['id'])
# Telegram-Benachrichtigung wenn Task von Telegram kam # Telegram-Benachrichtigung wenn Task von Telegram kam
if task.get('type') == 'telegram' and task.get('telegram_chat_id'): # Nur senden wenn Agent nicht bereits selbst <send_telegram> verwendet hat
agent_sent_telegram = bool(re.search(r'<send_telegram>', response, re.IGNORECASE))
try:
parse_agent_commands(agent_key, response, task_id=task['id'])
except Exception as e:
logger.error("[TaskBeat] parse_agent_commands Fehler (sub): %s", str(e))
if task.get('type') == 'telegram' and task.get('telegram_chat_id') and not agent_sent_telegram:
try: try:
telegram_msg = ( clean_response = re.sub(
f"✅ Task #{task['id']} abgeschlossen!\n\n" r'<(send_telegram|create_task|update_knowledge|update_agent_reminder|ask_orchestrator|send_email)[^>]*>.*?</\1>',
f"📝 Anfrage: {task.get('title', 'N/A')}\n\n" '', response, flags=re.DOTALL | re.IGNORECASE
f"💬 Antwort:\n{response[:4000]}" # Telegram limit: 4096 chars ).strip()
) if clean_response:
send_telegram_message(task['telegram_chat_id'], telegram_msg) telegram_msg = (
logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id']) f"✅ Task #{task['id']} abgeschlossen!\n\n"
f"💬 {clean_response[:4000]}"
)
send_telegram_message(task['telegram_chat_id'], telegram_msg)
logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id'])
except Exception as e: except Exception as e:
logger.error("[TaskBeat] Fehler beim Senden der Telegram-Antwort: %s", str(e)) logger.error("[TaskBeat] Fehler beim Senden der Telegram-Antwort: %s", str(e))