mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-07 14:26:03 +00:00
85 lines
3.2 KiB
Markdown
85 lines
3.2 KiB
Markdown
# Slack EBA Adapter
|
|
|
|
## Structure
|
|
|
|
Slack is migrated into `src/langbot/pkg/platform/adapters/slack/` with the standard EBA adapter layout:
|
|
|
|
- `adapter.py` owns lifecycle, listener dispatch, unified webhook handling, outbound send/reply, and event caches.
|
|
- `event_converter.py` maps Slack `im` and `app_mention` channel events to `message.received`.
|
|
- `message_converter.py` maps common `MessageChain` components to Slack text fallback and maps inbound Slack text/image payloads back to EBA components.
|
|
- `api_impl.py` provides cache-backed common read APIs.
|
|
- `platform_api.py` declares safe Slack-specific API actions.
|
|
- `manifest.yaml` declares `slack-eba`.
|
|
|
|
The legacy `src/langbot/pkg/platform/sources/slack.py` adapter is kept unchanged.
|
|
|
|
## Configuration
|
|
|
|
| Field | Required | Notes |
|
|
|-------|----------|-------|
|
|
| `webhook_url` | No | Generated by LangBot. Paste it into Slack Event Subscriptions. |
|
|
| `bot_token` | Yes | Slack bot token, usually `xoxb-...`. |
|
|
| `signing_secret` | Yes | Slack app signing secret. |
|
|
|
|
## Events
|
|
|
|
| Event | Notes |
|
|
|-------|-------|
|
|
| `message.received` | Emitted for private `im` messages and channel `app_mention` events. Channel messages are mapped to group chats. |
|
|
| `platform.specific` | Reserved for Slack event types that are not converted into common message events. |
|
|
|
|
## Common APIs
|
|
|
|
Required:
|
|
|
|
- `send_message`
|
|
- `reply_message`
|
|
|
|
Optional:
|
|
|
|
- `get_message`
|
|
- `get_user_info`
|
|
- `get_friend_list`
|
|
- `get_group_info`
|
|
- `get_group_list`
|
|
- `get_group_member_list`
|
|
- `get_group_member_info`
|
|
- `call_platform_api`
|
|
|
|
Cache-backed APIs are only available after the relevant inbound event has been observed.
|
|
|
|
## Platform APIs
|
|
|
|
| Action | Notes |
|
|
|--------|-------|
|
|
| `get_mode` | Returns webhook mode and configured bot account id. |
|
|
| `auth_test` | Calls Slack `auth.test` with the configured bot token. |
|
|
|
|
## Known Limits
|
|
|
|
- Slack file/image outbound is currently represented as text fallback because the existing Slack SDK wrapper only exposes `chat_postMessage`.
|
|
- Inbound channel coverage follows the legacy adapter behavior: only `app_mention` events are treated as group messages.
|
|
- Real live testing requires a public callback URL configured in Slack Event Subscriptions.
|
|
|
|
## Verification
|
|
|
|
Local mocked unit coverage validates manifest parity, event conversion, legacy listener compatibility, cache-backed APIs, send/reply routing, and declared platform APIs.
|
|
|
|
Plugin E2E evidence was captured on June 2, 2026 against `dev.rockchin.top` with Slack private DM input and `EBAEventProbe` through the standalone runtime.
|
|
|
|
Evidence file: `/home/wgc/LangBotxg/LangBotEbaTest/data/temp/slack_eba_plugin_probe.jsonl`.
|
|
|
|
Observed:
|
|
|
|
- Real Slack private text produced `MessageReceived` with `adapter_name=slack-eba`, `Source + Plain`, private chat type, and filled `bot_uuid`.
|
|
- Safe common APIs passed: `get_message`, `get_user_info`, `get_friend_list`.
|
|
- Outbound component fallback sweep passed through `send_message`: plain/at/face, image, quote, file, and forward.
|
|
- Declared Slack platform APIs passed: `get_mode`, `auth_test`.
|
|
|
|
Still pending:
|
|
|
|
- Channel `app_mention` plugin E2E.
|
|
- Real inbound Slack file/image UI evidence.
|
|
|
|
Live probe scaffold: `tests/e2e/live_slack_eba_probe.py`.
|