Push-уведомления через Telegram



    25 июня Telegram открыл платформу для ботов. Первая моя мысль была — ведь можно слать через него уведомления! При помощи уведомлений через телеграм можно решить сразу несколько проблем, хотя бы частично:
    • Поддержка iOS
    • Поддержка Windows Phone
    • Получение уведомлений без установки лишних приложений

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



    Под катом небольшая инструкция по настройке и детали разработки. (небольшая инструкция для тех, кто собрался делать такого же бота)

    Привязываем


    Нужно всего лишь открыть ссылку — telegram.me/PushAllBot и написать боту все что угодно.
    В ответ он даст ссылку, по которой нужно перейти для установки связи.



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

    Из недостатков этого метода приема можно выделить:
    • Невозможность последующей модификации уведомлений
    • Невозможность отслеживания доставки (возможно временно)
    • Невозможность присылать иконку к сообщению (передавать каждый раз файл с картинкой так себе вариант)


    Технические детали


    Работает все достаточно просто.
    Тут есть документация по API.
    Я создал бота командой /newbot и следовал инструкциям, дальше задал пикчу, командой /setuserpic
    Используя полученный токен, я привязал Webhook для получения сообщений.
    Тут нужно понять одну небольшую вещь: если вы работаете с PHP вы не получите данные в переменной $_POST.
    Данные JSON можно получить при помощи команды:

    file_get_contents('php://input')
    


    А дальше уже можно парсить JSON ответ.
    Отправка идет по ID чата. Оно же равно ID пользователя.
    Я не нашел каких-либо ограничений на использование API или кол-во отправки сообщений. Поэтому данная функция будет еще долго тестироваться. Как минимум, мне не нравится, что для каждого сообщения нужно делать отдельный запрос. Это значит, что мне либо придется делать их в несколько потоков по несколько сотен в секунду, либо делать их по очереди. А обработка каждого занимает около 50-100 мс, что достаточно долго. Если же еще там есть какие-либо ограничения, я могу столкнуться с проблемой, когда я смогу разослать 1000 уведомлений лишь за несколько минут.

    Примерно так работает Webhook у меня:

    $gram=json_decode(file_get_contents('php://input'),true);
    
    $message='Привет, '
    .$gram['message']['chat']['last_name'].' '
    .$gram['message']['chat']['first_name'].'. Твой ID в Telegram: '
    .$gram['message']['chat']['id'];
    
    file_get_contents('https://api.telegram.org/botTOKEN/sendMessage?chat_id='
    .$gram['message']['chat']['id'].'&text='
    .urlencode($message));
    


    Как мне кажется, можно делать неплохих ботов для «слепого» чата. Когда собеседники ничего не знают друг о друге. Через Redis сделать взаимодействие. При приеме сообщения через Webhook отправлять сообщение другому ожидающему сообщение. После создания связи — пересылать сообщения используя разные chat_id пользователей.

    API у Telegram оказалось очень простым. Никаких аккаунтов разработчика и тому подобное — не нужно. Создаешь бота сразу получаешь токен, сразу работаешь с API.
    PushAll 52,16
    Платформа подписки на Push-уведомления
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 39
    • 0
      Жаль что пока Telegram API не позволяет работать с файлами
      • 0
        Позволяет, можно слать файлы и принимать вроде как. Даже обменник на боте сделал кто то слышал
        • 0

          Можно слать много всего. При приеме сообщения вроде как если там контент — есть его ID и по нему можно скачать файл.
          • 0
            вот именно что файл средствами этого API пока не скачать :)
            Вот ответ саппорта
            Downloading files for bots isn't supported in the API for the moment. But this is just the beginning — a lot more will be possible soon.
            • 0
              Тогда прошу прощения :( Но думаю эта функция будет 100% как и функции вроде множественной рассылки сообщений, которая мне так нужна.
          • +16
            Ведь можно пользоваться другими файлообменниками

            image
          • 0
            Сейчас тоже пишу бота. Немного не понимаю, почему нужно указывать именно chat_id, а не просто указать имя пользователя для отправки. И насколько этот chat_id будет актуален через какое-то время? Может ли он обновиться? Надо разбираться :)
            • 0
              Chat_id = айди пользователя.
              Я думаю это сделано с целью, чтобы не могли спамить по базе логинов через бота. Т.е. пока юзер сам не даст свой ID вы ему ничего не пошлете.

              Да он будет действовать вечео. У группового чата — свой айди.
              • 0
                Спасибо, теперь все ясно. Я почему-то подумал что этот ID выдается именно как ID сессии чата :)
                Значит буду сохранять в БД эти значения.
                • 0
                  Там даже по ответу это видно. Оно кидает 2 массива, один массив — пользователя, второй чата. Если пользователь пишет сам — то они идентичны. Если он вас кинул в чат с кем то еще, то вы можете слать в чат и видеть кто именно пишет вам из него.
                • 0
                  chat_id — это ID чата и все. Есть групповые чаты, поэтому нужно отдельное поле, а не просто ID пользователя. Объяснение про спам не нужно, оно бессмысленно, никто не мешает просто не давать слать пользователю, который еще не писал боту, без всякого chat_id.
                  • 0
                    Да это понятное дело. Просто я как пример привел, почему этот ID не будет меняться, потому что если это чат с пользователем, то айди его чата равен айди пользователя.
              • 0
                А обработка каждого занимает около 50-100 мс, что достаточно долго.

                Это еще хорошо. С MPNS можно это время смело умножать на 10.
                • –17
                  "№;%!!!
                  Все таки в телеграме работают безрукие. Ну почему нельзя иметь имя бота начинающееся с [0-9] ???
                  • –10
                    Как и ожидалось набежала куча минусующих дебилов, ни один из которых словами выразить ничего не смог.
                    • +5
                      Для Вас настолько критично иметь бота с именем, начинающимся с цифры, что вы моментально перешли на личности?
                      • –1
                        Я никуда не переходил. Мне вообще поровну что там. Просто количество косяков в телеграмме зашкаливает и это один из них. Что косвенно свидетельствует об уровне разработчиков. В том же самом slack все работает просто и сразу. В телеграмм какие-то приседания в противогазе. Вроде и не мешает, но нахрен так жыть?
                      • 0
                        напиши свое, сам пользуйся, сам радуйся
                        • 0
                          Зачем? Есть slack.
                      • 0
                        Нужно было отсылать сообщения в Телеграм из JS еще до появления их бот платформы, использовал Notificatio чтобы не мучаться с Telegram.API. Думал перейти на bot-api, но судя по комментариям он еще сыроват. Подожду…
                        • 0

                          Мне кажется, у них сейчас бизнес рухнет.

                          Моё решение кстати уже лучше по нескольким параметрам:
                          • Есть нативная поддкажка Android и Chrome, будет еще нативная iOS и возможно WP
                          • Какие у них цены? Я вижу только 100 бесплатных соощений.
                          • Не могу посмотреть цены, т.к. нет авторизации через соц сети
                          • Пользователи опять никак не контролируют процесс подписки отписки? :)


                          А вам нужно было именно чисто в телеграм?
                          • 0
                            А забыл насчет цен, у меня сейчас 5000 уведомлений в сутки беслпатно. Правда никто до такого количества добраться не может, поэтому возможно я буду уменьшать это количество. Но при этом думаю, что к примеру 2000 сообщений в сутки будет стоить в районе 200 рублей в месяц. Это где то 62 тысячи уведомлений в месяц, по 1 копейке за 3 уведомления.
                            Но как и обещал — все кто сейчас получают безлимит до 5000 уведомлений. А те, кто продвинали сервис в самом начаще так и будут пользоваться полным безлимитом.

                            Не радует только то, что сейчас никто вообще не платит, т.е. как такового дохода с проекта практически нет. Сегодня зарегалось более 100 новых пользователей, один хороший человек кинул 100 рублей. Один рекламный баннер адсенса принесет мне в месяц в районе 300 рублей думаю. Как раз хватит ровно на оплату сервера.

                            Но проект на самом деле надо как то монетизировать. То есть я хочу отделить тех, у кого денег нет — они могут пользоваться бесплатно как по акции. А те, кто на самом деле повышают эффективность своей деятельности засчет моего сервиса — должны это оплачивать, хотя бы немного, хотя бы рублей 200.
                          • 0
                            Когда разбирался с API столкнулся с ограничением.
                            К примеру, webhook можно поднять только по HTTPS, то есть если на сервере нет SSL, то система не дает повесить обработчик.
                            В своих экспериментах использовал сервер без SSL, который методом getUpdates забирает с сервера Telegram сообщения.

                            Поделитесь опытом, у вас через HTTPS все работает или есть еще какой-то способ?
                            • 0
                              Конечно через HTTPS. В статье даже описан метод как был сделан обработчик.
                              • 0
                                Да, описание обработчика я заметил, спасибо. Хорошо когда на сервере есть SSL )
                              • 0
                                С такими же ограничениями столкнулся. Пришлось купить домен и добавить его в сертификат. Причем замечу, что самоподписанные сертификаты не работают.
                                • 0
                                  Сделал аналогичным образом. Не приходят никакие данные от телеграма. Если вручную забить, то все ОК. У вас работает?
                                  • 0
                                    Вы сделали как в статье? php://input
                                    Я вообще отлаживал через редис сохранял данные от телеграма в редис а читал в другом месте.
                                    • 0
                                      Уже разобрался. Проблема была в неправильно настроенном сертификате. В Firefox он нормально работал, а в хроме жаловался :) Сервер на Node.js.

                                      Все таки не хватает функции проверки вебхуков у телеграма. Так сиди, гадай, в чем проблема была :)
                                      • 0
                                        Это еще ладно, мы двух ботов зарегистрировали. Установили хук, не приходит ничего и все тут. Руками отправляешь пост на адрес хука — все ок, от телеграма не приходит. Бились с сертификатом, бились с хостером, оказалось все прозаичней, наша система установила адрес хука одному боту, а писали мы другому :-)
                                        • 0
                                          Да весело, когда тестируешь на одном сервере, а на самом деле ты подключен к другому и не можешь понять почему ничего не меняется.
                                        • 0
                                          А что было настроено не правильно? А то у меня ни один браузер на сертификат не ругается, SSL Labs оценил его на «A+», да и всё остальное настроено, а сервера телеграма даже не пытаются подключаться.
                                          • 0
                                            Мне WoSign прислал файлы сертификатов, короче, я не те файлы для NGINX указал. В Firefox работали, а в Chrome хрен.
                                • 0
                                  Сделал уведомления просто зарегистрировав обычного юзера на левый номер телефона и подняв на сервере telegram-cli. Неудобно то, что юзер должен сообщать номер телефона, но такой бот умеет сам инициировать общение, в отличие от ботов которые предложили в телеграм.
                                  • 0
                                    Тут еще одна деталь — ограничения. Бот расчитан на рассылку сообщений тем, кто инициировал с ним диалог. А вот бот через пользователя может иметь жесткие рамки по рассылкам.
                                    Итого
                                    — Нужно знать номер телефона. Многие люди не любят им делиться. А по законну это вроде как еще и считается чуть ли не персональными данными
                                    — Больше ограничений
                                    — Нужно держать в фоновом процессе консольного бота, вместо того, чтобы просто отвечать на webhook-запрос.

                                    К слову если брать в расчет мой сервис, то получаем еще вот что — при смене номера телефона или аккаунта телеграма, канал не теряет связи с человеком — человек просто привязывает другой телеграм аккаунт.
                                    В дальнейшем я думаю у меня вообще будет система выходов. Т.е. пользователи смогут прикручивать свои callback и слать уведомления вообще в ЛЮБУЮ систему у которой есть API.

                                    Сейчас же еще доступен андроид и хром напрямую. И уведомление можно слать бродкастом всем пользователям канала за один запрос, а потом вторым запросом собирать статистику приема.
                                    • 0
                                      Это всё прекрасно, только ограничения для многих сервисов (и моего в том числе) будут не такими уж большими, а пользователям гораздо проще ввести номер либо логин в телеграме. Обезличенный номер телефона не является персональными данными.

                                      Хорошо, конечно, что вы сделали такого бота, тут я совершенно не против. Но нужно думать как упрощать получение уведомлений, потому что реальные пользователи, в отличие от гиков, ленивы.
                                      • 0
                                        В том то вся и суть что они ленивы. У меня вход в один клик, подписка в один клик.
                                        А дальше в одик клик добавляешь любой метод получения уведомлений.

                                        Любой пользователь у меня в системе может подписаться на любой канал без ввода номеров и т.д. нажав одну кнопку.
                                        У вас же если у человека нет телеграма — он уже не сможет получать уведомлений. У меня же можно поставить приложение или получать уведомления через Push API в хроме без установки приложений.
                                    • 0
                                      Вроде как телеграм сейчас поддерживает логины вместо номера телефона, посмотрите в настройках.
                                      • 0
                                        Так и есть, но telegram-cli пока что не умеет.

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

                                    Самое читаемое