Telegram InstantView для WordPress

Те, кто читает мой канал в Телеге с мобильного клиента, могли заметить, что с недавних пор у меня появился InstantView, который открывают удобную для чтения превью прямо в приложении, без открытия браузера.

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

Но есть решение нормальное: можно подсунуть боту небольшую лажу в ответе, что бы заставить его сгенерировать предосмотр для блога. Таким образом все ссылки получат генерацию превью без плясок с бубном. Оформил всё как плагин для WordPress.

Официальные способы

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

Так же, можно сгенерировать ссылку на конкретный URL, которая ведёт на https://t.me/iv, добавив туда параметры для шаблона. Так же, это можно сделать через бота.

В итоге получаете что-то типа https://t.me/iv?url=https%3A%2F%2Fpetro.ws%2F9-euro-ticket%2F&rhash=95929fac8166af, и такая ссылка будет иметь уже InstantView. Такой способ сложно назвать нормальным, кроме того он не будет работать с системами кросс-постинга.

Неофициальный способ

Официальный реестр работает на основе доменных имён. То есть шаблон создается и отправляется с привязкой к доменному имени. Если у вашего блога есть субдомен, то будет работать тоже (именно так работает LiveJournal). Но если сайт даёт возможность использовать свой домен? И такой сайт нашёлся: Teletype.

Открываем его и смотрим – что же в нём есть такого, что на своём домене InstantView всё равно работает? Находим вот такое:

<meta property="tg:site_verification" content="g7j8/rPFXfhyrq5q0QQV7EsYWv4=">

Это собственно и есть та волшебная метка, что бы бот принял страницу за пост в Teletype. Поиском по гитхабу уже быстро нашёл шаблон, который собирает остальные кусочки нашего паззла – какая минимальная структура нужна для того что бы понравится боту.

Таким образом, если у нас не получается создать свой шаблон, то сделаем наоборот – используем чужой.

Плагин для WordPress

Пилим небольшой плагин, который будет определять бота по User-Agent и отдавать ему нужный шаблон:

if (!defined("ABSPATH")) {
    exit;
}
$tg_options = get_option( 'tg_instantview_render' );
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo('charset'); ?>">
    <meta property="telegram:channel" content="@petro_ws">
    <meta property="tg:site_verification" content="g7j8/rPFXfhyrq5q0QQV7EsYWv4=">
    <?php wp_head(); ?>
</head>

<body <?php body_class(); ?>>

<div id="content" class="site-content article">

<article class="article__content">
	<div class="entry-content">
		<div class="single-entry-thumb">
			<?php the_post_thumbnail(); ?>
		</div>
		<?php the_content(); ?>
	</div><!-- .entry-content -->

	<footer class="entry-footer">
		<?php kanary_entry_footer(); ?>
	</footer><!-- .entry-footer -->
</article><!-- #post-## -->

</div>
</body>

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

Код плагина и инструкции по установке на Github

Я так же оформил и отправил готовый плагин в реестр WordPress, буду ждать верификации.

Выводы

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

Обратите внимание, что InstantView ворует трафик – включайте только если вам хочется сделать больше удобства пользователям, и трафик на сайте не так важен.

Leave a Reply

Your email address will not be published. Required fields are marked *