Главное Авторские колонки Вакансии Образование
Выбор редакции:
27 482 9 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Push-уведомления в Telegram для чайников

Наверняка Вы уже видели похожую статью на Спарке. Использовав только ту статью я лично не смог сделать PUSH-уведомления через Telegram для своего сервиса - поэтому решил написать по своему.
Мнение автора может не совпадать с мнением редакции

Наверняка Вы уже видели похожую статью на Спарке (http://spark.ru/startup/pushall/blog/9872/push-uve...). Она мне помогла, но пришлось еще прилично повозиться и использовать другие материалы, чтобы сделать PUSH-уведомления на моем сервисе отслеживания объявлений.

Небольшое вступление. Когда Glisa обнаруживает новые объявления на Авито, Из рук в руки или Dromе, то сервис слал пользователю сообщение по электронной почте с текстом найденных объявлений. Учитывая, что хорошие товары уходят быстро, очень важна оперативность доставки. Доставка через электронную почту даже с установкой мобильного клиента занимала до 5 минут. Альтернатива в виде СМС - мгновенна, но обходится естественно дорого. Поэтому, в очередной раз возник вопрос разработки приложения. В процессе обдумывания обнаружились другие, более простые варианты. Первым попался сервис уведомлений PushAll - отвергнут в первую очередь из-за отсутствия iOs-приложения, а во вторую - за слабое юзабилити Android-приложения. Вторым вариантом, стал мессенджер Telegram: API без заморочек, удобный, охватывает и iOs, и Android, минус - отсутствие русского языка в базовой установке.

Теперь по порядку, как все это реализовать с учетом того, что у меня вызвало сложности. Шаг 1. Создание бота.

Если еще не зарегистрированы, регистрируемся в Telegram. Мне удобнее через веб-интервейс: https://web.telegram.org.

Набираем в поиске BotFather - папа ботов)), шлем ему команду на создание нового бота /newbot. Далее следуя инструкциям задаем название и имя бота. Также пригодятся команды: /setdescription - изменить описание, /setuserpic - задать иконку. Папаша выдаст token бота, который нужен будет дальше.

Итак, есть бот, но он ничего не умеет. Для моего сервиса особо ничего и не нужно, нужно только, чтобы бот слал сообщения пользователю, но для того чтобы их слать, нужно узнать ID чата пользователя с ботом. А для этого, пользователь должен написать первым, а мы должны обработать сообщение и выудить ID. Шаг 2. Выбор метода обработки сообщений боту.

Тут нужна документация по API Telegram. Все что пишется боту, можно обрабатывать двумя способами:

  1. Забирать обновления, т.е. все что написали боту с помощью метода getUpdates: https://api.telegram.org/bot#token#/getUpdates
  2. Задать Webhook, т.е. адрес, на который будут приходить все обновления и скрипт будет их обрабатывать (метод setWebhook)

Второй метод лучше, но уведомления шлются на https, а лично у меня его нет, да он и не нужен. Задав в качестве Вебхука обычный адрес с http долго мучался и гадал почему оно не работает. Когда дошло, опять помучался с поиском халявного https - в итоге нашел, но сделал по первому методу, вызывая скрипт кроном раз в минуту. Поэтому бот получился слегка тормозным, но для моих целей подходит.

Итак палю, халявный https у меня получился через https://www.cloudflare.com/ - ничего не стОит, работает, правда заработал дня через 3, когда я уже все сделал. Дальше буду описывать по первому методу. Шаг 3. Обработка сообщений боту

$boturl="https://api.telegram.org/bot".$botToken;
$url=$boturl."/getUpdates?offset=$cur_id";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);            
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
$html = curl_exec($ch);     
$gram=json_decode($html,true);
foreach ($gram["result"] as $message)

Несколько пояснений по коду. В методе getUpdates используем параметр offset, чтобы считывать только новые события. Получаем данные curlом и преобразуем полученный json ответ в массив и перебираем циклом сообщения.

В сообщении меня интересуют:

  • $message["update_id"] - номер события
  • $message["message"]["text"] - текст сообщения
  • $message["message"]["chat"]["id"] - и самое главное ID чата
Шаг 4. Обучение бота

Я реализовал связку чата в Telegram с аккаунтом пользователя через цифровой код вида <11.1111111.on>, который пользователь видит в личном кабинете, а затем отправляет боту. Соответственно, если в тексте сообщения встретилась такая последовательность, нашелся внутренний ID пользователя (цифры до первой точки) и совпал проверочный код (цифры между точками), то в данный аккаунт записывается номер чата Telegram (был еще вариант слать боту email, под которым пользователь зарегистрирован на Глисе) и уже все готово для отсылки уведомлений.

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

$url=$boturl."/sendMessage?chat_id=".$message["message"]["chat"]["id"]."&disable_web_page_preview=true&text=".urlencode($answer); 
curl_setopt($ch, CURLOPT_URL,$url); 
$html = curl_exec($ch);

Еще осталось соблюсти пользовательское соглашение Телеграма и анализируя текст сообщения обучить бота командам /start и /help, выдавая соответствующие ответы.

Ссылка на бота telegram.me/glisa_bot, либо его можно найти набрав в поиске в Telegram глиса.

+1
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
В процессе обдумывания обнаружились другие, более простые варианты. Первым попался сервис уведомлений PushAll - отвергнут в первую очередь из-за отсутствия iOs-приложения, а во вторую - за слабое юзабилити Android-приложения. Вторым вариантом, стал мессенджер Telegram: API без заморочек, удобный, охватывает и iOs, и Android, минус - отсутствие русского языка в базовой установке.

Эм. Телеграм уже есть и в PushAll. iOS есть на стадии тестирования. Функционал обоих приложений в ближайшее время будет расширен и будет иметь встроенную ленту истории.

Итого:
1. Вы сделали очередного бота. Чем ещё больше забили список чатов пользователей.
2. Вы ограничили себя лишь телеграмом
3. Вы сделали велосипел хотя есть сервис который делает тоже самое плюс имеет несколько десятков полезных каналов, которые мотивируют пользователя не удалять бота или приложение.


PS. В PushAll ещё к слову будут настройки не беспокоить, приоритеты уведомлений уже есть. Вам же это даже профита делать не будет

И да забыл еще сказать - потеряли 50% аудитории, тех кто использует компьютер.

PS2 круто что продукт начинают так цитировать.
К слову ещё насчёт андроид приложения - многим наоборот нравится что оно весит всего 1 мегабайт, умещается там где памяти нет совсем.
Ответить
Ислам Шахидов
Могу помочь с этим,
если кому интересно
пишите на почту sms-ya@live.ru
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
"вызывая скрипт кроном раз в минуту. Поэтому бот получился слегка тормозным, но для моих целей подходит."
У меня все через вебхуки. То есть вы ещё небольшой пиар сделали мне :) ваше решение работает хуже (за минуту без ответа бота могут уже удалить, кстати не проверял что будет, и сможет ли он прислать ответ)
Ваше решение покрывает небольшую аудиторию. Для статистики что у меня в системе (2 дня назад измерял)
Всего 3051
1273 Android 41% 
1197 Chrome 39%
379 Telegram 12%
198 WebPush 6%
4 iOS 0.0131%

Итого 88% аудитории вы не покрыли.

К слову мой бот умеет команды остановки и запуска. Ну то есть можно выключить временно устройство не заходя на сайт, а потом также быстро включить.
Ответить
ГЛИСА
Сервис мониторинга досок объявлений
Сулейманов Руслан
Олег, я знаю что сделал пиар. Задумка хорошая. Но iOs реально нужно и Андроид приложение мне не понравилось - хотя я хотел сначала через тебя делать - не обижайся плиз что на ты - американизм))
В приложении большой минус, что нужно скакать из приложения в браузер. Руки дойдут - мож и твой API пропишу
Ответить
ГЛИСА
Сервис мониторинга досок объявлений
Сулейманов Руслан
У меня все через вебхуки. То есть вы ещё небольшой пиар сделали мне :) ваше решение работает хуже (за минуту без ответа бота могут уже удалить, кстати не проверял что будет, и сможет ли он прислать ответ) -
да не, не удаляют - это разовое действие. тут же своя специфика. он только как способ ускорения уведомлений
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
К слову скакать по сути не нужно. 80% аудитории один раз настраивают уведомления и дальше не заходят ни в приложение, ни на сайт :)
К слову таки по статистике очень многие с компьютера используют для них это вообще не проблема. Айос как выше писал - уже в открытом тестировании нужно лишь ввести почту. Думаю через месяц айос версия будет в аппсторе. И в обоих версиях - андроид и айос будет история уведомлений внутри. Но это вообще не решающий фактор - история даже многим не так сильно важна. Т.к. на андроиде достаточно резиновая область уведомлений все умещается.
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
PS. наткнулся снова на пост, уже как более года есть iOS приложение
Ответить
Жулдыз Шалимбекова
Могу помочь с этим,
если кому интересно
пишите на почту sms-ya@live.ru
Ответить
Эрик 131312
Нашел простой, понятный и недорогой сервис для уведомлений через телеграм https://www.telenote.site
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.