[modTelegram] - Telegram сообщения
[modTelegram] — Небольшое дополнение для работы с Telegram.
Реализовано:
— методы работы с api
— помощник сайта
отправка текстового сообщения
отправка фото
помощник сайта

Реализован по мотивам вот этой заметки на habrahabr.ru/post/302056/ и пожеланию одного хорошего человека.
Для того чтобы установить webhook необходимо выполнить следующий код (можно выполнить в console)
доступные действия помощника
action — список доступных действий
login — авторизоваться в системе
password — пароль пользователя
пользователь должен быть членом группы «Telegram manager»
logout — выйти из системы
chatout — отключить чат
history — получить историю чата
reply — написать в активный чат
removeall — удалить все данные
pusher
Добавлен pusher чтобы не бомбить сервер ajax запросами. Бесплатного тарифа вполне должно хватить для насущных нужд.

Нужно зарегаться на pusher.com/ зайти в настройки пакета и прописать соответствующие настройки и активировать pusher.
PS. пакет доступен на гитхаб
Код на github, создавайте isuue
Важно
Работает через webhook, для него требуется обязательно https.
Компонент бесплатный, буду рад donation
донат:
Реализовано:
— методы работы с api
— помощник сайта
отправка текстового сообщения
$modtelegram = $modx->getService('modtelegram');
$modtelegram->telegramSendMessage(array(
'chat_id' => '1111111111',
'text' => 'текст сообщения',
));отправка фото
$modtelegram = $modx->getService('modtelegram');
$modtelegram->telegramSendPhoto(array(
'chat_id' => '1111111111',
'from_path' => '1.jpg',// путь к картинке
));помощник сайта

Реализован по мотивам вот этой заметки на habrahabr.ru/post/302056/ и пожеланию одного хорошего человека.
- установить пакет
- добавить бота @BotFather и создать бота
- получить токен и добавить его в настройки пакета
- установить webhook
- вызвать сниппет [[!modTelegram.helper]]
Для того чтобы установить webhook необходимо выполнить следующий код (можно выполнить в console)
$modtelegram = $modx->getService('modtelegram');
$modtelegram->telegramSetWebHook();доступные действия помощника
action — список доступных действий
/actionlogin — авторизоваться в системе
/login_username_passwordusername — почта пользователяpassword — пароль пользователя
пользователь должен быть членом группы «Telegram manager»
logout — выйти из системы
/logoutchatin — подключить чат/chatin_idchatout — отключить чат
/chatouthistory — получить историю чата
/history_idreply — написать в активный чат
/reply_messagelocation — получить локацию/locationremoveall — удалить все данные
/removeall_passwordpusher
Добавлен pusher чтобы не бомбить сервер ajax запросами. Бесплатного тарифа вполне должно хватить для насущных нужд.

Нужно зарегаться на pusher.com/ зайти в настройки пакета и прописать соответствующие настройки и активировать pusher.
PS. пакет доступен на гитхаб
Код на github, создавайте isuue
Важно
Работает через webhook, для него требуется обязательно https.
Компонент бесплатный, буду рад donation
донат:
- Андрей Кухарев — 500 руб.
- shtyrman — 490 руб.
- Денис Богдановский — 490 руб.
Комментарии: 140
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Вот такой вот момент.
— посмотрел в pusher есть webhook и можно написать отдельно обрабочик для него, должно сработать.
Вы уж поймите меня правильно.
Нужно развивать это дополнение.
— добавлена группа Telegram manager для авторизации под менеджером пользователь должен состоять в группе
— добавлена команда /removeall — удаляет все данные, вводить с паролем
— добавлена очистка чатов и сообщений при /logout и /chatout
как раз туда это и можно добавить.
— добавлен вывод статусов менеджера, менеджеров
— добавлено информирование менеджера при закрытии пользователем чата
необходимо добавить webhook в pusher
Есть пару моментов
1. Если приложение ставится до установки ssl, то в настройках адрес Webhook прописывается с http, и уже после того как добавил sll так и остается. Соответственно при попытке установить webhook выдает ошибку.
2. Обновление чата на сайте происходит только после того как обновится страница.
Обратил внимание что это происходит если включить Pusher.
Выдает ошибку yadi.sk/i/0_qZB0ZgvZdUp — ругается на неверно указанный кластер если я правильно понял.
Также обратил внимание что на ваших скринах присутствует настройка кластера, а в текущей версии его нет. При этом если добавить данную настройку то ситуация не меняется.
Возможно у вас старый js в котором указано использовать кластер, а самой настройки уже нет — вот и вас сыпет подобную ошибку.
Сейчас используется modtelegram-1.0.11-beta
Добавьте здесь github.com/vgrish/modTelegram/blob/master/assets/components/modtelegram/js/web/default.js#L336
и здесь github.com/vgrish/modTelegram/blob/master/core/components/modtelegram/model/modtelegram/modtelegram.class.php#L1379
Все заработало, но пушер не обновляет.
WebSocket connection to 'wss://ws.pusherapp.com/app/b3b1d2b6979bf7380ed6?protocol=7&client=js&version=3.2.4&flash=false' failed: WebSocket is closed before the connection is established.
+
code":4001,«message»:«Did you forget to specify the cluster when creating the Pusher instance? App key b3b1d2b6979bf7380ed6 does not exist in this cluster
по моему очень говорящая ошибка…
app_id = «401223»
key = «b3b1d2b6979bf7380ed6»
secret = «a93b48a86a7455e86571»
cluster = «eu»
Я со второй попытки сумел все сделать, возможно первые значения настроек где-то сохранились. Сейчас удалю все дополнение и кэш на хостинге, попробую заново сделать.
Вот это компонент!)
Володя, спасибо вам большое.
В частности за ваш стиль, я все ошибки описанные в этой теме собрал, за пару вечеров разобрался. ) Очень прокачиваться помогаеге!!!
Мне кажется будет востребован автопостинг анонсов статей/товаров в канал телеграмма. Телеграмм становится всё популярнее, уже налоговая в нём техподдержку организовала!
Для этого нужно просто написать плагин, для того кто хоть немного разбирается, не составит труда это сделать и на событие выполнить
Столкнулся с проблемой вот в этом:
/login_username_password
username — почта пользователя
password — пароль пользователя — тут не понятно пароль из настроек или пароль пользователя для входа на сайт?
у меня домен с тире и нет возможности написать почту…
/login_name@si-te.ru_000000
прерывается на тире и выдает ошибку входа
Как установить webhook?
Вроде того?
Может по этому ничего не работает?
И последнее, ребята, пожалуйста, помогите, от куда я должен взять modtelegram_action_password?
Не могу сказать, что разобрался, но работает.
Установить webhook — это привязать к боту адрес, на который будут отсылаться POST/GET запросы
modtelegram_action_password — вписал пароль от пользователя, который в группе Telegam manager
внутрь залез этого файла:
А вот что с этим делать? Подскажите пожалуйста.
И какой текст ошибки?
При установке хука выводится сообщение в лог и все
github.com/vgrish/modTelegram/blob/master/core/components/modtelegram/model/modtelegram/modtelegram.class.php#L1096-L1099
[2016-12-02 15:43:26] (ERROR @ C:\server\http\***.ru\core\components\modtelegram\model\modtelegram\modtelegram.class.php: 391)
[2016-12-02 15:43:26] (ERROR @ C:\server\http\***.ru\core\components\modtelegram\model\modtelegram\modtelegram.class.php: 391)
SetWebHook failure
Проверьте какое значение настройки modtelegram_web_hook_url, если оно неверно определилось пропишите туда правильное значние и попытайтесь установить хук заново.
Спасибо!
з.ы. можно продублировать в скайп
Может я не прописал в настройки что то.
Снипет вызвается с параметром &frontendLexicon=`modtelegram:ru`
В словаре меняю для языка ru, в логах ошибок нет. Можно как нибудь что-то сделать?
[2017-03-16 19:33:46] (ERROR @ ..../core/components/modtelegram/model/modtelegram/modtelegram.class.php: 391)
SetWebHook success
[2017-03-16 19:33:46] (ERROR @ ..../core/components/modtelegram/model/modtelegram/modtelegram.class.php: 393)
1
Не подскажите как решить это?
написал вам в профиле на почту
Надеюсь будете развивать сие дело!
В общем проверил все настройки и как делал в прошлый раз, но почему не получается.
Проблема заключается в том, что сообщения с сайта уходят, а вот в самом телеграмме не получается авторизоваться и выполнить какие-либо команды. Раньше помню, когда авторизуешься по /login_mail_password то приходило подтверждение об успешной авторизации, сейчас этого нет. Т.е. в данное время почему то работает это в одну сторону…
Каких либо ошибок в логах вообще нету.
имеем modx 2.5.6 php 7.1
upd. Извините, снова разобрался) просто подключил в консоли вебхук. Не знаю почему пришлось заново его подключать…
Все фурычит! Спасибо!
… и еще вопрос:
Если пользователь менеджеру отправляет сообщение, все ОК… сразу приходит.
Если менеджер отправляет сообщение, то нужно обновить браузер, что бы пользователь его увидел.
а вот тут ничего подкрутить не надо?
во скрины с моего кабинета
попробуй удалить приложение и создать с нуля заново.
В консоли пишет
Может посмотрите?)
Приходят сообщения в ТГ — У вас новый чат /chatin_4606ed757541c318a2ba54b3310064a1
Нажимаю на эту ссылочку, пишу ответ… Пока никак ответ пользователю не приходит в браузер…
В консоли Ошибка, хотя все настройки pusher и админки в норме.
При следующей последовательности получается починить… не всегда с первой попытки.
1. Делаю новый ключ в пушере, старый удаляю, новые данные вставляю в настройки, и… так через раз удается победить пушер.
Выключаю в настройках пушер и все — Ошибка исчезла, чат онлайн активно обновляется.
Но ответить юзеру не могу. Менеджеру бот присылает /chatin_c117e633f87772f0749ca83f3f4205f3
Ни на какие команды не реаригует. Может вебхук в консоли переустановить или что делать?
Бот не реагирует на /login_admin_000000 или /login_admin_mypass и другие команды, но чаты в него приходят.
Сейчас включаю в настройках пушер — опять эта же ошибка… Юзер пишет в чат — но ничего не проиходит
PS посоветуйте пожалуйста что-нить, где искать…
Не думаю что ты исключение… потому если устал, отдохни, займись чем нибудь другим.
Затем попробуй заново и по порядку. ТЫ сможешь! Верь в себя!)
Не в настройках проблема. Может все таки что-то сохранилось в JS файл или еще куда-то?
Через ctrl+F видно 100%-ю идентичность КЕЙ АЙДИ и секрета пушера
т.е. на сайте пушера тоже самое что и в настройках.
Кто следующий пробуйте включать и выключать компонент.
Удачного.
pusher.min.js?_=1505758845747:8 WebSocket connection to 'wss://ws.pusherapp.com/app/b5705d6329a36e922d13?protocol=7&client=js&version=3.2.4&flash=false' failed: Invalid frame header
Pusher: Error: {«type»:«WebSocketError»,«error»:{«type»:«PusherError»,«data»:{«code»:1006}}}
pusher.min.js?_=1505758845747:8 WebSocket connection to 'wss://ws.pusherapp.com/app/b5705d6329a36e922d13?protocol=7&client=js&version=3.2.4&flash=false' failed: Invalid frame header
(index):1 WebSocket connection to 'wss://ws.pusherapp.com/app/b5705d6329a36e922d13?protocol=7&client=js&version=3.2.4&flash=false' failed: WebSocket is closed before the connection is established.
pusher.min.js?_=1505758845747:8 Pusher: Error: {«type»:«WebSocketError»,«error»:{«type»:«PusherError»,«data»:{«code»:1006}}}
Pusher: Error: {«type»:«WebSocketError»,«error»:{«type»:«PusherError»,«data»:{«code»:4001,«message»:«Did you forget to specify the cluster when creating the Pusher instance? App key b5705d6329a36e922d13 does not exist in this cluster.»}}}
а когда выключаю — все ок, тока манагер все читает, но ответить не может.
в консоли только modTelegram > reconect
какой вэбхук должен быть*или
Не помню как в прошлый раз этот вопрос решился, тоже долго не мог залогиниться
/login_admin_mypass
/login_admin_000000
/login_admin@site.ru_000000
Как то он по хитрому работает
сделал почту пользователя без @site.ru т.е. просто /login_user_pass
сделал в пушере и настройках auto-grow.ru/assets/components/modtelegram/webhook.php
С третьего вызова залогинился, больше выходить не буду ))
дело за малым, вернул в настройки /pusherhook.php и все должно заработать.
Получилось, почти работает — осталось онлайн обновление чата отладить.
Для этого один раз выключил и включил компомент…
Все хорошо работало — осталось чтобы бот на команду /chatin реагировал и мог ответить…
Далее снова бот не отвечает на команды. По кругу… далее заново устанавливаю компонент.
И опять… что-то из выше описанного.
ps все выше написанное — мои предположения, ошибки возможно.
Вот-так снова поставил веб-хук — снова заработало. Хм, пока все работает… Ну все слава… Обидно только что четкую зависимость не смог увидеть…
Я в консоли код вэбхук выполнил, снова ноль активности в чате
заново пробую, и сейчас как бы все работает, только чате перезагружать надо, чтобы ответы менеджера видеть
Сейчас деинсталлировал компонент полностью. И как с первой попытки за 5 секунд установилось, работает… просто идеально.
Но в настройках пушер выключен, стоит «Нет» и вэбхука две строчки в консоли не вызывал. А работает на ура)
спасибо.
Теперь у меня другой вопрос: как с помощью данного компонента вывести последние, например, 5 сообщений из группы или канала, в котором Бот является участником (или даже админом)? Нигде не нашёл такой информации, ни в АПИ, ни не форумах. Мне удалось сделать что-то подобное, создав другого бота (без webhook), и при запуске компонента из сниппета я подменяю токен (параметр «modtelegram_api_key») на токен бота без вебхука. Таким образом получаю обновления через метод «telegramGetUpdates()». Но в таком случае бот выводит даже те сообщения, которые он получает от абсолютно любого пользователя Телеграмма, а нужно только сообщения от членов группы. Поставил фильтр по «chat_id», но тогда возникает проблема с количеством принимаемых обновлений. Например, если последние 5 сообщений были от «левых» пользователей (команды, вроде "/start" итд.), то выводить на сайт нечего, а Оффсет обновлений сдвигается. Вот такие дела… Кто может подсказать?
и на этом все…
Версия modx, php?
MODHOST: MODX 2.6.4-pl, PHP 7.0
В PHP 7.1 и 7.2 к этой ещё добавляется ошибка
Видимо дело в последней версии MODX?
Не вижу реакции в чате на команды вида…
/login_admin_mypass
/login_admin_000000
/login_admin@site.ru_000000
Как правильно вводить то?
Как и раньше все работает — только при выключенном пушере.
Не знаю как настроить, помоему из-за этого медленно думает.
Кстати, старая проблема «чат не реагирует на команды» решается заменой адреса WebHook.php на и PusherHook.php в настройках компонента, с обязательно переподключением из консоли. И так несколько попыток пока не заработает.
И не помню, помоему пушер сначала включаю в настройках, подключаю в консоли, и отключаю пушер в настройках. И только так работает…
auto-grow.ru/assets/components/modtelegram/webhook.php
(у меня там оба файла лежат, webhook.php и pusherhook.php)
pusherhook.php тоже подключается, но чат не работает.
Тоесть пароль: DdsadDSAdd будет выглядеть ddsaddsass по этому пользователь не авторизуется в системе
prntscr.com/ndlhgb
Преобразует в нижний регистр все буквы
После кнопки «Начать чат» ничего не происходит.
ps. Не трогал на сайте разработки ничего с момента выпуска пакета — все так же работает, никаких действий с моей стороны не было.
Версия плагина 1.0.17-beta, версия modx revo 2.6.5, версия php 7.3.5
В итоге в файле assets/components/modtelegram/js/web/default.js на 336 строке
пришлось добавить в вызов конструктора Pusher дополнительные поля forceTLS и cluster, без них пушер говорил что мол ключ не найден. готовый вызов стал выглядеть так:
Так же пришлось добавить в файле core/components/modtelegram/model/modtelegram/modtelegram.class.php на 1381 строке в функции loadPusher эти же дополнительные параметры так, чтобы стало так:
и после этого обновить версию modx до 2.6.5+
С первого раза сообщения не пошли, но сделал еще раз ключ — и все заработало.
Указание на необходимость наличия этих параметров подсмотрел в примере самого пушера.
Огромное спасибо автору!
$modtelegram = $modx->getService('modtelegram');
$modtelegram->telegramSendMessage(array(
'chat_id' => '******',
'text' => 'Новый заказ',
));
Запускаю из консоли все работает.
Создал плагин с событием msOnCreateOrder
при новом заказе ничего не происходит
1 Ключ Telegram api прописал
2 Через консоль ввел
получил вот такое сообщение
3 Вбиваю в консоль
В бот приходит.
4 На сайте нажимаю «Начать чат» появляется alert с «Нет доступных менеджеров»
У кого-нибудь получилось настроить чат в 2022 году? )
Требуется помощь! Никак не могу победить этот плагин :-(
Сначала все заработало. успокоился. Привязал к сайту новый поддомен (по 301 redirect), при этом вебхук по старому имени остался доступен.
Перестало работать. При /login_username_pass — пишет ошибка входа, при '/login username pass' ничего не пишет,
При /status — пишет «Менеджер: статус — [[+active]], чатов — [[+chat_count]]»
При клике в браузере «Начать чат» — пишет «Нет доступных менеджеров»
Почему появляется [[+active]], чатов — [[+chat_count]]. ?!? что-то где-то не парсится, в апач еррор лог ошибок нет.
P.S. При даче команды в консоле:
Сообщение в телегу приходит.
вот эта команда в методе GetUserByEmailPassword из файла должна возвращать объект $user, но возвращает null. Пользователь точно есть.
$q формируется как
Пока не понятно куда копать дальше. В modx и php новичёк. Первый сайт на modx делаю.
Но, в диалоге Хелпера все равно выводится «Нет доступных менеджеров». Буду думать дальше…
в в методе то начинает работать, но это пока менеджер один, если будет больше одного, то не уверен что работоспособность сохраниться.