{"id":327682,"date":"2026-06-30T09:21:50","date_gmt":"2026-06-30T09:21:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tvn-notify-hub\/"},"modified":"2026-06-30T09:21:14","modified_gmt":"2026-06-30T09:21:14","slug":"tvn-notify-hub","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tvn-notify-hub\/","author":16306641,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"5.3","requires_php":"7.2","requires_plugins":null,"header_name":"TVN Notify Hub","header_author":"minhnh6","header_description":"Send notifications (pings) to chat apps whenever a user performs an action\/hook chosen by the admin. Multi-channel architecture: supports Slack, Discord, Telegram, Email. Admins can pick built-in actions or add any custom hook \u2014 including hooks registered by other plugins.","assets_banners_color":"","last_updated":"2026-06-30 09:21:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/minhnh6\/tvn-notify-hub","header_author_uri":"https:\/\/github.com\/minhnh6","rating":0,"author_block_rating":0,"active_installs":0,"downloads":40,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"nguyenhuuminh","date":"2026-06-30 09:21:14"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[23972,4906,3565,9171,15439],"plugin_category":[],"plugin_contributors":[269559],"plugin_business_model":[],"class_list":["post-327682","plugin","type-plugin","status-publish","hentry","plugin_tags-discord","plugin_tags-notifications","plugin_tags-slack","plugin_tags-telegram","plugin_tags-webhook","plugin_contributors-nguyenhuuminh","plugin_committers-nguyenhuuminh"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/tvn-notify-hub.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>TVN Notify Hub listens to the WordPress actions\/hooks you choose and pings your chat apps or email whenever one of them fires.<\/p>\n\n<p>Key features:<\/p>\n\n<ol>\n<li><strong>Ping on user actions<\/strong> \u2014 get notified each time a user performs an action that the admin has enabled.<\/li>\n<li><strong>Flexible settings<\/strong> \u2014 pick one or many built\u2011in actions, choose recipients, and configure each channel independently.<\/li>\n<li><strong>Catch hooks from other plugins<\/strong> \u2014 besides the built\u2011in action list, you can add ANY hook name (e.g. <code>woocommerce_order_status_completed<\/code>, <code>wpcf7_mail_sent<\/code>, <code>wpas_open_ticket<\/code>). Because WordPress hooks are global, hooks registered by other plugins work too.<\/li>\n<li><strong>Multi\u2011channel architecture<\/strong> \u2014 the core is decoupled from the delivery channels. Built\u2011in channels: <strong>Slack, Discord, Telegram, Email<\/strong>. Adding a new one (WhatsApp, X, Mastodon, Microsoft Teams...) only requires implementing <code>Tvn_Notify_Channel_Interface<\/code> and registering it via the <code>tvn_notify_hub_channels<\/code> filter.<\/li>\n<li><strong>Translation ready (i18n)<\/strong> \u2014 the source language is English and the plugin ships with translations for Vietnamese, German, French, Spanish, Italian, Brazilian Portuguese, Russian, Simplified Chinese, Japanese, Korean, Dutch and Indonesian. A <code>.pot<\/code> template is included so you can translate it into any language. The UI follows your site language automatically.<\/li>\n<\/ol>\n\n<h4>Channels<\/h4>\n\n<ul>\n<li><strong>Slack<\/strong> \u2014 Incoming Webhook (Bot name, Bot emoji, custom icon, channel override).<\/li>\n<li><strong>Discord<\/strong> \u2014 Incoming Webhook (Bot name, avatar).<\/li>\n<li><strong>Telegram<\/strong> \u2014 Bot API (Bot token + Chat ID, silent option).<\/li>\n<li><strong>Email<\/strong> \u2014 <code>wp_mail()<\/code> with a shared subject\/HTML template; recipients are picked from admin users (username \u2014 email) plus optional extra addresses.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to third\u2011party services ONLY for the channels you explicitly enable and configure. Nothing is sent until you turn a channel on, save a valid webhook\/token, and a selected action fires (or you click \u201cSend test\u201d).<\/p>\n\n<p>What is sent: the event data used to build the notification \u2014 the action\/hook name, the acting user's display name, login, email and role, the IP address of the request, the timestamp, your site name and URL, and a short summary of the event.<\/p>\n\n<ul>\n<li><strong>Slack<\/strong> \u2014 data is sent to the Incoming Webhook URL you provide (host: hooks.slack.com). Terms: https:\/\/slack.com\/terms-of-service \u2014 Privacy: https:\/\/slack.com\/trust\/privacy\/privacy-policy<\/li>\n<li><strong>Discord<\/strong> \u2014 data is sent to the Webhook URL you provide (host: discord.com). Terms: https:\/\/discord.com\/terms \u2014 Privacy: https:\/\/discord.com\/privacy<\/li>\n<li><strong>Telegram<\/strong> \u2014 data is sent to the Telegram Bot API (host: api.telegram.org) using your bot token and chat id. Terms: https:\/\/telegram.org\/tos \u2014 Privacy: https:\/\/telegram.org\/privacy<\/li>\n<\/ul>\n\n<p>The <strong>Email<\/strong> channel uses WordPress' own <code>wp_mail()<\/code> and does not send data to any service controlled by this plugin (delivery depends on your server\/SMTP configuration).<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores a local log of recent sends (hook, channel, user id, status, error and the rendered message) in a custom database table so admins can troubleshoot delivery. Logging can be turned off in the settings, and the log can be cleared at any time. All plugin data (settings + log table) is removed on uninstall.<\/p>\n\n<h3>For developers<\/h3>\n\n<p>Add a channel:<\/p>\n\n<pre><code>add_filter( 'tvn_notify_hub_channels', function ( $channels ) {\n    $channels[] = new My_Channel(); \/\/ implements Tvn_Notify_Channel_Interface\n    return $channels;\n} );\n<\/code><\/pre>\n\n<p>Other filters:<\/p>\n\n<ul>\n<li><code>tvn_notify_hub_preset_hooks<\/code> \u2014 add built\u2011in actions to the settings screen.<\/li>\n<li><code>tvn_notify_hub_event<\/code> \u2014 inspect\/modify an event before sending (return false to skip).<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>tvn-notify-hub<\/code> folder to <code>\/wp-content\/plugins\/<\/code> (or install the ZIP via Plugins \u2192 Add New \u2192 Upload).<\/li>\n<li>Activate the plugin through the \u201cPlugins\u201d menu in WordPress.<\/li>\n<li>Open the <strong>Notify Hub<\/strong> menu (megaphone icon in the admin sidebar).<\/li>\n<li>In <strong>Active Notifications<\/strong>, tick the actions you want to be notified about. To listen to a hook from another plugin, add it in the <strong>Custom hooks<\/strong> box (one per line).<\/li>\n<li>In <strong>Channels<\/strong>, enable and configure at least one channel (Slack, Discord, Telegram or Email).<\/li>\n<li>(Chat channels) Adjust the <strong>Message template<\/strong> if you like \u2014 it supports placeholders such as <code>{action}<\/code>, <code>{user}<\/code>, <code>{ip}<\/code>, <code>{summary}<\/code>, <code>{time}<\/code>, <code>{site}<\/code>.<\/li>\n<li>Click <strong>Save settings<\/strong>, then use <strong>Send test<\/strong> to confirm delivery. Results and any errors appear in the <strong>Recent send log<\/strong>.<\/li>\n<\/ol>\n\n<p>A full step\u2011by\u2011step guide (including how to obtain each webhook\/token) is included in the plugin folder as <code>USAGE.md<\/code> (English) and <code>HUONG-DAN-SU-DUNG.md<\/code> (Vietnamese).<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20one%20action%20notify%20several%20channels%20at%20once%3F\"><h3>Can one action notify several channels at once?<\/h3><\/dt>\n<dd><p>Yes. Every enabled and valid channel receives the notification for the same event.<\/p><\/dd>\n<dt id=\"can%20i%20notify%20on%20a%20hook%20from%20another%20plugin%3F\"><h3>Can I notify on a hook from another plugin?<\/h3><\/dt>\n<dd><p>Yes. In \u201cCustom hooks\u201d, add one hook name per line. Optionally append <code>|N<\/code> to set how many arguments the hook passes, e.g. <code>woocommerce_order_status_completed|1<\/code>. Lines starting with <code>#<\/code> are treated as comments.<\/p><\/dd>\n<dt id=\"how%20do%20i%20find%20a%20hook%20name%20and%20its%20argument%20count%3F\"><h3>How do I find a hook name and its argument count?<\/h3><\/dt>\n<dd><p>Look in the other plugin's code for <code>do_action( 'hook_name', $arg1, $arg2, ... )<\/code>, or use a tool such as Query Monitor \/ Simply Show Hooks. The number of arguments after the comma is the value you put after <code>|<\/code>.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20a%20slack%20webhook%3F\"><h3>Where do I get a Slack webhook?<\/h3><\/dt>\n<dd><p>Go to https:\/\/api.slack.com\/apps \u2192 create\/select an app \u2192 Incoming Webhooks \u2192 Activate \u2192 Add New Webhook to Workspace \u2192 choose a channel \u2192 copy the URL (<code>https:\/\/hooks.slack.com\/services\/...<\/code>).<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20a%20discord%20webhook%3F\"><h3>Where do I get a Discord webhook?<\/h3><\/dt>\n<dd><p>In your server: Server Settings \u2192 Integrations \u2192 Webhooks \u2192 New Webhook \u2192 Copy Webhook URL.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20a%20telegram%20bot%20token%20and%20chat%20id%3F\"><h3>How do I get a Telegram bot token and chat id?<\/h3><\/dt>\n<dd><p>Talk to @BotFather and send <code>\/newbot<\/code> to create a bot and get the token. To find a chat id, add the bot to the chat, send a message, then open <code>https:\/\/api.telegram.org\/bot&lt;TOKEN&gt;\/getUpdates<\/code> and read <code>\"chat\":{\"id\":...}<\/code>. For a channel, add the bot as an admin and use <code>@channel_username<\/code>.<\/p><\/dd>\n<dt id=\"how%20is%20the%20email%20channel%20different%20from%20chat%20channels%3F\"><h3>How is the Email channel different from chat channels?<\/h3><\/dt>\n<dd><p>Email has its own subject + HTML body (one template shared by all actions), while Slack\/Discord\/Telegram share the \u201cMessage template\u201d. Email recipients are picked from your admin users (username \u2014 email) plus optional extra addresses.<\/p><\/dd>\n<dt id=\"the%20email%20channel%20returns%20an%20error.\"><h3>The email channel returns an error.<\/h3><\/dt>\n<dd><p>wp_mail() returned false, which usually means the server cannot send mail. Configure an SMTP plugin\/service (e.g. WP Mail SMTP), then test again.<\/p><\/dd>\n<dt id=\"are%20my%20webhook%20urls%20and%20tokens%20kept%20secret%3F\"><h3>Are my webhook URLs and tokens kept secret?<\/h3><\/dt>\n<dd><p>Yes. They are never printed back into the settings form \u2014 the field is shown blank with a short hint of the last characters. Leave it blank to keep the stored value, or type a new value to replace it.<\/p><\/dd>\n<dt id=\"how%20do%20i%20pause%20notifications%20temporarily%3F\"><h3>How do I pause notifications temporarily?<\/h3><\/dt>\n<dd><p>Untick the master switch in the <strong>Overview<\/strong> block and save. Everything stops sending while your settings are preserved.<\/p><\/dd>\n<dt id=\"how%20can%20a%20developer%20add%20a%20new%20channel%3F\"><h3>How can a developer add a new channel?<\/h3><\/dt>\n<dd><p>Implement <code>Tvn_Notify_Channel_Interface<\/code> and register it via the <code>tvn_notify_hub_channels<\/code> filter. See <code>USAGE.md<\/code> for code examples and other available filters.<\/p><\/dd>\n<dt id=\"what%20languages%20are%20available%3F\"><h3>What languages are available?<\/h3><\/dt>\n<dd><p>English (source) plus bundled translations for Vietnamese, German, French, Spanish, Italian, Brazilian Portuguese, Russian, Simplified Chinese, Japanese, Korean, Dutch and Indonesian. The plugin follows your site language (Settings \u2192 General \u2192 Site Language). To add another language, translate the included <code>languages\/tvn-notify-hub.pot<\/code> (e.g. with Poedit) and drop the resulting <code>.po<\/code>\/<code>.mo<\/code> into the <code>languages<\/code> folder.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: multi\u2011channel core with Slack, Discord, Telegram and Email channels; action picker, custom hooks, shared templates, test sending and a delivery log.<\/li>\n<li>Full internationalization (English source) with bundled translations: Vietnamese, German, French, Spanish, Italian, Brazilian Portuguese, Russian, Simplified Chinese, Japanese, Korean, Dutch, Indonesian.<\/li>\n<\/ul>","raw_excerpt":"Send notifications to Slack, Discord, Telegram or Email when users perform WordPress actions\/hooks that an admin selects.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/327682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=327682"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nguyenhuuminh"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=327682"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=327682"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=327682"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=327682"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=327682"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=327682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}