@yandy0725/pi-lark 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/README.md +30 -0
  2. package/README.zh.md +30 -0
  3. package/package.json +36 -0
  4. package/skills/lark-approval/SKILL.md +56 -0
  5. package/skills/lark-approval/references/lark-approval-initiate.md +196 -0
  6. package/skills/lark-approval/references/lark-approval-instance-form-control-parameters.md +606 -0
  7. package/skills/lark-approval/references/lark-approval-instance-value-sourcing.md +108 -0
  8. package/skills/lark-apps/SKILL.md +78 -0
  9. package/skills/lark-apps/references/lark-apps-access-scope-get.md +28 -0
  10. package/skills/lark-apps/references/lark-apps-access-scope-set.md +40 -0
  11. package/skills/lark-apps/references/lark-apps-cloud-dev.md +120 -0
  12. package/skills/lark-apps/references/lark-apps-create.md +40 -0
  13. package/skills/lark-apps/references/lark-apps-db-env-create.md +31 -0
  14. package/skills/lark-apps/references/lark-apps-db-execute.md +40 -0
  15. package/skills/lark-apps/references/lark-apps-db-table-get.md +29 -0
  16. package/skills/lark-apps/references/lark-apps-db-table-list.md +31 -0
  17. package/skills/lark-apps/references/lark-apps-env-pull.md +35 -0
  18. package/skills/lark-apps/references/lark-apps-git-credential.md +37 -0
  19. package/skills/lark-apps/references/lark-apps-html-publish.md +57 -0
  20. package/skills/lark-apps/references/lark-apps-init.md +37 -0
  21. package/skills/lark-apps/references/lark-apps-list.md +37 -0
  22. package/skills/lark-apps/references/lark-apps-local-dev.md +76 -0
  23. package/skills/lark-apps/references/lark-apps-release-create.md +30 -0
  24. package/skills/lark-apps/references/lark-apps-release-get.md +28 -0
  25. package/skills/lark-apps/references/lark-apps-release-list.md +31 -0
  26. package/skills/lark-apps/references/lark-apps-session-messages-list.md +53 -0
  27. package/skills/lark-apps/references/lark-apps-update.md +30 -0
  28. package/skills/lark-attendance/SKILL.md +57 -0
  29. package/skills/lark-base/SKILL.md +157 -0
  30. package/skills/lark-base/references/dashboard-block-data-config.md +350 -0
  31. package/skills/lark-base/references/formula-field-guide.md +737 -0
  32. package/skills/lark-base/references/lark-base-cell-value.md +153 -0
  33. package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +717 -0
  34. package/skills/lark-base/references/lark-base-dashboard.md +238 -0
  35. package/skills/lark-base/references/lark-base-data-analysis-sop.md +210 -0
  36. package/skills/lark-base/references/lark-base-data-query-guide.md +61 -0
  37. package/skills/lark-base/references/lark-base-data-query.md +452 -0
  38. package/skills/lark-base/references/lark-base-field-create.md +103 -0
  39. package/skills/lark-base/references/lark-base-field-json.md +489 -0
  40. package/skills/lark-base/references/lark-base-field-update.md +171 -0
  41. package/skills/lark-base/references/lark-base-form-detail.md +71 -0
  42. package/skills/lark-base/references/lark-base-form-questions-create.md +118 -0
  43. package/skills/lark-base/references/lark-base-form-questions-update.md +92 -0
  44. package/skills/lark-base/references/lark-base-form-submit.md +170 -0
  45. package/skills/lark-base/references/lark-base-record-batch-create.md +57 -0
  46. package/skills/lark-base/references/lark-base-record-batch-update.md +52 -0
  47. package/skills/lark-base/references/lark-base-record-history-list.md +43 -0
  48. package/skills/lark-base/references/lark-base-record-upsert.md +63 -0
  49. package/skills/lark-base/references/lark-base-role-guide.md +65 -0
  50. package/skills/lark-base/references/lark-base-view-set-filter.md +189 -0
  51. package/skills/lark-base/references/lark-base-workflow-guide.md +830 -0
  52. package/skills/lark-base/references/lark-base-workflow-schema.md +1071 -0
  53. package/skills/lark-base/references/lookup-field-guide.md +512 -0
  54. package/skills/lark-base/references/role-config.md +549 -0
  55. package/skills/lark-calendar/SKILL.md +137 -0
  56. package/skills/lark-calendar/references/lark-calendar-agenda.md +78 -0
  57. package/skills/lark-calendar/references/lark-calendar-create.md +106 -0
  58. package/skills/lark-calendar/references/lark-calendar-freebusy.md +124 -0
  59. package/skills/lark-calendar/references/lark-calendar-meeting.md +40 -0
  60. package/skills/lark-calendar/references/lark-calendar-room-find.md +113 -0
  61. package/skills/lark-calendar/references/lark-calendar-rsvp.md +42 -0
  62. package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +265 -0
  63. package/skills/lark-calendar/references/lark-calendar-search-event.md +29 -0
  64. package/skills/lark-calendar/references/lark-calendar-suggestion.md +125 -0
  65. package/skills/lark-calendar/references/lark-calendar-update.md +105 -0
  66. package/skills/lark-contact/SKILL.md +59 -0
  67. package/skills/lark-contact/references/lark-contact-get-user.md +19 -0
  68. package/skills/lark-contact/references/lark-contact-search-user.md +124 -0
  69. package/skills/lark-doc/SKILL.md +79 -0
  70. package/skills/lark-doc/references/lark-doc-create.md +79 -0
  71. package/skills/lark-doc/references/lark-doc-fetch.md +138 -0
  72. package/skills/lark-doc/references/lark-doc-md.md +76 -0
  73. package/skills/lark-doc/references/lark-doc-media-download.md +50 -0
  74. package/skills/lark-doc/references/lark-doc-media-insert.md +114 -0
  75. package/skills/lark-doc/references/lark-doc-media-preview.md +41 -0
  76. package/skills/lark-doc/references/lark-doc-resource-cover.md +70 -0
  77. package/skills/lark-doc/references/lark-doc-update.md +259 -0
  78. package/skills/lark-doc/references/lark-doc-whiteboard.md +154 -0
  79. package/skills/lark-doc/references/lark-doc-xml.md +181 -0
  80. package/skills/lark-doc/references/style/lark-doc-create-workflow.md +59 -0
  81. package/skills/lark-doc/references/style/lark-doc-style.md +86 -0
  82. package/skills/lark-doc/references/style/lark-doc-update-workflow.md +55 -0
  83. package/skills/lark-drive/SKILL.md +215 -0
  84. package/skills/lark-drive/references/lark-drive-add-comment.md +193 -0
  85. package/skills/lark-drive/references/lark-drive-apply-permission.md +77 -0
  86. package/skills/lark-drive/references/lark-drive-comment-location.md +193 -0
  87. package/skills/lark-drive/references/lark-drive-comments-guide.md +72 -0
  88. package/skills/lark-drive/references/lark-drive-cover.md +79 -0
  89. package/skills/lark-drive/references/lark-drive-create-folder.md +73 -0
  90. package/skills/lark-drive/references/lark-drive-create-shortcut.md +103 -0
  91. package/skills/lark-drive/references/lark-drive-delete.md +79 -0
  92. package/skills/lark-drive/references/lark-drive-download.md +31 -0
  93. package/skills/lark-drive/references/lark-drive-export-download.md +50 -0
  94. package/skills/lark-drive/references/lark-drive-export.md +145 -0
  95. package/skills/lark-drive/references/lark-drive-files-list.md +158 -0
  96. package/skills/lark-drive/references/lark-drive-import.md +170 -0
  97. package/skills/lark-drive/references/lark-drive-inspect.md +50 -0
  98. package/skills/lark-drive/references/lark-drive-member-add.md +66 -0
  99. package/skills/lark-drive/references/lark-drive-move.md +120 -0
  100. package/skills/lark-drive/references/lark-drive-permission-guide.md +41 -0
  101. package/skills/lark-drive/references/lark-drive-preview.md +87 -0
  102. package/skills/lark-drive/references/lark-drive-pull.md +137 -0
  103. package/skills/lark-drive/references/lark-drive-push.md +162 -0
  104. package/skills/lark-drive/references/lark-drive-reactions.md +113 -0
  105. package/skills/lark-drive/references/lark-drive-search.md +269 -0
  106. package/skills/lark-drive/references/lark-drive-secure-label.md +52 -0
  107. package/skills/lark-drive/references/lark-drive-status.md +137 -0
  108. package/skills/lark-drive/references/lark-drive-task-result.md +302 -0
  109. package/skills/lark-drive/references/lark-drive-upload.md +101 -0
  110. package/skills/lark-drive/references/lark-drive-version-delete.md +38 -0
  111. package/skills/lark-drive/references/lark-drive-version-get.md +71 -0
  112. package/skills/lark-drive/references/lark-drive-version-history.md +73 -0
  113. package/skills/lark-drive/references/lark-drive-version-revert.md +35 -0
  114. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-analysis.md +249 -0
  115. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-discovery.md +253 -0
  116. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-execution.md +200 -0
  117. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-planning.md +336 -0
  118. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-rollback.md +308 -0
  119. package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +226 -0
  120. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +168 -0
  121. package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +424 -0
  122. package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +207 -0
  123. package/skills/lark-drive/references/lark-drive-workflow.md +130 -0
  124. package/skills/lark-event/SKILL.md +154 -0
  125. package/skills/lark-event/references/lark-event-im.md +87 -0
  126. package/skills/lark-event/references/lark-event-minutes.md +54 -0
  127. package/skills/lark-event/references/lark-event-task.md +78 -0
  128. package/skills/lark-event/references/lark-event-vc.md +94 -0
  129. package/skills/lark-event/references/lark-event-whiteboard.md +67 -0
  130. package/skills/lark-im/SKILL.md +247 -0
  131. package/skills/lark-im/references/lark-im-card-action-reply.md +175 -0
  132. package/skills/lark-im/references/lark-im-chat-create.md +162 -0
  133. package/skills/lark-im/references/lark-im-chat-identity.md +55 -0
  134. package/skills/lark-im/references/lark-im-chat-list.md +166 -0
  135. package/skills/lark-im/references/lark-im-chat-messages-list.md +157 -0
  136. package/skills/lark-im/references/lark-im-chat-search.md +142 -0
  137. package/skills/lark-im/references/lark-im-chat-update.md +84 -0
  138. package/skills/lark-im/references/lark-im-feed-group-list-item.md +68 -0
  139. package/skills/lark-im/references/lark-im-feed-group-list.md +65 -0
  140. package/skills/lark-im/references/lark-im-feed-group-query-item.md +44 -0
  141. package/skills/lark-im/references/lark-im-feed-groups.md +452 -0
  142. package/skills/lark-im/references/lark-im-feed-shortcut-create.md +97 -0
  143. package/skills/lark-im/references/lark-im-feed-shortcut-list.md +103 -0
  144. package/skills/lark-im/references/lark-im-feed-shortcut-remove.md +48 -0
  145. package/skills/lark-im/references/lark-im-flag-cancel.md +67 -0
  146. package/skills/lark-im/references/lark-im-flag-create.md +67 -0
  147. package/skills/lark-im/references/lark-im-flag-list.md +100 -0
  148. package/skills/lark-im/references/lark-im-message-enrichment.md +54 -0
  149. package/skills/lark-im/references/lark-im-messages-mget.md +99 -0
  150. package/skills/lark-im/references/lark-im-messages-reply.md +267 -0
  151. package/skills/lark-im/references/lark-im-messages-resources-download.md +94 -0
  152. package/skills/lark-im/references/lark-im-messages-search.md +234 -0
  153. package/skills/lark-im/references/lark-im-messages-send.md +267 -0
  154. package/skills/lark-im/references/lark-im-reactions.md +299 -0
  155. package/skills/lark-im/references/lark-im-threads-messages-list.md +115 -0
  156. package/skills/lark-mail/SKILL.md +287 -0
  157. package/skills/lark-mail/assets/templates/job-application--resume.html +33 -0
  158. package/skills/lark-mail/assets/templates/newsletter--weekly-brief.html +50 -0
  159. package/skills/lark-mail/assets/templates/research--market-report.html +256 -0
  160. package/skills/lark-mail/assets/templates/weekly--personal-report.html +43 -0
  161. package/skills/lark-mail/assets/templates/weekly--team-report.html +9 -0
  162. package/skills/lark-mail/references/lark-mail-calendar-invite.md +36 -0
  163. package/skills/lark-mail/references/lark-mail-decline-receipt.md +115 -0
  164. package/skills/lark-mail/references/lark-mail-draft-create.md +127 -0
  165. package/skills/lark-mail/references/lark-mail-draft-edit.md +404 -0
  166. package/skills/lark-mail/references/lark-mail-forward.md +239 -0
  167. package/skills/lark-mail/references/lark-mail-html.md +333 -0
  168. package/skills/lark-mail/references/lark-mail-lint-html.md +243 -0
  169. package/skills/lark-mail/references/lark-mail-message.md +233 -0
  170. package/skills/lark-mail/references/lark-mail-messages.md +108 -0
  171. package/skills/lark-mail/references/lark-mail-recall.md +66 -0
  172. package/skills/lark-mail/references/lark-mail-recipient-search.md +59 -0
  173. package/skills/lark-mail/references/lark-mail-reply-all.md +213 -0
  174. package/skills/lark-mail/references/lark-mail-reply.md +249 -0
  175. package/skills/lark-mail/references/lark-mail-rules.md +31 -0
  176. package/skills/lark-mail/references/lark-mail-send-as.md +44 -0
  177. package/skills/lark-mail/references/lark-mail-send-receipt.md +120 -0
  178. package/skills/lark-mail/references/lark-mail-send-status.md +46 -0
  179. package/skills/lark-mail/references/lark-mail-send.md +222 -0
  180. package/skills/lark-mail/references/lark-mail-share-to-chat.md +87 -0
  181. package/skills/lark-mail/references/lark-mail-signature.md +98 -0
  182. package/skills/lark-mail/references/lark-mail-template-create.md +129 -0
  183. package/skills/lark-mail/references/lark-mail-template-update.md +150 -0
  184. package/skills/lark-mail/references/lark-mail-template.md +54 -0
  185. package/skills/lark-mail/references/lark-mail-thread.md +111 -0
  186. package/skills/lark-mail/references/lark-mail-triage.md +131 -0
  187. package/skills/lark-mail/references/lark-mail-watch.md +94 -0
  188. package/skills/lark-markdown/SKILL.md +69 -0
  189. package/skills/lark-markdown/references/lark-markdown-create.md +94 -0
  190. package/skills/lark-markdown/references/lark-markdown-diff.md +156 -0
  191. package/skills/lark-markdown/references/lark-markdown-fetch.md +79 -0
  192. package/skills/lark-markdown/references/lark-markdown-overwrite.md +85 -0
  193. package/skills/lark-markdown/references/lark-markdown-patch.md +160 -0
  194. package/skills/lark-minutes/SKILL.md +192 -0
  195. package/skills/lark-minutes/references/lark-minutes-detail.md +62 -0
  196. package/skills/lark-minutes/references/lark-minutes-download.md +137 -0
  197. package/skills/lark-minutes/references/lark-minutes-search.md +204 -0
  198. package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +107 -0
  199. package/skills/lark-minutes/references/lark-minutes-summary.md +122 -0
  200. package/skills/lark-minutes/references/lark-minutes-todo.md +138 -0
  201. package/skills/lark-minutes/references/lark-minutes-update.md +41 -0
  202. package/skills/lark-minutes/references/lark-minutes-upload.md +104 -0
  203. package/skills/lark-note/SKILL.md +94 -0
  204. package/skills/lark-note/references/lark-note-detail.md +26 -0
  205. package/skills/lark-note/references/lark-note-transcript.md +23 -0
  206. package/skills/lark-okr/SKILL.md +115 -0
  207. package/skills/lark-okr/references/lark-okr-batch-create.md +106 -0
  208. package/skills/lark-okr/references/lark-okr-contentblock.md +359 -0
  209. package/skills/lark-okr/references/lark-okr-cycle-detail.md +84 -0
  210. package/skills/lark-okr/references/lark-okr-cycle-list.md +90 -0
  211. package/skills/lark-okr/references/lark-okr-entities.md +329 -0
  212. package/skills/lark-okr/references/lark-okr-image-upload.md +116 -0
  213. package/skills/lark-okr/references/lark-okr-indicator-update.md +80 -0
  214. package/skills/lark-okr/references/lark-okr-progress-create.md +81 -0
  215. package/skills/lark-okr/references/lark-okr-progress-delete.md +47 -0
  216. package/skills/lark-okr/references/lark-okr-progress-get.md +62 -0
  217. package/skills/lark-okr/references/lark-okr-progress-list.md +80 -0
  218. package/skills/lark-okr/references/lark-okr-progress-update.md +81 -0
  219. package/skills/lark-okr/references/lark-okr-reorder.md +81 -0
  220. package/skills/lark-okr/references/lark-okr-weight.md +96 -0
  221. package/skills/lark-openapi-explorer/SKILL.md +153 -0
  222. package/skills/lark-shared/SKILL.md +168 -0
  223. package/skills/lark-shared/references/lark-wiki-token-routing.md +42 -0
  224. package/skills/lark-sheets/SKILL.md +165 -0
  225. package/skills/lark-sheets/references/lark-sheets-batch-update.md +191 -0
  226. package/skills/lark-sheets/references/lark-sheets-chart.md +330 -0
  227. package/skills/lark-sheets/references/lark-sheets-conditional-format.md +179 -0
  228. package/skills/lark-sheets/references/lark-sheets-core-operations.md +103 -0
  229. package/skills/lark-sheets/references/lark-sheets-filter-view.md +137 -0
  230. package/skills/lark-sheets/references/lark-sheets-filter.md +130 -0
  231. package/skills/lark-sheets/references/lark-sheets-float-image.md +159 -0
  232. package/skills/lark-sheets/references/lark-sheets-formula-translation.md +267 -0
  233. package/skills/lark-sheets/references/lark-sheets-pivot-table.md +166 -0
  234. package/skills/lark-sheets/references/lark-sheets-range-operations.md +267 -0
  235. package/skills/lark-sheets/references/lark-sheets-read-data.md +235 -0
  236. package/skills/lark-sheets/references/lark-sheets-search-replace.md +111 -0
  237. package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +212 -0
  238. package/skills/lark-sheets/references/lark-sheets-sparkline.md +149 -0
  239. package/skills/lark-sheets/references/lark-sheets-visual-standards.md +205 -0
  240. package/skills/lark-sheets/references/lark-sheets-workbook.md +395 -0
  241. package/skills/lark-sheets/references/lark-sheets-write-cells.md +565 -0
  242. package/skills/lark-sheets/scripts/sheets_df.py +32 -0
  243. package/skills/lark-skill-maker/SKILL.md +85 -0
  244. package/skills/lark-slides/SKILL.md +293 -0
  245. package/skills/lark-slides/assets/templates/administration--all_hands_meeting.xml +1999 -0
  246. package/skills/lark-slides/assets/templates/administration--annual_gala.xml +1160 -0
  247. package/skills/lark-slides/assets/templates/administration--company_intro.xml +1376 -0
  248. package/skills/lark-slides/assets/templates/administration--corporate_culture.xml +1765 -0
  249. package/skills/lark-slides/assets/templates/hr--employee_training.xml +912 -0
  250. package/skills/lark-slides/assets/templates/hr--employee_training_workshop.xml +1504 -0
  251. package/skills/lark-slides/assets/templates/hr--onboarding.xml +933 -0
  252. package/skills/lark-slides/assets/templates/marketing--brand_communication.xml +1367 -0
  253. package/skills/lark-slides/assets/templates/marketing--brand_logo_design.xml +1347 -0
  254. package/skills/lark-slides/assets/templates/marketing--brand_operations_plan.xml +1309 -0
  255. package/skills/lark-slides/assets/templates/marketing--business_plan.xml +1646 -0
  256. package/skills/lark-slides/assets/templates/marketing--marketing_plan.xml +1469 -0
  257. package/skills/lark-slides/assets/templates/marketing--marketing_strategy.xml +1484 -0
  258. package/skills/lark-slides/assets/templates/marketing--product_whitepaper.xml +1455 -0
  259. package/skills/lark-slides/assets/templates/marketing--roadshow_business_plan.xml +1506 -0
  260. package/skills/lark-slides/assets/templates/misc--book_sharing.xml +1338 -0
  261. package/skills/lark-slides/assets/templates/misc--club_event_plan.xml +4885 -0
  262. package/skills/lark-slides/assets/templates/misc--student_career_plan.xml +1854 -0
  263. package/skills/lark-slides/assets/templates/office--dark_general.xml +3763 -0
  264. package/skills/lark-slides/assets/templates/office--dept_annual_report.xml +1192 -0
  265. package/skills/lark-slides/assets/templates/office--light_general.xml +3378 -0
  266. package/skills/lark-slides/assets/templates/office--project_kickoff.xml +3152 -0
  267. package/skills/lark-slides/assets/templates/office--quarterly_review.xml +1253 -0
  268. package/skills/lark-slides/assets/templates/office--work_report.xml +1099 -0
  269. package/skills/lark-slides/assets/templates/office--work_summary.xml +4420 -0
  270. package/skills/lark-slides/assets/templates/office--work_summary_report.xml +1523 -0
  271. package/skills/lark-slides/assets/templates/operations--brand_logo_design.xml +1347 -0
  272. package/skills/lark-slides/assets/templates/operations--brand_operations_plan.xml +1309 -0
  273. package/skills/lark-slides/assets/templates/operations--marketing_plan.xml +1469 -0
  274. package/skills/lark-slides/assets/templates/operations--product_promotion.xml +687 -0
  275. package/skills/lark-slides/assets/templates/personal--experience_sharing.xml +2242 -0
  276. package/skills/lark-slides/assets/templates/personal--personal_resume.xml +2047 -0
  277. package/skills/lark-slides/assets/templates/personal--promotion_defense.xml +1099 -0
  278. package/skills/lark-slides/assets/templates/personal--promotion_report.xml +1039 -0
  279. package/skills/lark-slides/assets/templates/personal--self_intro.xml +696 -0
  280. package/skills/lark-slides/assets/templates/personal--teaching_sharing.xml +3013 -0
  281. package/skills/lark-slides/assets/templates/product--business_case_analysis.xml +1341 -0
  282. package/skills/lark-slides/assets/templates/product--market_analysis.xml +898 -0
  283. package/skills/lark-slides/assets/templates/product--product_analysis.xml +1537 -0
  284. package/skills/lark-slides/assets/templates/product--product_intro.xml +2838 -0
  285. package/skills/lark-slides/assets/templates/product--product_promotion.xml +687 -0
  286. package/skills/lark-slides/assets/templates/product--product_promotion_2.xml +687 -0
  287. package/skills/lark-slides/references/asset-planning.md +124 -0
  288. package/skills/lark-slides/references/examples.md +261 -0
  289. package/skills/lark-slides/references/iconpark-index.json +41901 -0
  290. package/skills/lark-slides/references/iconpark.md +46 -0
  291. package/skills/lark-slides/references/lark-slides-create.md +137 -0
  292. package/skills/lark-slides/references/lark-slides-edit-workflows.md +144 -0
  293. package/skills/lark-slides/references/lark-slides-media-upload.md +128 -0
  294. package/skills/lark-slides/references/lark-slides-replace-pages.md +95 -0
  295. package/skills/lark-slides/references/lark-slides-replace-slide.md +240 -0
  296. package/skills/lark-slides/references/lark-slides-screenshot.md +94 -0
  297. package/skills/lark-slides/references/lark-slides-whiteboard.md +330 -0
  298. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +220 -0
  299. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +123 -0
  300. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +110 -0
  301. package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +187 -0
  302. package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +98 -0
  303. package/skills/lark-slides/references/planning-layer.md +219 -0
  304. package/skills/lark-slides/references/slide-templates.md +201 -0
  305. package/skills/lark-slides/references/slides_demo.xml +226 -0
  306. package/skills/lark-slides/references/slides_xml_schema_definition.xml +3049 -0
  307. package/skills/lark-slides/references/template-catalog.md +463 -0
  308. package/skills/lark-slides/references/template-index.json +1853 -0
  309. package/skills/lark-slides/references/troubleshooting.md +63 -0
  310. package/skills/lark-slides/references/validation-checklist.md +110 -0
  311. package/skills/lark-slides/references/visual-planning.md +254 -0
  312. package/skills/lark-slides/references/xml-format-guide.md +369 -0
  313. package/skills/lark-slides/references/xml-schema-quick-ref.md +245 -0
  314. package/skills/lark-slides/scripts/iconpark_tool.py +362 -0
  315. package/skills/lark-slides/scripts/iconpark_tool_test.py +177 -0
  316. package/skills/lark-slides/scripts/template_tool.py +970 -0
  317. package/skills/lark-slides/scripts/template_tool_test.py +177 -0
  318. package/skills/lark-slides/scripts/xml_text_overlap_lint.py +367 -0
  319. package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +263 -0
  320. package/skills/lark-task/SKILL.md +167 -0
  321. package/skills/lark-task/references/lark-task-assign.md +38 -0
  322. package/skills/lark-task/references/lark-task-comment.md +28 -0
  323. package/skills/lark-task/references/lark-task-complete.md +27 -0
  324. package/skills/lark-task/references/lark-task-create.md +57 -0
  325. package/skills/lark-task/references/lark-task-followers.md +35 -0
  326. package/skills/lark-task/references/lark-task-get-my-tasks.md +61 -0
  327. package/skills/lark-task/references/lark-task-get-related-tasks.md +53 -0
  328. package/skills/lark-task/references/lark-task-reminder.md +36 -0
  329. package/skills/lark-task/references/lark-task-reopen.md +27 -0
  330. package/skills/lark-task/references/lark-task-search.md +41 -0
  331. package/skills/lark-task/references/lark-task-set-ancestor.md +32 -0
  332. package/skills/lark-task/references/lark-task-tasklist-create.md +35 -0
  333. package/skills/lark-task/references/lark-task-tasklist-members.md +36 -0
  334. package/skills/lark-task/references/lark-task-tasklist-search.md +38 -0
  335. package/skills/lark-task/references/lark-task-tasklist-task-add.md +38 -0
  336. package/skills/lark-task/references/lark-task-update.md +37 -0
  337. package/skills/lark-task/references/lark-task-upload-attachment.md +59 -0
  338. package/skills/lark-vc/SKILL.md +202 -0
  339. package/skills/lark-vc/references/lark-vc-detail.md +44 -0
  340. package/skills/lark-vc/references/lark-vc-recording.md +154 -0
  341. package/skills/lark-vc/references/lark-vc-search.md +163 -0
  342. package/skills/lark-vc/references/vc-domain-boundaries.md +188 -0
  343. package/skills/lark-vc-agent/SKILL.md +169 -0
  344. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +287 -0
  345. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +141 -0
  346. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +105 -0
  347. package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +91 -0
  348. package/skills/lark-whiteboard/SKILL.md +47 -0
  349. package/skills/lark-whiteboard/elements/connectors.md +102 -0
  350. package/skills/lark-whiteboard/elements/content.md +40 -0
  351. package/skills/lark-whiteboard/elements/image.md +80 -0
  352. package/skills/lark-whiteboard/elements/layout.md +374 -0
  353. package/skills/lark-whiteboard/elements/schema.md +357 -0
  354. package/skills/lark-whiteboard/elements/style.md +318 -0
  355. package/skills/lark-whiteboard/elements/typography.md +73 -0
  356. package/skills/lark-whiteboard/references/lark-whiteboard-query.md +60 -0
  357. package/skills/lark-whiteboard/references/lark-whiteboard-update.md +122 -0
  358. package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +94 -0
  359. package/skills/lark-whiteboard/routes/dsl.md +107 -0
  360. package/skills/lark-whiteboard/routes/mermaid.md +27 -0
  361. package/skills/lark-whiteboard/routes/svg-edit.md +85 -0
  362. package/skills/lark-whiteboard/routes/svg.md +54 -0
  363. package/skills/lark-whiteboard/scenes/architecture.md +433 -0
  364. package/skills/lark-whiteboard/scenes/bar-chart.md +187 -0
  365. package/skills/lark-whiteboard/scenes/comparison.md +135 -0
  366. package/skills/lark-whiteboard/scenes/fishbone.md +238 -0
  367. package/skills/lark-whiteboard/scenes/flowchart.md +185 -0
  368. package/skills/lark-whiteboard/scenes/flywheel.md +195 -0
  369. package/skills/lark-whiteboard/scenes/funnel.md +101 -0
  370. package/skills/lark-whiteboard/scenes/line-chart.md +214 -0
  371. package/skills/lark-whiteboard/scenes/mermaid.md +130 -0
  372. package/skills/lark-whiteboard/scenes/milestone.md +139 -0
  373. package/skills/lark-whiteboard/scenes/organization.md +173 -0
  374. package/skills/lark-whiteboard/scenes/photo-showcase.md +126 -0
  375. package/skills/lark-whiteboard/scenes/pyramid.md +99 -0
  376. package/skills/lark-whiteboard/scenes/swimlane.md +371 -0
  377. package/skills/lark-whiteboard/scenes/treemap.md +216 -0
  378. package/skills/lark-wiki/SKILL.md +110 -0
  379. package/skills/lark-wiki/references/lark-wiki-delete-space.md +205 -0
  380. package/skills/lark-wiki/references/lark-wiki-member-add.md +67 -0
  381. package/skills/lark-wiki/references/lark-wiki-member-list.md +76 -0
  382. package/skills/lark-wiki/references/lark-wiki-member-remove.md +61 -0
  383. package/skills/lark-wiki/references/lark-wiki-move.md +183 -0
  384. package/skills/lark-wiki/references/lark-wiki-node-copy.md +72 -0
  385. package/skills/lark-wiki/references/lark-wiki-node-create.md +127 -0
  386. package/skills/lark-wiki/references/lark-wiki-node-delete.md +62 -0
  387. package/skills/lark-wiki/references/lark-wiki-node-get.md +57 -0
  388. package/skills/lark-wiki/references/lark-wiki-node-list.md +88 -0
  389. package/skills/lark-wiki/references/lark-wiki-space-create.md +46 -0
  390. package/skills/lark-wiki/references/lark-wiki-space-list.md +68 -0
  391. package/skills/lark-workflow-meeting-summary/SKILL.md +122 -0
  392. package/skills/lark-workflow-standup-report/SKILL.md +122 -0
@@ -0,0 +1,1071 @@
1
+ # Workflow steps JSON SSOT
2
+
3
+ 本文档是 Workflow `steps` JSON 的单一事实来源(SSOT),定义完整数据结构,适用于:
4
+ - **查询场景**:理解 `+workflow-get` 返回的 `steps` 结构
5
+ - **创建/修改场景**:构造 `+workflow-create` / `+workflow-update` 的 `--json` body
6
+ > 💡 **本文档是纯字段参考**。如需**创建/修改**工作流的完整示例,请阅读 [workflow-guide.md](lark-base-workflow-guide.md)。
7
+ ---
8
+ ## 📖 快速导航
9
+
10
+ 根据你的需求跳转到对应章节:
11
+
12
+ | 需求 | 章节 |
13
+ |------|------|
14
+ | 了解 Step 基础结构 | [WorkflowStep 基础结构](#workflowstep-基础结构) |
15
+ | 查询 Trigger 类型及 data 字段 | [Trigger data](#trigger-data-详细结构) |
16
+ | 查询 Action 类型及 data 字段 | [Action data](#action-data-详细结构) |
17
+ | 查询 Branch/Loop 结构 | [Branch data](#branch-data-详细结构) / [System data](#system-data-详细结构) |
18
+ | 查询 ValueInfo/Condition 等公共类型 | [公共类型](#公共类型) |
19
+
20
+ ---
21
+
22
+ ## WorkflowStep 基础结构
23
+
24
+ 每个步骤(Trigger / Action / Branch / System)共享以下字段:
25
+
26
+ ```json
27
+ {
28
+ "id": "step_xxx",
29
+ "type": "AddRecordTrigger",
30
+ "title": "监控新订单",
31
+ "next": "step_yyy",
32
+ "data": {}
33
+ }
34
+ ```
35
+
36
+ | 字段 | 类型 | 必填 | 说明 |
37
+ |------|------|------|------|
38
+ | `id` | string | 是 | 步骤唯一 ID(用户自定义,被 `next` 和 `children.links[].to` 引用) |
39
+ | `type` | string | 是 | 步骤类型,见下方枚举 |
40
+ | `title` | string | 否 | 步骤标题 |
41
+ | `children` | StepChildren | 否 | 子关系边,承担所有分支/循环 |
42
+ | `next` | string | null | 否 | 线性后继节点 ID;`null` 表示流程结束 |
43
+ | `data` | object | 是 | 步骤详细配置,按 `type` 区分,见后续各节 |
44
+
45
+ > **总原则**:连线写 `children`,扩展标识写 `meta`,输入参数写 `data`。
46
+
47
+ ---
48
+
49
+ ## StepChildren 与 ChildLink
50
+
51
+ ### StepChildren
52
+
53
+ ```json
54
+ {
55
+ "links": [ /* ChildLink[] */ ]
56
+ }
57
+ ```
58
+
59
+ | 字段 | 类型 | 说明 |
60
+ |------|------|------|
61
+ | `links` | ChildLink[] | 子关系边列表;无子关系时为空数组 `[]` |
62
+
63
+ ### ChildLink
64
+
65
+ 每条关系边描述从当前节点到目标节点的有向连线:
66
+
67
+ ```json
68
+ { "kind": "if_true", "to": "step_4", "label": "branch_1", "desc": "金额大于1000" }
69
+ ```
70
+
71
+ | 字段 | 类型 | 必填 | 说明 |
72
+ |------|------|------|------|
73
+ | `kind` | string | 是 | 关系类型:`if_true` / `if_false` / `case` / `loop_start` / `slot` |
74
+ | `to` | string | 是 | 目标节点 ID |
75
+ | `label` | string | 否 | 可选标签(如 `branch_1`、`tool`、`llm`、`memory`) |
76
+ | `desc` | string | 否 | 可选语义说明(如"销售部门"、"积极情绪") |
77
+
78
+ `kind` 使用场景:
79
+
80
+ | kind | 使用节点 | 说明 |
81
+ |------|---------|------|
82
+ | `if_true` | IfElseBranch | 条件为真时跳转 |
83
+ | `if_false` | IfElseBranch | 条件为假时跳转 |
84
+ | `case` | SwitchBranch / AIClassificationBranch | 多路分支,`label` 建议用 `branch_1` 等中性标签,`desc` 写语义 |
85
+ | `loop_start` | Loop | 循环体入口 |
86
+ | `slot` | AIAgentAction | 挂载 LLM / 工具 / 记忆子节点,`label` 为 `llm` / `tool` / `memory` |
87
+
88
+ ---
89
+
90
+ ## StepType 枚举
91
+
92
+ ### Trigger 类型
93
+
94
+ | type | 说明 |
95
+ |------|------|
96
+ | `AddRecordTrigger` | 新增记录时触发 |
97
+ | `SetRecordTrigger` | 记录被修改时触发 |
98
+ | `ChangeRecordTrigger` | 记录满足条件时触发 |
99
+ | `TimerTrigger` | 定时触发 |
100
+ | `ReminderTrigger` | 日期提醒触发 |
101
+ | `ButtonTrigger` | 按钮点击触发 |
102
+ | `LarkMessageTrigger` | 接收飞书消息触发 |
103
+
104
+ > 所有 Trigger 节点**请勿设置** `children` ,通过 `next` 串联后继。
105
+
106
+ ### 触发器选型指南
107
+
108
+ | 需求描述 | 触发器 |
109
+ |---------|--------|
110
+ | 新增记录时 | `AddRecordTrigger` |
111
+ | 字段变为特定值时(**仅修改**) | `SetRecordTrigger` |
112
+ | **新增或修改**都触发 | `ChangeRecordTrigger` |
113
+ | 拿不准用哪个 | `ChangeRecordTrigger` |
114
+
115
+ > ⚠️ `SetRecordTrigger` 仅监听修改,`ChangeRecordTrigger` 同时监听新增 + 修改。
116
+
117
+ ### Action 类型
118
+
119
+ | type | 说明 |
120
+ |------|------|
121
+ | `AddRecordAction` | 新增记录 |
122
+ | `SetRecordAction` | 更新记录 |
123
+ | `FindRecordAction` | 查找记录 |
124
+ | `HTTPClientAction` | HTTP 请求 |
125
+ | `Delay` | 延迟 |
126
+ | `LarkMessageAction` | 发送飞书消息 |
127
+ | `GenerateAiTextAction` | AI 生成文本 |
128
+
129
+ > 所有 Action 节点**请勿设置** `children` ,通过 `next` 串联后继。
130
+
131
+ ### Branch 类型
132
+
133
+ | type | 说明 |
134
+ |------|------|
135
+ | `IfElseBranch` | 条件分支,`children.links` 含 `if_true` 和 `if_false` |
136
+ | `SwitchBranch` | 多路分支,`children.links` 含多个 `case` |
137
+
138
+ ### System 类型
139
+
140
+ | type | 说明 |
141
+ |------|------|
142
+ | `Loop` | 循环,`children.links` 含 `loop_start` 指向循环体入口 |
143
+
144
+ ---
145
+
146
+ ## Trigger data 详细结构
147
+
148
+
149
+ ### AddRecordTrigger
150
+
151
+ ```json
152
+ {
153
+ "table_name": "订单表",
154
+ "watched_field_name": "状态",
155
+ "trigger_control_list": ["pasteUpdate", "automationBatchUpdate"],
156
+ "condition_list": [] /* AndCondition 数组 */
157
+ }
158
+ ```
159
+
160
+ | 字段 | 必填 | 说明 |
161
+ |------|------|------|
162
+ | `table_name` | 是 | 监控的数据表名 |
163
+ | `watched_field_name` | 是 | 监控的字段名 |
164
+ | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` / `openAPIBatchUpdate` |
165
+ | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
166
+
167
+ ### ChangeRecordTrigger
168
+
169
+ ```json
170
+ {
171
+ "table_name": "任务表",
172
+ "trigger_control_list": [],
173
+ "condition": null
174
+ }
175
+ ```
176
+
177
+ | 字段 | 必填 | 说明 |
178
+ |------|------|------|
179
+ | `table_name` | 是 | 监控的数据表名 |
180
+ | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` |
181
+ | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
182
+
183
+ ### SetRecordTrigger
184
+
185
+ ```json
186
+ {
187
+ "table_name": "订单表",
188
+ "record_watch_conjunction": "and",
189
+ "record_watch_info": [ /* FieldCondition[] */ ],
190
+ "field_watch_info": [
191
+ { "field_name": "状态", "operator": "is", "value": [{ "value_type": "text", "value": "已发货" }] }
192
+ ],
193
+ "trigger_control_list": [],
194
+ "condition_list": null
195
+ }
196
+ ```
197
+
198
+ | 字段 | 必填 | 说明 |
199
+ |------|----|------|
200
+ | `table_name` | 是 | 监控的数据表名 |
201
+ | `record_watch_conjunction` | 否 | 记录筛选组合方式:`and` / `or`,默认 `and` |
202
+ | `record_watch_info` | 否 | 记录级过滤条件(修改前值匹配),为空则监听全部 |
203
+ | `field_watch_info` | 是 | 字段级监控条件列表,至少一个 |
204
+ | `trigger_control_list` | 否 | 触发控制,可选值:`pasteUpdate` / `automationBatchUpdate` / `syncUpdate` / `appendImport` |
205
+ | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
206
+
207
+ `FieldWatchItem`:
208
+
209
+ | 字段 | 类型 | 说明 |
210
+ |------|------|------|
211
+ | `field_name` | string | 监听字段名称 |
212
+ | `operator` | string | 操作符(仅明确要求字段满足条件时填) |
213
+ | `value` | ValueInfo[] | 触发值 |
214
+
215
+ ### TimerTrigger
216
+
217
+ ```json
218
+ {
219
+ "rule": "WEEKLY",
220
+ "start_time": "2025-01-01 09:00",
221
+ "sub_unit": [1, 3, 5],
222
+ "is_never_end": true
223
+ }
224
+ ```
225
+
226
+ | 字段 | 必填 | 说明 |
227
+ |------|------|------|
228
+ | `rule` | 是 | `NO_REPEAT` / `DAILY` / `WEEKLY` / `MONTHLY` / `YEARLY` / `WORKDAY` / `CUSTOM` |
229
+ | `start_time` | 否 | 开始时间,格式 `yyyy-MM-dd HH:mm` |
230
+ | `interval` | 否 | 自定义间隔 [1,30](仅 CUSTOM) |
231
+ | `unit` | 否 | 自定义单位:`SECOND` / `MINUTE` / `HOUR` / `DAY` / `WEEK` / `MONTH` / `YEAR` |
232
+ | `sub_unit` | 否 | 子单位(`WEEKLY` 时为星期几数组 0-6,`MONTHLY` 时为几号数组 1-31) |
233
+ | `end_time` | 否 | 结束时间 |
234
+ | `is_never_end` | 否 | 是否永不结束 |
235
+
236
+ ### ReminderTrigger
237
+
238
+ ```json
239
+ {
240
+ "table_name": "项目表",
241
+ "field_name": "截止日期",
242
+ "offset": 1,
243
+ "unit": "DAY",
244
+ "hour": 9,
245
+ "minute": 0,
246
+ "condition_list": null
247
+ }
248
+ ```
249
+
250
+ | 字段 | 必填 | 说明 |
251
+ |------|------|------|
252
+ | `table_name` | 是 | 数据表名 |
253
+ | `field_name` | 是 | 日期字段名(必须为 `datetime` / `created_at` / `formula` / `lookup` 类型) |
254
+ | `unit` | 是 | 偏移单位:`MINUTE` / `HOUR` / `DAY` / `WEEK` / `MONTH` |
255
+ | `offset` | 是 | 提前/延后的偏移量(正数=提前,负数=延后;范围由 `unit` 决定):`MINUTE` ∈ {0, 5, 15, 30, -5, -15, -30};`HOUR` ∈ [-6, -1] ∪ [1, 6];`DAY` ∈ [-7, 7];`WEEK` ∈ [-7, -1] ∪ [1, 7];`MONTH` ∈ [-7, -1] ∪ [1, 7] |
256
+ | `hour` | 是 | 触发小时 (0-23),默认 9 |
257
+ | `minute` | 是 | 触发分钟 (0-59),默认 0 |
258
+ | `condition_list` | 否 | 过滤条件数组,数组中每个元素为 AndCondition 结构,多个 AndCondition 之间为 OR 关系 |
259
+
260
+
261
+ ### ButtonTrigger
262
+
263
+ ```json
264
+ {
265
+ "button_type": "buttonField",
266
+ "table_name": "审批表"
267
+ }
268
+ ```
269
+
270
+ | 字段 | 必填 | 说明 |
271
+ |------|------|------|
272
+ | `button_type` | 是 | 按钮类型:`buttonField`(表格里的按钮,可操作当前记录数据)/ `buttonElement`(仪表盘、应用页面上的按钮,可执行整体操作) |
273
+ | `table_name` | 否 | 绑定的数据表名,仅 `button_type=buttonField` 时填写 |
274
+
275
+ > `buttonField` 和 `buttonElement` 的输出能力不同,详见下方「ButtonTrigger(按钮触发器)」输出说明。
276
+
277
+
278
+ ### LarkMessageTrigger
279
+
280
+ ```json
281
+ {
282
+ "receive_scene": "group",
283
+ "receiver": [{ "value_type": "group", "value": {"id": "oc_xxxx", "name": "测试群"} }],
284
+ "scope": "all",
285
+ "filter": {
286
+ "conjunction": "and",
287
+ "content_contains": ["关键词"],
288
+ "sender_contains": [{ "value_type": "user", "value": {"id": "ou_xxxx", "name": ""} }],
289
+ "is_new_message": true,
290
+ "is_message_contain_attachment": false
291
+ }
292
+ }
293
+ ```
294
+
295
+ | 字段 | 必填 | 说明|
296
+ |------|------|---|
297
+ | `receive_scene` | 是 | 接收场景:`group`(群聊)/ `chat`(单聊)|
298
+ | `receiver` | 是 | 触发来源,支持 `user` / `group` / `ref`。在单聊场景下,该字段指“可以和机器人单聊的用户”;在群聊场景下,该字段指“接收信息的群组”|
299
+ | `scope` | 是 | 触发范围:`at`(@提及)/ `all`(所有消息)。该参数仅在群聊场景有效,单聊场景请勿指定该参数|
300
+ | `filter` | 是 | MessageFilter 消息过滤条件|
301
+
302
+ `MessageFilter`:
303
+
304
+ | 字段 | 类型 | 说明 |
305
+ |------|------|----|
306
+ | `conjunction` | string | `and` 满足所有条件 / `or` 任一条件|
307
+ | `content_contains` | string[] | 关键词列表|
308
+ | `sender_contains` | ValueInfo[] | 筛选发送人(仅群聊+群组来源时生效,单聊场景请勿指定该参数)|
309
+ | `is_new_message` | boolean | 仅新话题消息(仅群聊时有效,单聊场景请勿指定该参数)|
310
+ | `is_message_contain_attachment` | boolean | 是否仅附件消息触发|
311
+
312
+ ## Action data 详细结构
313
+
314
+ ### AddRecordAction
315
+
316
+ ```json
317
+ {
318
+ "table_name": "订单表",
319
+ "field_values": [
320
+ { "field_name": "客户名称", "value": [{ "value_type": "text", "value": "张三" }] },
321
+ { "field_name": "金额", "value": [{ "value_type": "number", "value": 100 }] },
322
+ { "field_name": "创建人", "value": [{ "value_type": "ref", "value": "$.trigger_1.fieldIdxxx" }] }
323
+ ]
324
+ }
325
+ ```
326
+
327
+ | 字段 | 必填 | 说明 |
328
+ |------|------|------|
329
+ | `table_name` | 是 | 目标数据表名 |
330
+ | `field_values` | 是 | RecordFieldValue[] |
331
+
332
+ ### SetRecordAction
333
+
334
+ ```json
335
+ {
336
+ "table_name": "订单表",
337
+ "max_set_record_num": 10,
338
+ "field_values": [
339
+ { "field_name": "状态", "value": [{ "value_type": "option", "value": { "id": "opt1", "name": "已完成" } }] }
340
+ ],
341
+ "filter_info": { /* RecordFilterInfo */ },
342
+ "ref_info": { "step_id": "step_trigger" }
343
+ }
344
+ ```
345
+
346
+ | 字段 | 必填 | 说明 |
347
+ |------|------|------|
348
+ | `table_name` | 是 | 目标数据表名 |
349
+ | `max_set_record_num` | 否 | 最大更新记录数,默认 100,范围 1-15000 |
350
+ | `field_values` | 是 | RecordFieldValue[] |
351
+ | `filter_info` | 否* | RecordFilterInfo 过滤条件(与 `ref_info` 互斥) |
352
+ | `ref_info` | 否* | RefInfo 引用前置步骤的记录(与 `filter_info` 互斥) |
353
+
354
+ ### FindRecordAction
355
+
356
+ ```json
357
+ {
358
+ "table_name": "客户表",
359
+ "field_names": ["客户名称", "联系方式", "等级"],
360
+ "should_proceed_when_no_results": true,
361
+ "filter_info": { /* RecordFilterInfo */ }
362
+ }
363
+ ```
364
+
365
+ | 字段 | 必填 | 说明 |
366
+ |------|------|------|
367
+ | `table_name` | 是 | 目标数据表名 |
368
+ | `field_names` | 是 | 要检索的字段名列表,至少一个 |
369
+ | `should_proceed_when_no_results` | 否 | 无结果时是否继续后续步骤,默认 `true` |
370
+ | `filter_info` | 否* | RecordFilterInfo(与 `ref_info` 互斥) |
371
+ | `ref_info` | 否* | RefInfo(与 `filter_info` 互斥) |
372
+
373
+ ### HTTPClientAction
374
+
375
+ ```json
376
+ {
377
+ "method": "POST",
378
+ "url": [{ "value_type": "text", "value": "https://api.example.com/webhook" }],
379
+ "queries": [
380
+ { "key": "source", "value": [{ "value_type": "text", "value": "workflow" }] }
381
+ ],
382
+ "headers": [
383
+ { "key": "Content-Type", "value": [{ "value_type": "text", "value": "application/json" }] }
384
+ ],
385
+ "body_type": "raw",
386
+ "raw_body": [
387
+ { "value_type": "text", "value": "{\"record_id\":\"" },
388
+ { "value_type": "ref", "value": "$.step_1.recordId" },
389
+ { "value_type": "text", "value": "\"}" }
390
+ ],
391
+ "response_type": "json",
392
+ "response_value": "{\"success\":true,\"message\":\"data fetched successfully\"}"
393
+ }
394
+ ```
395
+
396
+ | 字段 | 必填 | 说明 |
397
+ |------|-----|------|
398
+ | `method` | 否 | 请求方法:`GET` / `POST` / `PUT` / `PATCH` / `DELETE`,默认 `POST` |
399
+ | `url` | 是 | ValueInfo[],请求 URL,支持 `text` / `ref` 拼接 |
400
+ | `queries` | 否 | KeyValue[],查询参数 |
401
+ | `headers` | 否 | KeyValue[],请求头 |
402
+ | `body_type` | 否 | 请求体类型:`none` / `raw` / `form-data` / `form-urlencoded`,默认 `raw` |
403
+ | `raw_body` | 否 | ValueInfo[],原始请求体,仅 `body_type=raw` 时使用 |
404
+ | `form_body` | 否 | KeyValue[],表单数据,仅 `body_type=form-data` 或 `body_type=form-urlencoded` 时使用 |
405
+ | `response_type` | 否 | 响应类型:`none` / `text` / `json`,默认 `json` |
406
+ | `response_value` | 否 | string,JSON 字符串形式的响应结果示例;仅当 `response_type=json` 时必填 |
407
+
408
+ `KeyValue`:
409
+
410
+ | 字段 | 类型 | 说明 |
411
+ |------|------|------|
412
+ | `key` | string | 参数名 / 请求头名 |
413
+ | `value` | ValueInfo[] | 参数值 / 请求头值,支持 `text` / `ref` |
414
+
415
+ ### Delay
416
+
417
+ ```json
418
+ { "duration": 30 }
419
+ ```
420
+
421
+ | 字段 | 必填 | 说明 |
422
+ |------|------|------|
423
+ | `duration` | 是 | 延迟时长(分钟),范围 [1, 120] |
424
+
425
+ ### LarkMessageAction
426
+
427
+ ```json
428
+ {
429
+ "receiver": [{ "value_type": "user", "value": {"id": "ou_xxxx"} }],
430
+ "send_to_everyone": false,
431
+ "title": [{ "value_type": "text", "value": "新订单通知" }],
432
+ "content": [
433
+ { "value_type": "text", "value": "客户 " },
434
+ { "value_type": "ref", "value": "$.trigger_1.fldCustomerName" },
435
+ { "value_type": "text", "value": " 创建了新订单" }
436
+ ],
437
+ "btn_list": [
438
+ { "text": "查看详情", "btn_action": "openLink", "link": [{ "value_type": "text", "value": "https://example.com" }] }
439
+ ]
440
+ }
441
+ ```
442
+
443
+ | 字段 | 必填 | 说明 |
444
+ |------|------|------|
445
+ | `receiver` | 是 | ValueInfo[] |
446
+ | `send_to_everyone` | 是 | 是否发送给所有人 |
447
+ | `title` | 否 | TextRefItem[] 消息标题 |
448
+ | `content` | 是 | TextRefItem[] 消息内容 |
449
+ | `btn_list` | 是 | 按钮列表,不需要时为空数组 |
450
+
451
+ `ButtonConfig`:
452
+
453
+ | 字段 | 类型 | 说明 |
454
+ |------|------|------|
455
+ | `text` | string | 按钮文字 |
456
+ | `btn_action` | string | `addRecord` / `setRecord` / `openLink` |
457
+ | `link` | ValueInfo[] | 跳转链接(`openLink` 时使用) |
458
+ | `table_name` | string | 操作表名(`addRecord` 时使用) |
459
+ | `record_values` | RecordFieldValue[] | 记录赋值(`addRecord` / `setRecord` 时使用) |
460
+
461
+ ### GenerateAiTextAction
462
+
463
+ ```json
464
+ {
465
+ "prompt": [
466
+ { "value_type": "text", "value": "请总结以下内容:" },
467
+ { "value_type": "ref", "value": "$.step_1.fieldxxx" }
468
+ ]
469
+ }
470
+ ```
471
+
472
+ | 字段 | 必填 | 说明 |
473
+ |------|------|------|
474
+ | `prompt` | 是 | TextRefItem[] 提示词,支持 `text` / `ref` |
475
+
476
+
477
+ ## Branch data 详细结构
478
+
479
+ ### IfElseBranch
480
+
481
+ `children.links` 包含 `if_true` 和 `if_false` 两条边,`next` 指向两个分支汇合后的后继节点。
482
+
483
+ **如果涉及到复杂的多分支场景(分支数目 >= 3时),你应该采用 SwitchBranch,而不是嵌套的 IfElseBranch**
484
+
485
+ ```json
486
+ {
487
+ "condition": {
488
+ "conjunction": "or",
489
+ "conditions": [
490
+ {
491
+ "conjunction": "and",
492
+ "conditions": [
493
+ {
494
+ "left_value": { "value_type": "ref", "value": "$.step_1.fieldxxx" },
495
+ "operator": "isGreater",
496
+ "right_value": [{ "value_type": "number", "value": 1000 }]
497
+ }
498
+ ]
499
+ }
500
+ ]
501
+ }
502
+ }
503
+ ```
504
+
505
+ | 字段 | 必填 | 说明 |
506
+ |------|------|------|
507
+ | `condition` | 是 | OrGroup 判断条件,结构为 `(A and B) or (C and D)` |
508
+
509
+ ### SwitchBranch
510
+
511
+ `children.links` 包含多个 `case` 边(`label` 建议用 `branch_1`、`branch_2`,语义写在 `desc`)。
512
+
513
+ ```json
514
+ {
515
+ "mode": "exclusive",
516
+ "no_match_action": "classifyToOther",
517
+ "child_branch_list": [
518
+ {
519
+ "name": "高优先级",
520
+ "condition": {
521
+ "conjunction": "or",
522
+ "conditions": [
523
+ {
524
+ "conjunction": "and",
525
+ "conditions": [
526
+ {
527
+ "left_value": { "value_type": "ref", "value": "$.step_1.fieldxxx" },
528
+ "operator": "is",
529
+ "right_value": [{ "value_type": "text", "value": "P0" }]
530
+ }
531
+ ]
532
+ }
533
+ ]
534
+ }
535
+ }
536
+ ]
537
+ }
538
+ ```
539
+
540
+ | 字段 | 必填 | 说明 |
541
+ |------|------|------|
542
+ | `mode` | 否 | 分支模式。`exclusive`:排他模式,仅执行一个满足条件的子分支;`parallel`:并行模式,执行所有满足条件的子分支。默认 `exclusive` |
543
+ | `no_match_action` | 否 | `mode=exclusive` 时使用,无匹配时的处理策略。`classifyToOther`:归类到其他分支;`fail`:报错终止。默认 `classifyToOther` |
544
+ | `fail_mode` | 否 | `mode=parallel` 时使用,部分分支出错时策略。`partialSuccess`:部分成功即继续;`fail`:任一失败即终止。默认 `partialSuccess` |
545
+ | `match_mode` | 否 | `mode=parallel` 时使用,所有分支不满足时策略。`noneMatchSkip`:跳过继续;`noneMatchFail`:报错终止。默认 `noneMatchSkip` |
546
+ | `child_branch_list` | 是 | BranchItem[],1-10 个条件分支 |
547
+
548
+ `BranchItem`:
549
+
550
+ | 字段 | 类型 | 说明 |
551
+ |------|------|------|
552
+ | `name` | string | 分支名称 |
553
+ | `condition` | OrGroup | 分支条件 |
554
+
555
+
556
+ ## System data 详细结构
557
+
558
+ ### Loop
559
+
560
+ `children.links` 包含 `loop_start` 边指向循环体入口,`next` 指向循环结束后的后继节点。
561
+
562
+ ```json
563
+ {
564
+ "loop_mode": "continue",
565
+ "max_loop_times": 100,
566
+ "data": [{ "value_type": "ref", "value": "$.find_record_stepIdxxx.fieldRecords" }]
567
+ }
568
+ ```
569
+
570
+ | 字段 | 必填 | 说明 |
571
+ |------|------|------|
572
+ | `data` | 是 | ValueInfo[](仅支持 `ref` 类型),循环数据源,只能填一个 |
573
+ | `loop_mode` | 否 | 单次错误时是否继续:`end`(终止)/ `continue`(继续) |
574
+ | `max_loop_times` | 否 | 最大循环次数 |
575
+
576
+ ---
577
+
578
+
579
+ ## 公共类型
580
+
581
+ ### ValueInfo
582
+
583
+ 所有值的基础类型,通过 `value_type` 区分:
584
+
585
+ | value_type | value 类型 | 说明 | 示例 |
586
+ |------------|-----------|------|------|
587
+ | `text` | string | 文本 | `"张三"` |
588
+ | `number` | number | 数字 | `100` |
589
+ | `boolean` | boolean | 布尔值 | `true` |
590
+ | `date` | string | 日期,可以是具体时间字符串,或者相对时间值 | `"2025/01/01"`、`"2025/01/01 11:00"`、`"now"`、`"now 11:00"`、`"today"`、`"today 11:00"`、`"yesterday"`、`"yesterday 11:00"`、`"lastWeek"`、`"currentMonth"`、`"lastMonth"`、`"theLastWeek"`、`"theNextWeek"`、`"theLastMonth"`、`"theNextMonth"` |
591
+ | `option` | `{ id, name }` | 选项 | `{ "id": "opt1", "name": "已完成" }` |
592
+ | `link` | `{ text, link }` | 链接(含文字和 URL), 文字和 URL 的格式可以是 ValueInfo 中的 text/ref 类型 | `{ "text": [{ "value_type": "text", "value": "查看详情" }], "link": [{ "value_type": "text", "value": "https://example.com" }] }`、`{ "text": [{ "value_type": "text", "value": "查看详情" }], "link": [{ "value_type": "ref", "value": "$.step_1.fldXXX" }] }` |
593
+ | `user` | `{ id, name }` | 用户 OpenID、名字 | `{ "id": "ou_xxxx", "name": "张三" }` |
594
+ | `group` | `{ id, name }` | 群 Chat ID、名字 | `{ "id": "oc_xxx", "name": "测试群" }` |
595
+ | `ref` | `string` | 引用前置节点输出的路径 | 参考 ref 引用变量详解 章节 |
596
+
597
+ > ⚠️ **所有涉及用户的 value 中的 id 统一使用 OpenID(`ou_xxxx` 格式)**,由 CLI 层来完成转换
598
+ > ⚠️ **所有涉及群的 value 中的 id 统一使用 ChatID(`oc_xxxx` 格式)**,由 CLI 层来完成转换
599
+
600
+ ### ref 引用变量详解
601
+
602
+ `ref` 类型是工作流中节点间数据传递的核心机制。当 `value_type` 为 `ref` 时,`value` 指向前置节点的某个输出变量。本节详细描述每个节点可供引用的输出变量定义。
603
+
604
+ #### 引用路径格式
605
+
606
+ ```
607
+ $.{stepId}
608
+ $.{stepId}.{pathId}
609
+ $.{stepId}.{pathId}.{childPathId}
610
+ $.{stepId}.{pathId}.{childPathId}.{grandChildPathId}
611
+ ```
612
+
613
+ - `{stepId}`:前置节点的 `id`(即 WorkflowStep 中的 `id` 字段)
614
+ - `{pathId}`:节点输出的路径标识符
615
+ - 支持多层下钻,如引用字段的属性:`$.step_1.fldXXX.name`
616
+
617
+ ---
618
+
619
+ #### 触发器节点输出
620
+
621
+ ##### 记录触发器(AddRecordTrigger / ChangeRecordTrigger / SetRecordTrigger / ReminderTrigger)
622
+
623
+ 这 4 个触发器的输出结构完全一致:
624
+
625
+ | pathId | 说明 | 引用示例 |
626
+ |--------|------|----------|
627
+ | `{fieldId}` | 字段id,从配置表的所有字段或者指定字段id生成,可下钻字段属性 | `$.{stepId}.{fieldId}` |
628
+ | `{fieldId}.fieldId` | 字段id属性 | `$.{stepId}.{fieldId}.fieldId` |
629
+ | `{fieldId}.fieldName` | 字段名属性 | `$.{stepId}.{fieldId}.fieldName` |
630
+ | `startTime` | 触发时间戳 | `$.{stepId}.startTime` |
631
+ | `recordId` | 记录 ID | `$.{stepId}.recordId` |
632
+ | `recordLink` | 记录链接 | `$.{stepId}.recordLink` |
633
+ | `recordCreatedUser` | 记录创建者 | `$.{stepId}.recordCreatedUser` |
634
+ | `recordCreatedTime` | 记录创建时间 | `$.{stepId}.recordCreatedTime` |
635
+ | `recordModifiedUser` | 最后修改者 | `$.{stepId}.recordModifiedUser` |
636
+ | `recordModifiedTime` | 最后修改时间 | `$.{stepId}.recordModifiedTime` |
637
+
638
+ **动态字段输出规则**:
639
+
640
+ - 读取触发器所配置的数据表的所有字段
641
+ - 每个字段生成一条输出:`pathId` = fieldId
642
+ - 若字段为关联字段,children 为关联表所有字段(单层下钻,不再递归)
643
+ - 每个字段可下钻特定的字段属性(见「字段属性下钻」)
644
+
645
+ **recordLink 的 children**:如果配置了数据表,则为该表所有视图的列表,每个视图 `{ pathId: viewId, pathName: viewName, pathType: 'string' }`。引用示例:`$.{stepId}.recordLink.{viewId}`。
646
+
647
+ ##### ButtonTrigger(按钮触发器)
648
+
649
+ `ButtonTrigger` 的输出取决于 `button_type`:
650
+
651
+ #### `button_type = buttonField`
652
+
653
+ | pathId | 说明 | 引用示例 |
654
+ |--------|------|----------|
655
+ | `{fieldId}` | 字段id,从配置表的所有字段或者指定字段id生成,可下钻字段属性 | `$.{stepId}.{fieldId}` |
656
+ | `{fieldId}.fieldId` | 字段id属性 | `$.{stepId}.{fieldId}.fieldId` |
657
+ | `{fieldId}.fieldName` | 字段名属性 | `$.{stepId}.{fieldId}.fieldName` |
658
+ | `recordId` | 记录 ID | `$.{stepId}.recordId` |
659
+ | `recordLink` | 记录链接 | `$.{stepId}.recordLink` |
660
+ | `recordCreatedUser` | 记录创建者 | `$.{stepId}.recordCreatedUser` |
661
+ | `recordModifiedUser` | 最后修改者 | `$.{stepId}.recordModifiedUser` |
662
+ | `recordModifiedTime` | 最后修改时间 | `$.{stepId}.recordModifiedTime` |
663
+ | `time` | 触发时间 | `$.{stepId}.time` |
664
+ | `user` | 触发人 | `$.{stepId}.user` |
665
+ | `buttonName` | 触发的按钮名称 | `$.{stepId}.buttonName` |
666
+
667
+ #### `button_type = buttonElement`
668
+
669
+ | pathId | 说明 | 引用示例 |
670
+ |--------|------|----------|
671
+ | `time` | 触发时间 | `$.{stepId}.time` |
672
+ | `user` | 触发人 | `$.{stepId}.user` |
673
+ | `buttonName` | 触发的按钮名称 | `$.{stepId}.buttonName` |
674
+
675
+ ##### TimerTrigger(定时触发器)
676
+
677
+ | pathId | 说明 | 引用示例 |
678
+ |--------|------|----------|
679
+ | `scheduleTime` | 定时触发时间 | `$.{stepId}.scheduleTime` |
680
+
681
+ ##### LarkMessageTrigger(飞书消息触发器)
682
+
683
+ | pathId | 说明 | 引用示例 |
684
+ |--------|------|----------|
685
+ | `Sender` | 消息发送者 | `$.{stepId}.Sender` |
686
+ | `AtUser` | 消息中被@的用户 | `$.{stepId}.AtUser` |
687
+ | `SenderGroup` | 消息所在群(仅群聊场景) | `$.{stepId}.SenderGroup` |
688
+ | `MessageSendTime` | 消息发送时间 | `$.{stepId}.MessageSendTime` |
689
+ | `MessageContent` | 消息正文 | `$.{stepId}.MessageContent` |
690
+ | `MessageType` | 消息类型标识 | `$.{stepId}.MessageType` |
691
+ | `MessageID` | 消息唯一标识 | `$.{stepId}.MessageID` |
692
+ | `MessageLink` | 消息链接(仅群聊场景) | `$.{stepId}.MessageLink` |
693
+ | `ParentID` | 回复的消息 ID | `$.{stepId}.ParentID` |
694
+ | `ThreadID` | 所在话题消息 ID | `$.{stepId}.ThreadID` |
695
+ | `Attachments` | 消息中的附件 | `$.{stepId}.Attachments` |
696
+
697
+ 条件限制:
698
+
699
+ - 若场景为单聊(`receive_scene = "Chat"`),则 `SenderGroup` 和 `MessageLink` 不可用
700
+
701
+ ---
702
+
703
+ #### 操作节点输出
704
+
705
+ ##### FindRecordAction(查找记录)
706
+
707
+ | pathId | 说明 | 引用示例|
708
+ |--------|------|-------|
709
+ | `fieldRecords` | 所有找到的记录的引用(可用于 Loop 遍历) | `$.{stepId}.fieldRecords`|
710
+ | `firstfieldsRecord` | 第一条匹配记录 | `$.{stepId}.firstfieldsRecord`|
711
+ | `firstfieldsRecord.{fieldId}` | 首条记录的字段值,可下钻字段属性 | `$.{stepId}.firstfieldsRecord.{fieldId}`|
712
+ | `firstfieldsRecord.recordId` | 记录 ID 数组 | `$.{stepId}.firstfieldsRecord.recordId`|
713
+ | `fields` | 查找到的所有记录某列值 | 不支持引用|
714
+ | `fields.{fieldId}` | 用户选择的字段 | `$.{stepId}.fields.{fieldId}`|
715
+ | `fields.{fieldId}.fieldId` | 用户选择的字段id数组 | `$.{stepId}.fields.{fieldId}.fieldId`|
716
+ | `fields.{fieldId}.fieldName` | 用户选择的字段名数组 | `$.{stepId}.fields.{fieldId}.fieldName`|
717
+ | `fields.recordId` | 记录 ID 数组 | `$.{stepId}.fields.recordId`|
718
+ | `recordNum` | 找到记录总数 | `$.{stepId}.recordNum`|
719
+
720
+ ##### AddRecordAction(新增记录)
721
+
722
+ | pathId | 说明 | 引用示例 |
723
+ |--------|------|----------|
724
+ | `{fieldId}` | 用户配置的字段值,可下钻字段属性 | `$.{stepId}.{fieldId}` |
725
+ | `{fieldId}.fieldId` | 用户配置的字段id | `$.{stepId}.{fieldId}.fieldId` |
726
+ | `{fieldId}.fieldName` | 用户配置的字段名 | `$.{stepId}.{fieldId}.fieldName` |
727
+ | `recordId` | 新增的记录 ID | `$.{stepId}.recordId` |
728
+ | `recordLink` | 新增的记录 URL | `$.{stepId}.recordLink` |
729
+
730
+ ##### SetRecordAction(更新记录)
731
+
732
+ | pathId | 说明 | 引用示例 |
733
+ |--------|------|----------|
734
+ | `{fieldId}` | 用户配置的字段值,可下钻字段属性 | `$.{stepId}.{fieldId}` |
735
+ | `{fieldId}.fieldId` | 用户配置的字段id | `$.{stepId}.{fieldId}.fieldId` |
736
+ | `{fieldId}.fieldName` | 用户配置的字段名 | `$.{stepId}.{fieldId}.fieldName` |
737
+ | `recordId` | 记录 ID 数组(因可能更新多条记录) | `$.{stepId}.recordId` |
738
+
739
+ ##### HTTPClientAction(HTTP 请求)
740
+
741
+ HTTPClientAction 的输出取决于 `response_type`:
742
+
743
+ | response_type | 是否可引用 | 输出说明 | 引用示例 |
744
+ |--------------|-----------|----------|----------|
745
+ | `none` | 否 | 无任何可引用输出 | 不支持引用 |
746
+ | `text` | 是 | 整个响应文本作为节点整体输出 | `$.{stepId}` |
747
+ | `json` | 是 | 响应体整体挂在 `body` 下,同时返回 `status_code`;仅可引用 `response_value` 中声明的字段 | `$.{stepId}.body`、`$.{stepId}.body.success`、`$.{stepId}.body.message`、`$.{stepId}.status_code` |
748
+
749
+ **补充说明**:
750
+
751
+ - 当 `response_type = none` 时,后续节点无法引用 HTTPClientAction 的任何输出
752
+ - 当 `response_type = text` 时,`$.{stepId}` 表示整个响应文本
753
+ - 当 `response_type = json` 时,`$.{stepId}.body` 表示整个 JSON body,`$.{stepId}.body.字段名` 表示 body 中某个字段
754
+ - 仅当 `response_type = json` 时,`$.{stepId}.status_code` 表示请求该 HTTP URL 后返回的 HTTP 状态码
755
+ - 仅当 `response_type = json` 时,`response_value` 必填
756
+ - 当 `response_type = json` 时,后续节点只能引用 `response_value` 中声明过的字段
757
+
758
+ **案例**:
759
+
760
+ 假设某个 `HTTPClientAction` 的配置如下:
761
+
762
+ ```json
763
+ {
764
+ "id": "step_http_1",
765
+ "type": "HTTPClientAction",
766
+ "data": {
767
+ "response_type": "json",
768
+ "response_value": "{\"success\":true,\"message\":\"ok\"}"
769
+ }
770
+ }
771
+ ```
772
+
773
+ 则后续节点仅可以引用:
774
+
775
+ - `$.step_http_1.body`
776
+ - `$.step_http_1.body.success`
777
+ - `$.step_http_1.body.message`
778
+ - `$.step_http_1.status_code`
779
+
780
+ 但**不能**引用未在 `response_value` 中声明的字段,例如:
781
+
782
+ - `$.step_http_1.body.data`
783
+ - `$.step_http_1.body.request_id`
784
+
785
+ ##### GenerateAiTextAction(AI 生成文本)
786
+
787
+ | pathId | 说明 | 引用示例 |
788
+ |--------|------|----------|
789
+ | (整体出参) | AI 生成的文本内容(不支持下钻,只能引用 `$.{stepId}`) | `$.{stepId}` |
790
+
791
+ ##### 无输出的操作节点
792
+
793
+ 以下节点不产生任何可引用的输出数据:
794
+
795
+ - **Delay**(延时等待)
796
+ - **LarkMessageAction**(发送飞书消息)
797
+
798
+ ---
799
+
800
+ #### 分支节点输出
801
+
802
+ 以下分支节点均不产生任何可引用的输出数据:
803
+
804
+ - **IfElseBranch**(条件分支)
805
+ - **SwitchBranch**(多条件分支)
806
+
807
+ ---
808
+
809
+ #### 系统节点输出
810
+
811
+ ##### Loop(循环)
812
+
813
+ | pathId | 说明 | 引用示例 |
814
+ |--------|------|----------|
815
+ | `item` | 当前循环元素 | `$.{stepId}.item` |
816
+ | `index` | 从 0 开始的循环索引 | `$.{stepId}.index` |
817
+
818
+ **`item` 的类型推断规则**(由循环数据源决定):
819
+
820
+ **场景一:遍历组合记录** — 数据源为 `record` 类型时(如 FindRecordAction 的 `fieldRecords`),`item` 类型为 `record`,可向下选择具体字段:
821
+
822
+ | 说明 | 引用示例 |
823
+ |------|----------|
824
+ | 当前遍历的记录(record) | `$.{loopStepId}.item` |
825
+ | 记录的具体字段 | `$.{loopStepId}.item.{fieldId}` |
826
+ | 从 0 开始的索引(number) | `$.{loopStepId}.index` |
827
+
828
+ **场景二:遍历字段** — 数据源为某个多值类型字段时,比如附件字段、人员字段,`item` 继承该字段的类型并可继续下钻字段属性:
829
+
830
+ | 说明 | 引用示例 |
831
+ |------|----------|
832
+ | 当前遍历的元素(类型继承数据源字段类型,例如人员字段) | `$.{loopStepId}.item` |
833
+ | 用户姓名 | `$.{loopStepId}.item.name` |
834
+ | 从 0 开始的索引(number) | `$.{loopStepId}.index` |
835
+
836
+ ---
837
+
838
+ #### 字段属性下钻
839
+
840
+ 每个字段变量都可以进一步下钻选择字段的属性。所有字段至少支持 `fieldId` 和 `fieldName` 两个基础属性,部分字段还支持额外属性:
841
+
842
+ | 字段类型 | 属性名称 | 属性 pathId | 属性 pathType | 说明 |
843
+ |----------|---------|-------------|--------------|------|
844
+ | **所有字段(基础)** | 字段 ID | `fieldId` | `string` | 字段的唯一标识 |
845
+ | | 字段名称 | `fieldName` | `string` | 字段的显示名称 |
846
+ | **人员字段**(`user` / `created_by` / `updated_by`) | 姓名 | `name` | `string` | 用户姓名 |
847
+ | **日期字段**(`datetime` / `created_at` / `updated_at`) | 时间戳 | `timestamp` | `number` | 时间戳数值 |
848
+ | **附件字段**(`attachment`) | 文件名 | `fileName` | `string` | 附件文件名 |
849
+ | | 文件类型 | `fileType` | `string` | MIME 类型 |
850
+ | | 文件大小 | `size` | `number` | 文件字节数 |
851
+ | | 文件 Token | `fileToken` | `string` | 附件 token |
852
+ | **超链接文本字段**(`text` 且 `style.type=url`) | 文本 | `text` | `string` | 链接文本部分 |
853
+ | | 链接 | `link` | `string` | 链接 URL 部分 |
854
+ | **自动编号字段**(`auto_number`) | 序号 | `sequence` | `number` | 编号的纯数字序号 |
855
+ | **关联字段**(`link`) | 字段下钻 | `{fieldId}` | - | 可下钻到关联表的字段 |
856
+
857
+ > 其他字段类型(如 `text`、`number`、`checkbox`、`select`、`location`、`formula`、`lookup` 等)仅支持 `fieldId` 和 `fieldName` 两个基础属性。
858
+
859
+ 下钻引用示例:
860
+
861
+ ```
862
+ $.{stepId}.{fieldId} → 字段值本身
863
+ $.{stepId}.{fieldId}.fieldId → 字段 ID(string)
864
+ $.{stepId}.{fieldId}.fieldName → 字段名称(string)
865
+ $.{stepId}.{fieldId}.name → 人员姓名列表(array<string>,仅人员字段)
866
+ $.{stepId}.{fieldId}.unionId → 人员 unionId 列表(array<string>,仅人员字段)
867
+ $.{stepId}.{fieldId}.timestamp → 时间戳(array<number>,仅日期字段)
868
+ $.{stepId}.{fieldId}.fileName → 文件名列表(array<string>,仅附件字段)
869
+ $.{stepId}.{fieldId}.fileToken → 文件 Token 列表(array<string>,仅附件字段)
870
+ ```
871
+
872
+ ---
873
+
874
+ #### 节点输出能力总览
875
+
876
+ | 节点 | 类型 | 有输出 | 输出特性 |
877
+ |------|------|--------|---------|
878
+ | AddRecordTrigger | 触发器 | ✅ | 动态(表字段 + 记录属性) |
879
+ | ChangeRecordTrigger | 触发器 | ✅ | 动态(表字段 + 记录属性) |
880
+ | SetRecordTrigger | 触发器 | ✅ | 动态(表字段 + 记录属性) |
881
+ | ReminderTrigger | 触发器 | ✅ | 动态(表字段 + 记录属性) |
882
+ | ButtonTrigger | 触发器 | ✅ | 动态(表字段 + 记录属性;buttonElement 仅基础触发属性) |
883
+ | TimerTrigger | 触发器 | ✅ | 静态(仅 scheduleTime) |
884
+ | LarkMessageTrigger | 触发器 | ✅ | 静态(消息属性列表) |
885
+ | FindRecordAction | 动作 | ✅ | 动态(用户选择的字段) |
886
+ | AddRecordAction | 动作 | ✅ | 动态(用户配置的字段) |
887
+ | SetRecordAction | 动作 | ✅ | 动态(用户配置的字段) |
888
+ | HTTPClientAction | 动作 | ✅ | 动态(取决于用户配置的 HTTP 响应输出) |
889
+ | GenerateAiTextAction | 动作 | ✅ | 静态(单 string) |
890
+ | Delay | 动作 | ❌ | 无输出 |
891
+ | LarkMessageAction | 动作 | ❌ | 无输出 |
892
+ | IfElseBranch | 分支 | ❌ | 无输出 |
893
+ | SwitchBranch | 分支 | ❌ | 无输出 |
894
+ | Loop | 系统 | ✅ | 动态(取决于数据源) |
895
+
896
+ ---
897
+
898
+ ### TextRefItem
899
+
900
+ 文本与引用混排,用于消息内容等动态拼接场景:
901
+
902
+ ```json
903
+ [
904
+ { "value_type": "text", "value": "客户 " },
905
+ { "value_type": "ref", "value": "$.step_1.fieldxxx" },
906
+ { "value_type": "text", "value": " 创建了新订单" }
907
+ ]
908
+ ```
909
+
910
+ ### RecordFieldValue
911
+
912
+ ```json
913
+ { "field_name": "客户名称", "value": [{ "value_type": "text", "value": "张三" }] }
914
+ ```
915
+
916
+ ### AndCondition(Trigger 过滤条件)
917
+
918
+ ```json
919
+ {
920
+ "conjunction": "and",
921
+ "conditions": [
922
+ { "field_name": "状态", "operator": "is", "value": [{ "value_type": "text", "value": "进行中" }] }
923
+ ]
924
+ }
925
+ ```
926
+
927
+ ### OrGroup(Branch 分支条件)
928
+
929
+ ```json
930
+ {
931
+ "conjunction": "or",
932
+ "conditions": [
933
+ {
934
+ "conjunction": "and",
935
+ "conditions": [
936
+ {
937
+ "left_value": { "value_type": "ref", "value": "$.step_1.fieldxxx" },
938
+ "operator": "isGreater",
939
+ "right_value": [{ "value_type": "number", "value": 1000 }]
940
+ }
941
+ ]
942
+ }
943
+ ]
944
+ }
945
+ ```
946
+
947
+ **operator 可选值:** `is` / `isNot` / `containsAny` / `doesNotContainAny` / /`containsAll`/ `isEmpty` / `isNotEmpty` / `isGreater` / `isGreaterEqual` / `isLess` / `isLessEqual`
948
+
949
+ ### RecordFilterInfo
950
+ ** 由于 conjunction 只支持 and,若需要实现 字段X 等于 A 或 B,你可以使用 containsAny
951
+ ```json
952
+ {
953
+ "conjunction": "and",
954
+ "conditions": [
955
+ { "field_name": "状态", "operator": "is", "value": [{ "value_type": "text", "value": "进行中" }] }
956
+ ]
957
+ }
958
+ ```
959
+
960
+ ### `select` 字段多值匹配
961
+
962
+ | 操作 | operator | 正确写法 |
963
+ |------|---------|---------|
964
+ | 等于单个值 | `is` | `[{"value_type": "option", "value": {"name": "L2"}}]` |
965
+ | 匹配多个值(L2 或 L3) | `containsAny` | `[{"value_type": "option", "value": {"name": "L2"}}, {"value_type": "option", "value": {"name": "L3"}}]` |
966
+
967
+ > ⚠️ 不要用多个 `is` 条件(会被当作 OR,无法实现 AND)。推荐使用 `containsAny` 操作符匹配多个值。
968
+
969
+ > ⚠️ **Select 字段条件**:`value_type` 必须为 `option`,`value` 对象可只传 `name`(如 `{"name": "L2"}`),无需提供选项 ID。
970
+
971
+ ### RefInfo
972
+
973
+ ```json
974
+ { "step_id": "step_trigger" }
975
+ ```
976
+
977
+ ---
978
+
979
+ ## 完整示例:条件分支 + 发送消息
980
+
981
+ ```json
982
+ {
983
+ "title": "新订单自动通知",
984
+ "steps": [
985
+ {
986
+ "id": "step_1",
987
+ "type": "AddRecordTrigger",
988
+ "title": "当「订单表」新增记录时触发",
989
+ "next": "step_2",
990
+ "data": {
991
+ "table_name": "订单表",
992
+ "watched_field_name": "订单编号"
993
+ }
994
+ },
995
+ {
996
+ "id": "step_2",
997
+ "type": "IfElseBranch",
998
+ "title": "判断订单金额是否大于 1000",
999
+ "children": {
1000
+ "links": [
1001
+ { "kind": "if_true", "to": "step_3" },
1002
+ { "kind": "if_false", "to": "step_4" }
1003
+ ]
1004
+ },
1005
+ "next": "step_5",
1006
+ "data": {
1007
+ "condition": {
1008
+ "conjunction": "or",
1009
+ "conditions": [{
1010
+ "conjunction": "and",
1011
+ "conditions": [{
1012
+ "left_value": { "value_type": "ref", "value": "$.step_1.fieldxxx" },
1013
+ "operator": "isGreater",
1014
+ "right_value": [{ "value_type": "number", "value": 1000 }]
1015
+ }]
1016
+ }]
1017
+ }
1018
+ }
1019
+ },
1020
+ {
1021
+ "id": "step_3",
1022
+ "type": "LarkMessageAction",
1023
+ "title": "通知主管审批大额订单",
1024
+ "next": null,
1025
+ "data": {
1026
+ "receiver": [{ "value_type": "ref", "value": "$.step_1.fieldxxx" }],
1027
+ "send_to_everyone": false,
1028
+ "title": [{ "value_type": "text", "value": "大额订单提醒" }],
1029
+ "content": [
1030
+ { "value_type": "text", "value": "新订单金额为:" },
1031
+ { "value_type": "ref", "value": "$.step_1.fieldxxx" },
1032
+ { "value_type": "text", "value": "元,请及时审批。" }
1033
+ ],
1034
+ "btn_list": []
1035
+ }
1036
+ },
1037
+ {
1038
+ "id": "step_4",
1039
+ "type": "SetRecordAction",
1040
+ "title": "自动标记小额订单为已通过",
1041
+ "next": null,
1042
+ "data": {
1043
+ "table_name": "订单表",
1044
+ "ref_info": { "step_id": "step_1" },
1045
+ "field_values": [
1046
+ { "field_name": "审批状态", "value": [{ "value_type": "text", "value": "已通过" }] }
1047
+ ]
1048
+ }
1049
+ },
1050
+ {
1051
+ "id": "step_5",
1052
+ "type": "GenerateAiTextAction",
1053
+ "title": "AI 生成订单处理日报",
1054
+ "next": null,
1055
+ "data": {
1056
+ "prompt": [
1057
+ { "value_type": "text", "value": "请根据以下订单信息生成一份简要的处理日报:" },
1058
+ { "value_type": "ref", "value": "$.step_1.fieldxxx" }
1059
+ ]
1060
+ }
1061
+ }
1062
+ ]
1063
+ }
1064
+ ```
1065
+
1066
+ ---
1067
+
1068
+ ## 参考
1069
+
1070
+ - [lark-base-workflow-guide.md](lark-base-workflow-guide.md) — 完整示例和构造技巧
1071
+ - 创建/更新时外层只承载 workflow 元信息,核心校验对象是 `steps`;列表只用于拿 workflow ID 和启停状态