feishu-mood-music

飞书音乐心情伴侣。识别用户的情绪状态,生成匹配的治愈/陪伴音乐并发送到飞书群。 三级触发机制: (1) 显式触发(直接要歌):"来首歌"、"想听歌"、"来首应景的"、"音乐治愈"、"解压音乐"、"放首歌" (2) 半隐式触发(情绪词 + @机器人):"心情不好"、"有点累"、"好烦"、"需要放松"、"emo了"、"压力好大"、"开心"、"兴奋" (3) 全隐式触发(极端情绪词,无需@,自动送歌):"烦死了"、"无语死了"、"崩溃了"、"活不下去"、"气炸了"、"爽死了"、"太开心了"、"牛逼炸了" 当用户表达情绪状态并需要音乐陪伴时激活。

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "feishu-mood-music" with this command: npx skills add kylinr/feishu-mood-music

飞书音乐心情伴侣 — Mood Music Companion

感知用户情绪,生成治愈音乐,通过飞书消息即时送达。不是冷冰冰的点歌台,是一个懂你情绪的音乐搭档。

依赖:MiniMax CLI(mmx-cli)+ Token Plan


快速配置(首次使用)

1. 安装 MiniMax CLI

npm install -g mmx-cli

需要 Node.js 18+。完整文档:https://github.com/MiniMax-AI/cli

2. 订阅 Token Plan

前往 MiniMax 平台订阅 Token Plan(音乐生成需要额度):

3. 登录认证

# 方式一:API Key 登录(推荐,从平台「接口密钥」页获取)
mmx auth login --api-key sk-xxxxx

# 方式二:浏览器 OAuth 登录
mmx auth login

4. 验证

mmx auth status    # 检查登录
mmx quota          # 检查额度
mmx music generate --prompt "gentle piano, healing" --out /tmp/test_mood.mp3  # 测试生成

全部通过即可使用本 Skill。


情绪-音乐映射表

负面情绪(治愈方向)

情绪信号识别关键词音乐策略风格情绪曲线
😞 低落/难过难过、伤心、emo、低落、郁闷先共鸣后治愈Lo-fi R&B → Acoustic Warm从忧伤缓缓上升到温暖
😤 烦躁/愤怒烦、气死了、崩溃、炸了释放型Post-Rock, Alt Rock先给爆发出口,再收归平静
😰 焦虑/压力焦虑、压力大、紧张、慌镇静型Ambient, New Age持续安定,缓慢呼吸节奏
😴 疲惫/倦怠好累、不想动、倦了、乏温柔托底Bossa Nova, Soft Jazz不强求振作,给温柔的休息感
😢 孤独/思念孤独、想念、一个人、寂寞陪伴型Indie Folk, Singer-songwriter像朋友在身边轻声哼唱

正面情绪(助燃方向)

情绪信号识别关键词音乐策略风格
😊 开心/满足开心、不错、满足、幸福锦上添花City Pop, Funk, Disco
🔥 兴奋/庆祝太棒了、赢了、发布、上线推向高潮EDM, Dance Pop, Hyperpop
🌟 期待/憧憬期待、马上就、等不及氛围渲染Synth Pop, Dream Pop
💪 战斗/冲刺冲、干就完了、拼了热血增幅Rock, Trap, Epic Electronic

工作流

Step 1: 触发判断(三级触发机制)

本 Skill 采用三级触发,根据信号强度决定行为:

🟢 Level 1:显式触发(直接要歌)

用户明确要求音乐,无论是否 @机器人,立即生成

触发词动作
来首歌、想听歌、放首歌直接生成,不问
来首应景的、音乐治愈、解压音乐直接生成,不问
来首 [风格] 的歌按指定风格生成

🟡 Level 2:半隐式触发(情绪词 + @机器人)

用户表达了情绪且 @了机器人,视为求助信号,直接生成。 如果只有情绪词但没有 @,不触发(避免群聊噪音)。

触发词(需要 @)动作
心情不好、有点累、好烦、好丧匹配情绪 → 生成
emo了、压力好大、需要放松、陪我匹配情绪 → 生成
开心、兴奋、太棒了匹配情绪 → 生成

🔴 Level 3:全隐式触发(极端情绪,自动送歌)

用户情绪到了极端值,无需 @,自动生成并送歌。 这些词本身就是强烈信号,沉默反而像冷漠。

负面极端(先共鸣后治愈):

触发词情绪动作
烦死了、烦得要死😤 暴怒释放型音乐 + 「🎵 先听会儿」
无语死了、服了😤 无奈释放型音乐
崩溃了、要疯了、受不了了😰 崩溃镇静型音乐 + 「🎵 深呼吸」
累死了、不想干了😴 极度疲惫温柔托底音乐 + 「🎵 歇会儿吧」
想哭、难受死了😢 极度悲伤陪伴型带歌词 + 「🎵 这首给你」

正面极端(助燃放大):

触发词情绪动作
爽死了、太爽了🔥 极度兴奋高能舞曲 + 「🎵 燥起来!」
太开心了、幸福死了😊 极度开心欢快 Funk + 「🎵 快乐加倍!」
牛逼炸了、赢麻了🔥 庆祝EDM/Hyperpop + 「🎵 这首给你庆祝!」
冲冲冲、干就完了💪 战斗热血摇滚 + 「🎵 冲!」

全隐式安全规则

  • 仅在群聊中对已知用户触发(非陌生人)
  • 同一用户 30 分钟内最多触发 1 次(防刷屏)
  • 私聊场景下,Level 2 和 Level 3 均可无需 @ 触发

Step 2: 情绪识别

从用户消息中分析:

  1. 情绪类别:匹配上方映射表(可多维度叠加)
  2. 情绪强度:轻微 / 中等 / 强烈(影响音乐激烈程度和歌词策略)
  3. 场景线索:工作中 / 下班后 / 深夜(影响风格选择)

Step 3: 构建 Prompt

根据情绪映射选择音乐策略,构建 prompt。

负面情绪使用"情绪曲线"策略——不直接跳到快乐,而是先共鸣再引导:

prompt 模板(负面情绪):
<style>, <mood 起始: 共鸣词>, gradually shifting to <mood 目标: 治愈词>, 
<instruments>, <BPM> BPM, <vocal/instrumental>, 
a song that understands how you feel and gently lifts you up

正面情绪使用"助燃"策略——放大当前感受:

prompt 模板(正面情绪):
<style>, <mood: 正面高能词>, <instruments>, <BPM> BPM, 
<vocal/instrumental>, energetic and feel-good

Step 4: 歌词策略

情绪类型歌词策略
负面轻微纯音乐(is_instrumental: true),不加歌词避免矫情感
负面强烈带歌词(lyrics_optimizer: true),让 AI 写共鸣歌词,有"被懂了"的感觉
正面情绪带歌词,节奏明快有感染力
用户指定按用户要求

Step 5: 生成音乐

优先使用 CLI,回退到 Python 脚本:

# 方式一:MiniMax CLI(推荐)
# 纯音乐(负面轻微)
mmx music generate \
  --prompt "<constructed prompt>" \
  --instrumental \
  --out /tmp/openclaw/mood_<emotion>.mp3

# 带歌词(负面强烈/正面)— 自动生成歌词
mmx music generate \
  --prompt "<constructed prompt>" \
  --lyrics "[verse]\n[chorus]" \
  --out /tmp/openclaw/mood_<emotion>.mp3

# 方式二:Python 脚本(需要 MINIMAX_API_KEY 环境变量)
python3 scripts/generate_mood_music.py \
  --prompt "<constructed prompt>" \
  --instrumental \
  --output /tmp/openclaw/mood_<emotion>.mp3

Step 6: 播放与送达

生成完成后,必须完成送达,不能只输出文件路径。根据环境自动选择最佳方式。

环境探测

# 检测本地音乐播放器(macOS)
osascript -e 'id of application "Music"' 2>/dev/null && echo "HAS_MUSIC_APP"
# 或检测命令行播放器
which mpv afplay ffplay 2>/dev/null

送达策略

条件行为
检测到本地播放器(Music.app / mpv / afplay)自动吊起播放 + 飞书发送备份
未检测到本地播放器发送飞书音频消息

路径 A:本地播放器可用

# macOS 用系统命令打开默认播放器
open /tmp/openclaw/mood_<emotion>.mp3

# 或 afplay 后台播放
afplay /tmp/openclaw/mood_<emotion>.mp3 &

# 或 mpv
mpv --no-video /tmp/openclaw/mood_<emotion>.mp3 &

同时发一份到飞书群(见路径 B)。

路径 B:飞书音频消息送达

⚠️ 关键步骤,不可跳过。 飞书语音气泡需要特殊的上传+发送流程。

方式 1:使用内置脚本(推荐,一行搞定)

Skill 自带 scripts/send_feishu_audio.sh,支持 --file 模式直接发送已有音频:

# 发送已生成的音乐到飞书群(语音气泡,非文件附件)
bash scripts/send_feishu_audio.sh --file /tmp/openclaw/mood_<emotion>.mp3 "<chat_id>"

凭证自动从环境变量 FEISHU_APP_ID / FEISHU_APP_SECRET 读取, 或回退到 $HOME/.openclaw/openclaw.json

方式 2:OpenClaw message 工具(OpenClaw 环境)

message(action="send", filePath="/tmp/openclaw/mood_<emotion>.mp3",
        message="<共情文案>")

方式 3:手动 curl 两步流程(理解原理用)

# ⚠️ 关键坑:file_type 必须填 opus(不是 mp3),否则报 234001
# ⚠️ 关键坑:msg_type 必须是 audio(不是 file),否则显示为附件

# Step 1: 上传文件(file_type=opus)
FILE_KEY=$(curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/files" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file_type=opus" \
  -F "file_name=voice.opus" \
  -F "file=@/tmp/openclaw/mood_<emotion>.mp3" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['file_key'])")

# Step 2: 发送音频消息(msg_type=audio)
curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"receive_id\":\"$CHAT_ID\",\"msg_type\":\"audio\",\"content\":\"{\\\"file_key\\\":\\\"$FILE_KEY\\\"}\"}"

❌ 错误行为(严禁)

  • 只输出文件路径如 📎 /workspace/.../output/xxx.mp3用户无法访问服务器路径
  • 只发文字说"已生成" → 用户听不到音乐
  • 把 base64 音频贴在聊天里 → 不可读

原则:用户必须能在 2 次点击内听到音乐。

播放器优先级:open(macOS 默认)> mpv > afplay > 飞书音频消息 > 飞书文件消息

共情文案模板(简短、不说教):

情绪文案示例
低落🎵 这首给你,不用急着开心
烦躁🎵 先听会儿,让脑子放空一下
焦虑🎵 深呼吸,跟着节奏慢下来
疲惫🎵 歇会儿吧,没什么比你重要
开心🎵 快乐加倍!这首配你的好心情
兴奋🎵 燥起来!这首给你庆祝

进阶:情绪追踪(可选)

如果用户频繁使用,可以在 memory/mood-music-log.json 中记录:

{
  "history": [
    {"date": "2026-04-10", "emotion": "tired", "style": "bossa nova", "rating": "👍"},
    {"date": "2026-04-09", "emotion": "anxious", "style": "ambient", "rating": null}
  ]
}

用于:

  • 避免连续推荐相同风格
  • 发现用户偏好("你之前喜欢 Bossa Nova 治愈系,这次也来一首?")
  • 如果连续多天负面情绪,温和提醒(不是心理医生,只是朋友式的关心)

边界与安全

  • 不是心理咨询:不诊断、不处方、不说"你应该怎样"
  • 不过度解读:用户说"有点累"就是累,别上升到心理问题
  • 不强制正能量:允许用户沉浸在情绪里,音乐是陪伴不是说教
  • 隐私:情绪记录仅存本地,不外传

生成方式

方式一:MiniMax CLI(推荐,零代码)

CLI 自动管理认证和 region,无需手动传 API Key:

# 纯音乐
mmx music generate --prompt "<prompt>" --instrumental --out /tmp/openclaw/mood.mp3

# 带自动歌词
mmx music generate --prompt "<prompt>" --lyrics "[verse]\n[chorus]" --out /tmp/openclaw/mood.mp3

方式二:Python 脚本(需要 API Key)

scripts/generate_mood_music.py 直接调用 MiniMax Music API:

  • 读取 API Key:从环境变量 MINIMAX_API_KEY 获取
  • 模型:music-2.5+
  • 支持 --instrumental 切换纯音乐/带歌词
  • 带歌词模式:lyrics_optimizer: true(API 自动写词)
  • 输出:MP3,44100Hz,256kbps

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Feishu BGM

飞书场景化背景音乐生成器。通过 MiniMax Music API 生成纯音乐 BGM,以音频消息发送到飞书群。 触发词:"来点BGM"、"开会背景音"、"加班音乐"、"头脑风暴BGM"、"会议音乐"、"工作BGM"、 "放点音乐"、"背景音乐"、"需要BGM"。当用户在飞书群中描述场景并希望获得背景音乐时激活。

Registry SourceRecently Updated
850Profile unavailable
General

Webhook Notify

通用Webhook通知工具,支持钉钉、企业微信、飞书、Slack、Discord、Teams、Telegram、自定义HTTP等多种平台。提供统一接口、自动平台识别、配置管理、模板系统、重试机制等高级功能。适用于告警通知、自动化触发、系统监控、CI/CD通知等场景。

Registry SourceRecently Updated
3351Profile unavailable
General

feishu-group-memory-system-飞书群聊记忆管理

飞书群聊上下文持久化技能。当用户在群聊中说"保存上下文"时保存当前群聊对话;在私聊中会根据用户意图分流到手动群聊存档或其他操作。

Registry SourceRecently Updated
2201Profile unavailable
General

Weekly Menu 每周菜单

Generate a weekly meal plan with images, recipes, and shopping lists. Searches Xiaohongshu (小红书) for trending seasonal recipes, creates a beautifully formatt...

Registry SourceRecently Updated
2390Profile unavailable