Use a headed browser to automatically complete DingTalk channel integration for QwenPaw. Applicable when the user mentions DingTalk, developer console, Client ID, Client Secret, bot, Stream mode, binding or configuring a channel. Supports pausing when a login page is detected and resuming after the user logs in.
This skill automates the creation of a DingTalk application and the binding of a QwenPaw channel using a headed browser.
{"action": "start", "headed": true}Must pause when a login gate is encountered:
Any application configuration change only takes effect after creating a new version and publishing:
Before starting automated clicks, initiate a "configuration confirmation" with the user, clearly informing them of customizable fields, image specifications, and default values. Use the following structured confirmation:
Allow the user to customize the following fields:
Clearly state the image specifications (prominently):
240*240px or larger, 1:1 ratio, under 2MB, no rounded corners.png/jpeg/jpg, no more than 2MB.Clearly state the default values (used automatically if the user does not specify):
QwenPawYour personal assistanthttps://img.alicdn.com/imgextra/i4/O1CN01M0iyHF1FVNzM9qjC0_!!6000000000492-2-tps-254-254.pnghttps://img.alicdn.com/imgextra/i4/O1CN01M0iyHF1FVNzM9qjC0_!!6000000000492-2-tps-254-254.pngIf the user provides no custom values, you must first explicitly reply:
file_upload with the local path array (paths_json)paths_json of file_upload must be a "JSON string array" -- note the escaping:{
"action": "file_upload",
"paths_json": "[\"xxx.png\"]",
"frame_selector": "iframe[src*=\"/fe/app?isHideOuterFrame=true\"]"
}If the page is within an iframe, prefer including frame_selector; otherwise the upload control may not be found or the chooser may not trigger.
You must click the upload entry before calling file_upload; calling it directly will result in:
No chooser. Click upload then file_upload.Common structural features of the bot icon area that can be used for locating elements (examples; these may appear as Chinese UI labels in the DingTalk console):
text: "* 机器人图标" (Bot Icon)button: "使用应用图标" (Use App Icon)button: "avatar" (usually contains img "avatar" inside)When the snapshot shows both "使用应用图标" ("Use App Icon") and "avatar", prefer clicking the avatar button to trigger the upload, then call file_upload.
headed: true)https://open-dev.dingtalk.com/snapshot to check if login is requiredIf login is required, pause with the following message:
Login to the DingTalk Developer Console is required. I have paused automated operations. Please complete the login in the opened browser. Reply "continue" when done, and I will resume from the current page.
After the user confirms login, continue:
QwenPawYour personal assistantIf the page text or structure does not match expectations, re-run snapshot and relocate elements based on visible text semantics.
https://img.alicdn.com/imgextra/i4/O1CN01M0iyHF1FVNzM9qjC0_!!6000000000492-2-tps-254-254.pnghttps://img.alicdn.com/imgextra/i4/O1CN01M0iyHF1FVNzM9qjC0_!!6000000000492-2-tps-254-254.pngStream Mode (the Chinese UI may display Stream 模式)Application Release -> Version Management & ReleaseBasic Information -> Credentials & Basic InfoClient ID (AppKey) and Client Secret (AppSecret) are on this page. Do not make changes proactively; guide the user to bind them on their ownAfter obtaining the credentials, guide the user to choose one of the following methods:
Console frontend configuration:
Control -> Channels -> DingTalkClient ID and Client SecretConfiguration file method:
"dingtalk": {
"enabled": true,
"bot_prefix": "[BOT]",
"client_id": "Your Client ID",
"client_secret": "Your Client Secret"
}Path: ~/.qwenpaw/config.json, under channels.dingtalk.
Client ID and the actual Client Secret.console configuration or ~/.qwenpaw/config.json.Control -> Channels -> DingTalkchannels.dingtalk field in ~/.qwenpaw/config.jsonExecute in the following order by default:
start with headed: trueopensnapshotclick / type / select_option / press_key as neededsnapshot after page transitionsstop when doneref from the latest snapshot; only use selector when necessary.wait_for) and immediately re-run snapshot.734c8b9
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.