Все больше и больше Telegram входит в нашу жизнь и внедряется в бизнес процессы и не только, посредством ботов. Так, недавно мне поступила задача использовать Telegram в качестве веб интерфейса для выполнения неких бизнес задач. Каких именно задач я в целях конфиденциальности не буду, но скажу, что это касается инкассации. О некоторых кейсах я буду рассказывать в цикле статей по интеграции Telegram в Битрикс, о сложностях и подводных камнях. Начнем. Для управления тривиальнымим задачами в "телеге" существуют боты. Например, мы можем создать бота, запустить его и взаимодействовать с ним посредством текста или кнопок, и в зависимости от того что прилетело в бот, выполнять то или иное действие. Повторюсь, что подробнее описывать это я буду в разделе Статьи по Telegram API этого сайта. Но технические возможности бота ограничены. Так, например, мы не можем отправить сообщение в Telegram пользователю, зная только его номер телефона. Это сделать нам позволяет библиотека MadelineProto
Подробное описание установки указано в документации и на этом я останавливаться не буду, там все хорошо описано. Но если мы будет использовать её на Битрикс то столкнемся с тем что стабильная версия VMBitrix работает на версии PHP 7.4 а Madeline требует 8.1 минимум. Мы можем перевести нашу виртуалку на php 8.1 но ядро Битрикса работает на этой версии мягко говоря так себе. По крайней мере пока что. И, если устанавливать либу из оф доки, то она поставит по умолчанию последнюю версию библиотеки с соответсвующими требованиями. Поэтому ставим совместимую с php 7.4 версию Madeline. Сразу оговорюсь, случай частный, по состоянию на момент написания статьи у меня все работало.
Установка Composer в Bitrix
В папке /local/php_interface/ создаём папку composer, заходив неё через консоль и в этой папке прописываем такие команды:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php')==='55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Мы установили композер, затем в этой же папке создаем файл composer.json и прописываем там следующее:
{
"require": {
"danog/madelineproto": "^7",
"psr/log": "^1"
},
"config": {
"allow-plugins": {
"phabel/phabel": true
},
"platform": {
"php": "7.4.1"
}
}
}
Затем, находясь в этой же папке, выполняем команду
composer update
Чтобы библиотеки, добавленные через композер были доступны из всего сайта, мы в файле, находящемся по пути /local/php_interface/init.php (если его нет, создайте, пригодится) прописываем следующее:
//подключение собственных классов
require_once ($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/composer/vendor/autoload.php");
На этом с композером все, все подключено и должно работать. Далее нам нужно запустить хэндлер на крон, который постоянно работает и ждет обновлений с вашего аккаунта Telegram, а также позволяет работать с библиотекой быстро и легко. Хендлер будет работать всегда.
Здесь получаем App api_hash и App api_id. Создаем файл php с произвольным названием, у меня это /local/php_interface/cron/tg_loop.php. Добавляем туда следующее содержание
$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/www";
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
$session_file = $_SERVER["DOCUMENT_ROOT"]."/local/php_interface/madeline/session.madeline";
$appInfo = new danog\MadelineProto\Settings\AppInfo();
$appInfo->setApiId("Ваш API Id");
$appInfo->setApiHash("Ваш API Hash");
$settings = new danog\MadelineProto\Settings;
$settings->getLogger()->setLevel(danog\MadelineProto\Logger::LEVEL_ULTRA_VERBOSE);
$settings->getLogger()->setExtra($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/madeline/MadelineProto.log");
$settings->setAppInfo($appInfo);
class MyEventHandler extends danog\MadelineProto\EventHandler {
}
MyEventHandler::startAndLoop($session_file, $settings);
Первый раз запускаем в консоли вручную:
/usr/bin/php /home/bitrix/www/local/php_interface/cron/tg_loop.php
Скрипт попросит авторизоваться, выполняем все пошагово. Затем ставим задачу на крон, у меня стоит каждые 10 минут, на всякий случай.
Для проверки можно посмотреть список процессов в консоли и убедиться что процесс запущен:
ps -eF
И видим этот процесс
Дальнейшие действия по работе с либой Madeline Proto будут описаны в следующих статьях. Удачной вам разработки и адекватных клиентов
Lenar (axxxmetion@yandex.ru)
Чел, огромное спасибо, как только я не пробовал установить это, было реально жестко, правда проект на 8.1, но по твоей схеме у меня все получилось, спасибо огромное !