openclawChannelConfig.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /**
  2. * OpenClaw 聊天沟通渠道(Channels)环境变量配置
  3. * 选择渠道后展示对应配置项供用户填写。
  4. * 其中 QQ 机器人(qqbot)相关字段 `QQBOT_APP_ID` / `QQBOT_CLIENT_SECRET`、飞书(feishu)
  5. * 相关字段 `FEISHU_APP_ID` / `FEISHU_APP_SECRET` 为必填。
  6. */
  7. /** @typedef {{ sectionKey: string, sectionLabelKey: string, vars: Array<{ envKey: string, descriptionKey: string, defaultValue?: string, required?: boolean, advanced?: boolean }> }} OpenclawChannelSection */
  8. export const OPENCLAW_CHANNEL_SECTIONS = [
  9. {
  10. sectionKey: 'qqbot',
  11. sectionLabelKey: 'aice.openclaw.channel.qqbot',
  12. vars: [
  13. { envKey: 'QQBOT_APP_ID', descriptionKey: 'aice.openclaw.channel.env.QQBOT_APP_ID', defaultValue: '', required: true },
  14. { envKey: 'QQBOT_CLIENT_SECRET', descriptionKey: 'aice.openclaw.channel.env.QQBOT_CLIENT_SECRET', defaultValue: '', required: true },
  15. ],
  16. },
  17. {
  18. sectionKey: 'feishu',
  19. sectionLabelKey: 'aice.openclaw.channel.feishu',
  20. vars: [
  21. { envKey: 'FEISHU_APP_ID', descriptionKey: 'aice.openclaw.channel.env.FEISHU_APP_ID', defaultValue: '', required: true },
  22. { envKey: 'FEISHU_APP_SECRET', descriptionKey: 'aice.openclaw.channel.env.FEISHU_APP_SECRET', defaultValue: '', required: true },
  23. { envKey: 'FEISHU_BOT_NAME', descriptionKey: 'aice.openclaw.channel.env.FEISHU_BOT_NAME', defaultValue: '', advanced: true },
  24. { envKey: 'FEISHU_DOMAIN', descriptionKey: 'aice.openclaw.channel.env.FEISHU_DOMAIN', defaultValue: 'feishu' },
  25. { envKey: 'FEISHU_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.FEISHU_DM_POLICY', defaultValue: 'open' },
  26. { envKey: 'FEISHU_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.FEISHU_GROUP_POLICY', defaultValue: '', advanced: true },
  27. { envKey: 'FEISHU_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.FEISHU_ALLOW_FROM', defaultValue: '', advanced: true },
  28. { envKey: 'FEISHU_GROUP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.FEISHU_GROUP_ALLOW_FROM', defaultValue: '', advanced: true },
  29. { envKey: 'FEISHU_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.FEISHU_TEXT_CHUNK_LIMIT', defaultValue: '2000', advanced: true },
  30. { envKey: 'FEISHU_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.FEISHU_MEDIA_MAX_MB', defaultValue: '30', advanced: true },
  31. { envKey: 'FEISHU_TYPING_INDICATOR', descriptionKey: 'aice.openclaw.channel.env.FEISHU_TYPING_INDICATOR', defaultValue: 'true', advanced: true },
  32. { envKey: 'FEISHU_RESOLVE_SENDER_NAMES', descriptionKey: 'aice.openclaw.channel.env.FEISHU_RESOLVE_SENDER_NAMES', defaultValue: 'true', advanced: true },
  33. ],
  34. },
  35. {
  36. sectionKey: 'discord',
  37. sectionLabelKey: 'aice.openclaw.channel.discord',
  38. vars: [
  39. { envKey: 'DISCORD_BOT_TOKEN', descriptionKey: 'aice.openclaw.channel.env.DISCORD_BOT_TOKEN', defaultValue: '', required: true },
  40. { envKey: 'DISCORD_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.DISCORD_DM_POLICY', defaultValue: 'open' },
  41. { envKey: 'DISCORD_DM_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.DISCORD_DM_ALLOW_FROM', defaultValue: '', advanced: true },
  42. { envKey: 'DISCORD_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.DISCORD_GROUP_POLICY', defaultValue: '', advanced: true },
  43. { envKey: 'DISCORD_REPLY_TO_MODE', descriptionKey: 'aice.openclaw.channel.env.DISCORD_REPLY_TO_MODE', defaultValue: 'off', advanced: true },
  44. { envKey: 'DISCORD_CHUNK_MODE', descriptionKey: 'aice.openclaw.channel.env.DISCORD_CHUNK_MODE', defaultValue: 'length', advanced: true },
  45. { envKey: 'DISCORD_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.DISCORD_TEXT_CHUNK_LIMIT', defaultValue: '2000', advanced: true },
  46. { envKey: 'DISCORD_MAX_LINES_PER_MESSAGE', descriptionKey: 'aice.openclaw.channel.env.DISCORD_MAX_LINES_PER_MESSAGE', defaultValue: '17', advanced: true },
  47. { envKey: 'DISCORD_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.DISCORD_MEDIA_MAX_MB', defaultValue: '8', advanced: true },
  48. { envKey: 'DISCORD_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.DISCORD_HISTORY_LIMIT', defaultValue: '20', advanced: true },
  49. { envKey: 'DISCORD_DM_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.DISCORD_DM_HISTORY_LIMIT', defaultValue: '', advanced: true },
  50. { envKey: 'DISCORD_REACTION_NOTIFICATIONS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_REACTION_NOTIFICATIONS', defaultValue: 'own', advanced: true },
  51. { envKey: 'DISCORD_ALLOW_BOTS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ALLOW_BOTS', defaultValue: 'false', advanced: true },
  52. { envKey: 'DISCORD_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.DISCORD_MESSAGE_PREFIX', defaultValue: '', advanced: true },
  53. { envKey: 'DISCORD_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_REACTIONS', defaultValue: 'true', advanced: true },
  54. { envKey: 'DISCORD_ACTIONS_STICKERS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_STICKERS', defaultValue: 'true', advanced: true },
  55. { envKey: 'DISCORD_ACTIONS_EMOJI_UPLOADS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_EMOJI_UPLOADS', defaultValue: 'true', advanced: true },
  56. { envKey: 'DISCORD_ACTIONS_STICKER_UPLOADS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_STICKER_UPLOADS', defaultValue: 'true', advanced: true },
  57. { envKey: 'DISCORD_ACTIONS_POLLS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_POLLS', defaultValue: 'true', advanced: true },
  58. { envKey: 'DISCORD_ACTIONS_PERMISSIONS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_PERMISSIONS', defaultValue: 'true', advanced: true },
  59. { envKey: 'DISCORD_ACTIONS_MESSAGES', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_MESSAGES', defaultValue: 'true', advanced: true },
  60. { envKey: 'DISCORD_ACTIONS_THREADS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_THREADS', defaultValue: 'true', advanced: true },
  61. { envKey: 'DISCORD_ACTIONS_PINS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_PINS', defaultValue: 'true', advanced: true },
  62. { envKey: 'DISCORD_ACTIONS_SEARCH', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_SEARCH', defaultValue: 'true', advanced: true },
  63. { envKey: 'DISCORD_ACTIONS_MEMBER_INFO', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_MEMBER_INFO', defaultValue: 'true', advanced: true },
  64. { envKey: 'DISCORD_ACTIONS_ROLE_INFO', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_ROLE_INFO', defaultValue: 'true', advanced: true },
  65. { envKey: 'DISCORD_ACTIONS_CHANNEL_INFO', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_CHANNEL_INFO', defaultValue: 'true', advanced: true },
  66. { envKey: 'DISCORD_ACTIONS_CHANNELS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_CHANNELS', defaultValue: 'true', advanced: true },
  67. { envKey: 'DISCORD_ACTIONS_VOICE_STATUS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_VOICE_STATUS', defaultValue: 'true', advanced: true },
  68. { envKey: 'DISCORD_ACTIONS_EVENTS', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_EVENTS', defaultValue: 'true', advanced: true },
  69. { envKey: 'DISCORD_ACTIONS_ROLES', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_ROLES', defaultValue: 'false', advanced: true },
  70. { envKey: 'DISCORD_ACTIONS_MODERATION', descriptionKey: 'aice.openclaw.channel.env.DISCORD_ACTIONS_MODERATION', defaultValue: 'false', advanced: true },
  71. ],
  72. },
  73. {
  74. sectionKey: 'telegram',
  75. sectionLabelKey: 'aice.openclaw.channel.telegram',
  76. vars: [
  77. { envKey: 'TELEGRAM_BOT_TOKEN', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_BOT_TOKEN', defaultValue: '', required: true },
  78. { envKey: 'TELEGRAM_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_DM_POLICY', defaultValue: 'open' },
  79. { envKey: 'TELEGRAM_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_ALLOW_FROM', defaultValue: '', advanced: true },
  80. { envKey: 'TELEGRAM_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_GROUP_POLICY', defaultValue: '', advanced: true },
  81. { envKey: 'TELEGRAM_GROUP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_GROUP_ALLOW_FROM', defaultValue: '', advanced: true },
  82. { envKey: 'TELEGRAM_REPLY_TO_MODE', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_REPLY_TO_MODE', defaultValue: 'first', advanced: true },
  83. { envKey: 'TELEGRAM_CHUNK_MODE', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_CHUNK_MODE', defaultValue: 'length', advanced: true },
  84. { envKey: 'TELEGRAM_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_TEXT_CHUNK_LIMIT', defaultValue: '4000', advanced: true },
  85. { envKey: 'TELEGRAM_STREAM_MODE', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_STREAM_MODE', defaultValue: 'partial', advanced: true },
  86. { envKey: 'TELEGRAM_LINK_PREVIEW', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_LINK_PREVIEW', defaultValue: 'true', advanced: true },
  87. { envKey: 'TELEGRAM_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_MEDIA_MAX_MB', defaultValue: '5', advanced: true },
  88. { envKey: 'TELEGRAM_REACTION_NOTIFICATIONS', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_REACTION_NOTIFICATIONS', defaultValue: 'own', advanced: true },
  89. { envKey: 'TELEGRAM_REACTION_LEVEL', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_REACTION_LEVEL', defaultValue: 'minimal', advanced: true },
  90. { envKey: 'TELEGRAM_INLINE_BUTTONS', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_INLINE_BUTTONS', defaultValue: 'allowlist', advanced: true },
  91. { envKey: 'TELEGRAM_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_ACTIONS_REACTIONS', defaultValue: 'true', advanced: true },
  92. { envKey: 'TELEGRAM_ACTIONS_STICKER', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_ACTIONS_STICKER', defaultValue: 'false', advanced: true },
  93. { envKey: 'TELEGRAM_PROXY', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_PROXY', defaultValue: '', advanced: true },
  94. { envKey: 'TELEGRAM_WEBHOOK_URL', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_WEBHOOK_URL', defaultValue: '', advanced: true },
  95. { envKey: 'TELEGRAM_WEBHOOK_SECRET', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_WEBHOOK_SECRET', defaultValue: '', advanced: true },
  96. { envKey: 'TELEGRAM_WEBHOOK_PATH', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_WEBHOOK_PATH', defaultValue: '/telegram-webhook', advanced: true },
  97. { envKey: 'TELEGRAM_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.TELEGRAM_MESSAGE_PREFIX', defaultValue: '', advanced: true },
  98. ],
  99. },
  100. // 以下渠道暂不展示,需要时取消注释即可
  101. // {
  102. // sectionKey: 'slack',
  103. // sectionLabelKey: 'aice.openclaw.channel.slack',
  104. // vars: [
  105. // { envKey: 'SLACK_BOT_TOKEN', descriptionKey: 'aice.openclaw.channel.env.SLACK_BOT_TOKEN', defaultValue: '' },
  106. // { envKey: 'SLACK_APP_TOKEN', descriptionKey: 'aice.openclaw.channel.env.SLACK_APP_TOKEN', defaultValue: '' },
  107. // { envKey: 'SLACK_USER_TOKEN', descriptionKey: 'aice.openclaw.channel.env.SLACK_USER_TOKEN', defaultValue: '' },
  108. // { envKey: 'SLACK_SIGNING_SECRET', descriptionKey: 'aice.openclaw.channel.env.SLACK_SIGNING_SECRET', defaultValue: '' },
  109. // { envKey: 'SLACK_MODE', descriptionKey: 'aice.openclaw.channel.env.SLACK_MODE', defaultValue: 'socket' },
  110. // { envKey: 'SLACK_WEBHOOK_PATH', descriptionKey: 'aice.openclaw.channel.env.SLACK_WEBHOOK_PATH', defaultValue: '/slack/events' },
  111. // { envKey: 'SLACK_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.SLACK_DM_POLICY', defaultValue: 'pairing' },
  112. // { envKey: 'SLACK_DM_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.SLACK_DM_ALLOW_FROM', defaultValue: '' },
  113. // { envKey: 'SLACK_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.SLACK_GROUP_POLICY', defaultValue: 'open' },
  114. // { envKey: 'SLACK_REPLY_TO_MODE', descriptionKey: 'aice.openclaw.channel.env.SLACK_REPLY_TO_MODE', defaultValue: 'off' },
  115. // { envKey: 'SLACK_REACTION_NOTIFICATIONS', descriptionKey: 'aice.openclaw.channel.env.SLACK_REACTION_NOTIFICATIONS', defaultValue: 'own' },
  116. // { envKey: 'SLACK_CHUNK_MODE', descriptionKey: 'aice.openclaw.channel.env.SLACK_CHUNK_MODE', defaultValue: 'newline' },
  117. // { envKey: 'SLACK_TEXT_CHUNK_LIMIT', descriptionKey: 'aice.openclaw.channel.env.SLACK_TEXT_CHUNK_LIMIT', defaultValue: '4000' },
  118. // { envKey: 'SLACK_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.SLACK_MEDIA_MAX_MB', defaultValue: '20' },
  119. // { envKey: 'SLACK_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.SLACK_HISTORY_LIMIT', defaultValue: '50' },
  120. // { envKey: 'SLACK_ALLOW_BOTS', descriptionKey: 'aice.openclaw.channel.env.SLACK_ALLOW_BOTS', defaultValue: 'false' },
  121. // { envKey: 'SLACK_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.SLACK_MESSAGE_PREFIX', defaultValue: '' },
  122. // { envKey: 'SLACK_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_REACTIONS', defaultValue: 'true' },
  123. // { envKey: 'SLACK_ACTIONS_MESSAGES', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_MESSAGES', defaultValue: 'true' },
  124. // { envKey: 'SLACK_ACTIONS_PINS', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_PINS', defaultValue: 'true' },
  125. // { envKey: 'SLACK_ACTIONS_MEMBER_INFO', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_MEMBER_INFO', defaultValue: 'true' },
  126. // { envKey: 'SLACK_ACTIONS_EMOJI_LIST', descriptionKey: 'aice.openclaw.channel.env.SLACK_ACTIONS_EMOJI_LIST', defaultValue: 'true' },
  127. // ],
  128. // },
  129. // {
  130. // sectionKey: 'whatsapp',
  131. // sectionLabelKey: 'aice.openclaw.channel.whatsapp',
  132. // vars: [
  133. // { envKey: 'WHATSAPP_ENABLED', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ENABLED', defaultValue: '' },
  134. // { envKey: 'WHATSAPP_DM_POLICY', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_DM_POLICY', defaultValue: 'pairing' },
  135. // { envKey: 'WHATSAPP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ALLOW_FROM', defaultValue: '' },
  136. // { envKey: 'WHATSAPP_SELF_CHAT_MODE', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_SELF_CHAT_MODE', defaultValue: 'false' },
  137. // { envKey: 'WHATSAPP_GROUP_POLICY', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_GROUP_POLICY', defaultValue: 'allowlist' },
  138. // { envKey: 'WHATSAPP_GROUP_ALLOW_FROM', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_GROUP_ALLOW_FROM', defaultValue: '' },
  139. // { envKey: 'WHATSAPP_MEDIA_MAX_MB', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_MEDIA_MAX_MB', defaultValue: '50' },
  140. // { envKey: 'WHATSAPP_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_HISTORY_LIMIT', defaultValue: '50' },
  141. // { envKey: 'WHATSAPP_DM_HISTORY_LIMIT', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_DM_HISTORY_LIMIT', defaultValue: '' },
  142. // { envKey: 'WHATSAPP_SEND_READ_RECEIPTS', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_SEND_READ_RECEIPTS', defaultValue: 'true' },
  143. // { envKey: 'WHATSAPP_ACK_REACTION_EMOJI', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACK_REACTION_EMOJI', defaultValue: '' },
  144. // { envKey: 'WHATSAPP_ACK_REACTION_DIRECT', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACK_REACTION_DIRECT', defaultValue: 'true' },
  145. // { envKey: 'WHATSAPP_ACK_REACTION_GROUP', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACK_REACTION_GROUP', defaultValue: 'mentions' },
  146. // { envKey: 'WHATSAPP_MESSAGE_PREFIX', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_MESSAGE_PREFIX', defaultValue: '' },
  147. // { envKey: 'WHATSAPP_ACTIONS_REACTIONS', descriptionKey: 'aice.openclaw.channel.env.WHATSAPP_ACTIONS_REACTIONS', defaultValue: 'true' },
  148. // ],
  149. // },
  150. ]
  151. /** 渠道多选选项:仅包含有配置项的渠道 */
  152. export const OPENCLAW_CHANNEL_OPTIONS = OPENCLAW_CHANNEL_SECTIONS.map(s => ({
  153. value: s.sectionKey,
  154. label: s.sectionLabelKey,
  155. }))