59 lines
4.1 KiB
Markdown
59 lines
4.1 KiB
Markdown
# 端到端链路(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` å°±ä¸�生效。
|