====== @amperka/telegram ======
Библиотека для работы с мессенджером [[https://telegram.org/|telegram]].
Позволяет использовать сервис для управления Iskra JS: управление умным домом, вывод информации с датчиков, отправка уведомлений на телефон.
var serial = PrimarySerial;
serial.setup(115200);
var bot = require('@amperka/telegram').create('-УКАЖИТЕ_ЗДЕСЬ_СВОЙ_API_ТОКЕН-');
bot.on('text', msg => {
let fromId = msg.from.id;
let firstName = msg.from.first_name;
return bot.sendMessage(fromId, 'Welcome,'+firstName+'!');
});
var wifi = require('@amperka/wifi').connect(serial, function(err) {
wifi.reset(function(err) {
wifi.connect(SSID, PSWD, function(err) {
bot.connect();
});
});
});
===== Функции модуля =====
func:: create(options)
Создаёт новый объект Telegram. Параметр ''options'' — объект, содержащий поля ''token'' и ''polling''. Поле ''token'' должно содержать токен, [[https://core.telegram.org/bots#6-botfather|выданный]] сервисом Телеграмм. Параметр ''options'' может содержать необязательные поля:
* ''interval: 1000'' — Период опроса сервера на наличие новых сообщений (в миллисекундах).
* ''timeout: 0'' — Время удержания соединения с сервером в ожидании ответа о новых сообщениях (0 — short polling, 0< — long polling).
* ''limit: 1'' — Лимит новых сообщений для одного запроса в диапазоне от 1 до 100.
* ''retryTimeout: 5000'' — Ограничение времени переподключения (в миллисекундах).
var bot = require('telegram').create({
token: '-УКАЖИТЕ_ЗДЕСЬ_СВОЙ_API_ТОКЕН-', // Обязательное. API токен Телеграм-бота
polling: { // Необязательное
interval: 1000,
timeout: 0,
limit: 1,
retryTimeout: 5000
}
});
class:: Telegram
Класс для работы с Telegram-ботом. Для создания экземпляра используйте функцию ''create''.
func:: Telegram.connect()
Функция запускает опрос сервиса Telegram на наличие новых сообщений.
bot.connect();
func:: Telegram.disconnect()
Функция прекращает получение обновлений.
func:: Telegram.keyboard([array of arrays], {resize, once, selective})
Функция создаёт объект-клавиатуру, который может быть передан в качестве ''markup'' для функций ''sendMessage'' и ''sendLocation''.
* ''keyboard'' — массив строк кнопок, где каждая строка представлена массивом объектов-кнопок.
* ''resize'' — если ''true'', клавиатура изменит свой вертикальный размер для оптимального отображения. Значение по умолчанию — ''false'' — оставляет размер клавиатуры стандартного размера.
* ''once'' — если ''true'', клавиатура скроется сразу после первого использования, но будет по-прежнему доступна для пользователя. По умолчанию ''false''.
* ''selective'' — если ''true'', сработает в двух случаях:
- клавиатура будет отправлена только пользователям, указанным в тексте сообщения @маркером;
- если при отправке сообщения будет указано поле ''reply'', клавиатура отобразится только у пользователя с ''id'' равным ''reply''.
bot.on(['/start', '/back'], msg => {
var keyboard = bot.keyboard([
['/buttons', '/inlineKeyboard'],
['/start','/hide']
], { resize: true });
return bot.sendMessage(msg.from.id, 'Keyboard example.', { markup: keyboard });
});
{{ :js:telegram:keyboard.jpg?nolink |}}
func:: Telegram.button(, )
Создаёт объект-кнопку типа ''location '' или ''contact''. Нажатие кнопки ''location '' передаст координаты пользователя боту. Нажатие кнопки ''contact'' передаст номер телефона пользователя.
bot.on('text', msg => {
let markup = bot.keyboard([
[bot.button('contact', 'Your contact'), bot.button('location', 'Your location')]
], { resize: true });
return bot.sendMessage(msg.from.id, 'Button example.', { markup });
});
bot.on(['location', 'contact'], (msg, self) => {
return bot.sendMessage(msg.from.id, `Thank you for ${ self.type }.`);
});
func:: Telegram.inlineButton(, {url | callback | inline})
Создаёт объект-кнопку ''InlineKeyboardButton''.
func:: Telegram.inlineKeyboard([array of arrays])
Создаёт объект встроенную клавиатуру.
{{ :js:telegram:inline_keyboard.jpg?nolink |}}
var keyboard = bot.inlineKeyboard([
[
bot.inlineButton('callback', { callback: 'this_is_data' }),
bot.inlineButton('inline', { inline: 'some query' })
], [
bot.inlineButton('url', { url: 'https://telegram.org' })
]
]);
return bot.sendMessage(msg.from.id, 'Inline keyboard example.', { markup: keyboard });
===Стандартные методы Telegram:===
Библиотека использует стандартные для Telegram API имена методов.
func:: Telegram.sendMessage(chat_id, text, {reply, markup, notify})
Функция отправляет сообщение с текстом ''text'' пользователю ''chat_id''. Третьим параметром может передаваться объект с полями:
* ''notify'' — если установлен в ''false'', пользователи iOS не получат уведомление о сообщении, а пользователи Android получат уведомление без звука.
* ''reply'' — ''id'' сообщения, на которое отправляется ответ.
* ''markup'' — JSON-сериализованный объект с объектом-клавиатурой.
func:: Telegram.answerCallback(callback_query_id, text | undefined, show_alert)
Функция отправляет ответ на запрос пользователя, произведённый со "встроенной" клавиатуры.
* ''callback_query_id'' — уникальный идентификатор запроса, на который отправляется ответ.
* ''text'' — текст уведомления. 0-200 символов.
* ''show_alert'' — показывать уведомления или нет. По умолчанию ''false''.
func:: Telegram.sendLocation(chat_id, [latitude, longitude], {reply, markup, notify})
Функция отправляет сообщение пользователю ''chat_id'' с координатами ''latitude'' (широта) и ''longitude'' (долгота).
// обменяться координатами с ботом
bot.on('location', (msg, self) => {
return bot.sendLocation(msg.from.id, [55.743853, 37.656175]);
});
==== События ====
Используйте ''bot.on(, )'' для обработки событий в процессе работы.
События:
* ''/*'' — любая команда
* ''/'' — определённая команда
* ''connect'' — бот подключился к Telegram
* ''disconnect'' — бот отключился
* ''update'' — обновление
* ''callbackQuery'' — пришёл ответ от встроенной кнопки
События для сообщений:
* ''contact'' – данные пользователя
* ''location'' – данные местоположения
* ''text'' — текстовое сообщение
* ''*'' — любой тип сообщений
Для обработки команды с параметрами просто добавьте слеш ''/'':
bot.on('/hello', msg => {
var params = msg.text.split(' ');
return bot.sendMessage(msg.from.id, 'Hello, '+params[1]+' '+params[2]+'!');
});
Интерфейс библиотеки основан на библиотеке [[https://github.com/kosmodrey/telebot/|telebot]].
Подробное описание [[https://core.telegram.org/bots/api|API Telegram]].