В мессенджере Telegram появилась возможность создать бота — с его помощью вы можете отвечать на сообщения в телеграме, рассылать уведомления, добавлять к сообщениям картинки и так далее.
Пользователи node.js уже подготовили npm-пакет, с которым всё становится ещё проще.
Сначала создаём бота. Стучимся к @botfather, говорим ему /newbot, пишем имя бота и его юзернейм (он должен заканчиваться на _bot).
Теперь у вас есть бот, и @botfather сообщает ссылку для поиска бота и его http-токен. Токен понадобится нам дальше как ключ для API. В своём телеграм-аккаунте вы можете найти своего бота и добавиться к нему в друзья.
Теперь к программированию. Установите npm-пакет:
npm install node-telegram-bot-api
Создайте скрипт:
var TelegramBot = require('node-telegram-bot-api');
var token = 'токен_вашего_бота';
var bot = new TelegramBot(token, {polling: true});
bot.on('message', function (msg) {
var chatId = msg.chat.id;
console.log(msg);
bot.sendMessage(chatId, "Hello!", {caption: "I'm a bot!"});
});
Сохраните его под именем app.js, и запустите его в node.js:
node app
Всё, бот работает. Напишите что-нибудь ему в телеграме, он ответит «Hello!».
Пару слов об API. Во-первых, есть два варианта запуска бота: polling и WebHook. В режиме WebHook сервер телеграма будет дёргать вашего бота каждый раз при поступлении запроса. К сожалению, этот режим требует http-подключения и валидного (не self-signed) сертификата http. У меня такого нет.
В режиме polling бот будет сам раз в секунду ходить на сервер телеграма и забирать новые данные. Этот режим таких ограничений нет, поэтому он гораздо проще для начала экспериментов — единственное, реакция будет не мгновенной, а в среднем с пол-секундной задержкой. Надеюсь, это не будет проблемой.
Давайте попробуем сделать что-то более интересное: пускай бот после получения запроса «photo» снимает фотографию камерой макбука и отправляет её. Для съёмки нам потребуется модуль imagesnap.js.
var TelegramBot = require('node-telegram-bot-api');
var imagesnapjs = require('imagesnapjs'), fs = require('fs');
var token = 'токен_вашего_бота';
var filename = '/Users/catethysis/telegram/webcam.jpg';
var bot = new TelegramBot(token, {polling: true});
bot.on('message', function (msg) {
var chatId = msg.chat.id;
console.log(msg);
if(msg.text == 'photo')
fs.exists(filename, function (exists) {
if(exists)
fs.unlinkSync(filename);
imagesnapjs.capture(filename, { cliflags: '-w 2'}, function(err) {
console.log(err ? err : 'Success!');
bot.sendPhoto(chatId, filename, {caption: "It's your photo!"});
});
});
});