mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 13:32:23 +00:00
* feat: add managed Telegram login flow and API endpoints - Introduced a new managed Telegram login flow, allowing users to link their Telegram accounts via a deep link. - Added `telegram_login_start` and `telegram_login_check` functions to handle the creation of link tokens and status checks for user linking. - Updated the API with new endpoints for managing Telegram login, including detailed response structures for link token creation and status verification. - Enhanced the `.env.example` file to include a configuration option for the Telegram bot username, facilitating easier setup for developers. * refactor: update Telegram integration to use core RPC for login flow - Replaced the managed DM API with core RPC calls for initiating and checking Telegram login status. - Introduced new API methods `telegramLoginStart` and `telegramLoginCheck` to handle link token creation and verification. - Updated the TelegramConfig and MessagingPanel components to utilize the new login flow, enhancing the user experience and simplifying the codebase. - Adjusted tests to reflect changes in the login process and ensure proper functionality. * docs: update TODO list with new user interaction registration task for memory skill * feat: add ChannelSetupModal for configuring channel integrations - Introduced a new reusable modal component, ChannelSetupModal, for configuring channel integrations such as Telegram and Discord. - The modal can be opened from the Skills page or Settings, enhancing user experience by providing a centralized configuration interface. - Updated MessagingPanel and Skills components to integrate the new modal, allowing users to easily manage their channel settings. - Implemented channel-specific configuration components for better modularity and maintainability. * feat: add ChannelSetupModal for configuring channel integrations - Introduced a new reusable modal component, ChannelSetupModal, for configuring channel integrations such as Telegram and Discord. - The modal can be opened from the Skills page or Settings, enhancing user experience by providing a centralized configuration interface. - Updated MessagingPanel and Skills components to integrate the new modal, allowing users to easily manage their channel settings. - Implemented channel-specific configuration components for better modularity and maintainability. * style: update channel components for improved UI consistency - Refactored styles across various channel configuration components, including ChannelCapabilities, ChannelConfigPanel, ChannelFieldInput, ChannelSelector, DiscordConfig, TelegramConfig, and WebChannelConfig. - Enhanced color schemes and layout for better readability and visual appeal, ensuring a cohesive design across the application. - Updated status badge styles in definitions.ts to align with the new design standards. - Improved error message visibility and loading indicators in Channels page for a more user-friendly experience. * refactor: update WebChannelConfig and tests for improved clarity and functionality - Renamed the `definition` prop in WebChannelConfig to `_definition` for clarity. - Updated test cases in DiscordConfig and TelegramConfig to reflect changes in auth mode labels, ensuring accurate rendering of UI elements. - Adjusted the TelegramConfig test to fix the click event on the connect button, enhancing test reliability. - Modified channel definitions to streamline the managed DM auth mode, improving code organization and maintainability. * fix: enhance WebGL error handling in MeshGradient and RotatingTetrahedronCanvas components - Added error handling in the MeshGradient component to gracefully catch WebGL initialization failures, ensuring the app remains functional when the GPU context is unavailable. - Updated the RotatingTetrahedronCanvas component to verify WebGL context availability before initializing the renderer, preventing crashes and improving user experience. - Modified channel definitions to update auth mode labels for clarity and consistency across the application. * style: update RotatingTetrahedronCanvas colors and animation speed - Changed fill and edge colors in the RotatingTetrahedronCanvas component for improved visual appeal. - Adjusted opacity of the fill material to enhance transparency effects. - Introduced a speed multiplier for rotation animations, allowing for more dynamic visual effects. * refactor: improve WebGL error handling and cleanup in MeshGradient component - Removed unused canvas reference and WebGL context probing to streamline the MeshGradient component. - Enhanced error handling during shader compilation to throw an error when WebGL context may be lost, improving robustness. - Wrapped initialization logic in a try-catch block to gracefully handle failures, ensuring the gradient functionality is disabled if initialization fails. * refactor: simplify Telegram login flow by removing unused link token check - Removed the `check_channel_link_status` method from the `BackendOAuthClient`, streamlining the authentication process. - Updated `telegram_login_check` to directly fetch the user profile and determine link status based on the presence of `telegramId`, enhancing clarity and reducing complexity. - Adjusted logging to reflect the new flow and ensure accurate debugging information. * feat: enhance JSON-RPC method invocation with session expiration handling - Added logic to automatically clear stored session on receiving a 401 error from the backend, improving user experience by ensuring users are redirected to the login page when their session expires. - Introduced a helper function to identify session expiration errors, enhancing code clarity and maintainability. - Refactored the `invoke_method` function to incorporate this new error handling mechanism, ensuring robust session management during RPC calls. * style: update app-dotted-canvas background gradient for improved visibility - Changed the radial gradient background color in the app-dotted-canvas from rgba(0, 0, 0, 0.2) to rgba(0, 0, 0, 0.5), enhancing the contrast and overall visual appeal of the component. * feat: implement channel messaging API with end-to-end testing script - Added a new script `test-channel-messaging.sh` for end-to-end testing of message sending to Telegram via the backend API. - Implemented new backend API methods for sending messages, reactions, creating threads, updating threads, and listing threads in channels. - Enhanced the `BackendOAuthClient` with methods to handle channel messaging operations. - Updated controller schemas and handlers to support the new messaging functionalities, ensuring robust interaction with the backend. - Improved logging for better debugging and tracking of channel operations. * feat: add test-channel-receive script for real-time channel message listening - Introduced a new script `test-channel-receive.mjs` that connects to the backend Socket.IO server and listens for incoming channel messages. - Implemented session token retrieval and validation against the backend, ensuring secure message handling. - Added options for debugging and sending test messages, enhancing the script's usability for testing purposes. - Improved logging for better visibility of connection status and incoming messages. * feat: implement inbound channel message handling for real-time responses - Added functionality to handle inbound messages from channels (e.g., Telegram, Discord) by introducing the `handle_channel_inbound_message` function. - Implemented agent inference loop to process messages and send replies back to the originating channel via the REST API. - Enhanced logging for better tracking of message reception and response handling. - Integrated timeout handling to manage long-running requests effectively. * style: fix prettier formatting for channel components Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
142 lines
5.7 KiB
Bash
Executable File
142 lines
5.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ──────────────────────────────────────────────────────────────────────
|
|
# test-channel-messaging.sh
|
|
#
|
|
# End-to-end test: sends a message from the backend to the user's
|
|
# linked Telegram account via the Rust core RPC.
|
|
#
|
|
# Usage:
|
|
# bash scripts/test-channel-messaging.sh
|
|
# bash scripts/test-channel-messaging.sh "Custom message text"
|
|
#
|
|
# Prerequisites:
|
|
# - Active session token (login via the app first)
|
|
# - Telegram account linked (completed managed DM flow)
|
|
# - Core binary built: cargo build --bin openhuman-core
|
|
# ──────────────────────────────────────────────────────────────────────
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
# Load env
|
|
if [[ -f "$ROOT_DIR/scripts/load-dotenv.sh" ]]; then
|
|
source "$ROOT_DIR/scripts/load-dotenv.sh" 2>/dev/null || true
|
|
fi
|
|
|
|
CORE_BIN="${OPENHUMAN_CORE_BIN:-}"
|
|
if [[ -z "$CORE_BIN" ]]; then
|
|
CORE_BIN="$ROOT_DIR/target/debug/openhuman-core"
|
|
if [[ ! -x "$CORE_BIN" ]]; then
|
|
echo "Building openhuman-core..."
|
|
cargo build --manifest-path "$ROOT_DIR/Cargo.toml" --bin openhuman-core 2>&1 | tail -2
|
|
fi
|
|
fi
|
|
|
|
MESSAGE="${1:-Hello from OpenHuman! 🚀 This is a test message sent via the channel messaging API.}"
|
|
|
|
divider() { echo "────────────────────────────────────────────────"; }
|
|
|
|
echo ""
|
|
echo "🧪 Channel Messaging E2E Test"
|
|
divider
|
|
|
|
# ── Step 1: Check session ────────────────────────────────────────────
|
|
echo ""
|
|
echo "1️⃣ Checking session..."
|
|
AUTH_STATE=$("$CORE_BIN" auth get_state 2>&1 | grep -A20 '{' || true)
|
|
IS_AUTH=$(echo "$AUTH_STATE" | grep -o '"isAuthenticated": *true' || true)
|
|
|
|
if [[ -z "$IS_AUTH" ]]; then
|
|
echo " ❌ Not authenticated. Please login via the app first."
|
|
echo " Auth state:"
|
|
echo "$AUTH_STATE" | head -10
|
|
exit 1
|
|
fi
|
|
echo " ✅ Authenticated"
|
|
|
|
# ── Step 2: Validate session against backend ─────────────────────────
|
|
echo ""
|
|
echo "2️⃣ Validating session with backend (GET /auth/me)..."
|
|
ME_RESULT=$("$CORE_BIN" auth get_me 2>&1 || true)
|
|
if echo "$ME_RESULT" | grep -qi "401\|Invalid token\|expired\|failed"; then
|
|
echo " ❌ Session token expired or invalid."
|
|
echo " $ME_RESULT" | tail -3
|
|
echo ""
|
|
echo " Please re-login via the app to get a fresh token."
|
|
exit 1
|
|
fi
|
|
|
|
TELEGRAM_ID=$(echo "$ME_RESULT" | grep -o '"telegramId": *"[^"]*"' | head -1 | sed 's/.*: *"//;s/"//' || true)
|
|
USERNAME=$(echo "$ME_RESULT" | grep -o '"username": *"[^"]*"' | head -1 | sed 's/.*: *"//;s/"//' || true)
|
|
echo " ✅ Session valid — user: ${USERNAME:-unknown}, telegramId: ${TELEGRAM_ID:-not linked}"
|
|
|
|
if [[ -z "$TELEGRAM_ID" ]]; then
|
|
echo ""
|
|
echo " ⚠️ No telegramId found on your profile."
|
|
echo " Complete the Telegram managed DM linking flow first."
|
|
echo " (Skills page → Telegram → Login with OpenHuman → click Start in Telegram)"
|
|
exit 1
|
|
fi
|
|
|
|
# ── Step 3: Send a text message via Telegram ─────────────────────────
|
|
echo ""
|
|
echo "3️⃣ Sending message to Telegram..."
|
|
echo " Channel: telegram"
|
|
echo " Message: $MESSAGE"
|
|
divider
|
|
|
|
SEND_RESULT=$("$CORE_BIN" channels send_message \
|
|
--channel telegram \
|
|
--message "{\"text\": \"$MESSAGE\"}" 2>&1 || true)
|
|
|
|
echo "$SEND_RESULT" | grep -A20 '{' | head -20
|
|
|
|
if echo "$SEND_RESULT" | grep -qi '"success": *true\|"messageId"'; then
|
|
echo ""
|
|
echo " ✅ Message sent successfully! Check your Telegram."
|
|
else
|
|
echo ""
|
|
echo " ❌ Message send may have failed. Check output above."
|
|
fi
|
|
|
|
# ── Step 4: Send a message with a button ─────────────────────────────
|
|
echo ""
|
|
echo "4️⃣ Sending message with inline button..."
|
|
|
|
BUTTON_MSG=$("$CORE_BIN" channels send_message \
|
|
--channel telegram \
|
|
--message '{"text": "Here is a link for you:", "buttons": [{"label": "OpenHuman GitHub", "url": "https://github.com/tinyhumansai/openhuman"}]}' 2>&1 || true)
|
|
|
|
echo "$BUTTON_MSG" | grep -A20 '{' | head -15
|
|
|
|
if echo "$BUTTON_MSG" | grep -qi '"success": *true\|"messageId"'; then
|
|
echo " ✅ Button message sent!"
|
|
else
|
|
echo " ❌ Button message may have failed."
|
|
fi
|
|
|
|
# ── Step 5: List threads ─────────────────────────────────────────────
|
|
echo ""
|
|
echo "5️⃣ Listing Telegram threads..."
|
|
|
|
THREADS=$("$CORE_BIN" channels list_threads \
|
|
--channel telegram 2>&1 || true)
|
|
|
|
# Show the JSON result (skip the banner lines)
|
|
echo "$THREADS" | tail -5
|
|
echo " ✅ Threads listed."
|
|
|
|
# ── Done ─────────────────────────────────────────────────────────────
|
|
divider
|
|
echo ""
|
|
echo "✅ Channel messaging E2E test complete."
|
|
echo ""
|
|
echo "Available RPC methods:"
|
|
echo " openhuman.channels_send_message — Send rich message (text, photo, stickers, buttons)"
|
|
echo " openhuman.channels_send_reaction — React to a message with emoji"
|
|
echo " openhuman.channels_create_thread — Create a conversation thread"
|
|
echo " openhuman.channels_update_thread — Close or reopen a thread"
|
|
echo " openhuman.channels_list_threads — List threads for a channel"
|
|
echo ""
|