{"id":354794,"date":"2026-08-19T16:44:48","date_gmt":"2026-08-19T16:44:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/asistente-de-comunidad-para-telegram\/"},"modified":"2026-08-27T23:26:09","modified_gmt":"2026-08-27T23:26:09","slug":"wvdevel-community-assistant-telegram","status":"publish","type":"plugin","link":"https:\/\/pcm.wordpress.org\/plugins\/wvdevel-community-assistant-telegram\/","author":18635663,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.0.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"WVDevel Community Assistant for Telegram","header_author":"wvdevel","header_description":"Configurable Telegram bot for any community or group. Validates members against an encrypted database, replies in private and in groups only when mentioned, and optionally integrates AI via Ollama.","assets_banners_color":"6d4df6","last_updated":"2026-08-27 23:26:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":98,"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":"wvdevel","date":"2026-08-19 16:44:31","revision":3655047},"1.1.0":{"tag":"1.1.0","author":"wvdevel","date":"2026-08-27 23:26:09","revision":3669621}},"upgrade_notice":{"1.1.0":"<p>Adds the &quot;Mis recursos&quot; feature (personal files per carnet delivered\nthrough \/recursos in private chat). The database is updated automatically\non activation.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3655070,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3655070,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3655070,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3655070,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3655070,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Settings screen: bot token, webhook configuration, allowed groups,\nadministrators, Ollama integration and group texts.","2":"Validated Users screen: adding members (with their carnet) and a\nlist with search, status (validated\/inactive) and masked access code.","3":"\"Recursos por usuario\" screen: uploading files per carnet and the\nlist of stored files.","4":"Telegram: the \/recursos reply in a private chat, with a button per\nfile and a \"download all\" button."}},"plugin_section":[],"plugin_tags":[2364,2316,1756,226976,9171],"plugin_category":[44],"plugin_contributors":[276543],"plugin_business_model":[],"class_list":["post-354794","plugin","type-plugin","status-publish","hentry","plugin_tags-chatbot","plugin_tags-community","plugin_tags-moderation","plugin_tags-ollama","plugin_tags-telegram","plugin_category-discussion-and-community","plugin_contributors-wvdevel","plugin_committers-wvdevel"],"banners":{"banner":"https:\/\/ps.w.org\/wvdevel-community-assistant-telegram\/assets\/banner-772x250.png?rev=3655070","banner_2x":"https:\/\/ps.w.org\/wvdevel-community-assistant-telegram\/assets\/banner-1544x500.png?rev=3655070","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/wvdevel-community-assistant-telegram\/assets\/icon.svg?rev=3655070","icon":"https:\/\/ps.w.org\/wvdevel-community-assistant-telegram\/assets\/icon.svg?rev=3655070","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin connects a Telegram bot to your WordPress site to support\nthe community or group you manage:<\/p>\n\n<ul>\n<li>Validates every Telegram user against the plugin's own database\ntable (username, Telegram ID and an access code). The code is stored\nencrypted with AES-256-GCM (authenticated encryption) using the\nsecurity keys from your own <code>wp-config.php<\/code>, and is managed from a\nscreen in the WordPress admin, with no loose JSON files.<\/li>\n<li>If a user is not validated, the bot does not reply at all -except\nfor a single private notice the first time they write- so no\ninformation is exposed and no spam is generated.<\/li>\n<li>In a group, the bot only replies if it is mentioned (@bot username,\nreplying to one of its messages, or with a command directed at it).\nIn private chats it always replies, to already validated users.<\/li>\n<li>Includes configurable general commands: <code>\/reglas<\/code>, <code>\/horario<\/code>,\n  \/anuncios, <code>\/recursos<\/code>, <code>\/ayuda<\/code>, <code>\/misdatos<\/code> -all editable from\nthe WordPress admin, without touching code.<\/li>\n<li>Includes moderation commands for administrators, private chat only:\n  \/validar, <code>\/invalidar<\/code>, <code>\/listar<\/code>, <code>\/anunciar<\/code>, <code>\/stats<\/code>.<\/li>\n<li>\"Mis recursos\": each validated user can have a <em>carnet<\/em> (student\/member\ncode). Files uploaded per carnet from the \"Recursos por usuario\" admin\nscreen are offered to that user -and only that user- when they send\n  \/recursos in a private chat: one button per file plus a \"download\nall\" button that sends a ZIP. The files are stored in a private,\nweb-inaccessible folder and are delivered straight to Telegram, never\nthrough a public URL.<\/li>\n<li>Integrates an Ollama (conversational AI) client that is already\nbuilt but disabled by default: once your Ollama server is ready,\njust enable the checkbox and set the URL\/model in Settings. Until\nthen the bot replies with a notice instead of failing.<\/li>\n<\/ul>\n\n<h4>Use cases<\/h4>\n\n<p>Built for any Telegram community that needs to moderate access and\nautomate replies: study groups, communities of practice, work teams,\nclubs or product support.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the following external services to work:<\/p>\n\n<ul>\n<li><strong>Telegram Bot API<\/strong> (<code>https:\/\/api.telegram.org<\/code>) - required for the\nbot to function. The plugin sends your bot token and the text\nmessages exchanged with Telegram users (inbound and outbound) so it\ncan receive and reply to messages via webhook. Subject to Telegram's\n<a href=\"https:\/\/telegram.org\/tos\">Terms of Service<\/a> and\n<a href=\"https:\/\/telegram.org\/privacy\">Privacy Policy<\/a>.<\/li>\n<li><strong>Ollama<\/strong> (URL you configure, typically your own server) - optional\nand disabled by default. If you enable it, the text of messages from\nvalidated users is sent to the URL you configure to generate an AI\nreply. No information is sent to any third-party server other than\nthe one you specify in Settings.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher.<\/li>\n<li>PHP 7.4 or higher, with the <code>openssl<\/code> extension enabled.<\/li>\n<li>A site with valid HTTPS (Telegram does not accept webhooks over\n  http:\/\/).<\/li>\n<li>A bot created with @BotFather on Telegram.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the full plugin folder to <code>wp-content\/plugins\/<\/code>, or zip its\ncontents and use <strong>Plugins -&gt; Add New -&gt; Upload Plugin<\/strong> from the\nWordPress admin.<\/li>\n<li>Activate \"WVDevel Community Assistant for Telegram\" in <strong>Plugins<\/strong>.\nOn activation, the required database tables and a random webhook\nsecret are created automatically.<\/li>\n<li>Go to <strong>Bot Telegram -&gt; Ajustes<\/strong> (Settings):\n\n<ol>\n<li>Paste the bot token (obtained from @BotFather) and save the\nsettings. It is encrypted before being saved.<\/li>\n<li>Click \"Configurar Webhook\" to register your site with Telegram.<\/li>\n<li>Add the group ID under \"Grupos permitidos\" and your own Telegram\nID under \"IDs de administradores\".<\/li>\n<li>Edit the <code>\/reglas<\/code>, <code>\/horario<\/code>, <code>\/anuncios<\/code> and <code>\/recursos<\/code> texts\nwith your community's actual content.<\/li>\n<\/ol><\/li>\n<li>Go to <strong>Bot Telegram -&gt; Usuarios validados<\/strong> and register each\nmember (Telegram ID, username, name and access code). You can also\ndo this from Telegram with <code>\/validar [id] [codigo] [usuario]\n[nombre]<\/code> in a private chat with the bot, once your ID is in the\nadministrators list.<\/li>\n<li>(Optional) \"Mis recursos\" - personal files per member:\n\n<ol>\n<li>In <strong>Bot Telegram -&gt; Ajustes<\/strong>, section \"4. Mis recursos\",\nkeep \"Activar\" checked (it is on by default), optionally edit\nthe intro text and the per-file size limit.<\/li>\n<li>In <strong>Bot Telegram -&gt; Usuarios validados<\/strong>, fill the <strong>Carnet<\/strong>\nfield for each member (their student\/member code). This is the\nkey that links a person to their folder of files.<\/li>\n<li>In <strong>Bot Telegram -&gt; Recursos por usuario<\/strong>, type a carnet and\nupload one or more files for it. They are stored in a private\nfolder inside <code>wp-content\/uploads<\/code> that is not reachable from\nthe web.<\/li>\n<li>The member writes <code>\/recursos<\/code> in a <strong>private<\/strong> chat with the\nbot: after the general text they get a button per file (tap to\ndownload) and, if there are two or more, a \"download all\"\nbutton that sends a ZIP.<\/li>\n<\/ol><\/li>\n<li>(Optional, later) Enable Ollama in Settings once your server is\nrunning, providing its URL and the model to use.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20does%20%22mis%20recursos%22%20%28personal%20files%29%20work%3F\"><h3>How does \"Mis recursos\" (personal files) work?<\/h3><\/dt>\n<dd><p>Assign a <em>carnet<\/em> to a member under \"Usuarios validados\", upload\nfiles for that carnet under \"Recursos por usuario\", and the member\nreceives them by writing <code>\/recursos<\/code> in a private chat with the bot.\nEach file is a button; a \"download all\" button sends a ZIP. It only\nworks in private chats, never in the group.<\/p><\/dd>\n<dt id=\"where%20are%20the%20personal%20files%20stored%3F%20are%20they%20public%3F\"><h3>Where are the personal files stored? Are they public?<\/h3><\/dt>\n<dd><p>They are saved in <code>wp-content\/uploads\/wvdevel-mis-recursos-&lt;random&gt;\/<\/code>,\nprotected with a \"deny from all\" <code>.htaccess<\/code>\/<code>web.config<\/code> and an\nunguessable random folder name. The plugin never exposes a public URL:\nit uploads each file straight to Telegram, and only to the member\nwhose carnet matches. Deleting the plugin removes the whole folder.<\/p><\/dd>\n<dt id=\"a%20member%20says%20%2Frecursos%20does%20not%20show%20their%20files\"><h3>A member says \/recursos does not show their files<\/h3><\/dt>\n<dd><p>Check that: the feature is enabled in Settings; the member has a\n<strong>Carnet<\/strong> set that exactly matches the one used when uploading; there\nis at least one file for that carnet; and they are writing <code>\/recursos<\/code>\nin a <strong>private<\/strong> chat, not in the group.<\/p><\/dd>\n<dt id=\"do%20i%20need%20ollama%20running%20to%20use%20the%20plugin%3F\"><h3>Do I need Ollama running to use the plugin?<\/h3><\/dt>\n<dd><p>No. The Ollama client is disabled by default. While it is off, the\nbot still validates users and replies to the configured commands\n(<code>\/reglas<\/code>, <code>\/horario<\/code>, etc.); only free-form natural language\nquestions get a notice that AI is not configured yet.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20the%20numeric%20id%20of%20the%20telegram%20group%3F\"><h3>How do I get the numeric ID of the Telegram group?<\/h3><\/dt>\n<dd><p>Forward any message from the group to a bot such as @userinfobot, or\ncheck the first message the group sends to the bot after configuring\nthe webhook (it appears in the WordPress logs if something fails).<\/p><\/dd>\n<dt id=\"is%20it%20safe%20to%20store%20members%27%20access%20codes%20in%20the%20database%3F\"><h3>Is it safe to store members' access codes in the database?<\/h3><\/dt>\n<dd><p>The access code and the bot token are encrypted with AES-256-GCM\n(authenticated encryption) using the <code>AUTH_KEY<\/code> \/ <code>SECURE_AUTH_KEY<\/code>\nkeys from your own <code>wp-config.php<\/code> before being saved. They are never\nstored in plain text or in loose files.<\/p><\/dd>\n<dt id=\"does%20the%20bot%20reply%20to%20every%20message%20in%20the%20group%3F\"><h3>Does the bot reply to every message in the group?<\/h3><\/dt>\n<dd><p>No. In a group it only replies if it is mentioned directly (@bot\nusername, replying to one of its messages, or with a command directed\nat it). Any other message in the group is completely ignored.<\/p><\/dd>\n<dt id=\"can%20i%20have%20more%20than%20one%20administrator%3F\"><h3>Can I have more than one administrator?<\/h3><\/dt>\n<dd><p>Yes, add the Telegram IDs separated by commas under \"IDs de\nadministradores\" in Settings.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Nothing is deleted: the webhook, the settings and the validated users\nare kept. They are only removed completely if you use\n<strong>Plugins -&gt; Delete<\/strong>, which runs the definitive cleanup of tables and\nsettings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New \"Mis recursos\" feature: per-carnet personal files. Adds a \"carnet\"\nfield to validated users, a \"Recursos por usuario\" admin screen to\nupload\/delete files per carnet, and extends <code>\/recursos<\/code> so that in a\nprivate chat the bot also lists the user's files with inline buttons\n(download one by one, or \"download all\" as a ZIP).<\/li>\n<li>Files are kept in an unguessable folder inside uploads, locked down\nwith a Deny-from-all <code>.htaccess<\/code>\/<code>web.config<\/code>, and are uploaded to\nTelegram via multipart -no public URL is ever exposed.<\/li>\n<li>The bot now handles Telegram <code>callback_query<\/code> updates (inline button\npresses), restricted to private chats and validated users.<\/li>\n<li>Uninstalling now also drops the <code>wvdevel_resources<\/code> table and removes\nthe private resources folder.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: encrypted user validation (AES-256-GCM), REST\nwebhook protected with a secret_token, configurable general\ncommands, private moderation commands, a message log screen with\nsearch and per-conversation deletion, an administrators screen, a\nbroadcast screen for sending messages\/attachments to validated\nusers and\/or allowed groups, and an Ollama client ready to be\nenabled.<\/li>\n<\/ul>","raw_excerpt":"A configurable Telegram bot for any community or group: validates members, replies only when mentioned, and optionally integrates with Ollama.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/354794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=354794"}],"author":[{"embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wvdevel"}],"wp:attachment":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=354794"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=354794"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=354794"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=354794"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=354794"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=354794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}