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

33
app.py
View file

@ -2264,18 +2264,26 @@ 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:
# Kommando-Blöcke aus der Antwort entfernen bevor wir sie senden
clean_response = re.sub(
r'<(send_telegram|create_task|update_knowledge|update_agent_reminder|ask_orchestrator|send_email)[^>]*>.*?</\1>',
'', response, flags=re.DOTALL | re.IGNORECASE
).strip()
if clean_response:
telegram_msg = ( telegram_msg = (
f"✅ Task #{task['id']} abgeschlossen!\n\n" f"✅ Task #{task['id']} abgeschlossen!\n\n"
f"📝 Anfrage: {task.get('title', 'N/A')}\n\n" f"💬 {clean_response[:4000]}"
f"💬 Antwort:\n{response[:4000]}"
) )
send_telegram_message(task['telegram_chat_id'], telegram_msg) send_telegram_message(task['telegram_chat_id'], telegram_msg)
logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id']) logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id'])
@ -2388,12 +2396,23 @@ 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: 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:
clean_response = re.sub(
r'<(send_telegram|create_task|update_knowledge|update_agent_reminder|ask_orchestrator|send_email)[^>]*>.*?</\1>',
'', response, flags=re.DOTALL | re.IGNORECASE
).strip()
if clean_response:
telegram_msg = ( telegram_msg = (
f"✅ Task #{task['id']} abgeschlossen!\n\n" f"✅ Task #{task['id']} abgeschlossen!\n\n"
f"📝 Anfrage: {task.get('title', 'N/A')}\n\n" f"💬 {clean_response[:4000]}"
f"💬 Antwort:\n{response[:4000]}" # Telegram limit: 4096 chars
) )
send_telegram_message(task['telegram_chat_id'], telegram_msg) send_telegram_message(task['telegram_chat_id'], telegram_msg)
logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id']) logger.info("[TaskBeat] Telegram-Antwort gesendet für Task #%d", task['id'])