ai_member_xiaokui/scripts/sync_feedback_minutely.sh
2026-04-18 08:10:01 +08:00

99 lines
3.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 任务名称:飞书用户反馈每分钟同步(时间倒序,全量覆盖)
# 执行时间:* * * * * 每分钟执行
# 归属 Agent小葵 xiaokui
set +e
# 环境配置
export PATH=/root/.nvm/versions/node/v24.14.0/bin:$PATH
LOG_FILE="/var/log/sync_feedback_minutely.log"
WORKSPACE="/root/.openclaw/workspace-xiaokui"
TMP_DATA="$WORKSPACE/tmp/all_feedback_sorted.json"
# 源表格配置
SOURCE_SPREADSHEET_TOKEN="E8vFsCmPBhT4SCtNmnJchqeJnJe"
SOURCE_SHEET_ID="7bce8f"
# 目标表格配置
TARGET_SPREADSHEET_TOKEN="AOxbsifk3hybRZteGowcMxNnnqc"
TARGET_SHEET_ID="f17380"
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
log "=== 同步任务开始 ==="
# 1. 读取源表格所有数据
log "读取源表格数据..."
SOURCE_RAW=$(LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli sheets +read --spreadsheet-token "$SOURCE_SPREADSHEET_TOKEN" --range "$SOURCE_SHEET_ID!A:D" --as bot)
SOURCE_DATA=$(echo "$SOURCE_RAW" | jq -r '.data.valueRange.values | .[1:] | map(select(.[0] != null and .[0] != ""))')
if [ -z "$SOURCE_DATA" ] || [ "$SOURCE_DATA" == "null" ]; then
log "源表格无有效数据,退出"
exit 0
fi
# 2. 转换格式并按时间倒序排列
SORTED_DATA=$(echo "$SOURCE_DATA" | jq '
sort_by(.[0]) | reverse | to_entries | map(
.key as $idx |
.value as $row |
{
id: ($idx + 1),
time: $row[0],
submitter: $row[1],
type: $row[2],
content: ($row[3] | if type == "array" then .[0].link else . end)
} |
[
(.id | tostring),
"",
"",
"",
.time,
"飞书群",
.submitter,
"",
"",
(if .type == "文本" then .content else "" end),
(if .type == "图片" then .content else "" end),
(if .type | test("视频") then .content else "" end),
"",
"待确认",
""
]
)')
ROW_COUNT=$(echo "$SORTED_DATA" | jq length)
log "共获取到 $ROW_COUNT 条反馈记录,按时间倒序排列完成"
# 3. 清空目标表格原有数据(保留表头)
log "清空目标表格原有数据..."
EMPTY_DATA=$(printf '[]%.0s' {1..200} | jq -s '.')
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli sheets +write \
--spreadsheet-token "$TARGET_SPREADSHEET_TOKEN" \
--range "$TARGET_SHEET_ID!A2:O201" \
--values "$EMPTY_DATA" \
--as bot >/dev/null 2>&1
# 4. 写入排序后的数据
echo "$SORTED_DATA" > "$TMP_DATA"
END_ROW=$((ROW_COUNT + 1))
log "写入数据到目标表格..."
LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli sheets +write \
--spreadsheet-token "$TARGET_SPREADSHEET_TOKEN" \
--range "$TARGET_SHEET_ID!A2:O$END_ROW" \
--values "$(cat $TMP_DATA)" \
--as bot
log "✅ 同步完成,共写入 $ROW_COUNT 条记录,最新反馈已排在最上方"
# 清理临时文件
rm -f "$TMP_DATA"
log "=== 同步任务完成 ==="
exit 0