惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
雷峰网
雷峰网
Recent Announcements
Recent Announcements
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
博客园_首页
The Cloudflare Blog
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
S
SegmentFault 最新的问题
P
Proofpoint News Feed
Y
Y Combinator Blog
Jina AI
Jina AI
博客园 - 聂微东
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
F
Full Disclosure
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
T
Tailwind CSS Blog
J
Java Code Geeks
Vercel News
Vercel News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Blog of Author Tim Ferriss
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 三生石上(FineUI控件)
W
WeLiveSecurity
PCI Perspectives
PCI Perspectives
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
宝玉的分享
宝玉的分享
IT之家
IT之家
Hacker News: Ask HN
Hacker News: Ask HN
The Register - Security
The Register - Security
T
The Exploit Database - CXSecurity.com
T
Threat Research - Cisco Blogs

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как я писал Телеграм-бота. На Вордпрессе
Damian · 2026-06-16 · via Все публикации подряд на Хабре

Как я писал Телеграм-бота. На Вордпрессе

Средний

7 мин

146

Изображение для привлечения внимания

Изображение для привлечения внимания

Вы возможно будете смеяться, но таки да, однажды я на полном серьёзе решил написать Телеграм-бота, использовав в качестве движка WordPress. В итоге это всё зашло настолько далеко, что вылилось в полноценный плагин. Его можно использовать как для интеграции сайта с Телеграмом, так и для быстрого создания автономных Телеграм-ботов, не связанных с веб-проектом.

Сразу оговорюсь, что плагин, о котором пойдет речь, рассчитан в первую очередь на разработчиков. Для обычного администратора Вордпресса там функций пока мало.

Я знаю что к PHP и к Вордпрессу некоторые относится как минимум неоднозначно, а как максимум пренебрежительно. Но уверен, что во многих случаях бот на Вордпрессе это отличное решение.

С чего всё началось

Итак, однажды мне понадобилось написать Телеграм-бота для одной своей мелкой рутинной задачи, честно говоря, уже не помню какой именно. Начал изучать API Телеграма, устройство ботов, принципы их работы. И чем глубже погружался в тему, тем больше мне нравилась идея писать это на Вордпрессе. Скажу прямо, что основная причина была в том, что я с Вордпрессом очень хорошо знаком. Это, без преувеличения, главный мой рабочий инструмент на протяжении уже многих лет.

Но не только поэтому. Просто в Вордпрессе уже из коробки есть многое из того, что нужно боту. Поэтому рассмотрим

Плюсы выбранного подхода

  • Организована работа с пользователями — есть раздел в админке, где отображаются все юзеры, зарегистрированные на сайте. Поиск, сортировка, редактирование тоже разумеется присутствуют.

  • Есть готовые инструменты для хранения файлов и управления ими. Правда, медиабиблиотека Вордпресса это далеко не самый удобный инструмент для работы с файлами, но при необходимости его можно сделать удобнее с помощью сторонних плагинов и настроек;

  • Есть поддержка языков. При создании многоязычного бота по сути нужно просто добавить переводы строк.

  • Гибкость и расширяемость на очень высоком уровне. Про это много уже сказано, и это действительно одно из главных достоинств Вордпресса — огромное количество сторонних плагинов, которые расширяют его функциональность.

  • И последнее по порядку, но не по значимости — Вордпресс-плагин, позволяющий легко подключить Телеграм-бота к сайту может очень пригодиться, если вам нужно иметь возможность получать уведомления в мессенджер о событиях на сайте. Например новые публикации, комментарии, покупки. Возможна и работа в обратную сторону — через бота в Телеграме можно управлять той же публикацией постов, модерировать комментарии и т.д.

А больше всего мне самому понравилась идея использовать хуки Вордпресса для событий бота. Например, сообщение от пользователя, слеш-команда и т. п. Те кто знаком с Вордпрессом как разработчик, думаю, уже поняли меня. Кто не знаком, наверное тоже сталкивались с понятием хуков или по крайней мере догадались что это такое. Если кратко — хуки это некие события, на которые можно повесить свои обработчики. Одной строкой кода связать событие и свою функциональность. Хук умеет передавать в функцию заранее определенные данные (например в нашем случае ID пользователя, текст его сообщения и т. д.).

Но, буду честен, не всё так радужно. Есть и минусы в использовании PHP и Вордпресса для ботов.

Недостатки создания Телеграм бота на Вордпрессе

  • Само устройство Вордпресса не предполагает возможности запустить бесконечный цикл обработки вызовов от Телеграм-API, чтобы правильно с ним коммуницировать. (Позволяет конечно, но Вордпресс не про это). Это в свою очередь не даёт возможности, например, удобно обрабатывать группы файлов — когда пользователь отправляет сразу несколько файлов в одном сообщении.

  • В Вордпрессе бот будет работать медленнее, чем на некоторых других платформах. На практике — отвечает пользователю не мгновенно, а спустя полсекунды, или даже чуть дольше. Зависит от сервера, конфигурации и т. д.

  • Из этого же вытекает следующее ограничение: при очень высокой нагрузке на бота будет высокой нагрузка и на сервер, и не факт что он будет хорошо справляться.

  • Для многих ботов такой функционал избыточен (пользователи, файлы и прочее о чем говорилось выше). Если боту не нужны эти фичи, то разумнее использовать что-то более простое для его построения.

Но давайте скажем честно: подавляющему большинству Телеграм-ботов не придется столкнуться с десятками запросов в секунду. Далеко не всем нужно уметь обрабатывать группы файлов. А готовая админка, управление пользователями и другие полезности Вордпресса многим ботам пригодятся.

Впрочем, давайте ближе к делу. Переходим к практической части.

Как это работает

Итак, разработку я начал с одного класса, который обрабатывал команды API Телеграмма. Но быстро понял, что одним классом тут не обойтись. По мере написания кода вся функциональность, связанная непосредственно с общением с API, была вынесена в отдельный плагин, чтобы потом можно было его многократно использовать. Идея такая: разворачиваем Вордпресс на сервере, добавляем плагин, а дальше пишем собственно логику. Ну или если у вас уже есть сайт, к которому вы хотите прикрутить бота, то просто добавляем на него плагин и пишем логику.

На момент написания статьи версия плагина — 0.3.0 (ноль в начале как бы намекает, что это ещё сыроватая версия, а идущая за ним тройка, что плагин уже пережил пару улучшений). Размещен он в официальном репозитории плагинов Вордпресса под названием Makarski Bot Connector for Telegram. Свою фамилию в начале названия я поставил не из тщеславия, а после общения с командой техподдержки директории плагинов, которые настояли на том что имя должно начинаться с ника либо реального имени разработчика. Насколько я понял, это сейчас общее требование ко всем новым плагинам.

Предположим Вордпресс у вас уже установлен на сервере. Кстати, можно обойтись и локальной установкой и работать в режиме Polling — когда Вордпресс обрабатывает события от Телеграм-бота не мгновенно, а по крону. Но, откровенно говоря, такой режим реально неудобен и подходит разве что для локальной отладки каких-то функций. Боевой режим бота все же предполагает работу на сервере.

После установки Вордпресса нужно добавить в него плагин. Установить его можно скачав по адресу https://wordpress.org/plugins/makarski-bot-connector-for-telegram/, либо прямо из админки Вордпресса, вписав в поиске его имя.

Дальнейшие шаги по построению своего Телеграм-бота такие:

  • Создайте бота и скопируйте его токен из https://t.me/BotFather/.

  • В админке Вордпресса зайдите в Telegram Bot → Settings и вставьте токен, скопированный в предыдущем шаге, в поле «Telegram Token» ниже и нажмите «Save».

  • Выберите режим подключения:

    • Webhook — требуется общедоступный HTTPS-адрес. Впишите УРЛ эндпоинта в поле Telegram endpoint. Это любая УРЛ-дружественная строка, которая будет точкой доступа Телеграма к вашему сайту, напрмиер tgendpoint, тогда Телеграм будет слать вызовы к вашему сайту по адресу https://yoursite.com/tgendpoint/. После сохранения нажмите «Set Webhook». Убедитесь что Webhook status подсвечен зеленым и совпадает с выбранным вами УРЛом.

    • Polling — работает на любом хостинге, включая localhost. Запускается автоматически при сохранении.

Страница настроек плагина

Страница настроек плагина

На этом настройка бота закончена. Для обычного пользователя плагин пока не предоставляет почти никакого функционала, за исключением рассылок пользователям бота. Но это не значит что плагин ничего не умеет. Как уже было сказано, он рассчитан в первую очередь на разработчиков. Поэтому перейдем к примеру кода.

Пишем код

Если вы дочитали до этого места и всё ещё понимаете о чем идёт речь, то скорее всего вам не нужно объяснять куда именно нужно писать кастомный код в Вордпрссе. Это может быть, например, ваш собственный плагин или тема.

Минимальный код для Телеграм-бота, эдакий Hello World, выглядит так:

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);

Это немного уплотненная версия синтаксиса, на практике так пишется редко. Но я же говорил что это «минимальный» код. Давайте разберем детально что тут происходит.

add_action( 'init'... - добавляет функцию, которая будет выполняться каждый раз при инициализации Вордпресса. В нашем случае это анонимная функция в теле которой регистрируется команда бота start. Для этого вызываем функцию TGBot\register_bot_command(). В качестве первого параметра передаем ей строку с командой. В качестве второго – функцию-обработчик. В в свою очередь этот обработчик получает объект $bot, который умеет довольно многое. Например отправить сообщение пользователю, как в нашем примере. Делает он это командой $bot->send_message( 'Welcome!' );. В результате пользователь впервые запустив бота и нажав Старт в ответ получит сообщение с текстом Welcome. Аналогичным образом можно зарегистрировать другие кастмоные команды вашего бота.

Следующая часть кода — реакция на сообщение пользователя.

add_action( 'tgbot_message'... – это тот самый хук о котором я говорил в начале статьи. При его срабатывании будет вызвана переданная ему анонимная функция, которая в качестве параметра получит:

  • объект бота, как и в предыдущем примере;

  • ИД пользователя;

  • текст отправленного пользователем сообщения.

Отмечу, что текст пользовательского сообщения также может быть получен из объекта $bot, и параметр $msg здесь используется просто для удобства.

Далее в теле вызываемой функции проверяем текстовое ли это сообщение, и если да, то отправляем ответ пользователю уже знакомым методом send_message().

На всякий случай, концовка кода — , 10, 3 ); это всё еще параметры функции add_action() где 10 это очередность вызова нашего хука, а 3 это количество передаваемых ему параметров.

Разумеется это просто абстрактные примеры, которые для практического применения нужно расширять. Более подробное описание хуков и функций, которые предоставляет плагин, а также другие примеры кода можно найти в файлах readme.txt и readme.md в папке плагина.

Что дальше

Дальше я планирую добавить в плагин более функциональную панель для рассылок пользователям. Сделать универсальный интерфейс, чтобы рассылки можно было программировать. Пока это на стадии идеи, но это тот функционал, который нужен лично мне сейчас, поэтому в том или ином виде я его реализую.

Кроме этого хочется реализовать в удобном виде работу в группами файлов. Но пока не придумал как именно.

Буду рад услышать от читателей, какие функции вам были бы полезны в плагине. И что можно улучшить.

Ссылки