Плагин интеграции Telegram для WordPress

Задача Перенесите события сайта в Telegram, позвольте пользователям входить через него и опубликуйте результат как открытый исходный код.

Плагин для WordPress, который передаёт события сайта в Telegram и позволяет пользователям входить в систему с одной и той же учётной записью. Он был написан сначала для этого сайта, затем адаптирован для более широкого круга пользователей и опубликован как открытый исходный код под лицензией GPL-3.0.

Источник, выпуски и релизы: github.com/kostyasorokin/wp-telegram-integration

Вход в систему

Вход через Telegram реализован с использованием кода авторизации OpenID Connect и PKCE, а не как стандартный виджет, который обычно поставляется с плагинами. Идентификационный токен проверяется криптографически до завершения сессии WordPress.

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

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

Уведомления

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

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

Сообщу вам, когда оно сломается

Если уведомление не отправляется, причина сохраняется — собственные слова Telegram, чат, к которому оно было отправлено, и размер сообщения. Тело сообщения никогда не сохраняется, поскольку уведомление может содержать данные, отправленные через форму.

Состояние доставки отслеживается через раздел “Состояние сайта” WordPress, поэтому сообщение «Уведомления перестали приходить» видит сам владелец сайта, а не замечает это со временем. Восстановление после сбоя регистрируется немедленно, без ожидания подтверждения успешного завершения процесса.

Форма обратной связи Contact Form 7 также проходит проверку. Непрерывная серия отказов в приеме заявок по причине спама рассматривается как доказательство работы спам-фильтра, а не отправителей — настоящий спам приходит партиями, а система, которая отклоняет все заявки, — нет.

Построено для того, чтобы на нём строили

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

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

Telegram Integration settings screen: bot token, default chat IDs, parse mode, Telegram Login and webhook
Настройки — бот, режим анализа, вход в систему и веб-хук
Notifications screen with switches grouped by core, comments, content, media, security, system and users
Уведомления — одно переключение на событие
Plugins screen with Contact Form 7, Mailchimp and WooCommerce integration options
Плагины — Contact Form 7, Mailchimp, WooCommerce
Messages screen controlling what the first line of every notification carries
Сообщения — что несёт первая строка.
Tests screen with a test message sender, delivery state and the chat ID helper
Тесты — состояние доставки и вспомогательная функция идентификатора чата.
Роли

Разработчик
Konstantin Sorokin

Выполнено
  • Архитектура плагинов и разработка на PHP.
  • Вход в Telegram через OpenID Подключение с помощью PKCE
  • Уровень уведомлений для событий WordPress и WooCommerce
  • Интеграция с Contact Form 7, Mailchimp и WooCommerce.
  • Клиент API бота и конечная точка REST веб-перехватчика
  • Настройки администратора, проверки работоспособности сайта и журнал доставки.
  • Переводы на русский и украинский
  • Документация и выпуск с открытым исходным кодом.