Запускаем старую и крайне добрую 1С и создаем пустую базу с пустой конфигурацией. И запускаем базу в режиме Конфигуратора.
Приступим!
Добавляем константу, которая будет хранить наш токен от бота. Константа будет с типом строка длиной 50 символов.
После этого добавляем пустую обработку — пусть она будет называть Бот. Сразу добавляем форму…тоже пустую
На форму добавляем 3 элемента:
- Токен — пусть будет считываться из константы…просто так (строка, длина 50)
- ИДСообщиение — значение числовое, пусть сохраняется на форме
- Лог Событий — таблица значений с двумя реквизитами. Первый реквизит — Период (Тип ДатаВремя). Второй реквизит — Событие (Строка, без органичений)
Переходим в модуль формы и добавляем процедуру ПриСозданиеНаСервере — в ней заполним реквизит Токен.
Начало положено — теперь немного теории.
С ботом можно работать двумя способами:
- Обращаться по адресу и получать новые сообщения
- Установить вебхук и ждать когда прилетит новое сообщение — как это сделать в 1С науке пока не известно, но бюджет отдела разработки Русского Бэтмена уже пожирает криптовалюту на изучение данного вопроса.
Следовательно выбираем первый вариант.
Для получения списка сообщений необходимо обратиться c помощью GET запроса. Он должен выглядеть так:
https://api.telegram.org/botНАШТОКЕН/getUpdates
НО
при таком обращение мы всегда будем получать все сообщения, а не последние.
Если обратиться к описанию ботов телеграма — можно вычитать, что необходимо использовать параметр offset, который должен содержать номер обновления. Если будет выполнено обращение с таким параметром, все прошлые сообщения будут удалены — как раз для хранения номера обновления мы будем использовать реквизит ИДСообщения.
Добавляем команду, которая будет запускать процедуру для обращения к getUpdates…каждый секунд пять. Примерный код будет таким:
Процедура ЗапуститьБотаНаСервере будет содержать всю логику работы боты.
Логика работы бота
в процедуру ЗапуститьБотаНаСервере пишем следующее: // нам нужен временный чтобы хранить ответ от телеграма ИмяФайла = ПолучитьИмяВременногоФайла("txt"); // создаем новое подключение к api.telegram.org, не забываем про SSL Подключение = Новый HTTPСоединение("api.telegram.org", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL()); // про offset я писал вышел - будем получать только новые сообщения // то есть к ИДСообщения добавляем 1 и получаем данные Ограничение = ""; Если ЗначениеЗаполнено(ИДСообщения) Тогда Ограничение = "?offset=" + Формат(ИДСообщения + 1, "ЧГ="); КонецЕсли; // сам запрос GET с getUpdates Запрос = Новый HTTPЗапрос("/bot" + Токен + "/getUpdates" + Ограничение); Подключение.Получить(Запрос, ИмяФайла); // после того как ответ получен мы читаем с помощью JSON ответ чтение = новый ЧтениеJSON; чтение.ОткрытьФайл(ИмяФайла); данные = ПрочитатьJSON(чтение,ложь); // если не ok - уходим из процедуры Если НЕ данные.ok Тогда Возврат; КонецЕсли; // дальше обрабатываем массив сообщений Для каждого Сообщение из данные.result Цикл // обновляем нам ИДСообщения ИДСообщения = Сообщение.update_id; // получаем текст сообщения и данные отправителя ТестПриятногоСообщения = Сообщение.message.text; ОтКогоИД = Формат(Сообщение.message.from.id, "ЧГ="); ОтКого = Сообщение.message.from.first_name + " " + Сообщение.message.from.last_name; // обновим лог событий Лог = ЛогСобытий.Добавить(); Лог.Период= ТекущаяДата(); Лог.Событие = "Пришло сообщение от " + ОтКого; // и приготовим ответ ТекстОтвета = ""; Если СтрНайти(Сообщение.message.text, "/start") Тогда ТекстОтвета = "Привет! Это сообщение от 1С"; Иначе ТекстОтвета = "Неизвестная команда"; КонецЕсли; // Для отправки сообщения нужно знать две вещи - идентификатор чата // и само сообщение. Снова создаем новый запрос к sendMessage и параметрами // chat_id и text Запрос = Новый HTTPЗапрос("/bot"+Токен + "/sendmessage?chat_id=" + ОтКогоИД + "&text=" + ТекстОтвета); // собственно посылаем запрос и ждем сообщения от бота ИмяФайлаСообщение = ПолучитьИмяВременногоФайла("txt"); Подключение.Получить(Запрос, ИмяФайлаСообщение); // конец цикла КонецЦикла;
И это все — бот сможет ответить нам. Проверяем!
Первое — заполняем константу Токен
Второе — открываем обработку Бот
После нажатия кнопки Запуск бота — бот каждые 5 секунд будет проверять сообщения. Поэтому самое время послать ему запрос в телеграме с командой /start
В логе событий мы видим, что пришло новое сообшение
А в боте видим ответа