mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 03:55:55 +00:00
5.7 KiB
5.7 KiB
DingTalk EBA Adapter Migration Record
Status: migrated with partial plugin E2E evidence.
Adapter directory: src/langbot/pkg/platform/adapters/dingtalk/
What Changed
The DingTalk adapter now has an Event-Based Agents adapter package with:
manifest.yamlfor adapter metadata, configuration, events, common APIs, and platform-specific APIs.adapter.pyfor DingTalk client startup, native callback handling, legacy compatibility, and EBA dispatch.event_converter.pyfor native DingTalk events to common EBA events.message_converter.pyfor DingTalk message payloads to/from commonMessageChaincomponents.api_impl.pyfor common EBA API implementations.platform_api.pyfor DingTalk-specificcall_platform_apiactions.
The legacy DingTalk HTTP client now returns successful JSON response bodies from proactive send methods and raises with response details on non-200 responses.
Configuration
| Field | Required | Notes |
|---|---|---|
client-id |
yes | DingTalk robot/client identifier. |
client-secret |
yes | DingTalk client secret. |
robot-code |
yes | Robot code used for send APIs. |
robot-name |
no | Used for bot mention/self filtering and display. |
encrypt-key |
no | DingTalk callback encryption key when configured. |
verification-token |
no | DingTalk callback verification token when configured. |
Supported Events
| Event | Support | Evidence |
|---|---|---|
message.received |
implemented | plugin-e2e-ui private text and emoji-as-text. |
platform.specific |
implemented | Not reproduced in the latest UI run. |
Receive Components
| Component | Support | Evidence |
|---|---|---|
Source |
supported | plugin-e2e-ui private message. |
Plain |
supported | plugin-e2e-ui private text. DingTalk emoji currently arrives as plain text such as [smile]. |
At |
converter path | Group trigger was not completed in the latest run. |
AtAll |
fallback/send-side only | Not completed inbound. |
Image |
supported | Real DingTalk Mac private-chat image upload reached the plugin as common Image. |
Voice |
converter path | Real UI inbound voice was not completed. |
File |
supported | Real DingTalk Mac private-chat file upload reached the plugin as common File. |
Quote |
converter path | Real UI inbound quote was not completed. |
Face |
not native common mapping | DingTalk emoji was observed as Plain, not Face. |
Forward |
not-supported inbound | DingTalk does not expose a portable structured forward event in this adapter. |
Send Components
| Component | Support | Evidence |
|---|---|---|
Plain |
supported | plugin-e2e-outbound. |
At |
supported or text fallback | plugin-e2e-outbound. |
AtAll |
fallback | plugin-e2e-outbound. |
Image |
supported | plugin-e2e-outbound. |
File |
supported | plugin-e2e-outbound. |
Quote |
fallback | plugin-e2e-outbound. |
Face |
fallback | plugin-e2e-outbound as text fallback. |
Forward |
flattened fallback | plugin-e2e-outbound. |
Voice |
fallback/endpoint-dependent | Not separately verified as a native DingTalk voice send. |
Common APIs
| API | Support | Notes |
|---|---|---|
send_message |
supported | Verified through EBAEventProbe. |
reply_message |
supported | Verified through quoted/fallback send path. |
get_message |
cache-backed | Requires the message to have been observed by this adapter process. |
get_group_info |
cache-backed/API-backed where available | Group path not completed in latest UI run. |
get_group_list |
supported where DingTalk API allows | Limited live coverage. |
get_group_member_info |
supported where DingTalk API allows | Limited live coverage. |
get_user_info |
supported | Private sender path verified. |
get_friend_list |
limited | DingTalk does not expose a portable friend-list equivalent. |
get_file_url |
supported with media/file identifiers | Real inbound file yielded a platform file URL in the converted File component. |
call_platform_api |
supported | Safe action check_access_token verified. |
Platform-Specific APIs
| Action | Support | Evidence |
|---|---|---|
check_access_token |
supported | plugin-e2e. |
refresh_access_token |
supported | Implemented; not separately reproduced in the latest plugin run. |
get_file_url |
supported | Real inbound file yielded a platform file URL in the converted File component. |
get_audio_base64 |
supported | Needs real inbound audio/media ID. |
download_image_base64 |
supported | Real inbound image reached the plugin as Image; separate image-download API replay was not completed. |
End-to-End Evidence
Evidence files:
- Text/API/component JSONL:
data/temp/dingtalk-plugin-e2e-20260510-rerun.jsonl - Real UI inbound media JSONL:
data/temp/dingtalk-plugin-e2e-media-ui.jsonl
Verified:
- DingTalk Mac private chat in the
LangBot Teamorganization producedMessageReceivedthrough LangBot standalone runtime andEBAEventProbe. - The common chain was
Source + Plainfor normal text. - DingTalk emoji was received as
Source + Plain, not commonFace. - Real DingTalk Mac private-chat image upload was received as
Source + Image. - Real DingTalk Mac private-chat file upload was received as
Source + File. - The plugin sent outbound text, mention/fallback, image, quote/fallback, file, and forward/fallback messages visible in DingTalk.
- The plugin called safe SDK and DingTalk platform APIs.
Not completed:
- Real UI inbound voice.
- Real UI inbound quote.
- Group trigger with a real robot mention.
- Destructive or organization-mutating APIs.