#!/usr/bin/env bash [[ -n "${DEBUG:-}" ]] && set -eux || set -euo pipefail WEBHOOK_SECRET="${WEBHOOK_SECRET:-}" # ==================== 配置 ==================== URL="${1:-https://billing.chunkserve.com/index.php?rp=/store/let-vm-special/xeon-yearly-deal-3-at-let}" #WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxx" # ← 改成你的真实 webhook WEBHOOK_URL="https://open.larksuite.com/open-apis/bot/v2/hook/${WEBHOOK_SECRET}" PRODUCT_NAME="Xeon Yearly Deal 3 - Yearly" STATE_FILE="/tmp/chunkserve_stock_status.txt" LOG_FILE="/tmp/chunkserve_monitor.log" # ================================================ # 检查是否有货(宽松匹配多种缺货表述) if curl -s -L --max-time 15 "$URL" | grep -qiE "out\s*(of|for)\s*stock|售罄|无货|缺货|Out of Stock"; then CURRENT="out_of_stock" else CURRENT="in_stock" fi LAST=$(cat "$STATE_FILE" 2>/dev/null || echo "unknown") if [ "$CURRENT" = "in_stock" ] && [ "$LAST" != "in_stock" ]; then DETECT_TIME=$(date '+%Y-%m-%d %H:%M:%S') # 使用 heredoc 发送符合你示例的卡片格式 curl -s -X POST "$WEBHOOK_URL" \ -H "Content-Type: application/json" \ -d @- << EOF { "msg_type": "interactive", "card": { "schema": "2.0", "config": { "update_multi": true, "style": { "text_size": { "normal_v2": { "default": "normal", "pc": "normal", "mobile": "heading" } } } }, "header": { "title": { "tag": "plain_text", "content": "✅ 商品到货提醒" }, "template": "green", "padding": "12px 12px 12px 12px" }, "body": { "direction": "vertical", "padding": "12px 12px 12px 12px", "elements": [ { "tag": "markdown", "content": "**${PRODUCT_NAME}** 现在**有货啦!** \n快去抢购,别错过了!", "text_align": "left", "text_size": "normal_v2", "margin": "0px 0px 16px 0px" }, { "tag": "button", "text": { "tag": "plain_text", "content": "立即抢购" }, "type": "primary", "width": "default", "size": "medium", "behaviors": [ { "type": "open_url", "default_url": "${URL}" } ], "margin": "0px 0px 0px 0px" }, { "tag": "markdown", "content": "检测时间:${DETECT_TIME}", "text_align": "left", "text_size": "normal_v2", "margin": "16px 0px 0px 0px" } ] } } } EOF if [ $? -eq 0 ]; then echo "[${DETECT_TIME}] 有货 → 卡片通知已发送" >> "$LOG_FILE" else echo "[${DETECT_TIME}] 通知发送失败(检查Webhook?)" >> "$LOG_FILE" fi fi # 更新上次状态 echo "$CURRENT" > "$STATE_FILE" # 记录当前状态(用于调试) echo "[$(date '+%Y-%m-%d %H:%M:%S')] 状态: $CURRENT" >> "$LOG_FILE"