[modTelegram] - Telegram сообщения


[modTelegram] — Небольшое дополнение для работы с Telegram.

Реализовано:
— методы работы с 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
Для того чтобы установить webhook необходимо выполнить следующий код (можно выполнить в console)
$modtelegram = $modx->getService('modtelegram');
$modtelegram->telegramSetWebHook();

доступные действия помощника
action — список доступных действий
/action

login — авторизоваться в системе
/login_username_password
username — почта пользователя
password — пароль пользователя
пользователь должен быть членом группы «Telegram manager»

logout — выйти из системы
/logout
chatin — подключить чат
/chatin_id

chatout — отключить чат
/chatout

history — получить историю чата
/history_id

reply — написать в активный чат
/reply_message
location — получить локацию
/location

removeall — удалить все данные
/removeall_password

pusher
Добавлен pusher чтобы не бомбить сервер ajax запросами. Бесплатного тарифа вполне должно хватить для насущных нужд.

Нужно зарегаться на pusher.com/ зайти в настройки пакета и прописать соответствующие настройки и активировать pusher.

PS. пакет доступен на гитхаб
Код на github, создавайте isuue

Важно
Работает через webhook, для него требуется обязательно https.

Компонент бесплатный, буду рад donation
донат:
  1. Андрей Кухарев — 500 руб.
  2. shtyrman — 490 руб.
  3. Денис Богдановский — 490 руб.
15 августа 2016, 12:34    Володя   G+  
17    1978 +23

Комментарии (76)

  1. Василий Столейков 15 августа 2016, 14:07 # +2
    Круто!
    1. Сергей Лелеко 15 августа 2016, 15:57 # +1
      Отлично, спасибо
      1. Василий Столейков 15 августа 2016, 17:10 # 0
        В ModStore не планируется?
        1. Володя 15 августа 2016, 17:15 # +1
          закинул, должно вскоре появится.
            1. Володя 15 августа 2016, 18:58 # 0
              Спасибо, оперативно!
        2. Володя 15 августа 2016, 17:19 # +2
          Если вы установили webhook, но бот ничего вам не шлет в ответ — то скорее всего у вас кривоустановленый сертификат. При этом ошибок от telegram не будет — будет просто тишина…
          Вот такой вот момент.
          1. Андрей Кухарев 16 августа 2016, 09:00 # 0
            например для сертификатов COMODO нужно склеить все промежуточные сертификаты и корневой по такому типу
            cat www_example_com.crt COMODORSADomainValidationSecureServerCA.crt  COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ssl-bundle.crt
          2. Yar 15 августа 2016, 19:55 # 0
            Дал прикурить Jivosite и прочим. Спасибо!
            1. Виктор 16 августа 2016, 06:51 # 0
              Никак не сделать, чтобы работало без https? а то подавляющее количество сайтов работает всё-таки без https
              1. Володя 16 августа 2016, 08:46 # 0
                — поставить самоподписной сертификат, весь сайт переводить на https необязательно, достаточно чтоб webhook работал через него
                — посмотрел в pusher есть webhook и можно написать отдельно обрабочик для него, должно сработать.
              2. Сергей Сергеевич 16 августа 2016, 10:55 # 0
                А есть живой пример?
                1. Володя 16 августа 2016, 10:56 # +2
                  есть но не дам. Нет интереса ловить кучу сообщений....)
                  Вы уж поймите меня правильно.
                2. Владимир Ульяновский 17 августа 2016, 00:08 # +1
                  Это вообще огонь! Модекс теперь в восходящем тренде.
                  Нужно развивать это дополнение.
                  1. Володя 17 августа 2016, 11:18 # 0
                    Спасибо, постараюсь по мере возможностей.
                  2. Володя 17 августа 2016, 11:21 # 0
                    Обновление:
                    — добавлена группа Telegram manager для авторизации под менеджером пользователь должен состоять в группе
                    — добавлена команда /removeall — удаляет все данные, вводить с паролем
                    /removeall_000000
                    
                    — добавлена очистка чатов и сообщений при /logout и /chatout
                    1. Андрей Кухарев 17 августа 2016, 13:04 # +1
                      Было бы круто добавить вывод списка чатов за определенный период времени. 500р добавил
                      1. Володя 17 августа 2016, 13:07 # 0
                        ввывод служеной инфо я планировал на команду /status
                        как раз туда это и можно добавить.
                        1. Володя 17 августа 2016, 13:08 # 0
                          500р добавил
                          пришло, спасибо!)
                      2. Володя 21 августа 2016, 00:18 # 0
                        обновление:
                        — добавлен вывод статусов менеджера, менеджеров
                        — добавлено информирование менеджера при закрытии пользователем чата
                        необходимо добавить webhook в pusher
                        assets/components/modtelegram/pusherhook.php
                        1. Ruslan Butakov 22 сентября 2016, 23:45 # 0
                          Отличное дополнение, очень доволен.
                          Есть пару моментов
                          1. Если приложение ставится до установки ssl, то в настройках адрес Webhook прописывается с http, и уже после того как добавил sll так и остается. Соответственно при попытке установить webhook выдает ошибку.

                          2. Обновление чата на сайте происходит только после того как обновится страница.
                          1. Ruslan Butakov 22 сентября 2016, 23:59 # 0
                            По поводу пункта №2

                            Обратил внимание что это происходит если включить Pusher.
                            Выдает ошибку yadi.sk/i/0_qZB0ZgvZdUp — ругается на неверно указанный кластер если я правильно понял.

                            Также обратил внимание что на ваших скринах присутствует настройка кластера, а в текущей версии его нет. При этом если добавить данную настройку то ситуация не меняется.
                            1. Володя 23 сентября 2016, 09:33 # 0
                              Выдает ошибку yadi.sk/i/0_qZB0ZgvZdUp — ругается на неверно указанный кластер если я правильно понял.

                              Также обратил внимание что на ваших скринах присутствует настройка кластера, а в текущей версии его нет. При этом если добавить данную настройку то ситуация не меняется.
                              Проверьте все настройки и сопоставьте с теми что указаны в админке. Настройку кластера я выкинул, так как работало без нее.
                              Возможно у вас старый js в котором указано использовать кластер, а самой настройки уже нет — вот и вас сыпет подобную ошибку.
                              1. Ruslan Butakov 23 сентября 2016, 09:59 # 0
                                Дополнение ставил вчера, до этого не использовал старую версию.
                                Сейчас используется modtelegram-1.0.11-beta
                                1. Володя 23 сентября 2016, 10:33 # 0
                                  тогда проверяйте правильность введенных данных, чудес то не бывает…
                                  1. Ruslan Butakov 24 сентября 2016, 11:09 # 0
                                    Ну это я проверил не один раз, даже новые ключи генерировал, ситуация не изменилась, есть возможность глянуть у вас?
                                    1. Володя 24 сентября 2016, 12:10 # 0
                                      привет, напиши в скайп.
                              2. Kirill A. Rusanov 29 сентября 2016, 17:43 # +1
                                1. Ruslan Butakov 04 октября 2016, 20:26 # 0
                                  Проблема была в том что при регистрации Pusher я начал выбирать параметры, а достаточно было получить ключ по умолчанию, без указания ПО и Платформ.
                              3. Володя 23 сентября 2016, 09:30 # 0
                                1. Если приложение ставится до установки ssl, то в настройках адрес Webhook прописывается с http, и уже после того как добавил sll так и остается. Соответственно при попытке установить webhook выдает ошибку.
                                настройка modtelegram_web_hook_url — выставьте там правильный url и установите Webhook
                                1. Ruslan Butakov 23 сентября 2016, 09:33 # 0
                                  Ну я так и сделал, может стоит изначально предусмотреть чтобы прописывался адрес с https, вне зависимости работает сервер с ssl или нет.
                                2. Володя 23 сентября 2016, 09:31 # 0
                                  Обновление чата на сайте происходит только после того как обновится страница.
                                  вы включили использовать Pusher, но он по какой то причине у вас не работает. Естественно обновлений сообщений не будет
                                  1. Ruslan Butakov 23 сентября 2016, 09:35 # 0
                                    Я понимаю что Pusher не работает, тут я описал в чем возможно кроется проблема.
                                3. Александр Н 23 сентября 2016, 23:34 # +1
                                  Здорово! Благодарю за труд и отличное приложение!

                                  Мне кажется будет востребован автопостинг анонсов статей/товаров в канал телеграмма. Телеграмм становится всё популярнее, уже налоговая в нём техподдержку организовала!
                                  1. Володя 23 сентября 2016, 23:48 # +1
                                    Спасибо!
                                    будет востребован автопостинг анонсов статей/товаров
                                    Для этого нужно просто написать плагин, для того кто хоть немного разбирается, не составит труда это сделать и на событие выполнить
                                    $modtelegram = $modx->getService('modtelegram');
                                    $modtelegram->telegramSendMessage(array(
                                     'chat_id'   => '1111111111',
                                     'text'        => 'текст сообщения',
                                    ));
                                    
                                  2. Anton 11 октября 2016, 13:39 # 0
                                    Классное дополнение и нужное. Было бы неплохо реализовать еще возможность задавать свой чанк для кнопки помощника в настройках.
                                    1. Владимир Ульяновский 16 октября 2016, 23:58 # 0
                                      Наконец то дошли руки опробовать это дополнение.
                                      Столкнулся с проблемой вот в этом:
                                      /login_username_password
                                      username — почта пользователя
                                      password — пароль пользователя — тут не понятно пароль из настроек или пароль пользователя для входа на сайт?

                                      у меня домен с тире и нет возможности написать почту…
                                      /login_name@si-te.ru_000000
                                      прерывается на тире и выдает ошибку входа
                                      1. Владимир Ульяновский 17 октября 2016, 00:46 # 0
                                        Разобрались, проблема была не в тире, а в заглавных буквах в пароле пользователя.
                                      2. Anton 26 октября 2016, 23:28 # 0
                                        Как узнать id бота? Поискал информацию и так толком и не нашел. В базу сохраняется только id менеджера.
                                        1. Андрей Gryn 29 октября 2016, 22:24 # 0
                                          Друзья, не ругайте сильно, пожалуйста.
                                          Как установить webhook?
                                          Вроде того?
                                          https://api.telegram.org/bot<token>/setWebhook?url=https://mywebsite.com/чтописатьсюданепонятно
                                          1. Андрей Gryn 29 октября 2016, 22:50 # 0
                                            Еще у меня в логах пишет
                                            WARN @ /var/www/mysite/core/components/modtelegram/model/modtelegram/modtelegram.class.php : 455) PHP notice: Undefined index: action
                                            Может по этому ничего не работает?

                                            И последнее, ребята, пожалуйста, помогите, от куда я должен взять modtelegram_action_password?
                                            1. Андрей Gryn 31 октября 2016, 16:17 # 0
                                              Писал в отчаяние все это. Удалить бы.

                                              Не могу сказать, что разобрался, но работает.
                                              Установить webhook — это привязать к боту адрес, на который будут отсылаться POST/GET запросы
                                              https://api.telegram.org/bot<token>/setWebhook?url=https://mywebsite.com/assets/components/modtelegram/webhook.php
                                              modtelegram_action_password — вписал пароль от пользователя, который в группе Telegam manager
                                              1. Anton 31 октября 2016, 18:19 # 0
                                                Можно было и проще сделать. Установить пакет Console из репозитория Modx. Зайти в него и в строке выполнить код прописать тот код, что дан в описании modTelegram для установки webHook и выполнить его.
                                                1. Игорь Терентьев 17 июня 2017, 02:10 # 0
                                                  Тоже сделал так — через консоль не хотел устанавливаться webhook.
                                            2. А более подробной инструкции на этот замечательный мод нету???
                                              1. Приветствую ещё раз, ошибка вышла при установки хука \core\components\modtelegram\model\modtelegram\modtelegram.class.php: 391)
                                                внутрь залез этого файла:
                                                public function log($message = '', $data = array(), $showLog = false)
                                                    {
                                                        if ($showLog OR $this->getOption('showLog', null, false, true)) {
                                                            $this->modx->log(modX::LOG_LEVEL_ERROR, $message);
                                                            if (!empty($data)) {
                                                                $this->modx->log(modX::LOG_LEVEL_ERROR, print_r($data, 1));
                                                            }
                                                        }
                                                    }
                                                А вот что с этим делать? Подскажите пожалуйста.
                                                1. Володя 01 декабря 2016, 17:45 # 0
                                                  Привет.
                                                  И какой текст ошибки?
                                                  При установке хука выводится сообщение в лог и все
                                                  github.com/vgrish/modTelegram/blob/master/core/components/modtelegram/model/modtelegram/modtelegram.class.php#L1096-L1099
                                                  1. При установке хука происходит это:
                                                    [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
                                                    1. Володя 02 декабря 2016, 15:21 # 0
                                                      https на сайте есть?
                                                      Проверьте какое значение настройки modtelegram_web_hook_url, если оно неверно определилось пропишите туда правильное значние и попытайтесь установить хук заново.
                                                      1. https я сделал, правильно ли я понял, что modtelegram_web_hook_url должен быть полным путём до webhook.php? (\assets\components\modtelegram\webhook.php)
                                                    2. Прошу выложить конфиг рабочего мода с затёртыми личными элементами, ну или более подробную инструкцию, а то вообще не понятно, что и где, и как. Я с телеграмом как свинья в апельсинах, неделю бъюсь. Отправлено 500 р.
                                                      1. Володя 03 декабря 2016, 04:08 # 0
                                                        скиньте в личку доступы к сайту, быстрее будет.
                                                        Спасибо!
                                                        з.ы. можно продублировать в скайп
                                                        1. Скинул, первое ЛС ошибочное, второе верное
                                                  2. Приветствую ещё раз, установил, всё верно, залогинился, пишу в чат, но тишина))))
                                                    1. А теперь вот такая штука ))) Блин у меня полный набор всего что только может быть. \core\components\modtelegram\vendor\pusher\lib\Pusher.php: 463) PHP warning: json_encode(): Invalid UTF-8 sequence in argument. Я так понял это в PHP чего-то нехватает?
                                                      1. Андрей Gryn 10 декабря 2016, 13:20 # 0
                                                        Друзья, у меня в логи сыпет очень много варнингов, лог-файл пухнет.
                                                        (WARN @ /var/www/happybu/core/components/modtelegram/model/modtelegram/modtelegram.class.php : 455) PHP notice: Undefined index: action
                                                        Может я не прописал в настройки что то.

                                                        1. Алексей Бгатов 10 декабря 2016, 15:23 # 0
                                                          это php7) допишите в класс проверку на существование переменной action (isset). А Володя наверное поправит потом)
                                                        2. Андрей Gryn 21 декабря 2016, 14:16 # 0
                                                          В управлении словарями меняю значения, например, modtelegram_helper или modtelegram_chat_welcome со стандартных на свои, но выводятся все равно стандартные значения — «Помошник» и «Приветствую!» т.п.
                                                          Снипет вызвается с параметром &frontendLexicon=`modtelegram:ru`
                                                          В словаре меняю для языка ru, в логах ошибок нет. Можно как нибудь что-то сделать?
                                                          1. Володя 22 декабря 2016, 14:16 # 0
                                                            удалите файл lexicon.js, он сформируется заново с внесенными изменениями
                                                          2. shtyrman 16 марта 2017, 19:40 # 0
                                                            при вводе в консоле для webhook ругается на следующее:
                                                            [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
                                                            Не подскажите как решить это?
                                                            1. Володя 16 марта 2017, 19:49 # 0
                                                              SetWebHook success
                                                              ну он вам сообщил что все ОК. чего решать то?)
                                                              1. shtyrman 16 марта 2017, 19:54 # 0
                                                                Да в том то и дело) не пойму, почему error то)

                                                                написал вам в профиле на почту
                                                                1. shtyrman 16 марта 2017, 20:16 # +1
                                                                  Володя простите, оч сильно тупанул) все работает, спс вам за дополнение. Скину в пожертвование)
                                                                  Надеюсь будете развивать сие дело!
                                                                  1. Володя 17 марта 2017, 10:28 # 0
                                                                    Скину в пожертвование)
                                                                    Спасибо!
                                                                    1. shtyrman 12 апреля 2017, 15:27 # 0
                                                                      Здравствуйте. Все прекрасно работало, но заметил в последнее время что появились сбои.

                                                                      В общем проверил все настройки и как делал в прошлый раз, но почему не получается.

                                                                      Проблема заключается в том, что сообщения с сайта уходят, а вот в самом телеграмме не получается авторизоваться и выполнить какие-либо команды. Раньше помню, когда авторизуешься по /login_mail_password то приходило подтверждение об успешной авторизации, сейчас этого нет. Т.е. в данное время почему то работает это в одну сторону…

                                                                      Каких либо ошибок в логах вообще нету.
                                                                      имеем modx 2.5.6 php 7.1

                                                                      upd. Извините, снова разобрался) просто подключил в консоли вебхук. Не знаю почему пришлось заново его подключать…
                                                              2. Денис Богдановский 29 июня 2017, 07:40 # 0
                                                                Володя, хелп! Уперся в «Нет доступных менеджеров»… не могу понять в чем дело. В каких случаях это сообщение выпадает?
                                                                1. Володя 29 июня 2017, 08:03 # 0
                                                                  Менеджер не авторизовался в телеграм и не с кем связываться
                                                                  1. Денис Богдановский 29 июня 2017, 09:20 # 0
                                                                    login — авторизоваться в системе
                                                                    /login_username_passwordusername — почта пользователя
                                                                    password — пароль пользователя
                                                                    пользователь должен быть членом группы «Telegram manager»
                                                                    а если в имени пользователя и пароле присутствует символ нижнего подчеркивания "_", то авторизация не прокатит?
                                                                    1. Володя 29 июня 2017, 09:25 # 0
                                                                      да, вполне возможно. Создай пользователя специально для общения с простым логином паролем…
                                                                      1. Денис Богдановский 29 июня 2017, 09:41 # 0
                                                                        Ура!

                                                                        Все фурычит! Спасибо!
                                                                        1. Денис Богдановский 29 июня 2017, 09:59 # 0
                                                                          А вот тут что включать?


                                                                          … и еще вопрос:
                                                                          Если пользователь менеджеру отправляет сообщение, все ОК… сразу приходит.
                                                                          Если менеджер отправляет сообщение, то нужно обновить браузер, что бы пользователь его увидел.
                                                                          1. Володя 29 июня 2017, 10:15 # 0
                                                                            Если менеджер отправляет сообщение, то нужно обновить браузер, что бы пользователь его увидел.
                                                                            значит pusher не подключен, либо настройки неверны…
                                                                            1. Володя 29 июня 2017, 10:17 # 0
                                                                              посмотри есть в консоли браузера ругань от пушера.
                                                                              1. Денис Богдановский 29 июня 2017, 10:23 # 0
                                                                                Глянул… нет ошибок. Внимательнее все проверю через 2-3 часа… нужно на работу идти )
                                                                                1. Денис Богдановский 29 июня 2017, 10:30 # 0
                                                                                  Если менять настройки из скрина выше, то в браузере быстро мелькает окно с push-уведомлением.

                                                                                  а вот тут ничего подкрутить не надо?
                                                                                  1. Володя 29 июня 2017, 10:37 # 0
                                                                                    я там ничего не шаманил, вроде все по дефолту.
                                                                                    во скрины с моего кабинета



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