fix(agent99): mirror telegram sendmessage alerts
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m39s
CD Pipeline / build-and-deploy (push) Successful in 5m46s
CD Pipeline / post-deploy-checks (push) Successful in 6m21s
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m39s
CD Pipeline / build-and-deploy (push) Successful in 5m46s
CD Pipeline / post-deploy-checks (push) Successful in 6m21s
This commit is contained in:
@@ -4936,6 +4936,10 @@ class TelegramGateway:
|
||||
payload = normalize_telegram_send_message_payload(method, payload)
|
||||
source_envelope_extra = payload.pop(_AWOOOP_SOURCE_ENVELOPE_EXTRA_KEY, None)
|
||||
await self._attach_incident_thread_reply(method, payload)
|
||||
_schedule_agent99_ai_alert_card_mirror(
|
||||
str(payload.get("text") or payload.get("caption") or ""),
|
||||
source="send_request",
|
||||
)
|
||||
|
||||
url = f"{self.api_url}/{method}"
|
||||
|
||||
@@ -9340,10 +9344,6 @@ class TelegramGateway:
|
||||
reply_markup_present=bool(reply_markup),
|
||||
)
|
||||
)
|
||||
_schedule_agent99_ai_alert_card_mirror(
|
||||
payload["text"],
|
||||
source="send_alert_notification",
|
||||
)
|
||||
return await self._send_request("sendMessage", payload)
|
||||
|
||||
# =========================================================================
|
||||
@@ -9383,10 +9383,6 @@ class TelegramGateway:
|
||||
"parse_mode": effective_parse_mode,
|
||||
"disable_web_page_preview": disable_web_page_preview,
|
||||
}
|
||||
_schedule_agent99_ai_alert_card_mirror(
|
||||
payload["text"],
|
||||
source="send_text",
|
||||
)
|
||||
return await self._send_request("sendMessage", payload)
|
||||
|
||||
async def send_controlled_apply_result_receipt(
|
||||
|
||||
@@ -5,6 +5,8 @@ test_telegram_message_templates.py - Telegram 訊息模板測試
|
||||
符合 feedback_no_mock_testing.md 規範 - 測試實際格式化輸出
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
|
||||
import pytest
|
||||
|
||||
import src.services.telegram_gateway as telegram_gateway_module
|
||||
@@ -462,6 +464,63 @@ def test_send_request_payload_normalizer_blocks_direct_host_raw_dump() -> None:
|
||||
assert '"product":"prisma"' not in result["text"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_send_request_mirrors_direct_ai_alert_card_to_agent99(monkeypatch) -> None:
|
||||
"""direct sendMessage AI cards must reach Agent99 even without wrapper helpers."""
|
||||
mirrored: list[dict[str, str]] = []
|
||||
gateway = TelegramGateway()
|
||||
gateway._initialized = True
|
||||
|
||||
class FakeResponse:
|
||||
def raise_for_status(self) -> None:
|
||||
return None
|
||||
|
||||
def json(self) -> dict:
|
||||
return {"ok": True, "result": True}
|
||||
|
||||
class FakeHttpClient:
|
||||
async def post(self, url, json): # type: ignore[no-untyped-def]
|
||||
return FakeResponse()
|
||||
|
||||
async def fake_mirror(text: str, *, source: str = "telegram_gateway") -> str:
|
||||
mirrored.append({"text": text, "source": source})
|
||||
return "mirrored"
|
||||
|
||||
monkeypatch.setattr(TelegramGateway, "api_url", property(lambda _self: "https://telegram.test/botx"))
|
||||
monkeypatch.setattr(
|
||||
telegram_gateway_module,
|
||||
"_agent99_ai_alert_card_mirror_configured",
|
||||
lambda: True,
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
telegram_gateway_module,
|
||||
"_mirror_ai_automation_alert_card_to_agent99",
|
||||
fake_mirror,
|
||||
)
|
||||
gateway._http_client = FakeHttpClient()
|
||||
|
||||
result = await gateway._send_request(
|
||||
"sendMessage",
|
||||
{
|
||||
"chat_id": "chat",
|
||||
"text": (
|
||||
"SourceProviderIngestionStale provider_freshness_signal freshness "
|
||||
"window timeout Sentry SigNoz provider freshness last seen missing "
|
||||
"direct ref verifier readback"
|
||||
),
|
||||
"parse_mode": "MarkdownV2",
|
||||
},
|
||||
)
|
||||
await asyncio.sleep(0)
|
||||
|
||||
assert result == {"ok": True, "result": True}
|
||||
assert mirrored
|
||||
assert mirrored[0]["source"] == "send_request"
|
||||
assert "ai_automation_alert_card_v1" in mirrored[0]["text"]
|
||||
assert "provider_freshness_signal" in mirrored[0]["text"]
|
||||
assert "runtime_write_gate=controlled" in mirrored[0]["text"]
|
||||
|
||||
|
||||
def test_weekly_report_marks_all_zero_as_low_trust_anomaly() -> None:
|
||||
report = WeeklyReportMessage(
|
||||
week_range="2026-W24",
|
||||
|
||||
Reference in New Issue
Block a user