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

Автор: admin от 1-07-2015, 00:10, посмотрело: 1525

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

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

  • Поддержка iOS

  • Поддержка Windows Phone

  • Получение уведомлений без установки лишних приложений


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

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

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


Привязываем


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

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

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

Из недостатков этого метода приема можно выделить:

  • Невозможность последующей модификации уведомлений

  • Невозможность отслеживания доставки (возможно временно)

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



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


Работает все достаточно просто.
Тут есть документация по 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.

PS. Прошу прощения. Похоже API ботов для телеграма упало как раз после написания статьи :( ждем решения проблемы.
Push-уведомления через Telegram
PS2 Похоже проснулся, но работает еще не сильно стабильно иногда ошибки проскакивают.

Источник: Хабрахабр

Категория: Программирование » Веб-разработка

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

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *