/** * OpenClaw 聊天沟通渠道(Channels)环境变量配置 * 选择渠道后展示对应配置项供用户填写。 * 其中 QQ 机器人(qqbot)相关字段 `QQBOT_APP_ID` / `QQBOT_CLIENT_SECRET`、飞书(feishu) * 相关字段 `FEISHU_APP_ID` / `FEISHU_APP_SECRET` 为必填。 */ /** @typedef {{ sectionKey: string, sectionLabelKey: string, vars: Array<{ envKey: string, descriptionKey: string, defaultValue?: string, required?: boolean, advanced?: boolean }> }} OpenclawChannelSection */ export const OPENCLAW_CHANNEL_SECTIONS = [ { sectionKey: 'qqbot', sectionLabelKey: 'aice.openclaw.channel.qqbot', vars: [ { envKey: 'QQBOT_APP_ID', descriptionKey: 'aice.openclaw.channel.env.QQBOT_APP_ID', defaultValue: '', required: true }, { envKey: 'QQBOT_CLIENT_SECRET', descriptionKey: 'aice.openclaw.channel.env.QQBOT_CLIENT_SECRET', defaultValue: '', required: true }, ], }, { sectionKey: 'feishu', sectionLabelKey: 'aice.openclaw.channel.feishu', vars: [ { envKey: 'FEISHU_APP_ID', descriptionKey: 'aice.openclaw.channel.env.FEISHU_APP_ID', defaultValue: '', required: true }, { envKey: 'FEISHU_APP_SECRET', descriptionKey: 'aice.openclaw.channel.env.FEISHU_APP_SECRET', defaultValue: '', required: true }, { envKey: 'FEISHU_BOT_NAME', descriptionKey: 'aice.openclaw.channel.env.FEISHU_BOT_NAME', defaultValue: '', advanced: true }, { envKey: 'FEISHU_DOMAIN', descriptionKey: 'aice.openclaw.channel.env.FEISHU_DOMAIN', defaultValue: 'feishu' }, { envKey: 'FEISHU_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.FEISHU_DM_POLICY', defaultValue: 'open' }, { envKey: 'FEISHU_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.FEISHU_GROUP_POLICY', defaultValue: '', advanced: true }, { envKey: 'FEISHU_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.FEISHU_ALLOW_FROM', defaultValue: '', advanced: true }, { envKey: 'FEISHU_GROUP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.FEISHU_GROUP_ALLOW_FROM', defaultValue: '', advanced: true }, { envKey: 'FEISHU_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.FEISHU_TEXT_CHUNK_LIMIT', defaultValue: '2000', advanced: true }, { envKey: 'FEISHU_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.FEISHU_MEDIA_MAX_MB', defaultValue: '30', advanced: true }, { envKey: 'FEISHU_TYPING_INDICATOR', descriptionKey: 'aice.openclaw.channel.env.FEISHU_TYPING_INDICATOR', defaultValue: 'true', advanced: true }, { envKey: 'FEISHU_RESOLVE_SENDER_NAMES', descriptionKey: 'aice.openclaw.channel.env.FEISHU_RESOLVE_SENDER_NAMES', defaultValue: 'true', advanced: true }, ], }, { sectionKey: 'discord', sectionLabelKey: 'aice.openclaw.channel.discord', vars: [ { envKey: 'DISCORD_BOT_TOKEN', descriptionKey: 'aice.openclaw.channel.env.DISCORD_BOT_TOKEN', defaultValue: '', required: true }, { envKey: 'DISCORD_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.DISCORD_DM_POLICY', defaultValue: 'open' }, { envKey: 'DISCORD_DM_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.DISCORD_DM_ALLOW_FROM', defaultValue: '', advanced: true }, { envKey: 'DISCORD_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.DISCORD_GROUP_POLICY', defaultValue: '', advanced: true }, { envKey: 'DISCORD_REPLY_TO_MODE', descriptionKey: 'aice.openclaw.channel.env.DISCORD_REPLY_TO_MODE', defaultValue: 'off', advanced: true }, { envKey: 'DISCORD_CHUNK_MODE', descriptionKey: 'aice.openclaw.channel.env.DISCORD_CHUNK_MODE', defaultValue: 'length', advanced: true }, { envKey: 'DISCORD_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.DISCORD_TEXT_CHUNK_LIMIT', defaultValue: '2000', advanced: true }, { envKey: 'DISCORD_MAX_LINES_PER_MESSAGE', descriptionKey: 'aice.openclaw.channel.env.DISCORD_MAX_LINES_PER_MESSAGE', defaultValue: '17', advanced: true }, { envKey: 'DISCORD_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.DISCORD_MEDIA_MAX_MB', defaultValue: '8', advanced: true }, { envKey: 'DISCORD_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.DISCORD_HISTORY_LIMIT', defaultValue: '20', advanced: true }, { envKey: 'DISCORD_DM_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.DISCORD_DM_HISTORY_LIMIT', defaultValue: '', advanced: true }, { envKey: 'DISCORD_REACTION_NOTIFICATIONS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_REACTION_NOTIFICATIONS', defaultValue: 'own', advanced: true }, { envKey: 'DISCORD_ALLOW_BOTS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ALLOW_BOTS', defaultValue: 'false', advanced: true }, { envKey: 'DISCORD_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.DISCORD_MESSAGE_PREFIX', defaultValue: '', advanced: true }, { envKey: 'DISCORD_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_REACTIONS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_STICKERS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_STICKERS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_EMOJI_UPLOADS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_EMOJI_UPLOADS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_STICKER_UPLOADS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_STICKER_UPLOADS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_POLLS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_POLLS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_PERMISSIONS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_PERMISSIONS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_MESSAGES', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_MESSAGES', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_THREADS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_THREADS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_PINS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_PINS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_SEARCH', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_SEARCH', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_MEMBER_INFO', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_MEMBER_INFO', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_ROLE_INFO', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_ROLE_INFO', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_CHANNEL_INFO', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_CHANNEL_INFO', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_CHANNELS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_CHANNELS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_VOICE_STATUS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_VOICE_STATUS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_EVENTS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_EVENTS', defaultValue: 'true', advanced: true }, { envKey: 'DISCORD_ACTIONS_ROLES', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_ROLES', defaultValue: 'false', advanced: true }, { envKey: 'DISCORD_ACTIONS_MODERATION', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_MODERATION', defaultValue: 'false', advanced: true }, ], }, { sectionKey: 'telegram', sectionLabelKey: 'aice.openclaw.channel.telegram', vars: [ { envKey: 'TELEGRAM_BOT_TOKEN', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_BOT_TOKEN', defaultValue: '', required: true }, { envKey: 'TELEGRAM_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_DM_POLICY', defaultValue: 'open' }, { envKey: 'TELEGRAM_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_ALLOW_FROM', defaultValue: '', advanced: true }, { envKey: 'TELEGRAM_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_GROUP_POLICY', defaultValue: '', advanced: true }, { envKey: 'TELEGRAM_GROUP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_GROUP_ALLOW_FROM', defaultValue: '', advanced: true }, { envKey: 'TELEGRAM_REPLY_TO_MODE', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_REPLY_TO_MODE', defaultValue: 'first', advanced: true }, { envKey: 'TELEGRAM_CHUNK_MODE', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_CHUNK_MODE', defaultValue: 'length', advanced: true }, { envKey: 'TELEGRAM_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_TEXT_CHUNK_LIMIT', defaultValue: '4000', advanced: true }, { envKey: 'TELEGRAM_STREAM_MODE', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_STREAM_MODE', defaultValue: 'partial', advanced: true }, { envKey: 'TELEGRAM_LINK_PREVIEW', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_LINK_PREVIEW', defaultValue: 'true', advanced: true }, { envKey: 'TELEGRAM_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_MEDIA_MAX_MB', defaultValue: '5', advanced: true }, { envKey: 'TELEGRAM_REACTION_NOTIFICATIONS', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_REACTION_NOTIFICATIONS', defaultValue: 'own', advanced: true }, { envKey: 'TELEGRAM_REACTION_LEVEL', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_REACTION_LEVEL', defaultValue: 'minimal', advanced: true }, { envKey: 'TELEGRAM_INLINE_BUTTONS', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_INLINE_BUTTONS', defaultValue: 'allowlist', advanced: true }, { envKey: 'TELEGRAM_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_ACTIONS_REACTIONS', defaultValue: 'true', advanced: true }, { envKey: 'TELEGRAM_ACTIONS_STICKER', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_ACTIONS_STICKER', defaultValue: 'false', advanced: true }, { envKey: 'TELEGRAM_PROXY', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_PROXY', defaultValue: '', advanced: true }, { envKey: 'TELEGRAM_WEBHOOK_URL', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_WEBHOOK_URL', defaultValue: '', advanced: true }, { envKey: 'TELEGRAM_WEBHOOK_SECRET', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_WEBHOOK_SECRET', defaultValue: '', advanced: true }, { envKey: 'TELEGRAM_WEBHOOK_PATH', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_WEBHOOK_PATH', defaultValue: '/telegram-webhook', advanced: true }, { envKey: 'TELEGRAM_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_MESSAGE_PREFIX', defaultValue: '', advanced: true }, ], }, // 以下渠道暂不展示,需要时取消注释即可 // { // sectionKey: 'slack', // sectionLabelKey: 'aice.openclaw.channel.slack', // vars: [ // { envKey: 'SLACK_BOT_TOKEN', descriptionKey: 'aice.openclaw.channel.env.SLACK_BOT_TOKEN', defaultValue: '' }, // { envKey: 'SLACK_APP_TOKEN', descriptionKey: 'aice.openclaw.channel.env.SLACK_APP_TOKEN', defaultValue: '' }, // { envKey: 'SLACK_USER_TOKEN', descriptionKey: 'aice.openclaw.channel.env.SLACK_USER_TOKEN', defaultValue: '' }, // { envKey: 'SLACK_SIGNING_SECRET', descriptionKey: 'aice.openclaw.channel.env.SLACK_SIGNING_SECRET', defaultValue: '' }, // { envKey: 'SLACK_MODE', descriptionKey: 'aice.openclaw.channel.env.SLACK_MODE', defaultValue: 'socket' }, // { envKey: 'SLACK_WEBHOOK_PATH', descriptionKey: 'aice.openclaw.channel.env.SLACK_WEBHOOK_PATH', defaultValue: '/slack/events' }, // { envKey: 'SLACK_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.SLACK_DM_POLICY', defaultValue: 'pairing' }, // { envKey: 'SLACK_DM_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.SLACK_DM_ALLOW_FROM', defaultValue: '' }, // { envKey: 'SLACK_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.SLACK_GROUP_POLICY', defaultValue: 'open' }, // { envKey: 'SLACK_REPLY_TO_MODE', descriptionKey: 'aice.openclaw.channel.env.SLACK_REPLY_TO_MODE', defaultValue: 'off' }, // { envKey: 'SLACK_REACTION_NOTIFICATIONS', descriptionKey: 'aice.openclaw.channel.env.SLACK_REACTION_NOTIFICATIONS', defaultValue: 'own' }, // { envKey: 'SLACK_CHUNK_MODE', descriptionKey: 'aice.openclaw.channel.env.SLACK_CHUNK_MODE', defaultValue: 'newline' }, // { envKey: 'SLACK_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.SLACK_TEXT_CHUNK_LIMIT', defaultValue: '4000' }, // { envKey: 'SLACK_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.SLACK_MEDIA_MAX_MB', defaultValue: '20' }, // { envKey: 'SLACK_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.SLACK_HISTORY_LIMIT', defaultValue: '50' }, // { envKey: 'SLACK_ALLOW_BOTS', descriptionKey: 'aice.openclaw.channel.env.SLACK_ALLOW_BOTS', defaultValue: 'false' }, // { envKey: 'SLACK_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.SLACK_MESSAGE_PREFIX', defaultValue: '' }, // { envKey: 'SLACK_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_REACTIONS', defaultValue: 'true' }, // { envKey: 'SLACK_ACTIONS_MESSAGES', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_MESSAGES', defaultValue: 'true' }, // { envKey: 'SLACK_ACTIONS_PINS', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_PINS', defaultValue: 'true' }, // { envKey: 'SLACK_ACTIONS_MEMBER_INFO', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_MEMBER_INFO', defaultValue: 'true' }, // { envKey: 'SLACK_ACTIONS_EMOJI_LIST', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_EMOJI_LIST', defaultValue: 'true' }, // ], // }, // { // sectionKey: 'whatsapp', // sectionLabelKey: 'aice.openclaw.channel.whatsapp', // vars: [ // { envKey: 'WHATSAPP_ENABLED', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ENABLED', defaultValue: '' }, // { envKey: 'WHATSAPP_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_DM_POLICY', defaultValue: 'pairing' }, // { envKey: 'WHATSAPP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ALLOW_FROM', defaultValue: '' }, // { envKey: 'WHATSAPP_SELF_CHAT_MODE', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_SELF_CHAT_MODE', defaultValue: 'false' }, // { envKey: 'WHATSAPP_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_GROUP_POLICY', defaultValue: 'allowlist' }, // { envKey: 'WHATSAPP_GROUP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_GROUP_ALLOW_FROM', defaultValue: '' }, // { envKey: 'WHATSAPP_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_MEDIA_MAX_MB', defaultValue: '50' }, // { envKey: 'WHATSAPP_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_HISTORY_LIMIT', defaultValue: '50' }, // { envKey: 'WHATSAPP_DM_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_DM_HISTORY_LIMIT', defaultValue: '' }, // { envKey: 'WHATSAPP_SEND_READ_RECEIPTS', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_SEND_READ_RECEIPTS', defaultValue: 'true' }, // { envKey: 'WHATSAPP_ACK_REACTION_EMOJI', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACK_REACTION_EMOJI', defaultValue: '' }, // { envKey: 'WHATSAPP_ACK_REACTION_DIRECT', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACK_REACTION_DIRECT', defaultValue: 'true' }, // { envKey: 'WHATSAPP_ACK_REACTION_GROUP', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACK_REACTION_GROUP', defaultValue: 'mentions' }, // { envKey: 'WHATSAPP_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_MESSAGE_PREFIX', defaultValue: '' }, // { envKey: 'WHATSAPP_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACTIONS_REACTIONS', defaultValue: 'true' }, // ], // }, ] /** 渠道多选选项:仅包含有配置项的渠道 */ export const OPENCLAW_CHANNEL_OPTIONS = OPENCLAW_CHANNEL_SECTIONS.map(s => ({ value: s.sectionKey, label: s.sectionLabelKey, }))