Description
Makarski Bot Connector for Telegram provides a clean foundation for building Telegram bots powered by WordPress. It handles all the low-level communication with the Telegram Bot API so you can focus on your bot’s logic.
What it does
- Registers a Telegram bot webhook or runs in polling mode (via WP-Cron)
- Automatically creates WordPress users for incoming chat IDs
- Dispatches incoming messages and commands through WordPress action hooks
- Provides a full-featured BotApi class with 30+ methods
Key features
- Webhook & Polling — works on any hosting; polling mode requires no public HTTPS URL
- Command routing — register bot commands with
register_bot_command() - Normalized message hook —
tgbot_messagefires for all message types (text, photo, voice, video, document, callback_query) with a consistent object structure - Stars payments — built-in support for Telegram Stars invoices, pre-checkout, and refunds
- Multipart uploads — send photos, audio, voice messages, videos, and documents
- Internationalization — translatable, ships with a .pot file
Available BotApi methods
send_message, `send_markdown_message`, `send_photo`, `send_document`, `send_audio`, `send_voice`, `send_video`, `send_animation`, `send_chat_action`, `send_location`, `send_stars_invoice`, `forward_message`, `copy_message`, `delete_message`, `delete_messages`, `edit_message`, `edit_message_markup`, `answer_callback_query`, `answer_pre_checkout_query`, `set_my_commands`, `set_webhook`, `delete_webhook`, `get_webhook_info`, `get_updates`, `get_document_url`, `get_photo_url`, `refund_star_payment`
Available action hooks
tgbot_message (primary hook)
Fires for every non-command incoming message (text, media, callback_query).
add_action( 'tgbot_message', function( $bot, $user_id, $message ) {
// $message->type — 'text' | 'image' | 'voice' | 'video' | 'audio'
// | 'document' | 'sticker' | 'video_note' | 'callback_query'
// $message->text — message text, caption, or callback data
// $message->files — array of WP attachment IDs (downloaded files)
// $message->has_media_group — true if part of a multi-file album
// $message->media_group_id — Telegram media_group_id string
if ( $message->type === 'voice' ) {
$bot->send_message( 'Got a voice message!' );
}
}, 10, 3 );
tgbot_handle_custom_bot_commands
Fires when a slash command is received, before the built-in dispatcher.
add_action( 'tgbot_handle_custom_bot_commands', function( $bot, $user_id, $command ) {
// $command — e.g. '/mycommand'
}, 10, 3 );
tgbot_bot_call
Fires for every incoming update, including commands. Useful for cross-cutting concerns.
tgbot_pre_checkout_query
Fires when a Telegram Stars pre-checkout query arrives.
add_action( 'tgbot_pre_checkout_query', function( $bot, $query, $user_id ) {
$bot->answer_pre_checkout_query( $query->id, true );
}, 10, 3 );
tgbot_successful_payment
Fires after a successful Telegram Stars payment.
add_action( 'tgbot_successful_payment', function( $bot, $payment, $user_id ) {
// $payment->telegram_payment_charge_id — use for refunds
// $payment->total_amount — amount in Stars
}, 10, 3 );
tgbot_raw_message
Fires with the raw Telegram update object for advanced use cases.
Registering bot commands
Use TGBot\register_bot_command() inside an init hook:
add_action( 'init', function() {
TGBot\register_bot_command( 'hello', function( $bot ) {
$bot->send_message( 'Hello, ' . $bot->chat_id . '!' );
} );
TGBot\register_bot_command( 'ping', function( $bot ) {
$bot->send_message( 'Pong 🏓' );
} );
} );
Minimal plugin example
add_action( 'init', function() {
TGBot\register_bot_command( 'start', function( $bot ) {
$bot->send_message( 'Welcome!' );
} );
} );
add_action( 'tgbot_message', function( $bot, $user_id, $msg ) {
if ( $msg->type === 'text' ) {
$bot->send_message( 'You said: ' . esc_html( $msg->text ) );
}
}, 10, 3 );
External Services
This plugin communicates with the Telegram Bot API (api.telegram.org) to operate a Telegram bot connected to your WordPress site.
What the service is: Telegram Bot API is a third-party service by Telegram FZ-LLC that allows applications to send and receive messages through Telegram bots.
What data is sent and when:
* Bot token — sent with every API request to authenticate the bot.
* Chat ID — sent when delivering messages to a specific user.
* Message text and media files — sent when the bot responds to users.
* Incoming updates (messages, commands, files) — received from Telegram via webhook (HTTP POST from Telegram to your site) or polling (your site requests updates from Telegram periodically via WP-Cron).
No data is sent to Telegram unless the bot is enabled and a valid token is configured.
Telegram Privacy Policy: https://telegram.org/privacy
Telegram Terms of Service: https://telegram.org/tos
Screenshots
Installation
- Upload the
makarski-bot-connector-for-telegramfolder to/wp-content/plugins/ - Activate the plugin via Plugins in WordPress admin
- Go to Settings Telegram settings
- Enter your bot token (get one from @BotFather)
- Choose connection mode:
- Webhook — paste your site’s HTTPS URL, click Set Webhook. Requires a public HTTPS URL.
- Polling — no public URL needed. The bot polls Telegram via WP-Cron. Works on localhost.
FAQ
-
Does this work on localhost?
-
Yes — use Polling mode. Telegram cannot reach localhost for webhooks, but polling works anywhere.
-
What PHP version is required?
-
PHP 8.0 or higher. PHP 8.1+ recommended.
-
Yes. Tested on Orangehost and similar shared environments. Use Polling mode if outgoing HTTPS connections are restricted, or configure
ALTERNATE_WP_CRONif WP-Cron has issues. -
How do I handle multiple files sent at once (media groups)?
-
Each file in a Telegram album arrives as a separate
tgbot_messageaction withhas_media_group = trueand the samemedia_group_id. Handle each file individually or buffer them yourself usingmedia_group_idas the grouping key. -
Is `tgbot_process_multimedia_message` still supported?
-
Yes, as a deprecated alias for
tgbot_message. Migrate totgbot_message— the signature is identical.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Makarski Bot Connector for Telegram” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Makarski Bot Connector for Telegram” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
0.2.43
- Auto-generate webhook secret on plugin activation so the mandatory secret check always has a value
- Fixed incoming message type detection: reuse already-parsed request object instead of re-calling get_request()
0.2.42
- Webhook secret is now required: all requests without a valid X-Telegram-Bot-Api-Secret-Token header are rejected
- Sanitize incoming text fields (message text, caption, callback data) before dispatching to action hooks
- Validate update_id presence after JSON decode
- Replaced direct curl in send_multipart_request() with wp_remote_post() + http_api_curl hook
0.2.41
- Renamed plugin folder and main file to match the approved WordPress.org slug
makarski-bot-connector-for-telegram
0.2.40
- Webhook secret token support (
X-Telegram-Bot-Api-Secret-Tokenheader validation) - Input sanitization improvements:
absint()for chat_id,sanitize_textarea_field()for text in BotApi Core::set_current_user()hardened withget_userdata()check andabsint()- Added
== External Services ==section to readme.txt
0.2.30
- Renamed
tgbot_process_multimedia_messagetotgbot_message; added deprecated alias for backward compatibility - Added
tgbot_raw_messagehook for advanced use cases - Added
media_group_idfield to normalized message object
0.2.28
- Fixed PHP 8.5 deprecation: removed
curl_close()(no-op since PHP 8.0) - Fixed implicit nullable parameter in
send_document()
0.2.27
- Added 11 new BotApi methods:
send_chat_action,send_audio,send_voice,send_video,send_animation,forward_message,copy_message,send_location,delete_messages,set_my_commands,refund_star_payment
0.2.26
- Fixed callback_query commands (inline buttons) not dispatching in polling mode
0.2.25
- Auto-created user email now uses
tg-{chat_id}@{site_domain}instead of{id}@example.com
0.2.22 – 0.2.24
- Fixed polling reschedule logic: moved to
sanitize_callbackso Save always applies mode even without settings change - Removed debug logging from production code
0.2.18 – 0.2.21
- Fixed textdomain loading order (PHP notice in WP 6.7+)
- Fixed
finish_request()header order for correct webhook response - Fixed polling cron scheduling bugs (namespace,
add_optionhook, missing cron detection)
0.2.17
- Fixed polling namespace bug (
\BotApiBotApi) - Added error logging to
wp_schedule_eventand polling tick
0.1.0 – 0.2.16
- Initial implementation: webhook management, polling mode, user auto-creation, Stars payments, command routing, internationalization


