@sokeai/cli 1.0.75 → 1.0.77

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 (124) hide show
  1. package/README.md +7 -7
  2. package/package.json +1 -1
  3. package/scripts/build-binaries.sh +1 -1
  4. package/scripts/e2e-test.sh +75 -3
  5. package/skills/SKILL.md +18 -1
  6. package/skills/soke-ai-coach-director/CHANGELOG.md +203 -0
  7. package/skills/soke-ai-coach-director/README.md +123 -0
  8. package/skills/soke-ai-coach-director/SKILL.md +221 -0
  9. package/skills/soke-ai-coach-director/coaching/knowledge-packager/knowledge-packager.md +91 -0
  10. package/skills/soke-ai-coach-director/coaching/prompt-engineer/parts/part2-roles.md +97 -0
  11. package/skills/{ai-coach-director → soke-ai-coach-director}/coaching/prompt-engineer/parts/part3-flow.md +3 -3
  12. package/skills/soke-ai-coach-director/coaching/prompt-engineer/prompt-engineer.md +76 -0
  13. package/skills/{ai-coach-director → soke-ai-coach-director}/coaching/prompt-optimizer/prompt-optimizer.md +77 -58
  14. package/skills/{ai-coach-director → soke-ai-coach-director}/platform/adapters/workbuddy.md +2 -3
  15. package/skills/soke-ai-coach-director/platform/interaction.md +103 -0
  16. package/skills/{ai-coach-director → soke-ai-coach-director}/platform/publish-gate.md +3 -3
  17. package/skills/{ai-coach-director → soke-ai-coach-director}/platform/resource-finalizer.md +10 -35
  18. package/skills/{ai-coach-director → soke-ai-coach-director}/platform/soke-ai-training/soke-ai-training.md +33 -3
  19. package/skills/soke-ai-coach-director/platform/sync-engine.md +39 -0
  20. package/skills/{ai-coach-director → soke-ai-coach-director}/references/change-log-partwise-refactor.md +1 -1
  21. package/skills/soke-ai-coach-director/references/env-check.md +146 -0
  22. package/skills/soke-ai-coach-director/references/exec-common.md +126 -0
  23. package/skills/soke-ai-coach-director/references/exec-handbook.md +621 -0
  24. package/skills/soke-ai-coach-director/references/exec-part1.md +86 -0
  25. package/skills/soke-ai-coach-director/references/exec-part2.md +145 -0
  26. package/skills/soke-ai-coach-director/references/exec-part3.md +91 -0
  27. package/skills/soke-ai-coach-director/references/exec-part4.md +187 -0
  28. package/skills/soke-ai-coach-director/references/gate-check-matrix.md +46 -0
  29. package/skills/soke-ai-coach-director/references/micro-tune-labels.md +30 -0
  30. package/skills/soke-ai-coach-director/references/platform-api-pitfalls.md +49 -0
  31. package/skills/soke-ai-coach-director/references/role-resource-matching.md +45 -0
  32. package/skills/{ai-coach-director → soke-ai-coach-director}/references/self-improvement-examples.md +2 -0
  33. package/skills/soke-ai-coach-director/references/self-learning-engine.md +489 -0
  34. package/skills/soke-ai-coach-director/references/subs/part1/SOP.md +17 -0
  35. package/skills/soke-ai-coach-director/references/subs/part2/SOP.md +34 -0
  36. package/skills/soke-ai-coach-director/references/subs/part3/SOP.md +27 -0
  37. package/skills/soke-ai-coach-director/references/subs/part4/SOP.md +31 -0
  38. package/skills/soke-ai-coach-director/references/subs/publish/SOP.md +81 -0
  39. package/skills/soke-ai-coach-director/references/subs/tune/SOP.md +92 -0
  40. package/skills/soke-ai-coach-director/references/verified-cli-cheatsheet.md +56 -0
  41. package/skills/{ai-coach-director → soke-ai-coach-director}/scripts/activator.sh +0 -0
  42. package/skills/{ai-coach-director → soke-ai-coach-director}/scripts/error-detector.sh +0 -0
  43. package/skills/{ai-coach-director → soke-ai-coach-director}/scripts/extract-skill.sh +0 -0
  44. package/skills/soke-ai-coach-director/scripts/gate_check.py +112 -0
  45. package/skills/soke-ai-coach-director/scripts/validate_operations.py +403 -0
  46. package/skills/soke-certificate/SKILL.md +717 -0
  47. package/skills/soke-course/README.md +12 -2
  48. package/skills/soke-course/SKILL.md +12 -10
  49. package/skills/soke-course/references/course-list-courses.md +49 -84
  50. package/skills/soke-course/references/intent-cases.md +8 -8
  51. package/skills/soke-course/references/sop-full-workflow.md +11 -6
  52. package/skills/soke-course/references/sop-publish-check.md +3 -1
  53. package/skills/soke-course/references/subs/publish/SOP.md +34 -4
  54. package/skills/soke-course/references/subs/query/SOP.md +9 -7
  55. package/skills/soke-course/references/subs/settings/SOP.md +87 -25
  56. package/skills/soke-exam-question-pool/SKILL.md +80 -112
  57. package/skills/soke-task/SKILL.md +32 -10
  58. package/skills/soke-training-demand/SKILL.md +150 -43
  59. package/skills/ai-coach-director/SKILL.md +0 -1563
  60. package/skills/ai-coach-director/coaching/prompt-engineer/parts/part2-roles.md +0 -317
  61. package/skills/ai-coach-director/coaching/prompt-engineer/prompt-engineer.md +0 -244
  62. package/skills/ai-coach-director/platform/interaction.md +0 -315
  63. package/skills/ai-coach-director/platform/sync-engine.md +0 -1101
  64. package/skills/ai-coach-director/references/cases/create//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277_/346/240/207/345/207/206/347/237/245/350/257/206/345/272/223.md +0 -199
  65. package/skills/ai-coach-director/references/cases/create//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277/347/237/245/350/257/206/345/272/223.md +0 -388
  66. package/skills/ai-coach-director/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204/tuv-knowledge-base.md +0 -125
  67. package/skills/ai-coach-director/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204/tuv-p03-first-call-scenario-prompt.md +0 -428
  68. package/skills/ai-coach-director/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204P03/351/231/252/347/273/203/346/211/247/350/241/214/346/226/271/346/241/210_20260610.md +0 -225
  69. package/skills/ai-coach-director/references/cases/create//346/237/220/345/234/260/346/226/271/351/223/266/350/241/214//346/237/220/345/234/260/346/226/271/351/223/266/350/241/214/345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277AI/351/231/252/347/273/203/346/265/213/350/257/225/347/224/250/344/276/213/345/220/210/351/233/206.md +0 -525
  70. package/skills/ai-coach-director/references/cases/create//347/211/251/346/265/201/350/241/214/344/270/232//347/211/251/346/265/201/350/241/214/344/270/232-/345/210/235/346/254/241/346/213/234/350/256/277/351/246/231/347/262/276/351/246/231/346/226/231/345/256/242/346/210/267.md +0 -146
  71. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203_/346/240/207/346/235/2061_/346/226/260/345/223/201/346/216/250/351/224/200_20260701.md +0 -230
  72. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203_/346/240/207/346/235/2062_/345/202/254/350/217/234/345/256/211/346/212/232_20260701.md +0 -257
  73. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203_/346/240/207/346/235/2063_/345/267/256/350/257/204/345/233/236/350/256/277_20260701.md +0 -259
  74. package/skills/ai-coach-director/references/cases/create//351/205/222/345/272/227/351/244/220/351/245/256//351/205/222/345/272/227/351/244/220/351/245/256AI/351/231/252/347/273/203/345/234/272/346/231/257/346/226/271/346/241/210_20260701.md +0 -452
  75. package/skills/ai-coach-director/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/345/256/242/346/210/267/347/241/256/350/256/244/345/217/215/351/246/210/350/241/250.md +0 -133
  76. package/skills/ai-coach-director/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215_v1.md +0 -333
  77. package/skills/ai-coach-director/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215_v2_Part1-Part5.md +0 -649
  78. package/skills/ai-coach-director/references/env-check.md +0 -167
  79. package/skills/ai-coach-director/references/platform-api-pitfalls.md +0 -232
  80. package/skills/ai-coach-director/references/role-resource-matching.md +0 -349
  81. package/skills/ai-coach-director/references/verified-cli-cheatsheet.md +0 -203
  82. /package/skills/{ai-coach-director → soke-ai-coach-director}/assets/ERRORS-TEMPLATE.md +0 -0
  83. /package/skills/{ai-coach-director → soke-ai-coach-director}/assets/FEATURE_REQUESTS-TEMPLATE.md +0 -0
  84. /package/skills/{ai-coach-director → soke-ai-coach-director}/assets/LEARNINGS-TEMPLATE.md +0 -0
  85. /package/skills/{ai-coach-director → soke-ai-coach-director}/assets/SKILL-TEMPLATE.md +0 -0
  86. /package/skills/{ai-coach-director → soke-ai-coach-director}/coaching/prompt-engineer/parts/part1-basic.md +0 -0
  87. /package/skills/{ai-coach-director → soke-ai-coach-director}/coaching/prompt-engineer/parts/part4-scoring.md +0 -0
  88. /package/skills/{ai-coach-director → soke-ai-coach-director}/coaching/prompt-engineer/parts/part5-constraints.md +0 -0
  89. /package/skills/{ai-coach-director → soke-ai-coach-director}/coaching/role-profiler/role-profiler.md +0 -0
  90. /package/skills/{ai-coach-director → soke-ai-coach-director}/platform/adapters/README.md +0 -0
  91. /package/skills/{ai-coach-director → soke-ai-coach-director}/platform/adapters/qclaw.md +0 -0
  92. /package/skills/{ai-coach-director → soke-ai-coach-director}/platform/adapters/wukong.md +0 -0
  93. /package/skills/{ai-coach-director → soke-ai-coach-director}/platform/adapters/zework.md +0 -0
  94. /package/skills/{ai-coach-director → soke-ai-coach-director}/platform/api-fallback.md +0 -0
  95. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/345/256/242/346/210/267/350/247/222/350/211/262/346/250/241/346/235/277/345/272/223.md" +0 -0
  96. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203Bad Case/346/240/267/346/234/254/345/272/223.md" +0 -0
  97. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/345/210/233/345/273/272/351/227/256/351/242/230/345/272/223.md" +0 -0
  98. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/345/234/272/346/231/257/345/210/206/347/261/273/345/272/223.md" +0 -0
  99. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/345/256/242/346/210/267/346/235/220/346/226/231/346/270/205/345/215/225/344/270/216/350/256/277/350/260/210/351/242/230/345/272/223.md" +0 -0
  100. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/345/276/256/350/260/203/351/227/256/351/242/230/345/272/223.md" +0 -0
  101. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/346/212/200/346/234/257/350/276/271/347/225/214/344/270/216/346/216/222/351/232/234/345/272/223.md" +0 -0
  102. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215/346/250/241/345/235/227/345/272/223.md" +0 -0
  103. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/346/225/260/346/215/256/346/214/207/346/240/207/344/270/216/347/234/213/346/235/277/345/217/243/345/276/204/345/272/223.md" +0 -0
  104. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/346/265/213/350/257/225/347/224/250/344/276/213/345/272/223.md" +0 -0
  105. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/350/257/204/345/210/206/346/240/207/345/207/206/347/273/204/344/273/266/345/272/223.md" +0 -0
  106. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/231/252/347/273/203/351/241/271/347/233/256/346/241/210/344/276/213/345/244/215/347/233/230/345/272/223.md" +0 -0
  107. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/AI/351/241/276/345/256/242/350/247/222/350/211/262/346/250/241/346/213/237_GoodCase_BadCase_20260701.md" +0 -0
  108. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/create//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/224/265/350/257/235/347/272/246/350/256/277//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/345/256/242/346/210/267/346/235/220/346/226/231/346/261/207/346/200/273_2026-05-19_1341.md" +0 -0
  109. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/create//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267/347/237/245/350/257/206/345/272/223/347/224/237/346/210/220_20260615.md" +0 -0
  110. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/create//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267//346/226/260/350/203/275/346/272/220/350/275/246/344/270/273/350/264/267/351/231/252/347/273/203/346/217/220/347/244/272/350/257/215/347/224/237/346/210/220_20260615.md" +0 -0
  111. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/create//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204//346/237/220/345/233/275/351/231/205/346/243/200/346/265/213/346/234/272/346/236/204/351/231/252/347/273/203/346/211/247/350/241/214/346/226/271/346/241/210/344/272/244/344/273/230/350/256/260/345/275/225_20260610.md" +0 -0
  112. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/create//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206//351/231/214/346/213/234/344/277/241/346/201/257/346/224/266/351/233/206_/346/217/220/347/244/272/350/257/215/346/220/255/345/273/272_20260622.md" +0 -0
  113. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_V1.1_20260616.md" +0 -0
  114. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_V1.2_20260616.md" +0 -0
  115. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215_/345/216/213/347/274/251/347/211/210_V2.0_20260616.md" +0 -0
  116. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/347/263/273/345/210/227//344/274/201/344/270/232/345/256/266/347/216/213/346/200/273/346/217/220/347/244/272/350/257/215/344/274/230/345/214/226_20260616.md" +0 -0
  117. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277AI/351/231/252/347/273/203/347/263/273/347/273/237_/346/265/213/350/257/225/345/217/215/351/246/210/346/261/207/346/200/273_2026-06-01.md" +0 -0
  118. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277KYC/344/277/241/344/273/273/345/200/274/347/246/201/344/273/244_2026-06-09_0932.md" +0 -0
  119. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277KYC/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v2_20260608.md" +0 -0
  120. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v1.1.md" +0 -0
  121. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215_/344/274/230/345/214/226/347/211/210_v1.2.md" +0 -0
  122. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases/micro-tune//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/347/263/273/345/210/227//345/206/234/346/210/267/345/274/240/350/200/201/346/235/277/346/217/220/347/244/272/350/257/215/344/274/230/345/214/226_V2_/350/257/212/346/226/255/344/272/244/344/273/230_20260609.md" +0 -0
  123. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases//345/233/233/345/244/247/345/234/272/346/231/257_GoodCase_BadCase_20260701.md" +0 -0
  124. /package/skills/{ai-coach-director → soke-ai-coach-director}/references/cases//346/241/210/344/276/213/345/272/223/350/241/245/345/205/205_2026-06-24.md" +0 -0
@@ -0,0 +1,717 @@
1
+ ---
2
+ name: soke-certificate
3
+ summary: 证书管理查询
4
+ version: 1.0.0
5
+ description: "证书管理查询:查询证书列表、证书分类、证书获得人员。当用户需要查看证书模板/证书列表、筛选已发布证书、获取证书 UUID 或查询证书发放人员时使用。 | Certificate management query: list certificates, certificate categories, and certificate users. Use when users need certificate templates/lists, published certificate filtering, certificate UUIDs, or issued certificate users."
6
+ metadata:
7
+ requires:
8
+ bins: ["soke-cli"]
9
+ cliHelp: "soke-cli certificate --help"
10
+ ---
11
+
12
+ **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../soke-shared/SKILL.md`](../soke-shared/SKILL.md),其中包含认证、配置、权限处理**
13
+
14
+ ## 核心概念
15
+
16
+ - **Certificate(证书)**: 企业后台配置的证书模板或证书资源,通过 `uuid` 标识
17
+ - **Category(证书分类)**: 证书分类,通过 `category_id` / `uuid` 标识
18
+ - **CertificateUser(证书获得人员)**: 已获得某个证书的学员记录
19
+
20
+ ## Shortcuts(推荐优先使用)
21
+
22
+ | Shortcut | 说明 |
23
+ |----------|------|
24
+ | [`+templates`](#templates) | 查询证书内置模板列表 |
25
+ | [`+list`](#list) | 查询证书列表 |
26
+ | [`+category`](#category) | 查询证书分类 |
27
+ | [`+create`](#create) | 创建证书 |
28
+ | [`+get`](#get) | 获取证书详情 |
29
+ | [`+users`](#users) | 查询证书用户获取记录 |
30
+ | [`+award`](#award) | 手动颁发证书 |
31
+ | [`+cancel-user`](#cancel-user) | 取消学员证书 |
32
+ | [`+check-linked`](#check-linked) | 查询证书模块关联 |
33
+ | [`+coordinate`](#coordinate) | 设置证书坐标 |
34
+ | [`+update`](#update) | 更新证书数据、发布或关闭证书 |
35
+ | [`+delete`](#delete) | 删除证书 |
36
+
37
+ ---
38
+
39
+ ## 命令详解
40
+
41
+ ### +templates
42
+
43
+ 查询证书内置模板列表。
44
+
45
+ **命令格式**:
46
+ ```bash
47
+ soke-cli certificate +templates [--format json|yaml|table]
48
+ ```
49
+
50
+ **返回字段**(表格显示关键字段):
51
+ - `name`: 模板名称
52
+ - `url`: 模板图片 URL
53
+ - `path`: 模板文件路径
54
+
55
+ **示例**:
56
+ ```bash
57
+ soke-cli certificate +templates
58
+
59
+ # 查看完整返回
60
+ soke-cli certificate +templates --format json
61
+ ```
62
+
63
+ **接口**: `GET /skills/certificate/template`
64
+
65
+ ---
66
+
67
+ ### +list
68
+
69
+ 查询证书列表,支持按状态筛选。
70
+
71
+ **命令格式**:
72
+ ```bash
73
+ soke-cli certificate +list \
74
+ [--page <page>] \
75
+ [--limit <limit>] \
76
+ [--status <status>] \
77
+ [--keyword <keyword>] \
78
+ [--format json|yaml|table]
79
+ ```
80
+
81
+ **参数说明**:
82
+ - `--page`: 页码,默认 `1`
83
+ - `--limit`: 每页条数,默认 `10`
84
+ - `--status`: 证书状态,可选;`0` 未发布,`1` 已发布,`2` 已关闭
85
+ - `--keyword`: 关键词,模糊查询证书标题/编码
86
+
87
+ **返回字段**(表格显示关键字段):
88
+ - `uuid`: 证书 UUID
89
+ - `title`: 证书标题
90
+ - `status`: 证书状态
91
+ - `code`: 证书编号
92
+ - `type`: 证书类型
93
+ - `category_title`: 分类名称
94
+ - `create_time`: 创建时间
95
+ - `update_time`: 更新时间
96
+
97
+ **示例**:
98
+ ```bash
99
+ # 查询已发布证书
100
+ soke-cli certificate +list --page 1 --limit 10 --status 1
101
+
102
+ # 模糊查询证书
103
+ soke-cli certificate +list --keyword "普通证书" --page 1 --limit 10
104
+
105
+ # 查询全部证书并输出完整 JSON
106
+ soke-cli certificate +list --page 1 --limit 20 --format json
107
+ ```
108
+ ---
109
+
110
+ ### +create
111
+
112
+ 创建证书。通常先通过 `+templates` 获取模板 `url/path`,再通过 `+category` 获取分类 UUID。
113
+
114
+ **命令格式**:
115
+ ```bash
116
+ soke-cli certificate +create \
117
+ --title <title> \
118
+ --code <code> \
119
+ --image <template_url> \
120
+ --target-path <template_path> \
121
+ --category-id <category_uuid> \
122
+ [--category-title <title>] \
123
+ [--path <uuid1,uuid2>] \
124
+ [--status <0|1|2>] \
125
+ [--description <text>] \
126
+ [--custom-content <text>] \
127
+ [--serial-number <number>] \
128
+ [--is-expiration <0|1>] \
129
+ [--expiration-day <days>] \
130
+ [--is-expiration-remind <0|1>] \
131
+ [--type <type>] \
132
+ [--advance-day <days>] \
133
+ [--is-student <0|1>] \
134
+ [--format json|yaml|table]
135
+ ```
136
+
137
+ **核心参数**:
138
+ - `--title`: 证书标题,必填
139
+ - `--code`: 证书编号,必填;必须唯一,只能由字母、数字、下划线组成,不超过 20 位
140
+ - `--image`: 证书图片 URL,必填;可以来自图片库图片,也可以来自 `+templates` 返回的内置模板 URL
141
+ - `--target-path`: 证书图片 OSS 路径,必填;例如 `dingfc5d942826fce9d9/public/image/certificate/certificate1.png`
142
+ - `--category-id`: 分类 UUID,必填,来自 `+category`
143
+ - `--path`: 分类路径 UUID 列表;不传时默认使用 `--category-id`
144
+ - `--custom-content`: 自定义内容;不传时默认使用 `--description`
145
+ - `--serial-number`: 流水号位数,系统会自动生成流水号并作为证书编号尾数;建议位数大于系统学员数位数,否则可能造成证书编号重复
146
+
147
+ **常用默认值**:
148
+ - `--status`: 默认 `0`
149
+ - `--serial-number`: 默认 `6`
150
+ - `--is-expiration`: 默认 `0`
151
+ - `--expiration-day`: 默认 `0`
152
+ - `--is-expiration-remind`: 默认 `0`
153
+ - `--type`: 默认 `1`
154
+ - `--advance-day`: 默认 `1`
155
+ - `--is-student`: 默认 `1`
156
+
157
+ **返回字段**(表格显示关键字段):
158
+ - `uuid`: 新证书 UUID
159
+ - `title`: 证书标题
160
+ - `status`: 证书状态
161
+ - `code`: 证书编号
162
+ - `serial_number`: 流水号位数
163
+ - `is_expiration`: 是否按有效期过期
164
+ - `expiration_day`: 有效天数
165
+ - `create_time`: 创建时间
166
+ - `create_user_name`: 创建人
167
+
168
+ **示例**:
169
+ ```bash
170
+ soke-cli certificate +create \
171
+ --title "111" \
172
+ --code "2343242345546565645" \
173
+ --image "https://newsokecdn.soke.cn/dingfc5d942826fce9d9/public/image/certificate/certificate1.png" \
174
+ --target-path "dingfc5d942826fce9d9/public/image/certificate/certificate1.png" \
175
+ --category-id "704E6B75-F4B3-4961-AEE4-D8C9FCC2D7FC" \
176
+ --status 0 \
177
+ --description "测试证书" \
178
+ --custom-content "测试证书" \
179
+ --serial-number 6 \
180
+ --is-expiration 1 \
181
+ --expiration-day 30 \
182
+ --is-expiration-remind 0 \
183
+ --type 1 \
184
+ --format json
185
+ ```
186
+ ---
187
+
188
+ ### +category
189
+
190
+ 查询证书分类列表,支持按分类名称模糊搜索。
191
+
192
+ **命令格式**:
193
+ ```bash
194
+ soke-cli certificate +category \
195
+ [--keyword <keyword>] \
196
+ [--format json|yaml|table]
197
+ ```
198
+
199
+ **参数说明**:
200
+ - `--keyword`: 关键词,模糊查询证书分类名称
201
+
202
+ **返回字段**(表格显示关键字段):
203
+ - `uuid`: 分类 UUID
204
+ - `title`: 分类名称
205
+ - `parent_id`: 父分类 ID
206
+ - `weight`: 排序权重
207
+ - `has_children`: 是否有子分类
208
+ - `create_dept_user_name`: 创建人
209
+ - `create_time`: 创建时间
210
+
211
+ **示例**:
212
+ ```bash
213
+ # 按关键词查询证书分类
214
+ soke-cli certificate +category --keyword "添加编号"
215
+
216
+ # 查询全部证书分类并输出完整 JSON
217
+ soke-cli certificate +category --format json
218
+ ```
219
+ ---
220
+
221
+ ### +get
222
+
223
+ 获取证书详情。
224
+
225
+ **命令格式**:
226
+ ```bash
227
+ soke-cli certificate +get \
228
+ --certificate-id <certificate_uuid> \
229
+ [--format json|yaml|table]
230
+ ```
231
+
232
+ **参数说明**:
233
+ - `--certificate-id`: 证书 UUID,通常来自 `certificate +list` 返回的 `data.list[].uuid`
234
+
235
+ **返回字段**(表格显示关键字段):
236
+ - `uuid`: 证书 UUID
237
+ - `title`: 证书标题
238
+ - `status`: 证书状态
239
+ - `code`: 证书编号
240
+ - `type`: 证书类型
241
+ - `target_point`: 目标学分/学时
242
+ - `category_title`: 分类名称
243
+ - `expire_time`: 过期时间
244
+ - `create_time`: 创建时间
245
+ - `update_time`: 更新时间
246
+
247
+ **示例**:
248
+ ```bash
249
+ soke-cli certificate +get --certificate-id DAACD37D-1B72-4CE4-B8D0-12C7F4DAA4C3
250
+
251
+ # 查看完整 info 和 categoryInfo
252
+ soke-cli certificate +get --certificate-id DAACD37D-1B72-4CE4-B8D0-12C7F4DAA4C3 --format json
253
+ ```
254
+ ---
255
+
256
+ ### +users
257
+
258
+ 查询证书用户获取记录,支持按证书、关键词、状态分页筛选。
259
+
260
+ **命令格式**:
261
+ ```bash
262
+ soke-cli certificate +users \
263
+ --certificate-id <certificate_uuid> \
264
+ [--keyword <keyword>] \
265
+ [--page <page>] \
266
+ [--limit <limit>] \
267
+ [--status <status>] \
268
+ [--format json|yaml|table]
269
+ ```
270
+
271
+ **参数说明**:
272
+ - `--certificate-id`: 证书 UUID,必填
273
+ - `--keyword`: 关键词,模糊查询用户姓名/工号
274
+ - `--page`: 页码,默认 `1`
275
+ - `--limit`: 每页条数,默认 `10`
276
+ - `--status`: 获取记录状态筛选,默认 `all`
277
+
278
+ **返回字段**(表格显示关键字段):
279
+ - `uuid`: 证书获取记录 UUID
280
+ - `dept_user_id`: 部门用户 ID
281
+ - `dept_user_name`: 学员姓名
282
+ - `job_number`: 工号
283
+ - `certificate_title`: 证书名称
284
+ - `certificate_num`: 证书编号
285
+ - `module`: 来源模块
286
+ - `status`: 状态
287
+ - `award_time`: 颁发时间
288
+ - `expire_time`: 证书过期时间
289
+
290
+ **示例**:
291
+ ```bash
292
+ # 查询某证书下的用户获取记录
293
+ soke-cli certificate +users --certificate-id 8200D7C4-6DD1-4F09-BC9B-940512A7E7C4 --page 1 --limit 10 --status all
294
+
295
+ # 按用户关键词筛选
296
+ soke-cli certificate +users --certificate-id 8200D7C4-6DD1-4F09-BC9B-940512A7E7C4 --keyword "武玲"
297
+
298
+ # 查看完整字段
299
+ soke-cli certificate +users --certificate-id 8200D7C4-6DD1-4F09-BC9B-940512A7E7C4 --format json
300
+ ```
301
+ ---
302
+
303
+ ### +award
304
+
305
+ 手动给用户颁发证书。`user_list` 需要使用部门用户列表中的用户对象。
306
+
307
+ **命令格式**:
308
+ ```bash
309
+ soke-cli certificate +award \
310
+ --certificate-id <certificate_uuid> \
311
+ --certificate-title <title> \
312
+ --certificate-num <certificate_num> \
313
+ --certificate-image <image_url> \
314
+ --user-list-json '<user_array_json>' \
315
+ [--lang zh] \
316
+ [--utcoffset -28800] \
317
+ [--format json|yaml|table]
318
+ ```
319
+
320
+ **参数说明**:
321
+ - `--certificate-id`: 证书 UUID,通常来自 `certificate +list`
322
+ - `--certificate-title`: 证书标题
323
+ - `--certificate-num`: 证书编号
324
+ - `--certificate-image`: 证书图片 URL
325
+ - `--user-list-json`: 部门用户对象数组 JSON,来自 `contact +list-department-users`
326
+ - `--lang`: 语言,默认 `zh`
327
+ - `--utcoffset`: 时区偏移,默认 `-28800`
328
+
329
+ **user-list-json 示例字段**:
330
+ - `dept_id`: 部门 ID
331
+ - `user_id`: 用户 ID
332
+ - `show_name`: 展示姓名
333
+ - `dept_user_id`: 部门用户 ID
334
+ - `dept_user_name`: 部门用户姓名
335
+ - `avatar_color`: 头像颜色
336
+ - `avatar`: 头像
337
+ - `job_number`: 工号
338
+ - `position`: 职位
339
+
340
+ **示例**:
341
+ ```bash
342
+ # 先查询部门用户
343
+ soke-cli contact +list-department-users --dept-id -999 --page 1 --page-size 100 --format json
344
+
345
+ # 使用部门用户对象数组颁发证书
346
+ soke-cli certificate +award \
347
+ --certificate-id CE459727-7895-4F90-9F68-FEEB532BC5EA \
348
+ --certificate-title "普通证书批量导入测试1111" \
349
+ --certificate-num "15678765432123456787" \
350
+ --certificate-image "https://newsokecdn.soke.cn/dingfc5d942826fce9d9/public/image/certificate/certificate2.gif" \
351
+ --user-list-json '[{"dept_id":-999,"user_id":"92B5B989-A708-477A-8ACF-4222C7137CF5","show_name":"钰欣","dept_user_id":"SOKE0088-5840-423E-B205-0E3CC6D877F1","dept_user_name":"钰欣","avatar_color":"#4DA9EB","avatar":"","job_number":"","position":""}]'
352
+ ```
353
+
354
+ **接口**: `POST /skills/certificate/user/create?lang=zh&utcoffset=-28800`
355
+
356
+ ---
357
+
358
+ ### +cancel-user
359
+
360
+ 取消学员证书。路径里的 UUID 是 `certificate +users` 返回的证书获取记录 `uuid`,不是证书 UUID。
361
+
362
+ **命令格式**:
363
+ ```bash
364
+ soke-cli certificate +cancel-user \
365
+ --certificate-user-id <certificate_user_uuid> \
366
+ --content <reason> \
367
+ [--format json|yaml|table]
368
+ ```
369
+
370
+ **参数说明**:
371
+ - `--certificate-user-id`: 证书获取记录 UUID,来自 `certificate +users` 返回的 `data.list[].uuid`
372
+ - `--content`: 取消理由
373
+
374
+ **返回字段**(表格显示关键字段):
375
+ - `status`: 更新后的状态
376
+ - `is_delete`: 是否删除
377
+ - `cancel_message`: 取消原因
378
+ - `update_time`: 更新时间
379
+ - `update_user_name`: 更新人
380
+ - `certificate_image`: 证书图片
381
+
382
+ **示例**:
383
+ ```bash
384
+ # 先查询证书用户获取记录,拿到记录 uuid
385
+ soke-cli certificate +users --certificate-id 8200D7C4-6DD1-4F09-BC9B-940512A7E7C4 --format json
386
+
387
+ # 取消学员证书
388
+ soke-cli certificate +cancel-user \
389
+ --certificate-user-id 47C64244-E402-4CD9-84FD-406E7967BE33 \
390
+ --content "这是理由"
391
+ ```
392
+
393
+ **接口**: `PUT /skills/certificate/user/update/{uuid}`
394
+
395
+ ---
396
+
397
+ ### +check-linked
398
+
399
+ 查询证书是否被课程、考试、学习地图、培训或学习阶段关联。
400
+
401
+ **命令格式**:
402
+ ```bash
403
+ soke-cli certificate +check-linked \
404
+ --certificate-id <certificate_uuid> \
405
+ [--format json|yaml|table]
406
+ ```
407
+
408
+ **参数说明**:
409
+ - `--certificate-id`: 证书 UUID,通常来自 `certificate +list` 返回的 `data.list[].uuid`
410
+
411
+ **返回字段**(表格显示关键字段):
412
+ - `module`: 模块标识
413
+ - `module_name`: 模块名称
414
+ - `title`: 关联资源标题
415
+ - `title_num`: 关联资源数量
416
+
417
+ **示例**:
418
+ ```bash
419
+ soke-cli certificate +check-linked --certificate-id 8200D7C4-6DD1-4F09-BC9B-940512A7E7C4
420
+ ```
421
+
422
+ ---
423
+
424
+ ### +coordinate
425
+
426
+ 设置证书上的用户名、发证时间、到期时间、编号、自定义内容、积分、部门等字段坐标和样式。
427
+
428
+ **命令格式**:
429
+ ```bash
430
+ soke-cli certificate +coordinate \
431
+ --certificate-id <certificate_uuid> \
432
+ [--user-name-left <px>] \
433
+ [--user-name-top <px>] \
434
+ [--user-name-font-size <px>] \
435
+ [--user-name-color <color>] \
436
+ [--date-time-left <px>] \
437
+ [--date-time-top <px>] \
438
+ [--date-time-font-size <px>] \
439
+ [--date-time-color <color>] \
440
+ [--expire-time-left <px>] \
441
+ [--expire-time-top <px>] \
442
+ [--expire-time-font-size <px>] \
443
+ [--expire-time-color <color>] \
444
+ [--cert-code-left <px>] \
445
+ [--cert-code-top <px>] \
446
+ [--cert-code-font-size <px>] \
447
+ [--cert-code-color <color>] \
448
+ [--customize-left <px>] \
449
+ [--customize-top <px>] \
450
+ [--customize-font-size <px>] \
451
+ [--customize-color <color>] \
452
+ [--point-left <px>] \
453
+ [--point-top <px>] \
454
+ [--point-font-size <px>] \
455
+ [--point-color <color>] \
456
+ [--dept-names-left <px>] \
457
+ [--dept-names-top <px>] \
458
+ [--dept-names-font-size <px>] \
459
+ [--dept-names-color <color>] \
460
+ [--width <px>] \
461
+ [--height <px>] \
462
+ [--dept-show <0|1>] \
463
+ [--format json|yaml|table]
464
+ ```
465
+
466
+ **参数说明**:
467
+ - `--certificate-id`: 证书 UUID,通常来自 `certificate +list` 返回的 `data.list[].uuid`
468
+ - `--user-name-left/top/font-size/color`: 用户名距离左边框、顶部的像素位置,以及文字大小和颜色
469
+ - `--date-time-left/top/font-size/color`: 发证时间距离左边框、顶部的像素位置,以及文字大小和颜色
470
+ - `--expire-time-left/top/font-size/color`: 到期时间距离左边框、顶部的像素位置,以及文字大小和颜色
471
+ - `--cert-code-left/top/font-size/color`: 证书编号距离左边框、顶部的像素位置,以及文字大小和颜色
472
+ - `--customize-left/top/font-size/color`: 自定义内容距离左边框、顶部的像素位置,以及文字大小和颜色
473
+ - `--point-left/top/font-size/color`: 积分距离左边框、顶部的像素位置,以及文字大小和颜色
474
+ - `--dept-names-left/top/font-size/color`: 部门距离左边框、顶部的像素位置,以及文字大小和颜色
475
+ - `--width` / `--height`: 证书画布宽高,单位像素
476
+ - `--dept-show`: 部门是否显示,`0` 不显示,`1` 显示
477
+ - `--status`: 证书状态,`0` 未发布,`1` 已发布,`2` 已关闭
478
+ - `--action`: 坐标设置动作,默认 `coor`
479
+ - `--nwidth` / `--nheight`: 证书图片宽高缩放比例
480
+
481
+ **示例**:
482
+ ```bash
483
+ soke-cli certificate +coordinate \
484
+ --certificate-id 65092195-49D0-453F-9CE1-A6CBB4502EF1 \
485
+ --user-name-left "518.7747789200492px" \
486
+ --user-name-top "450.53825882621436px" \
487
+ --user-name-font-size "16px" \
488
+ --user-name-color "#409EFF" \
489
+ --date-time-left "826.5791337253736px" \
490
+ --date-time-top "496.53478056534476px" \
491
+ --expire-time-left "707.2756554645041px" \
492
+ --expire-time-top "498.1573838275412px" \
493
+ --cert-code-left "780.7005668573794px" \
494
+ --cert-code-top "443.16283331829567px" \
495
+ --cert-code-font-size "16px" \
496
+ --cert-code-color "#409EFF" \
497
+ --customize-left "444px" \
498
+ --customize-top "218px" \
499
+ --customize-font-size "16px" \
500
+ --customize-color "#409EFF" \
501
+ --point-left "220px" \
502
+ --point-top "160px" \
503
+ --point-font-size "16px" \
504
+ --point-color "#409EFF" \
505
+ --dept-names-left "220px" \
506
+ --dept-names-top "220px" \
507
+ --dept-names-font-size "16px" \
508
+ --dept-names-color "#409EFF" \
509
+ --width 1653 \
510
+ --height "1169.9919626086958" \
511
+ --dept-show 1
512
+ ```
513
+
514
+ ---
515
+
516
+ ### +update
517
+
518
+ 更新证书数据、发布证书或关闭证书。接口根据 `action` 判断操作类型:`update` 更新数据,`publish` 发布,`close` 关闭。
519
+
520
+ **命令格式**:
521
+ ```bash
522
+ soke-cli certificate +update \
523
+ --certificate-id <certificate_uuid> \
524
+ --action <update|publish|close> \
525
+ [--title <title>] \
526
+ [--code <code>] \
527
+ [--store-code <old_code>] \
528
+ [--image <image_url>] \
529
+ [--target-path <oss_path>] \
530
+ [--description <text>] \
531
+ [--path <uuid1,uuid2>] \
532
+ [--custom-content <text>] \
533
+ [--serial-number <number>] \
534
+ [--expire-time <YYYY-MM-DD>] \
535
+ [--target-point <point>] \
536
+ [--credit-year <year>] \
537
+ [--is-expiration <0|1>] \
538
+ [--expiration-day <days>] \
539
+ [--is-expiration-remind <0|1>] \
540
+ [--advance-day <days>] \
541
+ [--is-student <0|1>] \
542
+ [--is-designated-personnel <0|1>] \
543
+ [--format json|yaml|table]
544
+ ```
545
+
546
+ **参数说明**:
547
+ - `--certificate-id`: 证书 UUID,通常来自 `certificate +list` 返回的 `data.list[].uuid`
548
+ - `--action`: 操作类型;`update` 更新数据,`publish` 发布证书,`close` 关闭证书
549
+ - `--title`: 证书标题,`action=update` 时必填
550
+ - `--code`: 新证书编号,`action=update` 时必填;唯一,只能由字母、数字、下划线组成,不超过 20 位
551
+ - `--store-code`: 原证书编号,`action=update` 时必填
552
+ - `--image`: 证书图片 URL,`action=update` 时必填;可以来自图片库或内置模板
553
+ - `--target-path`: 证书图片 OSS 路径,`action=update` 时必填
554
+ - `--path`: 分类路径 UUID 列表,多个用英文逗号分隔,`action=update` 时必填
555
+ - `--custom-content`: 自定义内容;不传时默认使用 `--description`
556
+
557
+ **返回字段**(表格显示关键字段):
558
+ - `title`: 证书标题
559
+ - `code`: 证书编号
560
+ - `status`: 更新后的状态
561
+ - `update_time`: 更新时间
562
+ - `update_user_name`: 更新人
563
+
564
+ **示例**:
565
+ ```bash
566
+ # 更新证书数据
567
+ soke-cli certificate +update \
568
+ --certificate-id 65092195-49D0-453F-9CE1-A6CBB4502EF1 \
569
+ --action update \
570
+ --title "证书关闭获取测试" \
571
+ --code "1234444445577447787" \
572
+ --store-code "123444444557744778" \
573
+ --image "https://newsokecdn.soke.cn/dingfc5d942826fce9d9/public/image/certificate/certificate4.png" \
574
+ --target-path "dingfc5d942826fce9d9/public/image/certificate/certificate4.png" \
575
+ --description "232323" \
576
+ --path "DFECCF24-AFC5-40E4-A0FD-3B71BFB6B140" \
577
+ --custom-content "1212" \
578
+ --serial-number 6 \
579
+ --target-point "0.00"
580
+
581
+ # 发布证书
582
+ soke-cli certificate +update --certificate-id 65092195-49D0-453F-9CE1-A6CBB4502EF1 --action publish
583
+
584
+ # 关闭证书
585
+ soke-cli certificate +update --certificate-id 65092195-49D0-453F-9CE1-A6CBB4502EF1 --action close
586
+ ```
587
+
588
+ **接口**: `PUT /skills/certificate/update/{uuid}`
589
+
590
+ ---
591
+
592
+ ### +delete
593
+
594
+ 删除证书。
595
+
596
+ **命令格式**:
597
+ ```bash
598
+ soke-cli certificate +delete \
599
+ --certificate-id <certificate_uuid> \
600
+ [--format json|yaml|table]
601
+ ```
602
+
603
+ **参数说明**:
604
+ - `--certificate-id`: 证书 UUID,通常来自 `certificate +list` 返回的 `data.list[].uuid`
605
+
606
+ **示例**:
607
+ ```bash
608
+ soke-cli certificate +delete --certificate-id DAACD37D-1B72-4CE4-B8D0-12C7F4DAA4C3
609
+ ```
610
+
611
+ **接口**: `DELETE /skills/certificate/delete/{uuid}`
612
+
613
+ ---
614
+
615
+ ## 常见工作流
616
+
617
+ ### 查询内置模板
618
+
619
+ ```bash
620
+ soke-cli certificate +templates
621
+ ```
622
+
623
+ ### 创建证书
624
+
625
+ ```bash
626
+ soke-cli certificate +templates
627
+ soke-cli certificate +category --keyword "<分类关键词>"
628
+ soke-cli certificate +create \
629
+ --title "<证书标题>" \
630
+ --code "<唯一证书编号>" \
631
+ --image "<templates 返回的 url>" \
632
+ --target-path "<模板或图片库图片的 OSS path>" \
633
+ --category-id "<category 返回的 uuid>" \
634
+ --description "<证书简介>"
635
+ ```
636
+
637
+ ### 查询已发布证书并获取 UUID
638
+
639
+ ```bash
640
+ soke-cli certificate +list --status 1 --page 1 --limit 10 --format json
641
+ ```
642
+
643
+ 从返回的 `data.list[].uuid` 中获取证书 UUID。
644
+
645
+ ### 查看证书详情
646
+
647
+ ```bash
648
+ soke-cli certificate +get --certificate-id <certificate_uuid> --format json
649
+ ```
650
+
651
+ ### 查询证书用户获取记录
652
+
653
+ ```bash
654
+ soke-cli certificate +users --certificate-id <certificate_uuid> --page 1 --limit 10 --status all
655
+ ```
656
+
657
+ ### 手动颁发证书
658
+
659
+ ```bash
660
+ soke-cli contact +list-department-users --dept-id <dept_id> --format json
661
+ soke-cli certificate +award --certificate-id <certificate_uuid> --certificate-title "<证书标题>" --certificate-num "<证书编号>" --certificate-image "<证书图片 URL>" --user-list-json '<部门用户对象数组 JSON>'
662
+ ```
663
+
664
+ ### 取消学员证书
665
+
666
+ ```bash
667
+ soke-cli certificate +users --certificate-id <certificate_uuid> --format json
668
+ soke-cli certificate +cancel-user --certificate-user-id <certificate +users 返回的 uuid> --content "<取消理由>"
669
+ ```
670
+
671
+ ### 删除前检查模块关联
672
+
673
+ ```bash
674
+ soke-cli certificate +check-linked --certificate-id <certificate_uuid>
675
+ ```
676
+
677
+ ### 设置证书坐标
678
+
679
+ ```bash
680
+ soke-cli certificate +get --certificate-id <certificate_uuid> --format json
681
+ soke-cli certificate +coordinate --certificate-id <certificate_uuid> --user-name-left "518px" --user-name-top "450px"
682
+ ```
683
+
684
+ ### 更新、发布或关闭证书
685
+
686
+ ```bash
687
+ soke-cli certificate +update --certificate-id <certificate_uuid> --action update --title "<证书标题>" --code "<新证书编号>" --store-code "<原证书编号>" --image "<图片 URL>" --target-path "<OSS path>" --path "<分类 UUID>"
688
+ soke-cli certificate +update --certificate-id <certificate_uuid> --action publish
689
+ soke-cli certificate +update --certificate-id <certificate_uuid> --action close
690
+ ```
691
+
692
+ ### 删除证书
693
+
694
+ ```bash
695
+ soke-cli certificate +delete --certificate-id <certificate_uuid>
696
+ ```
697
+
698
+ ## 注意事项
699
+
700
+ 1. `+list` 使用 `limit` 参数,对接 `/skills/certificate/list`
701
+ 2. `+templates` 返回内置模板 URL 和对应 path
702
+ 3. `+create` 的 `image` 可以来自图片库图片或 `+templates` 返回的内置模板 URL
703
+ 4. `+create` 的 `path` 不传时默认使用 `category-id`
704
+ 5. `+create` 的 `target-path` 是图片 OSS 路径,不是完整 URL
705
+ 6. `+create` 的 `code` 是唯一证书编号,只能由字母、数字、下划线组成,不超过 20 位
706
+ 7. `+create` 的 `serial-number` 是系统自动生成的流水号位数,作为编号尾数,建议大于系统学员数位数
707
+ 8. `+category` 对接新版证书分类接口,返回结构为 `data.list.list`
708
+ 9. `+get` 返回完整 `data`,表格仅展示证书核心字段
709
+ 10. `+users` 对接证书用户获取记录接口,按 `certificate_id` 查询证书下用户获取记录
710
+ 11. `+award` 的 `user-list-json` 必须是部门用户对象数组,先从 `contact +list-department-users` 获取
711
+ 12. `+cancel-user` 使用的是 `+users` 返回的证书获取记录 UUID,不是证书 UUID
712
+ 13. `+check-linked` 可用于删除前确认是否有关联模块
713
+ 14. `+coordinate` 会根据命令行参数自动组装接口所需的坐标 JSON
714
+ 15. `+update` 的 `action` 支持 `update`、`publish`、`close`;`action=update` 时会发送证书数据字段
715
+ 16. `+delete` 是删除操作,请先确认目标证书 UUID
716
+ 17. 表格输出仅展示关键字段,完整字段请使用 `--format json`
717
+ 18. 权限不足或 Token 问题参考 [`../soke-shared/SKILL.md`](../soke-shared/SKILL.md)