Skip to content

SDK

Each handler receives a PluginSDK instance (sdk parameter) with these methods:

Log a message with plugin context. Messages appear in plugin logs.

def on_message_received(event, sdk):
sdk.log("Processing incoming message")
sdk.log("Error occurred", level="error")
sdk.log("Debug info", level="warn")
ParameterTypeDefaultDescription
messagestringLog message text
levelstring"info"Log level: "info", "warn", or "error"

sdk.send_message(agent_id, external_user_id, channel_id, text)

Section titled “sdk.send_message(agent_id, external_user_id, channel_id, text)”

Send a message to a user via an agent session on a specific channel.

def on_turn_complete(event, sdk):
session = sdk.get_session(event['session_id'])
agent_id = session.get('agent_id')
user_id = session.get('user_id')
channel_id = session.get('channel_id')
sdk.send_message(
agent_id=agent_id,
external_user_id=user_id,
channel_id=channel_id,
text="Your turn is complete!"
)
ParameterTypeDescription
agent_idstringTarget agent ID
external_user_idstringUser identifier on the channel (e.g. Telegram user ID)
channel_idstringChannel ID (UUID) or channel type hint like 'telegram'
textstringMessage text to send

Returns: {"success": bool, "session_id": str} on success, or {"success": False, "error": str} on failure.

sdk.http_request(method, url, headers=None, json=None, data=None, timeout=30)

Section titled “sdk.http_request(method, url, headers=None, json=None, data=None, timeout=30)”

Make an HTTP request to an external API.

def on_message_received(event, sdk):
response = sdk.http_request(
method="POST",
url="https://api.example.com/webhook",
json={"session_id": event.get("session_id"), "message": event.get("message")},
timeout=10
)
if response.get("ok"):
sdk.log(f"Webhook sent: {response['status_code']}")
else:
sdk.log(f"Webhook failed: {response.get('error')}", level="error")
ParameterTypeDefaultDescription
methodstringHTTP method: "GET", "POST", "PUT", "DELETE", etc.
urlstringTarget URL
headersdictNoneOptional HTTP headers
jsondictNoneJSON body (automatically serialized)
datastringNoneRaw body data
timeoutint30Request timeout in seconds

Returns: {"status_code": int, "body": str, "headers": dict, "ok": bool} on success, or {"error": str, "ok": False} on failure.

sdk.get_session_messages(session_id, agent_id=None, limit=50)

Section titled “sdk.get_session_messages(session_id, agent_id=None, limit=50)”

Read messages from a session.

def on_turn_complete(event, sdk):
messages = sdk.get_session_messages(
session_id=event['session_id'],
limit=10
)
sdk.log(f"Last 10 messages: {len(messages)}")
ParameterTypeDefaultDescription
session_idstringSession ID
agent_idstringNoneOptional agent ID filter
limitint50Max number of messages to return

Returns: List of message dicts.

Get enriched session details (includes agent_name, channel_type, etc.).

def on_message_received(event, sdk):
session = sdk.get_session(event['session_id'])
agent_name = session.get('agent_name', 'Unknown')
sdk.log(f"Session agent: {agent_name}")
ParameterTypeDescription
session_idstringSession ID

Returns: Dict with session details.