Amirhossein Hosseinpouramirhp
CV
Maintenance WordPress plugin · Telegram

Ultimate Integration for Telegram

Every event on your site, in the chat you already read.

A new order, a payment, a refund, a product running out, a new user, a comment, a form filled in. Each one goes to a channel, a group, a private chat or a bot as a message you wrote, with the details filled in, buttons underneath and a file attached if you want one. One panel for all of it, and it is free.

Get it on WordPress.org Repository

Published by Pigment Dev, and the first product we shipped under that name. I am a co-founder of the studio and lead the plugin's development.

On WordPress.org2025 to today
Telegram · Store notifications · channel

WooCommerce · New order created

New order received

Order {order_number} from {customer_display_name}

Total {order_total}, paid by {order_payment_method_title}

Placed {current_jdate_time}

PDF invoice, carried over from the order email

Open order Customer view

WooCommerce · Product stock changed · written in Persian

موجودی رو به پایان است

محصول {formatted_name}

موجودی تازه {stock_quantity_new}، وضعیت {stock_status}

زمان {current_jdate_time}

ویرایش محصول صفحه محصول

WordPress · New user registered

New account

{user_login} joined as {user_role}

Email {user_email}, mobile {user_mobile}

Registered {user_jregistered}

Edit user

Gravity Forms · Entry submitted

{form_title}: a new entry

Entry {entry_id} from {source_url}

Payment {payment_status}, {payment_amount}

Received {jdate_created}

Open entry
You write each template once, with the macros you need. Every event fills it in.

What is in a message

  • Macros for the moving parts, with the full list for each event shown beside the editor
  • Buttons under the message, each a label and a link, and the links take macros too
  • An attachment, sent as a document, or as a photo when it is an image
  • Jalali or Gregorian dates in the same template, and any language, in either direction

// why

Why we built it

Telegram plugins for WordPress existed. None of them did what a store running on Telegram actually needs.

Before

For a lot of stores, Telegram is not a marketing channel. It is where the business runs. The owner, the warehouse, the support person and the courier share a group, and that group is where a new order should appear, seconds after it happens, with everything they need to act on it.

The plugins we tried could send a message when an order arrived, and that was about it. The message was fixed, or nearly fixed. A handful of events were covered and the rest were not. There were no buttons, so nobody could open the order from the chat. Dates came out in a calendar half our clients do not use. When a client wanted to change one word in the message, the answer was a code snippet. And on networks where Telegram is blocked, a plugin that calls Telegram's servers directly simply fails.

The realisation

Notifications are not a feature. For a lot of businesses they are the interface.

If the group chat is where the work happens, the notification has to carry the work: the details, the links, the buttons, the file. It has to be written by the store owner in their own words, cover every event that matters from one place, and reach Telegram from anywhere.

So every event lives in one notifications panel. Each notification has its own recipients, its own message written with macros in Markdown or HTML, buttons underneath and an optional attachment. It knows the Jalali calendar, it can reach Telegram through a relay you control, and every part of the panel has a hook so other plugins can add their own events. It went onto WordPress.org in March 2025. The events, the macros, the buttons, the attachments and the hooks are all in the free version, because that is the only version.

// events

Every event, one panel

Pick an event, add a notification, choose who receives it, write the message. Add as many notifications per event as you like, each with its own recipients and wording.

WooCommerce

  • New order, and checkout processed, including the block checkout and orders placed through the API
  • Payment complete
  • Status changed, to one status or to any
  • Order updated, refunded or deleted, with the refund details
  • Stock changed, including low stock, out of stock, and stock restored when an order is cancelled
  • Product updated
  • Any WooCommerce email sent, or one specific email

WordPress and forms

  • New user registered
  • New comment, and a comment approved, spammed, trashed or updated
  • Gravity Forms: any form or one form, with its field values
  • Contact Form 7: any form or one form

WooCommerce extensions

  • Subscriptions: status, totals, start and end dates
  • Memberships: plan, status, start and expiry
  • Bookings: status, date, start and end time
  • Points and Rewards
  • Multi-Currency, with amounts formatted the way the store formats them

Your own plugin

Add your own event categories, events, macros and default buttons through hooks. They appear in the same dropdowns as ours, as if they had always been there.

Works with

WooCommerceSubscriptionsMembershipsBookingsPoints and RewardsMulti-CurrencyGravity FormsContact Form 7Ultimate InvoiceJalali calendar

// messages

Messages you write, details it fills in

A notification is a template. You write it once in your own words, drop in macros for the moving parts, and every event renders it with the real values.

General

{site_name}{site_url}{current_date}{current_jdate}{current_jdate_time}{current_user_name}

Order

{order_number}{order_status}{order_total}{order_discount_total}{customer_display_name}{customer_phone}{billing_city}

Links and files

{edit_url}{view_url}{pay_url}{thank_you_url}{email_attachments}

Buttons under every message

Telegram's inline keyboard: the buttons that sit under a message rather than in it. Each is a label and a link, and links take macros, so "Open order" opens that order.

Attach a file, or a photo

A notification can carry an attachment as a document, or as a photo when it is an image. When a WooCommerce email carries a PDF invoice from Ultimate Invoice, the notification can carry it too.

Markdown or HTML, validated

Format with Markdown or switch to HTML. A validator checks the message before it is saved, so a stray asterisk never silently kills a notification.

Recipients per notification

A channel for the team, a private chat for the owner, a group for the warehouse. Set default recipients once and override them on any notification.

Two calendars

Jalali date and time macros beside the Gregorian ones, so a message carries the date its reader actually uses.

Import and export

The whole notifications list as a JSON file. Set up one store, export, import into the next.

Test before you trust

Send a test message to any chat ID from the settings page and see it land, or see exactly what Telegram objected to.

// rewrite

Rewrite anything the site says

The requests that used to end in a code snippet now end in a table: a translation manager and a string replacer, both in the plugin.

Any translated string
Change what WordPress, WooCommerce or a plugin prints, without touching a translation file.
Grouped by plugin
Every string is listed under the plugin it belongs to, so you know where it came from.
Live
Save, and the wording changes everywhere it appears.
Any text at all
Replace text anywhere in the page, translated or not, matching part of a string or all of it.
Two scopes
Rewrite the whole rendered page, or only the post content, chosen per rule.
Portable
Both lists export and import as JSON, so a store's wording travels with it.

// setup

Connected in four steps

The settings page walks you through it and tells you when to save.

  1. Create a bot

    In Telegram, with BotFather. It takes a minute.

  2. Paste the token

    Into the plugin's settings, and save.

  3. Enter the bot's username

    So the plugin can address it.

  4. Connect

    Click once, open your bot, press Start. A welcome message confirms it worked.

When Telegram is blocked

Point the plugin at your own API base address instead of Telegram's and route through a relay you control. The settings page links to a guide for doing it with a Cloudflare Worker, so a store on a restricted network still gets every notification.

Finding a chat ID

Channels and groups have IDs that are not shown anywhere obvious. Forward any message from one to your bot, and the bot replies with the ID.

Debug when you need it

A debug mode logs every step of a send, for when a message did not arrive. Off by default.

Reset and start over

Reset the notifications to the defaults with one click, or disconnect the bot and connect another.

// security

Security, with a partner watching

A plugin that holds your bot token and posts to your channels deserves more scrutiny than one that changes a colour. So we do not review its security alone.

Report through Patchstack

The plugin is enrolled in the Patchstack Vulnerability Disclosure Program, so security researchers are invited to test it and report what they find privately. As of September 2026, Patchstack's database lists no vulnerabilities for it. Please do not report security issues in the public support forum.

  1. A researcher reports it

    Privately, to Patchstack, through the plugin's disclosure page.

  2. Patchstack validates it

    Their team confirms the issue, rates its severity and rules out duplicates.

  3. We fix it

    Patch, test, and ship a new version to WordPress.org.

  4. Sites update

    The fix reaches every site through the normal WordPress update, before anything is public.

  5. It is disclosed properly

    The advisory is published after the fix is out, with the researcher credited.

The token stays on your server

Messages go from your site to Telegram, or to a relay you control. Nothing passes through us.

Checked on the way in and out

Escaping and sanitising throughout, with settings behind capability checks and nonces. Debug logging is off by default.

A security policy in the repository

It points to the same disclosure channel, so a researcher reading the code finds the door straight away.

// developers

For developers

One send helper, and a hook at every seam. Your plugin's events can live in the same panel as ours.

Source on GitHub

Extend the panel

Add event categories and events, macros for them, and default buttons. Inject fields before or after a notification's settings, or after the macro list.

Control the send

Change the method (text, photo or document), the arguments and the buttons just before dispatch, and react to success or failure with what Telegram returned.

hooks.phpA selection of the plugin's hook names
// The panel
ultimate-integration-for-telegram/notif-panel/notif-category/class
ultimate-integration-for-telegram/notif-panel/after-notif-types-dropdown
ultimate-integration-for-telegram/notif-panel/after-macro-list
ultimate-integration-for-telegram/notif-panel/notif-default-buttons

// The send
ultimate-integration-for-telegram/helper/send-message-method
ultimate-integration-for-telegram/helper/send-message-arguments
ultimate-integration-for-telegram/helper/send-message-buttons
ultimate-integration-for-telegram/helper/send-message-result/success
ultimate-integration-for-telegram/helper/send-message-result/failed
ultimate-integration-for-telegram/helper/translate-pairs
PHPWordPressWooCommerceTelegram Bot APIGravity FormsContact Form 7Cloudflare WorkersPatchstack
branch main 6 active projects ↑ 113 releases products/telegram-integration.md Sari --:-- UTC+3:30 its@amirhp.com