Fix Telegram double-message: skip TaskBeat reply if agent already sent via <send_telegram>, strip command blocks from response
This commit is contained in:
parent
be1f375071
commit
558c2d46f0
1 changed files with 36 additions and 17 deletions
53
app.py
53
app.py
|
|
@ -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))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue