OoO
822789c810
feat(p49): Telegram 補完 9 頁對應 + daily summary 加商業面未跟進警示
...
CD Pipeline / deploy (push) Successful in 2m58s
M-B: Telegram 對應從 6/9 → 9/9
新增 3 個 cmd handler,對應 Phase 45-48 的 3 個新觀測頁:
- cmd:obs_overview — 一頁式總覽(三主機 24h + AI 呼叫 + 月成本 + 待審 episode)
- cmd:obs_orchestration — Agent 編排矩陣(4 Agent × Models 24h 數字)
本地 Ollama % / RAG 命中 % / 錯誤率 + cost
- cmd:obs_business — 商業面 × AI(價格決策 7d by strategy
+ 未跟進機會 + Outcomes verdict 30d)
services/openclaw_bot/menu_keyboards.py::_submenu_observability 升級為 9 項
M-C: daily summary(每日 09:30)加商業面警示
- 從 ai_price_recommendations × action_plans 跨表 JOIN
偵測 high-confidence (≥0.7) 卻無對應 action_plan 的「機會流失」
- 7d 內若有未跟進,daily summary 自動標 ⚠️ 警示
- 對應 Phase 48 business_intel 頁同個邏輯,閉環推送
inline keyboard 升級:日報附 6 個入口(總覽/編排/商業面/主機/AI/預算),
不再只有 4 個
Phase 38→49 累計 14 commits。觀測台戰役完整收官:
- 9 頁全部對應 Telegram cmd
- DB 22/22 = 100% 全覆蓋
- 6 個 L2 一鍵 + 3 種主動推送(即時/異常/日常)
- 日報含商業面警示
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-04 20:00:15 +08:00
OoO
5935a6512c
feat(p38): Telegram 補 4 個 AI 觀測台命令(B-3 完成)
...
CD Pipeline / deploy (push) Successful in 2m31s
統帥盤點要求:6 個觀測頁是否都有 Telegram 對應?
盤點結果:promotion_review 已有 (pg_ok/pg_no inline button),剩 4 個缺。
新增 4 個 cmd handler 對應 4 個觀測頁面:
1. cmd:obs_ai_calls — AI 呼叫總覽(24h)
- 總呼叫 / Token / cost / errors / RAG 命中 / cache 命中
- Top 5 provider 分組
2. cmd:obs_health — 主機健康監控
- 三主機 GCP-A / GCP-B / 111 即時 HTTP probe
- 過去 24h uptime % + 平均 response_ms(讀 host_health_probes)
3. cmd:obs_budget — 預算控管
- 當月 spent vs budget 各 provider
- 超 alert_pct 自動標記 ⚠️ / 超 100% 標記 🚨
4. cmd:obs_quality — Caller 反饋趨勢
- 過去 30 日 avg_score 最低 8 名
- 含 thumbs_up/down + trend 圖示
- 含 智能建議(feedback_quality_tracker)
UI/UX:
- main_menu_keyboard 加「🛰 AI 觀測台」入口
- 新 _submenu_observability() 在 menu_keyboards.py
- _SUBMENUS 註冊 'observability' key
- titles 映射加 observability 標題
- 4 個命令 cross-link(彼此互通 + 返回主選單)
Telegram 6/6 對應達成:
- promotion_review: pg_ok/pg_no inline button (既有)
- ai_calls: cmd:obs_ai_calls (新增)
- host_health: cmd:obs_health (新增)
- budget: cmd:obs_budget (新增)
- quality_trend: cmd:obs_quality (新增)
- ppt_audit: 既有「有 issues 才推 Telegram」推送行為(不需查詢命令)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-04 18:58:30 +08:00
OoO
8b76e3872f
feat(ppt): competitor v4 — 5-forces strategic analysis (Wave 4 partial)
...
CD Pipeline / deploy (push) Successful in 2m49s
Wave 4 部分完成:competitor v4 五力升級(戰略視角)
generate_competitor_v4_ppt — 7 頁
- P1 封面:含整體領先/勢均力敵/落後徽章 + 三句話戰略指引
- P2 五力雷達圖(matplotlib polar)+ 右側 6 維度分數明細表(含雙條視覺化)
- P3 商品力 + 價格力(雙卡)
- P4 行銷力 + 服務力(雙卡)
- P5 品牌力 + 財務力(雙卡含 momo 8454/PChome 8044/蝦皮 SE/酷澎基本面)
- P6 AI 戰略整合(差異化建議)
- P7 附錄
新增 helper:_mpl_radar_png()
- matplotlib polar projection 五力雷達
- momo 焦糖橘 + 競品蜂蜜金
- 0-10 分尺度,含格線/標籤/圖例
query_competitor_5forces — 半實作
- 商品力:momo SKU 數從 DB 算 / 競品靜態 fallback
- 價格力:靜態(待擴 competitor_price_history 整合)
- 行銷力 / 服務力:靜態知識(電視購物頻道 / 24h 物流 / 訂閱制)
- 品牌力:靜態 + 預留 mcp_collector 整合空間
- 財務力:上市公司公開資訊(momo 8454 富邦集團、PChome 8044、SEA、酷澎)
每個維度自動算 momo - 競品差異 → 識別最大優勢力與最大劣勢力
_ppt_ai_analysis 加 is_5forces 分支
- 角色:BCG/麥肯錫資深戰略顧問
- 結構:整體競爭態勢 / 優勢加碼 / 劣勢補強或避戰 / SMART 三層 / 競爭風險
- max_tokens 2400
路由:
- /ppt competitor_v4 vs PChome(預設)
- /ppt competitor_v4 蝦皮 vs 蝦皮
- /ppt competitor_v4 酷澎 vs 酷澎
Telegram 按鈕:「⚔️ 競業五力 v4」
bump TEMPLATE_VERSIONS['competitor_v4'] = v4.0.0(新類型獨立版本)
簡化限制:商品力/價格力/品牌力的競品具體數據需後續擴 mcp_collector
(PChome SKU API、Dcard 品牌討論度量化等),靜態 fallback 已維持結構完整性
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 13:10:15 +08:00
OoO
16b169d3ee
feat(ppt): price_elasticity sweet spot report v3.1.0 (simplified)
...
CD Pipeline / deploy (push) Successful in 2m56s
Wave 3.3:價格彈性簡化版(採購/PM 定價策略用)
generate_price_elasticity_ppt — 7 頁
- P1 封面:含集中度徽章(過度集中/主流明確/分布健康)+ 三句話結論
- P2 KPI:SKU 數/總訂單/甜蜜點價位/甜蜜點 SKU 數
- P3 各價位桶訂單分布橫條(找甜蜜點,焦糖橘=最高訂單桶)
- P4 各價位桶業績分布橫條(評估高價帶健康度,業界基準 30-50%)
- P5 甜蜜點 TOP 5 SKU(明星價位代表商品,新品設計參考)
- P6 AI 採購策略洞察
- P7 附錄
query_price_elasticity(category, days)
- 對 SKU 算平均售價(總業績 / 數量)
- 7 個價位桶分組(< 200 / 200-500 / 500-1K / 1K-2K / 2K-5K / 5K-10K / > 10K)
- 識別「訂單數最多」的桶 = 價格甜蜜點
- 計算高價帶(>NT$2K)業績佔比(業界基準健康 30-50%)
- 選 sweet_spot 桶內 TOP 5 SKU 作為代表
簡化版限制(為後續 ADR 註明):
- 非完整 price_elasticity(需要時間序列定價變化資料)
- 但能展示「該品類消費者最買單的價位帶」這個關鍵採購洞察
_ppt_ai_analysis 加 is_price_elast 分支
- 角色:採購主管 + PM
- 結構:甜蜜點解讀 / 高低價帶結構 / SMART 三層 / 風險預警
- 含「斷層補強」概念(識別 SKU 數明顯偏少的價位區間)
- max_tokens 1700
路由:
- /ppt price_elasticity 全平台 90 天
- /ppt price_elasticity 美妝保養 單品類 90 天
- /ppt price_elasticity 美妝保養 30 自訂天數
Telegram 按鈕:「💰 價格彈性報告」
bump TEMPLATE_VERSIONS['price_elasticity'] = v3.1.0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 12:48:15 +08:00
OoO
fe3cba8496
feat(ppt): market_intel_weekly external signal aggregation v3.1.0
...
CD Pipeline / deploy (push) Successful in 3m6s
Wave 3.2:市場情報週報 — 把 mcp_collector 所有外部 API 彙整成一份內部簡報。
generate_market_intel_weekly_ppt — 7 頁
- P1 封面:本週重點/市場機會/風險警訊三句話(從 AI 自動抽)
- P2 節慶日曆 + 季節情境(雙卡)
- P3 電商新聞 + Google 熱搜(雙卡)
- P4 Dcard 口碑 + YouTube 爆紅(雙卡)
- P5 天氣 + 匯率(雙卡,影響消費行為)
- P6 AI 整合洞察與行動建議
- P7 附錄
外部資料來源(mcp_collector_service / mcp_context_service):
- mcp_collector.get_holiday_context() 節慶日曆(靜態)
- mcp_collector.get_seasonal_context() 季節情境(靜態)
- get_ecommerce_news() 電商產業新聞(Gemini Grounding)
- get_taiwan_trends() Google 台灣熱搜
- get_dcard_trends() Dcard 熱門討論
- get_youtube_trending() YouTube 爆紅商品
- get_taiwan_weather() 台灣天氣
- get_twbank_exchange_rates() 台幣匯率
每個外部 API 用 _safe() wrapper,失敗時填預設文字「(本次擷取失敗或無資料)」。
_ppt_ai_analysis 加 is_market_intel 分支
- 角色:行銷情報分析師 + BU 主管
- 結構:本週市場大事 / 消費者情緒口碑 / 競爭態勢差異化 / SMART 三層 /
外部風險預警
- max_tokens 2000
路由:
- /ppt market_intel 本週情報週報(自動對齊週一)
Telegram 按鈕:「🌐 市場情報週報」
bump TEMPLATE_VERSIONS['market_intel'] = v3.1.0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 12:39:57 +08:00
OoO
95a74c3502
feat(ppt): new_product 30-day tracking report v3.1.0
...
CD Pipeline / deploy (push) Successful in 2m35s
Wave 3.1:新品追蹤報告(PM/採購用)
generate_new_product_ppt — 9 頁
- P1 封面:含新品力徽章(強勁/穩健/偏弱/疲弱,依業績佔比)+ 三亮點
- P2 KPI:新品總數/業績/佔比/平均單品業績 + AI 解讀
- P3 新品整體日業績曲線(爬榜軌跡 matplotlib)
- P4 新品依品類分佈橫條
- P5-P7 新品 TOP 50(自動分頁)
- P8 AI PM 戰術洞察
- P9 附錄
query_new_products(days_recent=30, days_baseline=60)
- PostgreSQL CTE:recent EXCEPT early
recent = 近 30 天有銷售
early = 31-90 天前有銷售
- 自動回傳:新品 TOP 50 / 子品類分佈 / 日業績曲線
- 含 ANY array 查詢新品集合的整體日業績
_ppt_ai_analysis 加 is_new_prod 分支
- 角色:PM 商品經理 + 採購主管
- 結構:新品力評估 / 明星新品識別 / 品類分佈與機會 / SMART 三層 / 風險預警
- SMART 行動含:加碼 TOP3 / 觀察排名 11-30 / 數據追蹤
- max_tokens 1800
業界基準:新品業績佔比 5-10% 為健康,>8% 強勁,<3% 偏弱
路由:
- /ppt new_product 預設近 30 天
- /ppt new_product 14 自訂追蹤天數
Telegram 按鈕:「🆕 新品 30 天追蹤」
bump TEMPLATE_VERSIONS['new_product'] = v3.1.0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 12:37:06 +08:00
OoO
958f705c8e
feat(ppt): promo_compare multi-promo ROI report v3.1.0
...
CD Pipeline / deploy (push) Has been cancelled
Wave 2.2:N 場促銷活動橫向比較(行銷主管覆盤用)。
generate_promo_compare_ppt — 5 頁
- P1 封面:含活動數徽章 + 排名亮點(最高拉抬/最低拉抬/最佳毛利)
- P2 並排 KPI 表:8 欄(活動/期間/天數/業績/訂單/毛利/業績拉抬/訂單拉抬)
支援 14 場以下並排顯示
- P3 業績拉抬橫條圖(matplotlib,按拉抬 % 排序)
- P4 AI 跨活動洞察(成功要素 / 失敗診斷 / SMART 三層)
- P5 附錄
路由:
- /ppt promo_compare 母親節:2026/05/05-2026/05/14|520:2026/05/18-2026/05/22|618:2026/06/14-2026/06/22
每場活動透過 query_promo_comparison 取 ROI 數據,自動產生 4 個排名。
_ppt_ai_analysis 加 is_promo_cmp 分支
- 角色:資深行銷主管
- 結構:整體比較 / 勝出活動成功要素 / 失敗活動診斷 / SMART 三層
- max_tokens 1600
Telegram 按鈕:「🆚 多活動比較」(await:promo_compare)
bump TEMPLATE_VERSIONS['promo_compare'] = v3.1.0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 12:28:17 +08:00
OoO
9f04dc3951
feat(ppt): forecast_pre_event report v3.1.0 (BU pre-event battle plan)
...
CD Pipeline / deploy (push) Has been cancelled
Wave 2.1:檔期前瞻報告 — 給 BU 主管在檔期前 14 天決定備戰策略。
generate_forecast_pre_event_ppt — 7 頁
- P1 封面:含倒數天數徽章(備戰期/衝刺期/檔期中/已結束)+ 三段預期業績
- P2 KPI 三段對比:本期預期 / 去年同檔期 / Baseline 日均 / 已執行業績
- P3 去年同檔期業績曲線(matplotlib 折線,預測基準視覺化)
- P4 庫存盤點 TOP 30(基於 baseline 期銷量)
- P5 AI 戰術洞察
- P6 附錄
query_forecast_pre_event(event_name, event_date)
- baseline 期:檔期前 60-30 天(去除檔期前期效應)
- 去年同檔期:去年同日期 ± 7 天
- 本期準備窗口:檔期前 14 天到檔期後 7 天
- 預期業績 = baseline 日均 × 21 天 × lift_factor
- lift_factor 靜態知識(母親節 1.40 / 618 1.45 / 雙11 1.65 / 黑五 1.45 等)
_ppt_ai_analysis 加 is_forecast 分支
- 角色:BU 主管 + 行銷投放主管 + 採購三合一
- 結構:檔期定位 / 準備窗口進度 / 庫存戰術 / 廣告滿額門檻 /
SMART 三層(檔期前7/當日+3/檔期後7)/ 風險預警
- max_tokens 2000
路由:
- /ppt forecast 母親節 2026/05/12
- /ppt forecast 618 2026/06/18
Telegram 按鈕:「🎯 檔期前瞻報告」(await:forecast_event)
bump TEMPLATE_VERSIONS['forecast_pre_event'] = v3.1.0
煙霧測試:7 頁 140KB 全綠。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 12:25:42 +08:00
OoO
48e3dacfc9
feat(ppt): customer analytics report v3.1.0 (simplified RFM, no user_id)
...
CD Pipeline / deploy (push) Successful in 2m49s
Wave 1.4:客戶/訂單分析報告(行銷主管用)— 受限於資料層無 user_id,
做訂單級分析而非完整 RFM。
generate_customer_analytics_ppt — 7 頁
- P1 封面:含客單定位徽章(高/中/低)+ 限制聲明(無 user_id 註腳)
- P2 KPI:總訂單/總業績/平均客單/高客單訂單數
- P3 客單價分佈:6 級分桶橫條(< NT$500 / 500-1K / 1-2K / 2-5K / 5-10K / >10K)
- P4 消費星期分佈:matplotlib 橫條(找熱門時段)
- P5 商品復購排行 TOP 30:同商品在多筆獨立訂單中的次數
- P6 AI 行銷洞察
- P7 附錄
query_customer_analytics
- AOV 分桶(CASE WHEN bucket)
- DOW 星期聚合(PostgreSQL EXTRACT(DOW))
- 復購商品(GROUP BY 商品名稱 HAVING COUNT(訂單) >= 5)
_ppt_ai_analysis 加 is_customer 分支
- 角色:資深行銷主管(10 年 RFM/CRM 經驗)
- 結構:訂單規模解讀 / 消費熱點 / 商品復購信號 / SMART 三層
- 長期建議:建立會員系統取得 user_id 升級完整 RFM
路由:
- /ppt customer 預設近 30 天
- /ppt customer 2026/04 指定月份
Telegram 按鈕:「👥 客戶/訂單分析」
bump TEMPLATE_VERSIONS['customer'] = v3.1.0
煙霧測試:7 頁 100KB 全綠。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 02:17:48 +08:00
OoO
d8260fcd25
feat(ppt): category deep dive report v3.1.0 (90-day single category)
...
CD Pipeline / deploy (push) Successful in 3m31s
Wave 1.3:單一品類 90 天縱向深度分析(PM/採購用)。
generate_category_deep_ppt(services/ppt_generator.py)— 12 頁
- P1 封面:含品類定位徽章(主力/成長/長尾)+ 新進榜商品 hero box
- P2 執行摘要:4 KPI(業績/訂單/毛利/SKU 數)+ AI 高階解讀
- P3 90 天日業績走勢(matplotlib 折線 + 日均線 + 高低點)+ 結論帶
- P4 子品類結構:橫條 + 帕雷托雙視圖
- P5-P7 TOP 50 商品(自動分頁)
- P8 TOP 30 廠商
- P9 新進榜商品專頁(近 30 天進榜,過去 60 天無交易判定)
- P10 AI 採購/PM 視角洞察
- P11 附錄
query_category_deep(routes/openclaw_bot_routes.py)
- 一次拉齊:kpis / daily(逐日) / top_products(50) / top_vendors(30) /
sub_categories(L2) / new_products(近 30 天 vs 60 天前比對)
- 用 PostgreSQL CTE 做新進榜判定(recent EXCEPT early)
_ppt_ai_analysis 加 is_category 分支
- 角色:採購主管 + PM 商品經理
- 結構:品類整體 / 90 天趨勢 / 子品類結構 / SKU 與廠商組合 /
SMART 三層 / 風險預警
- max_tokens 1800
路由:
- /ppt category 美妝保養 90 天深度(預設)
- /ppt category 美妝保養 30 自訂期間
Telegram 按鈕:「🗂 品類深度報告」(await:category_deep)
TODO:實作 await:category_deep 對應品類選擇互動(下一波)
bump TEMPLATE_VERSIONS['category'] = v3.1.0
煙霧測試:12 頁 300KB 全綠。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 02:14:07 +08:00
OoO
1af96f5be4
feat(ppt): period_review unified generator for quarterly/half/annual/ttm
...
CD Pipeline / deploy (push) Successful in 3m37s
Wave 1.2:用一份 generator 解 4 種時間維度報表(季/半年/年/TTM)。
generate_period_review_ppt(services/ppt_generator.py)— 12 頁
- 期間類型徽章自動切換(季報/半年報/年報/TTM 滾動)
- P1 封面:含業績狀態徽章 + elevator pitch + 期間動能
- P2 執行摘要:KPI v2 含 △% (vs 上季/上半/去年) + AI 解讀 + YoY 對比帶
- P3 月度業績走勢(matplotlib 折線:本期 + 上期 + 月均線 + 高低點)+ 4 卡指標
- P4 品類分析:橫條 + 帕雷托雙視圖
- P5-P7 TOP 50 商品(自動分頁)
- P8 TOP 30 廠商
- P9 MCP 市場情報
- P10 AI 結構化洞察
- P11 附錄
query_period_summary(routes/openclaw_bot_routes.py)
- 一次拉齊:kpis / monthly_breakdown / top_products(50) / top_categories(8) /
top_vendors(30)
- 自動算月度聚合(PostgreSQL TO_CHAR)
路由層加 4 種 sub_type 分支:
- /ppt quarterly [YYYY/Q1-4] 當季或指定季
- /ppt half_yearly [YYYY/H1-2] 當半年或指定半年
- /ppt annual [YYYY] 當年或指定年
- /ppt ttm 最近 12 個月(自動算到本月底)
每種自動抓三段資料:本期 + 上期同等 + 去年同期
- quarterly: 上季 + 去年同季
- half_yearly: 上半年 + 去年同半年
- annual: 去年 + 前年
- ttm: 上一個 TTM (24-12 月前) + 同上
_ppt_ai_analysis 加 is_period 分支
- 角色:策略顧問 + BU 主管 + CFO 三合一視角
- 結構:整體解讀 / 市場趨勢對位 / 月度走勢分析 / 品類結構 / 戰略級 SMART /
風險預警
- SMART 行動分三層:下期立即啟動(30 天)/ 下期戰略(60-90 天)/
下下期預備(6-12 月)
- max_tokens 2600,字數 1000-1300
Telegram 按鈕:報表選單加 4 顆季/半/年/TTM 按鈕
bump TEMPLATE_VERSIONS:quarterly / half_yearly / annual / ttm 全 v3.1.0
煙霧測試:4 種全綠,每份 12 頁 220KB。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 02:10:14 +08:00
OoO
b6fdb4f473
feat(ppt): awaken vendor report + v3.1.0 procurement strategy upgrade
...
CD Pipeline / deploy (push) Successful in 2m32s
Wave 1.1:把沉睡的 vendor generator 喚醒並全面升 v3.1.0:
generate_vendor_ppt(services/ppt_generator.py)— 8 頁
- P1 封面:含集中度警示徽章(健康分散 / 偏高 / 過高)+ 三句話策略要點
- P2 執行摘要:4 KPI 含 △% vs 上期 + 帕雷托 80/20 集中度結論帶
- P3 廠商業績排行:橫條 + 帕雷托雙視圖(matplotlib 暖色系)
- P4-P5 廠商明細表 TOP 30:含 △ 排名變化、🆕 新進榜、業績佔比 bar、
毛利率紅綠燈(綠 ≥15% / 黃 8~15% / 紅 <8%)
- P6 AI 採購策略洞察(結構化 8 段)
- P7 附錄
query_vendor_summary(routes/openclaw_bot_routes.py)
- 期間(單月/自訂日期區間)廠商業績聚合
- 計算 sales / profit / margin / qty / orders
- 同步抓上期同等期間做 vs 上期 △ 比對
_ppt_ai_analysis 加 is_vendor 分支
- 角色:採購主管 + 供應鏈管理顧問
- 結構:整體解讀 / 集中度與供應風險 / 議價優先 / SMART 行動 / 風險預警
- SMART 行動分三層:立即執行 / 中期強化 / 長期結構(含 OEM/ODM 自有品牌)
- 引用 MARKET_TREND_2026 共用知識基底
- max_tokens 1800,字數 800-1000
路由綁定 _generate_ppt_cmd
- /ppt vendor 當月廠商報告
- /ppt vendor 2026/04 指定月份
- /ppt vendor 2026/04/01-2026/04/15 自訂期間
- 自動抓上期同等期間做 △ 比對
Telegram 按鈕(menu_keyboards.py 的 _submenu_reports)
- 新增「🏭 廠商業績報告」進報表選單
bump TEMPLATE_VERSIONS['vendor'] v2.0 (DEPRECATED) → v3.1.0
煙霧測試:本機 venv 跑 vendor PPT 生成 8 頁 200KB 全綠。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-03 02:04:41 +08:00
OoO
1a886d962b
fix(telegram): dedupe webhook+polling updates via shared DB guard
...
CD Pipeline / deploy (push) Successful in 8m50s
Webhook (Flask) and polling (momo-telegram-bot) consumed the same
Telegram update_id, causing /menu callbacks to fire twice. Add a
shared dedup module backed by telegram_update_dedup table (300s TTL,
60s cleanup) with in-memory fallback, wired into both paths.
Polling launcher now skips startup when webhook is configured to
prevent dual-consumption at the source.
38 tests across webhook, menu keyboards, telegram_api, dedup guard,
and trend bot service.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-02 12:01:04 +08:00
OoO
dd35306399
refactor(openclaw): 抽出選單鍵盤 builders
CD Pipeline / deploy (push) Successful in 1m46s
2026-04-30 23:17:19 +08:00
OoO
fb9c4ad1b5
refactor(openclaw): 抽出 Telegram API helper
CD Pipeline / deploy (push) Has been cancelled
2026-04-30 14:24:45 +08:00