first commit

This commit is contained in:
2026-09-02 11:44:52 +08:00
commit 0c8fa2653e
309 changed files with 57278 additions and 0 deletions
@@ -0,0 +1,58 @@
# 端到端链路(recipes)
dev 的端到端任务都是「定ä½åº”用,改容器æŸèŠ‚ç‚¹ï¼ŒæŒ‰å®¡æ‰¹éœ€è¦èµ°ç‰ˆæœ¬ç”Ÿæ•ˆï¼Œæœ€åŽå›žè¯»éªŒè¯ã€ã€‚æ¯æ­¥å…ˆ `--dry-run` ç¡®è®¤å† `--yes`ï¼Œå‚æ•°ç”¨å¯¹åº”命令的 `--help` 查询,¼Œç»†èŠ‚è¿›å¯¹åº” reference。
## 建一个钉钉里打开的网页应用
1. `dev app create --name <å>` 建应用,拿 unifiedAppId
2. `dev app webapp config` é…移动端/PC é¦–é¡µï¼ˆè§ webapp.md)
3. `dev app version create` 建版本
4. `dev app version check-approval` 预检是å¦éœ€å®¡æ‰¹
5. `dev app version publish` å‘布(需审批时让用户选审批人)
6. 回读 `dev app version status` 到 `RELEASE` æ‰ç®—生效
## æƒé™ä»Žç”³è¯·åˆ°ç”Ÿæ•ˆ
1. `dev app permission list` 选 `scopeValue`(选择顺åºè§ permission.md)
2. `dev app permission add --scope-values <值>` 申请
3. 若是 `requiredApproval` çš„æƒé™ï¼Œèµ°ç‰ˆæœ¬ï¼š`version create`ï¼Œå† `check-approval`ï¼Œå† `publish --approver-user-id <用户选的>`ï¼Œæœ€åŽ `version status`
4. å…审æƒé™ç›´æŽ¥å¼€é€šï¼Œä¸å¿…å‘版本
## åšä¸€ä¸ªç­”疑机器人并接到本地调试
1. `dev app create --name <å>` 创建应用,拿明确 `unifiedAppId`
2. `dev app robot config --unified-app-id <unifiedAppId>` é…置机器人能力;需è¦å¯ç”¨æ—¶å† `robot enable`
3. 线上使用闭环:`version create` → `check-approval` → `publish` → `version status`ï¼›`SELECT_APPROVER` 时必须等用户选择审批人,ä¸é»˜è®¤å–第一个
4. 本地调试/值守:`dev connect --unified-app-id <unifiedAppId>` 把机器人接到本地 agentï¼ˆè§ connect.md);注æ„订阅事件å‰è¦å…ˆå»ºè”é•¿è¿žï¼ˆè§ event.md)
5. 若走无绑定的 `robot submit/result`ï¼Œåªæœ‰ç»“果返回明确 `unifiedAppId` æ‰èƒ½ç»§ç»­ç‰ˆæœ¬å‘布
6. å®Œæˆæ€ä¸Žç¼º `unifiedAppId`ã€`SELECT_APPROVER` 等门ç¦åˆ¤å®šè§ [devapp.md](../devapp.md)「核心规则ã€ï¼šå»ºè”æˆåŠŸ + 版本进入 `RELEASE`/`AUDIT`/`UNDER_REVIEW` æ‰ç®—完æˆ
## é‡å¯å®ˆæŠ¤è¿›ç¨‹è¿žæŽ¥å™¨ï¼ˆä¸å­˜å¯†é’¥ï¼‰
守护进程被 stop / kill / 崩溃åŽï¼Œé€šè¿‡æŒä¹…化的 `unifiedAppId` 釿–°æ‹‰å–密钥并é‡å¯ï¼Œæ— éœ€æœ¬åœ°ä¿å­˜ AppSecret。
1. `dev connect --daemon --unified-app-id <id> --channel <channel>` 首次å¯åŠ¨ï¼ˆ`unifiedAppId` å’Œ `channel` 会写入 `~/.dws/connect/<key>/daemon.pid`)
2. `dev connect restart --unified-app-id <id>` é‡å¯ï¼šè‡ªåЍ stop 旧进程 → 从 dev 平尿‹‰å– AppKey/Secret → 釿–°å»ºè
3. `dev connect status --unified-app-id <id>` 确认æ¢å¤ `healthy`
4. è‹¥ daemon.pid 未æŒä¹…化 `unifiedAppId`(如用 `--robot-client-id` 直接å¯åŠ¨çš„ï¼‰ï¼Œrestart 会æç¤ºæ”¹ç”¨ `--unified-app-id` å¯åЍ
注æ„:密钥ä¸è½ç›˜ï¼Œæ¯æ¬¡ restart 动æ€ä»Žå¼€å‘者平å°èŽ·å–ï¼›`daemon.pid` åªå­˜ `unifiedAppId`ã€`channel`ã€`clientId`(公开值)。
## 上传图片拿 mediaId(应用图标 / 机器人图标)
åº”ç”¨å›¾æ ‡ã€æœºå™¨äººå›¾æ ‡éƒ½é  mediaId 指定,但 dev 命令集ä¸å«ä¸Šä¼ â€”—mediaId è¦è°ƒé’‰é’‰ OpenAPI 拿到:
1. 拿凭è¯ï¼š`dev app credentials get --unified-app-id <id>` å `appKey/appSecret`(secret æŒ‰æ•æ„Ÿå¤„ç†ï¼Œä¸å†™è¿›å›žç­”)
2. æ¢ access_token:`GET https://oapi.dingtalk.com/gettoken?appkey=<appKey>&appsecret=<appSecret>`,å–返回的 `access_token`(有效期约 7200 ç§’ã€gettoken 有频控,缓存å¤ç”¨åˆ«æ¯æ¬¡ä¸Šä¼ éƒ½æ¢ï¼‰
3. 上传图片:`POST https://oapi.dingtalk.com/media/upload?access_token=<token>&type=image`,multipart 表å•字段å `media`,返回 `media_id`(形如 `@lA...`)。图标用方形图(如 256×256 çš„ jpg/png)
```
curl -F "media=@/path/to/img.png;type=image/png" \
"https://oapi.dingtalk.com/media/upload?access_token=<token>&type=image"
```
4. 用 mediaId 更新:机器人图标 `dev app robot config --unified-app-id <id> --icon-media-id <media_id>`;应用图标 `dev app update --unified-app-id <id> --icon-media-id <media_id>`。写æ“作先 `--dry-run` å† `--yes`
5. 回读:`dev app robot get` 看 `iconMediaId` å˜ä¸ºæ–°å€¼ï¼ˆåº”用图标看 `app get` çš„ `icon`)
## 查「为什么没生效 / 机器人æœä¸åˆ° / æƒé™åŠ äº†è¿˜æŠ¥é”™ã€
å…ˆ `dev app version status`——改é…ç½®ä¸ç­‰äºŽç”Ÿæ•ˆï¼Œæœªå‘到 `RELEASE` å°±ä¸ç”Ÿæ•ˆã€‚