aitable-workflow-cli 0.1.15 → 0.1.16-beta.1786022310508
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.
- package/package.json +3 -3
- package/templates/support-qa/lib/__tests__/declarative-matcher.test.ts +240 -0
- package/templates/support-qa/lib/__tests__/dingtalk-group-membership.test.ts +127 -0
- package/templates/support-qa/lib/__tests__/memory-events.test.ts +90 -0
- package/templates/support-qa/lib/action-dispatch.ts +1 -1
- package/templates/support-qa/lib/declarative-matcher.ts +398 -0
- package/templates/support-qa/lib/dingtalk-group-membership.ts +151 -0
- package/templates/support-qa/lib/guards.ts +18 -0
- package/templates/support-qa/lib/memory-events.ts +60 -41
- package/templates/support-qa/lib/preflight.ts +294 -0
- package/templates/support-qa/package.json +2 -4
- package/templates/support-qa/profiles/aitable/profile/fastpath/known-answers.yml +1 -1
- package/templates/support-qa/profiles/aitable/profile/troubleshoot/classifiers.yml +1 -1
- package/templates/support-qa/workflows/config-sync/recipes/config_sync.recipe.ts +10 -8
- package/templates/support-qa/workflows/daily-review/recipes/daily_review.recipe.ts +1 -1
- package/templates/support-qa/workflows/group-qa/recipes/answer.recipe.ts +2 -7
- package/templates/support-qa/workflows/group-qa/recipes/conversation_handler.recipe.ts +3 -3
- package/templates/support-qa/workflows/group-qa/recipes/fastpath.recipe.ts +5 -11
- package/templates/support-qa/workflows/group-qa/recipes/on-action.recipe.ts +4 -2
- package/templates/support-qa/workflows/group-qa/recipes/reply-to-group.recipe.ts +13 -7
- package/templates/support-qa/workflows/group-qa/recipes/troubleshoot.recipe.ts +12 -18
- package/templates/support-qa/workspaces/support/AGENTS.md +1 -1
- package/templates/aitable-handoff/.env.example +0 -17
- package/templates/aitable-handoff/aitable-workflow.config.yml +0 -64
- package/templates/aitable-handoff/coding-agents.config.json +0 -17
- package/templates/aitable-handoff/npmrc +0 -1
- package/templates/aitable-handoff/package.json +0 -16
- package/templates/aitable-handoff/roles/config-syncer.role.yml +0 -4
- package/templates/aitable-handoff/roles/daily-review.role.yml +0 -4
- package/templates/aitable-handoff/roles/faq-support.role.yml +0 -9
- package/templates/aitable-handoff/roles/faq-troubleshooter.role.yml +0 -17
- package/templates/aitable-handoff/roles/kb-editor.role.yml +0 -19
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250/6/350/212/202/350/257/276/345/270/246/344/275/240/345/277/253/351/200/237/344/270/212/346/211/213AI/350/241/250/346/240/274.md +0 -43
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250/AI/350/241/250/346/240/274/350/241/214/346/225/260/350/257/264/346/230/216.md +0 -85
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//344/275/277/347/224/250/345/277/253/346/215/267/351/224/256.md +0 -34
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//345/260/206Excel/346/226/207/344/273/266/345/257/274/345/205/245AI/350/241/250/346/240/274.md +0 -48
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//345/270/270/350/247/201/351/227/256/351/242/230.md +0 -88
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//346/250/241/346/235/277/344/270/255/345/277/203.md +0 -59
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//351/222/211/351/222/211AI/350/241/250/346/240/274/345/270/270/350/247/201/344/270/212/351/231/220.md +0 -181
- package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//351/222/211/351/222/211AI/350/241/250/346/240/274/345/277/253/351/200/237/344/270/212/346/211/213.md +0 -177
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234/AI/350/241/250/346/240/274/347/232/204/345/257/274/345/207/272.md +0 -27
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/345/210/206/347/273/204.md +0 -67
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/345/241/253/350/211/262.md +0 -99
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/346/216/222/345/272/217.md +0 -66
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/347/255/233/351/200/211/345/222/214/347/255/233/351/200/211/346/235/241/344/273/266/347/273/204.md +0 -104
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//346/237/245/347/234/213/345/216/206/345/217/262/350/256/260/345/275/225.md +0 -79
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257.md +0 -94
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/345/220/215/347/247/260.md +0 -35
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/350/257/246/346/203/205/351/241/265/345/222/214/345/241/253/345/206/231/351/241/265.md +0 -141
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/260/203/346/225/264/345/210/227/345/256/275.md +0 -42
- package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/260/203/346/225/264/350/241/214/351/253/230.md +0 -40
- package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//344/270/272/350/241/250/346/240/274/346/267/273/345/212/240/345/255/227/346/256/265.md +0 -188
- package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/215/225/351/200/211/345/244/232/351/200/211/345/255/227/346/256/265/345/220/214/346/255/245/345/205/266/344/273/226/350/241/250/351/200/211/351/241/271.md +0 -142
- package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/256/241/347/220/206.md +0 -44
- package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/261/273/345/236/213/345/210/227/350/241/250.md +0 -95
- package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/274/226/347/273/204.md +0 -138
- package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/345/221/250/346/234/237/345/210/206/350/241/250.md +0 -42
- package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/345/237/272/347/241/200/346/223/215/344/275/234.md +0 -344
- package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/346/230/216/347/273/206/350/241/250-/344/270/200/346/254/241/345/241/253/345/206/231/345/244/232/346/235/241/346/217/220/344/272/244.md +0 -174
- package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/351/242/204/345/241/253/351/273/230/350/256/244/345/200/274.md +0 -97
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250AI/347/224/237/346/210/220/345/205/254/345/274/217.md +0 -26
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/205/254/345/274/217/345/207/275/346/225/260/345/270/270/350/247/201/351/227/256/351/242/230.md +0 -179
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/205/254/345/274/217/345/255/227/346/256/265.md +0 -81
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/207/275/346/225/260.md +0 -21
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/345/207/275/346/225/260/345/244/247/345/205/250.md +0 -433
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/346/224/257/346/214/201/346/230/276/347/244/272/346/240/274/345/274/217.md +0 -126
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/351/224/231/350/257/257/344/273/243/347/240/201/345/210/227/350/241/250.md +0 -30
- package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/207/275/346/225/260/345/256/236/350/267/265.md +0 -13
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203.md +0 -169
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//347/273/204/347/273/207/345/206/205/345/205/261/344/272/253/346/225/260/346/215/256/346/272/220.md +0 -106
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -176
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211AI/345/220/254/350/256/260/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -100
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211OA/345/256/241/346/211/271/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -194
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/345/276/205/345/212/236/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -87
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/346/227/245/347/250/213/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -92
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/350/200/203/345/213/244/346/211/223/345/215/241/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -129
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -229
- package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/351/200/232/350/256/257/345/275/225/346/225/260/346/215/256/345/220/214/346/255/245.md +0 -120
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//344/275/277/347/224/250AI/350/241/250/346/240/274/350/247/206/345/233/276.md +0 -219
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//345/210/206/344/272/253/350/247/206/345/233/276.md +0 -71
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/225/260/346/215/256/350/241/250/345/222/214/350/247/206/345/233/276/347/232/204/345/205/263/347/263/273.md +0 -48
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/227/245/345/216/206/350/247/206/345/233/276.md +0 -89
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/237/245/350/257/242/351/241/265/351/235/242.md +0 -116
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/224/230/347/211/271/345/233/276.md +0 -135
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/224/273/345/206/214/350/247/206/345/233/276.md +0 -28
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/234/213/346/235/277/350/247/206/345/233/276.md +0 -35
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//350/241/250/346/240/274/350/247/206/345/233/276.md +0 -116
- package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//351/200/217/350/247/206/350/241/250/350/247/206/345/233/276.md +0 -123
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230/TOP_N/345/210/206/346/236/220.md +0 -78
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/344/270/255/346/267/273/345/212/240/345/244/232/344/270/252/346/225/260/346/215/256/346/272/220.md +0 -129
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/345/215/225/345/233/276/350/241/250/345/222/214AI/350/247/243/350/257/273/345/206/205/345/256/271/345/210/206/344/272/253.md +0 -104
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/345/270/270/350/247/201/351/227/256/351/242/230.md +0 -31
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/346/231/272/350/203/275/346/200/273/347/273/223/345/210/206/346/236/220.md +0 -57
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/347/273/204/344/273/266.md +0 -47
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/275/277/347/224/250AI/350/241/250/346/240/274/344/273/252/350/241/250/347/233/230.md +0 -226
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/346/265/201/347/250/213/345/217/221/351/200/201/344/273/252/350/241/250/347/233/230.md +0 -49
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//345/210/206/344/272/253/344/273/252/350/241/250/347/233/230.md +0 -74
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//345/234/250/344/273/252/350/241/250/347/233/230/344/270/255/347/255/233/351/200/211/346/225/260/346/215/256.md +0 -65
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//350/207/252/345/256/232/344/271/211/344/273/252/350/241/250/347/233/230/344/270/255/345/277/203.md +0 -93
- package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//350/267/237/351/232/217/350/256/277/351/227/256/350/200/205/346/235/203/351/231/220/347/273/237/350/256/241.md +0 -48
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/205/250/346/226/260/345/272/224/347/224/250/346/250/241/345/274/217.md +0 -155
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/210/227/350/241/250/347/273/204/344/273/266.md +0 -228
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/233/276/347/211/207.md +0 -93
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//346/214/211/351/222/256.md +0 -86
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//346/240/207/347/255/276/351/241/265.md +0 -97
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//350/247/206/345/233/276/347/273/204/344/273/266.md +0 -125
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//350/277/207/346/273/244/345/231/250.md +0 -110
- package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//351/200/217/350/247/206/350/241/250/347/273/204/344/273/266.md +0 -142
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201/Webhook/345/217/202/346/225/260/347/232/204/350/257/246/347/273/206/350/257/264/346/230/216.md +0 -76
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/270/200/350/241/250/344/270/200/345/217/267Agent/346/224/257/346/214/201/347/276/244/346/224/266/351/233/206.md +0 -150
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250webhook/350/247/246/345/217/221/350/207/252/345/212/250/345/214/226.md +0 -163
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/344/270/215/345/220/214/350/272/253/344/273/275/345/217/221/351/200/201/351/222/211/351/222/211/346/266/210/346/201/257.md +0 -60
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201.md +0 -219
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/276/252/347/216/257/350/212/202/347/202/271.md +0 -63
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//345/234/250/346/265/201/347/250/213/344/270/255/344/275/277/347/224/250AI/351/227/256/347/255/224.md +0 -69
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//345/234/250/346/266/210/346/201/257/345/215/241/347/211/207/344/270/212/346/267/273/345/212/240/346/214/211/351/222/256.md +0 -93
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//346/265/201/347/250/213/345/217/230/351/207/217/350/247/243/351/207/212/344/270/216/345/270/270/350/247/201/346/212/245/351/224/231.md +0 -158
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//346/265/201/347/250/213/350/247/246/345/217/221/346/235/241/344/273/266/344/270/216/346/211/247/350/241/214/345/212/250/344/275/234/344/270/200/350/247/210.md +0 -310
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257-/350/207/252/345/212/250/345/214/226.md +0 -129
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//347/224/250/346/237/245/346/211/276/350/256/260/345/275/225/345/217/221/351/200/201/347/273/204/345/220/210/345/255/227/346/256/265/351/200/232/347/237/245.md +0 -66
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/210/233/345/273/272/351/222/211/351/222/211/345/276/205/345/212/236/346/210/226/346/227/245/347/250/213.md +0 -84
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267AI/347/224/265/350/257/235/345/244/226/345/221/274.md +0 -322
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267OA/345/256/241/346/211/271.md +0 -93
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/351/200/201HTTP/350/257/267/346/261/202.md +0 -168
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/270/270/350/247/201/351/227/256/351/242/230.md +0 -83
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/211/271/351/207/217/345/217/221/351/202/256/344/273/266.md +0 -79
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/224/257/346/214/201/346/217/222/345/205/245/345/223/252/344/272/233/345/217/230/351/207/217/345/206/205/345/256/271.md +0 -80
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/233/264/345/244/232/346/211/247/350/241/214/345/212/250/344/275/234/344/275/277/347/224/250/346/214/207/345/215/227.md +0 -21
- package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/260/203/347/224/250/344/270/211/346/226/271/345/267/245/344/275/234/346/265/201/345/272/224/347/224/250.md +0 -161
- package/templates/aitable-handoff/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/274/230/345/205/210/344/275/277/347/224/250/347/224/263/350/257/267.md +0 -67
- package/templates/aitable-handoff/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/275/277/347/224/250/350/257/264/346/230/216.md +0 -63
- package/templates/aitable-handoff/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/345/212/251/347/220/206.md +0 -107
- package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//344/275/277/347/224/250AI/350/241/250/346/240/274/351/253/230/347/272/247/346/235/203/351/231/220.md +0 -194
- package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//350/241/214/345/210/227/346/235/203/351/231/220/350/256/276/347/275/256/345/217/212/351/253/230/347/272/247/346/235/203/351/231/220/345/257/271/350/241/250/345/215/225/345/205/254/345/274/217/347/232/204/345/275/261/345/223/215.md +0 -32
- package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/242/204/350/247/210/351/253/230/347/272/247/346/235/203/351/231/220/347/273/223/346/236/234.md +0 -43
- package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/253/230/347/272/247/346/235/203/351/231/220/345/270/270/350/247/201/351/227/256/351/242/230.md +0 -47
- package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/253/230/347/272/247/346/235/203/351/231/220/347/232/204/351/273/230/350/256/244/350/247/222/350/211/262.md +0 -36
- package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/344/270/211/346/226/271/346/217/222/344/273/266/344/275/277/347/224/250/346/216/210/346/235/203.md +0 -19
- package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/204/232/346/234/254/346/217/222/344/273/266.md +0 -42
- package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/207/252/345/256/232/344/271/211/346/217/222/344/273/266.md +0 -51
- package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266/344/270/255/345/277/203-/344/275/277/347/224/250/346/214/207/345/215/227.md +0 -97
- package/templates/aitable-handoff/wiki/faq-support/14-/347/256/241/347/220/206/345/220/216/345/217/260//344/275/277/347/224/250/346/225/260/346/215/256/350/257/264/346/230/216.md +0 -82
- package/templates/aitable-handoff/wiki/faq-support/14-/347/256/241/347/220/206/345/220/216/345/217/260//346/235/203/347/233/212/346/225/260/346/215/256/350/257/264/346/230/216.md +0 -111
- package/templates/aitable-handoff/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265/AI/350/241/250/346/240/274/350/257/257/345/210/240/346/201/242/345/244/215/346/214/207/345/215/227.md +0 -37
- package/templates/aitable-handoff/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265//345/234/250/350/241/250/346/240/274/344/270/255/346/240/207/350/256/260/351/207/215/345/244/215/345/206/205/345/256/271.md +0 -43
- package/templates/aitable-handoff/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265//347/233/264/346/222/255/345/205/254/345/274/200/347/263/273/345/210/227/350/257/276.md +0 -21
- package/templates/aitable-handoff/wiki/faq-support/16-/344/273/230/350/264/271/346/235/203/347/233/212//351/222/211/351/222/211AI/350/241/250/346/240/274/344/273/230/350/264/271/346/235/203/347/233/212.md +0 -144
- package/templates/aitable-handoff/wiki/faq-support/16-/344/273/230/350/264/271/346/235/203/347/233/212//351/222/211/351/222/211AI/350/241/250/346/240/274/346/220/255/345/273/272/346/234/215/345/212/241.md +0 -95
- package/templates/aitable-handoff/wiki/faq-support/17-/345/205/254/345/221/212/AI/350/241/250/346/240/274-/346/216/222/347/211/210/346/211/223/345/215/260/345/215/207/347/272/247/350/257/264/346/230/216.md +0 -40
- package/templates/aitable-handoff/wiki/faq-support/17-/345/205/254/345/221/212/AI/350/241/250/346/240/274-/347/211/210/346/234/254/345/215/207/347/272/247/351/200/232/347/237/245.md +0 -21
- package/templates/aitable-handoff/wiki/faq-support/17-/345/205/254/345/221/212//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245/350/260/203/346/225/264/350/257/264/346/230/216.md +0 -55
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI /350/241/250/346/240/274/346/217/222/344/273/266 - /344/274/201/344/270/232/345/206/205/346/217/222/344/273/266/345/217/221/345/270/203/346/214/207/345/215/227.md" +0 -159
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210FaaS/347/211/210/357/274/211.md" +0 -1362
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210/345/205/254/345/274/217/347/211/210/357/274/211.md" +0 -556
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227.md" +0 -15
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/AI /350/241/250/346/240/274 AI /345/255/227/346/256/265/345/270/270/350/247/201/346/212/245/351/224/231/350/257/264/346/230/216.md" +0 -649
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/Dify/346/231/272/350/203/275/344/275/223.md" +0 -55
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/GPTPro /345/255/227/346/256/265/346/215/267/345/276/204 /345/257/206/351/222/245/350/216/267/345/217/226/346/214/207/345/215/227.md" +0 -23
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/OpenClaw /345/260/217/351/276/231/350/231/276/345/212/251/346/211/213/351/205/215/347/275/256/346/225/231/347/250/213.md" +0 -27
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227//345/233/275/345/206/205/345/244/226/345/277/253/351/200/222/347/211/251/346/265/201/344/277/241/346/201/257/346/237/245/350/257/242/344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -907
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227//345/277/253/351/200/222/347/211/251/346/265/201/346/237/245/350/257/242/345/212/251/346/211/213/344/275/277/347/224/250/346/214/207/345/215/227.md" +0 -1
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/AI/350/241/250/346/240/274JSAPI /347/261/273/345/236/213/346/217/217/350/277/260.xlsx +0 -0
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Base /346/250/241/345/235/227.md" +0 -391
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/AttachmentField /351/231/204/344/273/266/345/255/227/346/256/265.md" +0 -200
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/AutoNumberField /350/207/252/345/212/250/347/274/226/345/217/267/345/255/227/346/256/265.md" +0 -75
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/BarcodeField /346/235/241/347/240/201/345/255/227/346/256/265.md" +0 -95
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/BidirectionalLinkField /345/217/214/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +0 -294
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CheckboxField /345/244/215/351/200/211/346/241/206/345/255/227/346/256/265.md" +0 -95
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CreatedTimeField /345/210/233/345/273/272/346/227/266/351/227/264/345/255/227/346/256/265.md" +0 -134
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CurrencyField /350/264/247/345/270/201/345/255/227/346/256/265.md" +0 -260
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/DateField /346/227/245/346/234/237/345/255/227/346/256/265.md" +0 -183
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/DepartmentField /351/203/250/351/227/250/345/255/227/346/256/265.md" +0 -111
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/EmailField /351/202/256/347/256/261/345/255/227/346/256/265.md" +0 -99
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/FilterUpField /346/237/245/346/211/276/345/274/225/347/224/250/345/255/227/346/256/265.md" +0 -73
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/FormulaField /345/205/254/345/274/217/345/255/227/346/256/265.md" +0 -109
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/GeoLocationField /345/234/260/347/220/206/344/275/215/347/275/256/345/255/227/346/256/265.md" +0 -33
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/GroupField /347/276/244/347/273/204/345/255/227/346/256/265.md" +0 -111
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/LastModifiedTimeField /346/234/200/345/220/216/346/233/264/346/226/260/346/227/266/351/227/264/345/255/227/346/256/265.md" +0 -134
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/LookupField /345/205/263/350/201/224/345/274/225/347/224/250/345/255/227/346/256/265.md" +0 -71
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/MultiSelectField /345/244/232/351/200/211/345/255/227/346/256/265.md" +0 -349
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/NumberField /346/225/260/345/255/227/345/255/227/346/256/265.md" +0 -175
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/PrimaryField /344/270/273/351/224/256/346/226/207/346/241/243/345/255/227/346/256/265.md" +0 -91
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/ProgressField /350/277/233/345/272/246/345/255/227/346/256/265.md" +0 -324
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/RatingField /350/257/204/345/210/206/345/255/227/346/256/265.md" +0 -320
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/RichTextField /345/257/214/346/226/207/346/234/254/345/255/227/346/256/265.md" +0 -45
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/SingleSelectField /345/215/225/351/200/211/345/255/227/346/256/265.md" +0 -336
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/TelephoneField /347/224/265/350/257/235/345/255/227/346/256/265.md" +0 -99
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/TextField /346/226/207/346/234/254/345/255/227/346/256/265.md" +0 -93
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UnidirectionalLinkFields /345/215/225/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +0 -295
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UrlField /351/223/276/346/216/245/345/255/227/346/256/265.md" +0 -163
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UserField /344/272/272/345/221/230/345/255/227/346/256/265.md" +0 -266
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227.md" +0 -379
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Record /346/250/241/345/235/227.md" +0 -277
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Sheet /346/250/241/345/235/227.md" +0 -1013
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/UI /346/250/241/345/235/227.md" +0 -472
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/View /346/250/241/345/235/227/GridView /350/241/250/346/240/274/350/247/206/345/233/276.md" +0 -835
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/View /346/250/241/345/235/227.md" +0 -203
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md +0 -65
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243//350/257/273/345/206/231AI /350/241/250/346/240/274/346/250/241/345/236/213.md" +0 -29
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/346/225/260/346/215/256/346/272/220 /345/274/200/345/217/221/346/214/207/345/215/227.md" +0 -607
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Base /346/250/241/345/235/227.md" +0 -391
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Field /346/250/241/345/235/227.md" +0 -379
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Input/346/250/241/345/235/227.md" +0 -331
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Output/346/250/241/345/235/227.md" +0 -197
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Record /346/250/241/345/235/227.md" +0 -277
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Sheet /346/250/241/345/235/227.md" +0 -1013
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/UI /346/250/241/345/235/227.md" +0 -472
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/View /346/250/241/345/235/227.md" +0 -203
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md" +0 -65
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +0 -142
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Base /346/250/241/345/235/227.md" +0 -391
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Event/344/272/213/344/273/266/346/250/241/345/235/227.md" +0 -182
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Field /346/250/241/345/235/227.md" +0 -379
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Record /346/250/241/345/235/227.md" +0 -277
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Sheet /346/250/241/345/235/227.md" +0 -1013
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/UI /346/250/241/345/235/227.md" +0 -472
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/View /346/250/241/345/235/227.md" +0 -203
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/205/266/344/273/226/346/216/245/345/217/243.md" +0 -146
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md" +0 -65
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//346/240/270/345/277/203/347/237/245/350/257/206.md" +0 -54
- package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +0 -192
- package/templates/aitable-handoff/wiki/faq-support//351/222/211/351/222/211AI/350/241/250/346/240/274FAQ.md +0 -611
- package/templates/aitable-handoff/workflows/admin-kb-update/recipes/kb-refine.recipe.ts +0 -131
- package/templates/aitable-handoff/workflows/admin-kb-update/recipes/kb_sync_handler.recipe.ts +0 -130
- package/templates/aitable-handoff/workflows/admin-kb-update/workflow.yml +0 -125
- package/templates/aitable-handoff/workflows/config-sync/recipes/config_sync.recipe.ts +0 -448
- package/templates/aitable-handoff/workflows/config-sync/recipes/config_sync_handler.recipe.ts +0 -16
- package/templates/aitable-handoff/workflows/config-sync/workflow.yml +0 -73
- package/templates/aitable-handoff/workflows/daily-review/recipes/daily_review.recipe.ts +0 -529
- package/templates/aitable-handoff/workflows/daily-review/recipes/daily_review_handler.recipe.ts +0 -26
- package/templates/aitable-handoff/workflows/daily-review/recipes/memory-events.ts +0 -56
- package/templates/aitable-handoff/workflows/daily-review/workflow.yml +0 -92
- package/templates/aitable-handoff/workflows/group-qa/error-replies.json +0 -53
- package/templates/aitable-handoff/workflows/group-qa/recipes/answer.recipe.ts +0 -197
- package/templates/aitable-handoff/workflows/group-qa/recipes/conversation_handler.recipe.ts +0 -294
- package/templates/aitable-handoff/workflows/group-qa/recipes/issue-classifier.ts +0 -120
- package/templates/aitable-handoff/workflows/group-qa/recipes/known-error-match.recipe.ts +0 -75
- package/templates/aitable-handoff/workflows/group-qa/recipes/memory-events.ts +0 -55
- package/templates/aitable-handoff/workflows/group-qa/recipes/reply-to-group.recipe.ts +0 -132
- package/templates/aitable-handoff/workflows/group-qa/recipes/troubleshoot-issue.recipe.ts +0 -195
- package/templates/aitable-handoff/workflows/group-qa/workflow.yml +0 -210
- package/templates/aitable-handoff/workspaces/daily-review/AGENTS.md +0 -189
- package/templates/aitable-handoff/workspaces/faq-support/AGENTS.md +0 -448
- package/templates/aitable-handoff/workspaces/faq-support/contacts.json +0 -14
- package/templates/aitable-handoff/workspaces/faq-support/owner-map.json +0 -18
- package/templates/aitable-handoff/workspaces/faq-support/skills/bug-triage/SKILL.md +0 -130
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/AGENTS.md +0 -53
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/SKILL.md +0 -58
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/aitable-import-troubleshooter/SKILL.md +0 -485
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/aitable-openapi-troubleshooter/SKILL.md +0 -183
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/import-openapi-e2e-troubleshooter/SKILL.md +0 -459
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/notable-datasource-troubleshooter/SKILL.md +0 -1286
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/notable-field-troubleshooter/SKILL.md +0 -673
- package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/spreadsheet-datasync-troubleshooter/SKILL.md +0 -322
- package/templates/aitable-handoff/workspaces/kb-editor/AGENTS.md +0 -32
- package/templates/support-qa/lib/assemble-cli.ts +0 -30
- package/templates/support-qa/lib/assemble.ts +0 -279
- package/templates/support-qa/lib/echo-guard.ts +0 -50
- package/templates/support-qa/lib/fastpath.ts +0 -227
- package/templates/support-qa/lib/owner-mention.ts +0 -140
- package/templates/support-qa/lib/profile-guard.ts +0 -55
- package/templates/support-qa/lib/send-failure-guard.ts +0 -59
- package/templates/support-qa/lib/troubleshoot.ts +0 -236
|
@@ -1,607 +0,0 @@
|
|
|
1
|
-
# AI表格数据源 开发指南
|
|
2
|
-
|
|
3
|
-
# 数据源同步概述
|
|
4
|
-
|
|
5
|
-
## 数据源同步是什么?
|
|
6
|
-
|
|
7
|
-
数据源同步是钉钉AI 表格提供的一项数据集成能力,它能够将分散在不同系统和平台的数据自动汇聚到AI 表格中,实现数据的统一管理和分析。
|
|
8
|
-
|
|
9
|
-
### 核心价值
|
|
10
|
-
|
|
11
|
-
1. 数据集中化管理
|
|
12
|
-
|
|
13
|
-
将企业内外部多个系统的数据整合到一个平台,避免数据孤岛;统一的数据视图,便于全局分析和决策
|
|
14
|
-
|
|
15
|
-
2. 自动化数据流转
|
|
16
|
-
|
|
17
|
-
支持定时或实时同步,减少人工导入导出的工作量;确保数据的时效性和准确性
|
|
18
|
-
|
|
19
|
-
3. 跨系统数据协作
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
打通不同业务系统之间的数据壁垒;实现业务流程的无缝衔接
|
|
23
|
-
|
|
24
|
-
### 目前支持丰富的开箱即用的数据源:
|
|
25
|
-
|
|
26
|
-
* 钉钉生态数据:AI 表格、钉钉表格、OA审批、考勤打卡、通讯录、会议、日程等
|
|
27
|
-
|
|
28
|
-
* 数据库系统:MySQL、PostgreSQL、SQLServer等主流数据库
|
|
29
|
-
|
|
30
|
-
* 业务平台数据:淘宝生意参谋、拼多多商家后台、得物商家后台、阿里妈妈等电商平台
|
|
31
|
-
|
|
32
|
-
* 企业管理:聚水潭ERP、Teambition系统等企业应用
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## 数据同步插件如何使用
|
|
36
|
-
|
|
37
|
-
以MySQL 插件为例,介绍如何使用插件完成数据同步的过程
|
|
38
|
-
|
|
39
|
-
### 1.2.1 功能入口
|
|
40
|
-
|
|
41
|
-
AI 表格左下角,「添加/导入」-「从其他数据源同步」
|
|
42
|
-
|
|
43
|
-

|
|
44
|
-
|
|
45
|
-
在弹出的数据链接中心,选择MySQL
|
|
46
|
-
|
|
47
|
-

|
|
48
|
-
|
|
49
|
-
### 1.2.2 登录数据库、选择数据表及导出字段
|
|
50
|
-
|
|
51
|
-
登录数据库
|
|
52
|
-
|
|
53
|
-

|
|
54
|
-
|
|
55
|
-
选择数据库和数据表
|
|
56
|
-
|
|
57
|
-

|
|
58
|
-
|
|
59
|
-
选择导出的字段
|
|
60
|
-
|
|
61
|
-

|
|
62
|
-
|
|
63
|
-
### 1.2.3 数据同步设置
|
|
64
|
-
|
|
65
|
-
点击下一步,进入数据同步设置页面。数据同步设置页面是一个通用的页面,用户可以在该页面配置同步字段、开启/关闭定时同步。
|
|
66
|
-
|
|
67
|
-
支持全部字段
|
|
68
|
-
|
|
69
|
-

|
|
70
|
-
|
|
71
|
-
指定同步的字段
|
|
72
|
-
|
|
73
|
-

|
|
74
|
-
|
|
75
|
-
### 1.2.4 保存并同步
|
|
76
|
-
|
|
77
|
-
点击「保存并同步」,等待同步过程后,即可以得到一张同步表,同步表的数据来源于前置步骤中选择的数据表,至此完成了MySQL插件的数据同步配置。
|
|
78
|
-
|
|
79
|
-

|
|
80
|
-
|
|
81
|
-
### 1.2.5 其他操作
|
|
82
|
-
|
|
83
|
-
同步表的更多菜单
|
|
84
|
-
|
|
85
|
-

|
|
86
|
-
|
|
87
|
-
同步表解除同步关系后,支持编辑
|
|
88
|
-
|
|
89
|
-

|
|
90
|
-
|
|
91
|
-
同步表的更多菜单中有数据同步设置、更新数据、解除同步关系选项,具有权限的用户可以对同步表进行操作。
|
|
92
|
-
|
|
93
|
-
| 操作 | 介绍 |
|
|
94
|
-
| --- | --- |
|
|
95
|
-
| 数据同步设置 | 可以对同步字段和自动同步的配置进行修改 |
|
|
96
|
-
| 更新数据 | 可以手动触发一次数据同步 |
|
|
97
|
-
| 解除同步关系 | 同步表不支持编辑同步字段,解除同步关系后,表格将转换为普通AI表格,支持编辑字段及数据。 |
|
|
98
|
-
|
|
99
|
-
# 如何开发数据源同步插件
|
|
100
|
-
|
|
101
|
-
开发数据源同步插件时,开发者需着重关注`插件前端`和`插件服务端`,`插件前端`用于使用者配置数据源信息,`插件服务端`用于获取数据源表结构与行记录。
|
|
102
|
-
|
|
103
|
-
## 快速开始
|
|
104
|
-
|
|
105
|
-
### 2.1.1 数据源三方插件的基本信息
|
|
106
|
-
|
|
107
|
-
每个三方数据源插件都需要具备以下信息,在开发、自定义插件测试和插件发布过程中,都会围绕这几个内容展开。
|
|
108
|
-
|
|
109
|
-
| 信息 | 是否必须 | 作用 | 举例 |
|
|
110
|
-
| --- | --- | --- | --- |
|
|
111
|
-
| 前端配置页面 | Y | 使用者点击插件,会进入到三方提供的前端配置页面。用户在配置页面完成三方数据源的配置。<br>如Mysql插件的配置页面,完成数据库的地址、帐密配置。 | MySQL 插件的配置页面<br> |
|
|
112
|
-
| 前端页面的宽度和高度 | N | 在展示前端配置页面时,容器的宽度和高度。默认是 300 \* 450 | |
|
|
113
|
-
| 三方服务端地址 | Y | 用户完成前端页面配置后,会由AI表格服务端向三方服务端发起拉取表结构/数据的请求。 | 如: https://alidoc.host.com/<br>(仅举例,不支持访问) |
|
|
114
|
-
| 数据表结构同步接口 | Y | 完成配置后,AI表格服务端首先会调用三方的表结构接口,查询表结构,如字段配置,表名称等,然后根据表结构完成数据表的创建。 | 如 /api/sheet\_meta<br>最终请求的接口为<br>{服务端地址}+ {表结构接口},即<br>https://alidoc.host.com/api/sheet\_meta |
|
|
115
|
-
| 行记录同步接口 | Y | 在更新数据时,AI表格服务端会调用三方行记录同步接口,完成行记录的数据拉取。 | 如 /api/records<br>最终请求的接口为<br>{服务端地址}+ {行记录接口},即<br>https://alidoc.host.com/api/records |
|
|
116
|
-
| 请求签名 | N | 确认接口来源为AI 表格服务端,防止其他方调用,保证通信安全。 | |
|
|
117
|
-
|
|
118
|
-
### 2.1.2 前端配置页面开发
|
|
119
|
-
|
|
120
|
-
同步配置界面用于管理待同步数据的参数设置,用户可根据不同业务场景灵活定制不同配置,确保匹配业务需求。
|
|
121
|
-
|
|
122
|
-
#### 2.1.2.1 快速开始
|
|
123
|
-
|
|
124
|
-
推荐使用官方模板快速开始:
|
|
125
|
-
|
|
126
|
-
[https://github.com/dingdocs-notable/datasource-plugin-demo: https://github.com/dingdocs-notable/datasource-plugin-demo](https://github.com/dingdocs-notable/datasource-plugin-demo)
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
git clone https://github.com/dingdocs-notable/datasource-plugin-demo
|
|
130
|
-
cd datasource-plugin-demo
|
|
131
|
-
npm install
|
|
132
|
-
npm start
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
需要注意的是,如果不使用脚手架,在前端代码中,需要初始化iframe环境。
|
|
136
|
-
|
|
137
|
-
```javascript
|
|
138
|
-
npm install dingtalk-docs-cool-app --save
|
|
139
|
-
```
|
|
140
|
-
```javascript
|
|
141
|
-
import { initView } from 'dingtalk-docs-cool-app';
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
function App (){
|
|
145
|
-
...
|
|
146
|
-
|
|
147
|
-
// 初始化iframe内环境
|
|
148
|
-
useEffect(() => {
|
|
149
|
-
initView({
|
|
150
|
-
onReady: () => {},
|
|
151
|
-
onError: e => {
|
|
152
|
-
console.log(e);
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}, []);
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
...
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
#### 2.1.2.1 UI开发
|
|
164
|
-
|
|
165
|
-
以下是界面的一个 UI demo。
|
|
166
|
-
|
|
167
|
-
```javascript
|
|
168
|
-
import { useEffect, useState } from 'react';
|
|
169
|
-
import { initView } from 'dingtalk-docs-cool-app';
|
|
170
|
-
|
|
171
|
-
function App() {
|
|
172
|
-
const [value, setValue] = useState('someValue');
|
|
173
|
-
|
|
174
|
-
useEffect(() => {
|
|
175
|
-
initView({
|
|
176
|
-
onReady: () => {
|
|
177
|
-
},
|
|
178
|
-
onError: (e) => {
|
|
179
|
-
console.log(e);
|
|
180
|
-
},
|
|
181
|
-
});
|
|
182
|
-
}, []);
|
|
183
|
-
|
|
184
|
-
const goNext = async () => {
|
|
185
|
-
const config = { a: 'test' };
|
|
186
|
-
await (Dingdocs.base.host as any).saveConfigAndGoNext(config);
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
return (
|
|
190
|
-
<div style={{display: 'flex', flexDirection: 'column', alignItems: 'center'}}>
|
|
191
|
-
<h1>数据源插件demo</h1>
|
|
192
|
-
<div style={{display: 'flex'}}>
|
|
193
|
-
<label>输入框:</label>
|
|
194
|
-
<input value={value} onChange={(e) => setValue(e.target.value)} />
|
|
195
|
-
</div>
|
|
196
|
-
<button style={{marginTop: 20, maxWidth: 100}} onClick={goNext}>点击下一步</button>
|
|
197
|
-
</div>
|
|
198
|
-
)
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
export default App;
|
|
202
|
-
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
#### 2.1.2.2 前端 API
|
|
206
|
-
|
|
207
|
-
主要提供必要信息查询和写入功能,以支持配置界面的开发。
|
|
208
|
-
|
|
209
|
-
* **saveConfigAndGoNext**
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
保存数据源同步配置后(配置信息可自定义,格式为 key-value)调用该 API,会关闭同步配置页面进入字段配置。
|
|
213
|
-
|
|
214
|
-
#### 2.1.2.3 运行调试
|
|
215
|
-
|
|
216
|
-
前端页面开发完成后,开发者需要将其部署到公网可访问的服务器上。注意,前端页面的资源地址协议需为 **https协议**,否则会因为浏览器安全策略,导致页面无法打开。
|
|
217
|
-
|
|
218
|
-
#### 2.1.2.4 获取当前登录用户/免登
|
|
219
|
-
|
|
220
|
-
免登需要两步
|
|
221
|
-
|
|
222
|
-
1. 前端调用`Dingdocs.base.host.getAuthCode(corpId)`获取免登码
|
|
223
|
-
|
|
224
|
-
2. 插件前端调用插件服务端,将免登码发给插件服务端
|
|
225
|
-
|
|
226
|
-
3. 插件服务端调用[钉钉开放接口](https://open.dingtalk.com/document/orgapp/obtain-the-userid-of-a-user-by-using-the-log-free)通过免登码获取用户信息
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
#### 2.1.2.5 获取当前AI 表格所属组织
|
|
230
|
-
|
|
231
|
-
在酷应用中配置的前端插件URL中,可以带上`$CORPID$` 占位符。AI 表格加载前端插件时,会将`$CORPID$`替换为当前AI 表格组织。
|
|
232
|
-
|
|
233
|
-
例如,配置URL为`https://xxx.com?corpId=$CORPID$`时,最后加载的URL为`https://xxx.com?corpId=dingxxxx`,其中`dingxxx`为当前AI 表格所属组织的corpId。
|
|
234
|
-
|
|
235
|
-
### 2.1.3 服务端接口开发
|
|
236
|
-
|
|
237
|
-
主要实现两个服务端接口,分别用于获取三方数据源的表结构和表记录。开发者需要提供一个公网可访问的服务地址:
|
|
238
|
-
|
|
239
|
-
* ${服务地址}/api/sheet\_meta:获取表结构接口
|
|
240
|
-
|
|
241
|
-
* ${服务地址}/api/records:获取表记录接口
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
#### 2.1.3.1 代码示例
|
|
245
|
-
|
|
246
|
-
这是一个使用nodeJS搭建的服务端代码示例,可以部署到公网 或者通过本地运行 + ngrok内网穿透的方式进行测试。
|
|
247
|
-
|
|
248
|
-
1. **运行部署node服务**
|
|
249
|
-
|
|
250
|
-
[https://github.com/dingdocs-notable/datasource-plugin-node-demo: https://github.com/dingdocs-notable/datasource-plugin-node-demo](https://github.com/dingdocs-notable/datasource-plugin-node-demo)
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
git clone https://github.com/dingdocs-notable/datasource-plugin-node-demo
|
|
254
|
-
cd datasource-plugin-node-demo
|
|
255
|
-
npm install
|
|
256
|
-
npm start
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
2. **内网穿透(本地运行服务需要)**
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
内网穿透将本地开发环境暴露到公网,使外网用户可以访问你本机运行的服务。如果你的node/java 服务代码运行在本地,则需要进行内网穿透,让AI表格的服务端可以访问到你的服务。常见的内网穿透工具有ngrok、localtunnel、serveo等。
|
|
263
|
-
|
|
264
|
-
**重要提示:请仔细阅读以下条款**
|
|
265
|
-
|
|
266
|
-
1. 第三方工具性质:内网穿透工具为第三方提供的内网穿透服务,非本公司开发或维护,使用该工具产生的任何问题与本公司无关。
|
|
267
|
-
|
|
268
|
-
2. 安全风险提醒:
|
|
269
|
-
|
|
270
|
-
1. 使用内网穿透工具会将您的本地服务暴露到公网,存在一定的安全风险
|
|
271
|
-
|
|
272
|
-
2. 请确保本地开发环境不包含敏感数据
|
|
273
|
-
|
|
274
|
-
3. 建议仅在开发调试阶段使用,生产环境请使用正式部署方案
|
|
275
|
-
|
|
276
|
-
3. 责任范围:
|
|
277
|
-
|
|
278
|
-
1. 因使用 ngrok 工具导致的数据泄露、网络安全问题,本公司不承担任何责任
|
|
279
|
-
|
|
280
|
-
2. 因 ngrok 服务本身故障、变更、终止等造成的开发中断,本公司不承担任何责任
|
|
281
|
-
|
|
282
|
-
3. 用户应自行承担使用该工具的所有风险
|
|
283
|
-
|
|
284
|
-
4. 替代方案:如对安全性有特殊要求,建议使用企业内部的内网穿透解决方案或其他符合安全规范的调试方式。
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
使用即表示您已理解并接受上述所有条款和风险。
|
|
288
|
-
|
|
289
|
-
1. **ngrok的使用指南**
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
[《使用ngrok进行本地调试 》](https://alidocs.dingtalk.com/i/nodes/NZQYprEoWoxKPoqwC02GboMDV1waOeDk?corpId=)
|
|
293
|
-
|
|
294
|
-
#### 2.1.3.2 获取表结构 API
|
|
295
|
-
|
|
296
|
-
**基本信息**
|
|
297
|
-
|
|
298
|
-
| 说明 | 该接口返回三方数据源的表结构,说明数据源有哪些字段,以及每个字段的类型 |
|
|
299
|
-
| --- | --- |
|
|
300
|
-
| 方法 | `POST` |
|
|
301
|
-
| Path | https://{应用服务器地址}/api/sheet\_meta |
|
|
302
|
-
| 超时时间 | 10s |
|
|
303
|
-
| 请求头 | * Ding-Docs-Timestamp<br> <br>* Ding-Docs-Signature<br> <br>* Content-Type:"application/json; charset=utf-8" |
|
|
304
|
-
| 请求体 | ```json<br>{<br> "requestId": "", // 单次同步任务的requestId<br> "params": "", // JsonString, 查询三方表结构信息参数,由开发者自定义,即前端调用saveConfigAndGoNext保存的信息<br> "context": {<br> "unionId": "", // 数据同步用户id<br> "corpId": "" // AI 表格所属组织id<br> }<br>}<br>``` |
|
|
305
|
-
| 返回体示例 | ```json<br>{<br> "code": 0,<br> "msg": "",<br> "data": {<br> "sheetName":""<br> "fields":[<br> {<br> "id":"fid_1",// 字段唯一标识<br> "name":"id", // 字段名称<br> "type":"text", // 字段类型,<br> "isPrimary": true // 是否主键字段<br> "property": {<br> },<br> "description":"description"<br> },<br> {<br> "id":"fid_2",// 字段唯一标识<br> "name":"name", // 字段名称<br> "type":"number", // 字段类型, 枚举值见附录<br> "isPrimary": false // 是否主键字段<br> "property": {<br> "formatter": "INT" <br> },<br> "description":"description"<br> },<br> ……<br> ]<br> }<br>}<br>``` |
|
|
306
|
-
|
|
307
|
-
**返回体参数说明**
|
|
308
|
-
|
|
309
|
-
| 参数名 | 类型 | 是否必填 | 描述 |
|
|
310
|
-
| --- | --- | --- | --- |
|
|
311
|
-
| code | int | 是 | 0 是正常值,非 0 异常,错误码如下:<br>10001:参数错误<br>10002:配置信息错误<br>10003:权益不足<br>10004:身份校验失败<br>10005:三方系统异常,请稍后再试 |
|
|
312
|
-
| msg | string | 否 | 具体错误信息 |
|
|
313
|
-
| data | object | 是 | |
|
|
314
|
-
| \-- sheetName | string | 是 | 三方数据源名-同步表名 |
|
|
315
|
-
| \-- fields | array object | 是 | 同步表字段列表 |
|
|
316
|
-
| \-- -- id | string | 是 | 字段唯一标识 |
|
|
317
|
-
| \-- -- name | string | 是 | 字段名称-同步表字段名 |
|
|
318
|
-
| \-- -- isPrimary | boolean | 是 | 是否主键字段,仅一列为主键字段 |
|
|
319
|
-
| \-- -- type | string | 是 | 字段类型,枚举值见[4.1 字段类型枚举](https://alidocs.dingtalk.com/i/nodes/G1DKw2zgV2KnvL4kFNq3rdMyJB5r9YAn?utm_scene=team_space&iframeQuery=anchorId%3Duu_maq71k6rox7iqpx5v1e) |
|
|
320
|
-
| \-- -- property | object | 否 | 字段类型属性,参考[4.1 字段类型枚举](https://alidocs.dingtalk.com/i/nodes/G1DKw2zgV2KnvL4kFNq3rdMyJB5r9YAn?utm_scene=team_space&iframeQuery=anchorId%3Duu_maq71k6rox7iqpx5v1e) |
|
|
321
|
-
|
|
322
|
-
#### 2.1.3.3 获取表记录 API
|
|
323
|
-
|
|
324
|
-
**基本信息**
|
|
325
|
-
|
|
326
|
-
| 说明 | 该接口返回三方数据源表中的记录,分页返回 |
|
|
327
|
-
| --- | --- |
|
|
328
|
-
| 方法 | `POST` |
|
|
329
|
-
| Path | https://{应用服务器地址}/api/records |
|
|
330
|
-
| 超时时间 | 20s |
|
|
331
|
-
| 请求头 | * Ding-Docs-Timestamp<br> <br>* Ding-Docs-Signature<br> <br>* Content-Type:"application/json; charset=utf-8" |
|
|
332
|
-
| 请求体 | ```json<br>{<br> "requestId": "", // 单次同步任务的requestId<br> "maxResults":300, // 单次返回最大记录条数,默认300条<br> "nextToken": "", 数据拉取的起始位置。首次调用不传,后续调用时使用插件服务端返回的nextToken参数<br> "params": "", // JsonString, 查询三方表结构信息参数,由开发者自定义,即前端调用saveConfigAndGoNext保存的信息<br> "context": {<br> "unionId": "", // 数据同步用户id<br> "corpId": "" // AI 表格所属组织id<br> }<br>}<br>``` |
|
|
333
|
-
| 返回体示例 | ```json<br>{<br> "code": 0, <br> "msg": "", <br> "data": {<br> "nextToken":"xxx", // 下次分页的起始令牌<br> "hasMore": false, // 是否还有更多数据<br> "records":[<br> {<br> "id":"1", // 行记录id<br> "fields": {<br> "fid_1": "xxx", // 字段id:字段值<br> "fid_2": 1222,<br> } <br> },<br> {<br> "id":"2",<br> "fields": {<br> "fid_1": "xxx",<br> "fid_2": 334.33,<br> } <br> }<br> ],<br> ……<br> "total": 100 // 字段总数,可选,用于计算当前数据同步进度<br> }<br>}<br>``` |
|
|
334
|
-
|
|
335
|
-
**返回体参数说明**
|
|
336
|
-
|
|
337
|
-
| 参数名 | 类型 | 是否必填 | 描述 |
|
|
338
|
-
| --- | --- | --- | --- |
|
|
339
|
-
| code | int | 是 | 0 是正常值,非 0 异常,错误码如下: |
|
|
340
|
-
| msg | string | 否 | 具体错误信息 |
|
|
341
|
-
| data | object | 是 | |
|
|
342
|
-
| \-- nextToken | string | 否 | 下一页 token |
|
|
343
|
-
| \-- hasMore | bool | 是 | 是否还有下一页表记录 |
|
|
344
|
-
| \-- records | array object | 是 | 表记录列表 |
|
|
345
|
-
| \-- -- id | string | 是 | 单条表记录 id |
|
|
346
|
-
| \-- -- fields | map<string,any> | 是 | 表记录具体数据 |
|
|
347
|
-
|
|
348
|
-
#### 2.1.3.4 请求签名
|
|
349
|
-
|
|
350
|
-
签名的作用是确认接口来源为AI 表格服务端,防止其他方调用。
|
|
351
|
-
|
|
352
|
-
**签名规则**
|
|
353
|
-
|
|
354
|
-
在请求接口时,按照如下的规则生成签名,并将对应的签名和数据放在请求的 Header 中。
|
|
355
|
-
|
|
356
|
-
1. 数据源插件上架时,双方约定设置好一个secretKey;
|
|
357
|
-
|
|
358
|
-
2. 获取请求 Header 中的`Ding-Docs-Timestamp`、`Ding-Docs-Signature`的值,分别记为 **timestamp**、**signature**;
|
|
359
|
-
|
|
360
|
-
3. 获取原始请求 Body 的数据记为 body;
|
|
361
|
-
|
|
362
|
-
4. 将 secretKey、body、timestamp 按照规则进行加密得到 `signatureExpected`;
|
|
363
|
-
|
|
364
|
-
5. 校验 **signature** 和`signatureExpected`的值是否一致;
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
**示例代码**
|
|
368
|
-
|
|
369
|
-
Java 代码示例
|
|
370
|
-
|
|
371
|
-
```java
|
|
372
|
-
/**
|
|
373
|
-
* @param secretKey 密钥
|
|
374
|
-
* @param body 请求体
|
|
375
|
-
* @param timestamp 时间戳
|
|
376
|
-
* @param signature 请求签名
|
|
377
|
-
* @return 校验签名是否相等的 boolean
|
|
378
|
-
*/
|
|
379
|
-
public static boolean hmacSha256Base64(String secretKey, String body, long timestamp, String signature) {
|
|
380
|
-
try {
|
|
381
|
-
SecretKeySpec secret_key = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), HMAC_SHA256_ALGORITHM);
|
|
382
|
-
sha256_HMAC.init(secret_key);
|
|
383
|
-
String content = body + timestamp;
|
|
384
|
-
byte[] hash = sha256_HMAC.doFinal(content.getBytes(StandardCharsets.UTF_8));
|
|
385
|
-
String signatureExpected = Base64.getEncoder().encodeToString(hash);
|
|
386
|
-
return signature.equals(signatureExpected);
|
|
387
|
-
} catch (Exception e) {
|
|
388
|
-
throw new RuntimeException("signature not match", e);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
## 插件调试
|
|
394
|
-
|
|
395
|
-
### 2.2.1 插件调试入口
|
|
396
|
-
|
|
397
|
-

|
|
398
|
-
|
|
399
|
-

|
|
400
|
-
|
|
401
|
-
### 2.2.2 填写配置信息连接到插件
|
|
402
|
-
|
|
403
|
-
按照弹窗中的描述,填写必选项的内容,点击下一步,进入填写的前端页面地址。
|
|
404
|
-
|
|
405
|
-

|
|
406
|
-
|
|
407
|
-
### 2.2.3 在数据源自定义页面进行界面设置
|
|
408
|
-
|
|
409
|
-
此时将会弹出上一步在「前端页面地址」中配置的数据源自定义页面,可根据业务情况进行界面设置
|
|
410
|
-
|
|
411
|
-
### 2.2.4 数据源同步配置,完成同步
|
|
412
|
-
|
|
413
|
-
配置同步设置
|
|
414
|
-
|
|
415
|
-

|
|
416
|
-
|
|
417
|
-
完成同步
|
|
418
|
-
|
|
419
|
-

|
|
420
|
-
|
|
421
|
-
### 2.2.5 修改配置
|
|
422
|
-
|
|
423
|
-
通过点击同步表的「更多菜单」中的 「数据同步设置」,可以对数据源配置进行修改。
|
|
424
|
-
|
|
425
|
-

|
|
426
|
-
|
|
427
|
-

|
|
428
|
-
|
|
429
|
-
## 2.3 常见 Q & A
|
|
430
|
-
|
|
431
|
-
**Q:前端页面无法加载**
|
|
432
|
-
|
|
433
|
-

|
|
434
|
-
|
|
435
|
-
A:检查如下
|
|
436
|
-
|
|
437
|
-
1. url链接是否为https协议,非https协议会因为浏览器安全策略,导致页面无法打开
|
|
438
|
-
|
|
439
|
-
2. 代码中是否执行了initView方法,具体见2.1.2.1 章节。[《AI表格数据源 开发指南》](https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TAlmRyQGVGlDd3mE?utm_scene=team_space&iframeQuery=anchorId%3Duu_miwt4zgne3wbz4459fi)
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
**Q: 企业内插件获取授权码失败**
|
|
443
|
-
|
|
444
|
-
A: 见[《AI 表格插件 - 企业内插件发布指南》](https://alidocs.dingtalk.com/i/nodes/vNG4YZ7JnpyN1Mo0uEKQXpb2W2LD0oRE?utm_scene=team_space&iframeQuery=anchorId%3Duu_mkorcf4hllunv8wwipj)
|
|
445
|
-
|
|
446
|
-
# 发布插件
|
|
447
|
-
|
|
448
|
-
目前数据源插件支持**企业内插件**和**三方企业插件**。企业内插件仅服务于本企业自身,仅在当前企业内可见并使用,三方企业插件面向多企业开放,支持其他企业或全网使用插件。
|
|
449
|
-
|
|
450
|
-
## 3.1 插件类型对比及使用场景
|
|
451
|
-
|
|
452
|
-
| **对比维度** | **企业内插件** | **三方企业插件** |
|
|
453
|
-
| --- | --- | --- |
|
|
454
|
-
| 目标用户 | 单一企业内部 | 多家企业客户 |
|
|
455
|
-
| 收费模式 | 自建自用 | 可进行商业化收费 |
|
|
456
|
-
| 审核要求 | 企业内部审核 | 平台严格审核 |
|
|
457
|
-
|
|
458
|
-
### 3.1.2 企业内应用
|
|
459
|
-
|
|
460
|
-
**功能定位**
|
|
461
|
-
|
|
462
|
-
**自用性质**:为企业内部员工提供工作协同和业务管理工具
|
|
463
|
-
|
|
464
|
-
**定制化**:针对本企业特定业务流程和管理需求开发
|
|
465
|
-
|
|
466
|
-
**成本控制**:无需支付第三方费用,主要承担开发和维护成本
|
|
467
|
-
|
|
468
|
-
**技术特点**
|
|
469
|
-
|
|
470
|
-
**权限简单**:基于企业内部组织架构进行权限控制
|
|
471
|
-
|
|
472
|
-
**集成便利**:可直接对接企业内部系统(如HR、财务系统)
|
|
473
|
-
|
|
474
|
-
**部署灵活**:无需平台审核,企业自主管理和发布
|
|
475
|
-
|
|
476
|
-
### 3.1.1 三方企业应用
|
|
477
|
-
|
|
478
|
-
**功能定位**
|
|
479
|
-
|
|
480
|
-
**商业模式**:作为ISV(独立软件供应商)开发,通过钉钉应用市场向多家企业销售
|
|
481
|
-
|
|
482
|
-
**服务范围**:为不同企业提供标准化或定制化的SaaS服务
|
|
483
|
-
|
|
484
|
-
**盈利导向**:以商业化运营为目标,按企业数量、功能模块或使用时长收费
|
|
485
|
-
|
|
486
|
-
**技术特点**
|
|
487
|
-
|
|
488
|
-
**通用性强**:需适配不同企业的个性化需求和权限体系
|
|
489
|
-
|
|
490
|
-
**安全隔离**:多租户架构,确保各企业数据完全隔离
|
|
491
|
-
|
|
492
|
-
**审批流程**:需通过钉钉平台审核,符合安全和合规要求
|
|
493
|
-
|
|
494
|
-
## 3.2 企业内插件
|
|
495
|
-
|
|
496
|
-
企业内插件仅发布插件的企业内可见,无需平台审核,功能由企业自主管理和发布,因此发布比较简单。
|
|
497
|
-
|
|
498
|
-
| **步骤** | **备注** | **截图** |
|
|
499
|
-
| --- | --- | --- |
|
|
500
|
-
| 1. 进入钉钉者开发平台 | 地址:[https://open-dev.dingtalk.com](https://open-dev.dingtalk.com/?hash=%23%2F#/) | |
|
|
501
|
-
| 2. 创建一个企业内部应用 | | <br> |
|
|
502
|
-
| 3. 添加酷应用 | 1. 进入创建的企业应用,点击酷应用卡片在的「添加」<br> <br>2. 进入酷应用菜单,选择创建酷应用<br> <br>3. 在弹窗中选择「扩展到AI表格」<br> <br>4. 填写基本信息、选择数据同步插件、填写调试的用户页面地址,以及服务端接口地址<br> <br>5. 保存,发布。 | <br><br><br> |
|
|
503
|
-
| 4. 发布酷应用 | 1. 进入「应用发布」-「版本管理与发布」,点击创建新版本<br> <br>2. 选择发布的版本号和可见范围,点击保存后,完成发布酷应用 | <br> |
|
|
504
|
-
| 5. 进行联调 | 在「数据连接中心」-「企业专用」,可以看到发布的插件。点击即可唤起在 步骤3 中配置的用户页面地址。 |  |
|
|
505
|
-
| 6、发布 | 注意在测试完成后,可以在钉钉开发者平台中 「版本管理与发布」上的「应用可见范围」,调整插件可见范围。 |  |
|
|
506
|
-
|
|
507
|
-
## 3.3 三方企业插件
|
|
508
|
-
|
|
509
|
-
AI 表格的第三方企业插件依托钉钉开放平台[酷应用](https://open.dingtalk.com/document/orgapp/cool-application-overview)能力实现用户的信息流转、免登鉴权等能力。一个插件就是一个酷应用,因此在三方完成`插件前端`和`插件服务端`开发后,需要在钉钉开放平台创建并发布一个AI表格的数据源酷应用。
|
|
510
|
-
|
|
511
|
-
相比于3.2中的企业内插件,第三方企业插件的发布插件步骤较多,**发布插件前请先了解前置知识:**[**钉钉企业内部应用开发信息**](https://open.dingtalk.com/document/orgapp/learning-map)
|
|
512
|
-
|
|
513
|
-
| **步骤** | **备注** | **截图** |
|
|
514
|
-
| --- | --- | --- |
|
|
515
|
-
| 1、入驻服务商 | 只有入驻钉钉的服务商企业才可以注册三方应用,因此想要发布一个三方插件,需要成为入驻钉钉的服务商。<br>[服务商介绍及入驻页面,点击打开。](https://partner.dingtalk.com/#/) 提交审批后,由 $\color{#0089FF}{@李强(自亦)}$ 完成审核。<br>注意服务商的入驻申请需要由企业管理员提交。组织管理员可以登录oa管理后台进行权限配置,设置管理员身份:[oa管理后台链接](https://oa.dingtalk.com/oa_welcome.htm#/sub_permission/index_pc_new?showIntroTip=true)。 |  |
|
|
516
|
-
| 2、注册三方应用(收费,授权相关) | 1. 开通免费规格的商品<br> <br> 1. 加入企业: [钉钉ISV沟通](https://wx-in-i.dingtalk.com/invite-page/weixin.html?bizSource=____source____&corpId=dinga22b5311e4211323&inviteCode=rqPl3JkxnrtKbje&dtaction=os&cid=&origin=&originMeta=&scene=PCInviteMemberNew&deptId=-1&dtaction=os)后,提交审批: [审批链接](dingtalk://dingtalkclient/action/openapp?app_id=-4&container_type=work_platform&corpid=dinga22b5311e4211323&ddtab=true&redirect_type=jump&redirect_url=https%3A%2F%2Faflow.dingtalk.com%2Fdingtalk%2Fmobile%2Fhomepage.htm%3FappUuid%3Ddinga22b5311e4211323%26backcontrol%3Dfalse%26corpid%3Ddinga22b5311e4211323%26dd_progress%3Dfalse%26dd_share%3Dfalse%26ddtab%3Dtrue%26showmenu%3Dfalse%23%2Fcustom%3Fpcredirect%3Dself%26processCode%3DPROC-E4B69876-7A74-421C-8C40-33527DD10703)。<br> <br> 2. 联系 $\color{#0089FF}{@李强(自亦)}$ 开通发布免费规格的商品,需要appid增加白名单。<br> <br>2. 免费应用<br> <br> 1. 联系 $\color{#0089FF}{@李强(自亦)}$ 沟通,免费应用0元应用,需要appid。<br> <br>3. 申请不展示开放平台入口<br> <br> 1. 提交应用隐藏申请:[应用隐藏申请链接](https://yida.alibaba-inc.com/s/ddopen?spm=a1z32v.14449796.0.0.2c534a97uufFZ6#/FORM-5T566E8114O8EFADCD3SM7XBHS9036EVAFWEL82)<br> <br> 2. 联系 $\color{#0089FF}{@李强(自亦)}$ 沟通,确定应用不在开放平台展示,需要appid。<br> <br>4. 去掉开通通知<br> <br> 1. 联系 $\color{#0089FF}{@李强(自亦)}$ 沟通,去掉开通通知,否则用户启用插件时,会通知企业所在管理员开通应用。<br> <br>5. 应用发布<br> <br>6. 开通成员授权<br> <br> 1. 需要审批。https://open.dingtalk.com/document/isvapp/document-on-authorization-of-application-market-members | |
|
|
517
|
-
| 3、发布酷应用(展示相关) | * 发布扩展到 AI 表格<br> <br>* 加入 钉钉合作伙伴组织<br> <br> * 角色+部门申请链接:[dingtalk://dingtalkclient/page/link?url=https%3A%2F%2Fpre-h5.dingtalk.com%2F40plan%2Fweb-tianyuan-rbac%2Findex.html%3Fddtab%3Dtrue%23%2Fapply](dingtalk://dingtalkclient/page/link?url=https%3A%2F%2Fpre-h5.dingtalk.com%2F40plan%2Fweb-tianyuan-rbac%2Findex.html%3Fddtab%3Dtrue%23%2Fapply)<br> <br> * 其他角色找 $\color{#0089FF}{@李强(自亦)}$ 加入到这个组织<br> <br>* 发布之后,需要提审批 [dingtalk://dingtalkclient/action/openapp?app\_id=-4&container\_type=work\_platform&corpid=ding77a7af8924a84af0&ddtab=true&redirect\_type=jump&redirect\_url=https%3A%2F%2Faflow.dingtalk.com%2Fdingtalk%2Fmobile%2Fhomepage.htm%3Fback\_control%3Dfalse%26backcontrol%3Dfalse%26corpid%3Dding77a7af8924a84af0%26dd\_progress%3Dfalse%26dd\_share%3Dfalse%26ddtab%3Dtrue%26showmenu%3Dfalse%23%2Fcustom%3Fpcredirect%3Dself%26processCode%3DPROC-21027998-89B9-4D56-862D-4122960CA038](dingtalk://dingtalkclient/action/openapp?app_id=-4&container_type=work_platform&corpid=ding77a7af8924a84af0&ddtab=true&redirect_type=jump&redirect_url=https%3A%2F%2Faflow.dingtalk.com%2Fdingtalk%2Fmobile%2Fhomepage.htm%3Fback_control%3Dfalse%26backcontrol%3Dfalse%26corpid%3Dding77a7af8924a84af0%26dd_progress%3Dfalse%26dd_share%3Dfalse%26ddtab%3Dtrue%26showmenu%3Dfalse%23%2Fcustom%3Fpcredirect%3Dself%26processCode%3DPROC-21027998-89B9-4D56-862D-4122960CA038) | <br> |
|
|
518
|
-
| 4、验证和发布 | 完成后,联系 $\color{#0089FF}{@刘福林(烁硕)}$ (数据源插件)或 $\color{#0089FF}{@欧阳莫微(弗隐)}$ (边栏插件) 的功能测试和审批发布。 | |
|
|
519
|
-
|
|
520
|
-
# 附录
|
|
521
|
-
|
|
522
|
-
## 4.1 字段类型枚举
|
|
523
|
-
|
|
524
|
-
| 字段 | 类型(type) | 属性(property) |
|
|
525
|
-
| --- | --- | --- |
|
|
526
|
-
| 文本 | text | 无 |
|
|
527
|
-
| 数字 | number | ```java<br>{<br> formatter: "INT" // 整数<br> \| "FLOAT_1" // 保留1位小数<br> \| "FLOAT_2" // 保留2位小数<br> \| "FLOAT_3" // 保留3位小数<br> \| "FLOAT_4" // 保留4位小数<br> \| "THOUSAND" // 千分位<br> \| "THOUSAND_FLOAT" // 千分位(小数点)<br> \| "PRESENT" // 百分比<br> \| "PRESENT_FLOAT" // 百分比(小数点)<br> \| "CNY" // 人民币<br> \| "CNY_FLOAT" // 人民币(小数点)<br> \| "HKD" // 港元<br> \| "HKD_FLOAT" // 港元(小数点)<br> \| "USD" // 美元<br> \| "USD_FLOAT" // 美元(小数点)<br> \| "EUR" // 欧元<br> \| "EUR_FLOAT" // 欧元(小数点)<br> \| "JPY" // 日元<br> \| "JPY_FLOAT"; // 日元(小数点)<br>}<br>``` |
|
|
528
|
-
| 单选 | singleSelect | ```java<br>{<br> choices: [{<br> name: "optionName1" // 配置选项名<br> }, {<br> name: "optionName2"<br> }];<br>}<br>``` |
|
|
529
|
-
| 多选 | multipleSelect | 同「单选」 |
|
|
530
|
-
| 日期 | date | ```java<br>{<br> formatter: "YYYY-MM-DD" // 显示格式: 2023-12-31<br> \| "YYYY-MM-DD HH:mm" // 显示格式: 2023-12-31 09:00<br> \| "YYYY/MM/DD" // 显示格式: 2023/12/31<br> \| "YYYY/MM/DD HH:mm"; // 显示格式: 2023/12/31 09:00<br>}<br>``` |
|
|
531
|
-
| 链接 | url | 无 |
|
|
532
|
-
|
|
533
|
-
## 4.2 数据连接器
|
|
534
|
-
|
|
535
|
-
### 4.2.1 核心要素
|
|
536
|
-
|
|
537
|
-
### 4.2.2 关键流程
|
|
538
|
-
|
|
539
|
-

|
|
540
|
-
|
|
541
|
-
1. 用户只有通过授权才能拿到三方平台数据;
|
|
542
|
-
|
|
543
|
-
2. 说明同步的数据的来源和范围;
|
|
544
|
-
|
|
545
|
-
3. 说明三方数据源同步的表结构以及表记录;
|
|
546
|
-
|
|
547
|
-
4. 根据配置的三方数据源,返回数据记录,写入同步表中。
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
#### 4.2.2.1 三方平台授权
|
|
551
|
-
|
|
552
|
-
#### 4.2.2.2 同步配置
|
|
553
|
-
|
|
554
|
-
授权成功后,用户可以进行数据同步配置。
|
|
555
|
-
|
|
556
|
-
```mermaid
|
|
557
|
-
sequenceDiagram
|
|
558
|
-
autonumber
|
|
559
|
-
actor user as 用户
|
|
560
|
-
participant f as 多维表前端
|
|
561
|
-
participant cf as 插件前端
|
|
562
|
-
participant cb as 插件服务端
|
|
563
|
-
participant b as 多维表服务端
|
|
564
|
-
|
|
565
|
-
user ->>f: 点击三方数据源同步
|
|
566
|
-
f ->>f: 三方数据源插件授权
|
|
567
|
-
f ->>cf: 唤起三方数据源配置页面
|
|
568
|
-
cf ->>cf: 数据源配置
|
|
569
|
-
cf ->>f: 配置完成点下一步
|
|
570
|
-
f ->>+b: 请求表字段配置信息
|
|
571
|
-
b ->>cb: 带上数据源配置参数,请求插件服务端,获取表字段信息
|
|
572
|
-
cb -->>b: 返回表结构数据
|
|
573
|
-
b -->>-f: 返回表结构数据
|
|
574
|
-
f -->>user: 返回表结构数据
|
|
575
|
-
user ->>f: 选择要同步的数据源字段及配置,点击保存
|
|
576
|
-
f ->>b: 保存数据源配置
|
|
577
|
-
```
|
|
578
|
-
|
|
579
|
-
#### 4.2.2.3 数据同步
|
|
580
|
-
|
|
581
|
-
```mermaid
|
|
582
|
-
sequenceDiagram
|
|
583
|
-
autonumber
|
|
584
|
-
participant s as 多维表服务端
|
|
585
|
-
participant cb as 插件服务端
|
|
586
|
-
|
|
587
|
-
s ->>s: 查询数据源配置信息
|
|
588
|
-
s ->> cb: 获取数据源表结构数据
|
|
589
|
-
cb -->> s: 返回表结构数据
|
|
590
|
-
loop 分页拉取数据源分页记录
|
|
591
|
-
s ->> cb: 请求数据源记录信息
|
|
592
|
-
cb -->> s: 返回数据源记录
|
|
593
|
-
end
|
|
594
|
-
s ->>s: 更新同步表行数据
|
|
595
|
-
```
|
|
596
|
-
|
|
597
|
-
## 4.3 研发skill(持续更新中)
|
|
598
|
-
|
|
599
|
-
下面是一个用于快速开发数据源插件的skill,内部描述了如何快速部署、测试一个自定义数据源插件。
|
|
600
|
-
|
|
601
|
-
[请至钉钉文档查看附件《ai-table-datasource-plugin-generator.zip》。](https://alidocs.dingtalk.com/i/nodes/1OQX0akWmBejogd0TAlmRyQGVGlDd3mE?iframeQuery=anchorId%3DX02mn48o78qy73f712co7i)
|
|
602
|
-
|
|
603
|
-
# FAQ
|
|
604
|
-
|
|
605
|
-
# 联系我们
|
|
606
|
-
|
|
607
|
-
$\color{#0089FF}{@刘福林(烁硕)}$ $\color{#0089FF}{@张瑞(陌渊)}$
|