Install
openclaw skills install telegram-openapi-skillOperate Telegram Bot API through UXC with a curated OpenAPI schema, bot-token path auth, polling-based reads, and webhook management guardrails.
openclaw skills install telegram-openapi-skillUse this skill to run Telegram Bot API operations through uxc + OpenAPI.
Reuse the uxc skill for shared execution, auth, and error-handling guidance.
uxc is installed and available in PATH.https://api.telegram.org.https://raw.githubusercontent.com/holon-run/uxc/main/skills/telegram-openapi-skill/references/telegram-bot.openapi.jsonThis skill covers a lean bot core surface:
file_id, HTTP URL, or local multipart uploadgetUpdatesThis skill does not cover:
attach:// file arraysTelegram Bot API requires the bot token in the request path: https://api.telegram.org/bot<TOKEN>/METHOD_NAME.
Configure the credential with a request path prefix template:
uxc auth credential set telegram-bot \
--auth-type api_key \
--secret-env TELEGRAM_BOT_TOKEN \
--path-prefix-template "/bot{{secret}}"
uxc auth binding add \
--id telegram-bot \
--host api.telegram.org \
--scheme https \
--credential telegram-bot \
--priority 100
Validate the local mapping when auth looks wrong:
uxc auth binding match https://api.telegram.org/getMe
Use the fixed link command by default:
command -v telegram-openapi-cliuxc link telegram-openapi-cli https://api.telegram.org --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/telegram-openapi-skill/references/telegram-bot.openapi.jsontelegram-openapi-cli -hInspect operation schema first:
telegram-openapi-cli get:/getMe -htelegram-openapi-cli post:/sendMessage -htelegram-openapi-cli post:/sendPhoto -htelegram-openapi-cli post:/sendDocument -htelegram-openapi-cli post:/getUpdates -hPrefer read/setup validation before writes:
telegram-openapi-cli get:/getMetelegram-openapi-cli get:/getWebhookInfotelegram-openapi-cli get:/getChat chat_id=@channel_or_chat_idExecute operations with key/value or positional JSON:
telegram-openapi-cli post:/sendMessage chat_id=CHAT_ID text="Hello from uxc"telegram-openapi-cli post:/sendPhoto chat_id=CHAT_ID photo=/tmp/photo.jpg caption="Uploaded by uxc"telegram-openapi-cli post:/sendMessage '{"chat_id":"CHAT_ID","text":"Hello from uxc"}'uxc subscribe start https://api.telegram.org post:/getUpdates '{"timeout":5,"allowed_updates":["message","callback_query"]}' --mode poll --poll-config '{"interval_secs":2,"extract_items_pointer":"/result","request_cursor_arg":"offset","cursor_from_item_pointer":"/update_id","cursor_transform":"increment","checkpoint_strategy":{"type":"item_key","item_key_pointer":"/update_id"}}' --sink file:/tmp/telegram-updates.ndjsonThe following Telegram polling flow has been validated against the real Bot API through uxc:
get:/getMeget:/getWebhookInfouxc subscribe --mode poll on post:/getUpdatesupdate_id + 1Observed runtime behavior:
data events are emitted for real Telegram updatespoll events record fetched/emitted/skipped countscheckpoint events are emitted after new updates are seenget:/getMeget:/getChatget:/getChatMemberget:/getWebhookInfopost:/sendMessagepost:/sendPhotopost:/sendDocumentpost:/sendMediaGrouppost:/getUpdatespost:/setWebhookpost:/deleteWebhook--text.ok, kind, protocol, data, error.getUpdates and webhook delivery are mutually exclusive:
post:/deleteWebhook before polling with post:/getUpdatesgetUpdates consumer per bot token:
extract_items_pointer should be /resultrequest_cursor_arg should be offsetcursor_from_item_pointer should be /update_idcursor_transform should be incrementcheckpoint_strategy.type should usually be item_key with item_key_pointer=/update_iduxc auth binding match should be checked against a concrete Telegram method URL such as https://api.telegram.org/getMe, because auth is applied through a path-prefix template that expands to /bot<TOKEN>/....sendPhoto, sendDocument, and sendMediaGroup in this skill accept existing file_id values or HTTP URLs only; they do not upload new local files.sendPhoto and sendDocument also support multipart/form-data local file uploads. File fields must be local path strings.sendMediaGroup still stays JSON-only in this skill because current multipart v1 does not model the media array plus attach:// file set cleanly.setWebhook supports multipart certificate upload for self-signed certs through the certificate file field.post:/sendMessage, all send* operations, and webhook-changing operations as write/high-risk actions; require explicit user confirmation before execution.telegram-openapi-cli <operation> ... is equivalent to uxc https://api.telegram.org --schema-url <telegram_openapi_schema> <operation> ....references/usage-patterns.mdreferences/telegram-bot.openapi.json