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

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

Плагін WordPress, який переносить події сайту в Telegram і дозволяє користувачам входити з тим самим обліковим записом. Спочатку його було написано для цього сайту, потім узагальнено, і він опублікований як програмне забезпечення з відкритим кодом під ліцензією GPL‑3.0.

Джерело, проблеми та релізи: github.com/kostyasorokin/wp-telegram-integration

Вхід

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

Потік запам'ятовує, який браузер його запустив. Посилання зворотного виклику, скопійоване з адресного рядка іншого користувача, не може бути відтворене для передачі облікового запису користувача — файл cookie стану є індивідуальним для кожного потоку, і невідповідний файл завершує спробу, а не призводить до входу в систему.

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

Сповіщення

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

Інтеграції третіх сторін не є жорстко закодованим списком. Плагін сканує власний каталог інтеграцій, перевіряє знайдене та кешує результат, тому додавання підтримки для іншого плагіна відбувається через файл, а не через редагування в шести місцях.

Кажу тобі, коли це зламається

Сповіщення, яке не надійшло, залишає причину невдачі — власні слова Telegram, чат, для якого воно було надіслане, та розмір повідомлення. Тіло сповіщення ніколи не зберігається, оскільки воно може містити надсилання форми.

Стан доставки повідомляється через WordPress Site Health, тому “сповіщення перестали надходити” – це те, що власник бачить, а не те, що він помічає зрештою. Відновлення після помилки реєструється негайно, а не чекається на досягнення успіху.

Контактна форма 7 проходить окрему перевірку. Безперервний цикл відхилених як спам листів розглядається як доказ роботи спам-фільтра, а не відправників — справжній спам надходить паровими потоками, на відміну від шлюзу, який все відхиляє.

Побудовано для будівництва

Інші плагіни та теми отримують невеликий документований API: надсилання повідомлення, безпосереднє звернення до Bot API або реєстрація команди webhook. Допоміжний елемент кнопки входу повертає порожній рядок, коли плагін не завантажився, коли вхід вимкнено та коли відвідувач вже увійшов у систему, тому шаблон може відобразити його без захисту навколо нього.

Кожен вихідний виклик, який може здійснити плагін, розкривається в його 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 webhook
  • Налаштування адміністратора, перевірки стану сайту та журнал доставки
  • Переклади російською та українською
  • Документація та реліз з відкритим вихідним кодом