diff --git a/harness/tg_inbox.py b/harness/tg_inbox.py index 4f6c806..23e23f0 100644 --- a/harness/tg_inbox.py +++ b/harness/tg_inbox.py @@ -70,13 +70,22 @@ def receive_message(update: dict): def send_reply(msg_id: str, text: str): - """Ответ на входящее: Telegram-отправка + событие ReplySent (закрывает входящее).""" + """Ответ на входящее: Telegram-отправка + событие ReplySent (закрывает входящее). + + Перед отправкой шлём sendChatAction typing — в TG видно «печатает…». + sendChatAction живёт ~5с и НЕ обновляется сам — этого достаточно для + минутного пульса (типичный лаг ответа < 5с после начала отправки). + """ model = es.run_projections() m = (model.get("inbox") or {}).get(msg_id) if m is None: raise ValueError(f"входящее {msg_id} не найдено") if m.get("replied"): raise ValueError(f"на {msg_id} уже отвечено") + try: # индикатор — best effort: недоступность TG-метода не мешает ответу + _api("sendChatAction", {"chat_id": m["chat_id"], "action": "typing"}, timeout=10) + except Exception: + pass r = send_message(m["chat_id"], text, reply_to=None) es.append_event("inbox", msg_id, "ReplySent", { "to_chat": m["chat_id"], "text": text[:2000], "tg_ok": bool(r.get("ok")),