Loading

Запускаем старую и крайне добрую 1С и создаем пустую базу с пустой конфигурацией. И запускаем базу в режиме Конфигуратора.

Приступим!

Добавляем константу, которая будет хранить наш токен от бота. Константа будет с типом строка длиной 50 символов.

После этого добавляем пустую обработку — пусть она будет называть Бот. Сразу добавляем форму…тоже пустую

На форму добавляем 3 элемента:

  1. Токен — пусть будет считываться из константы…просто так (строка, длина 50)
  2. ИДСообщиение — значение числовое, пусть сохраняется на форме
  3. Лог Событий — таблица значений с двумя реквизитами. Первый реквизит — Период (Тип ДатаВремя). Второй реквизит — Событие (Строка, без органичений)

Переходим в модуль формы и добавляем процедуру ПриСозданиеНаСервере — в ней заполним реквизит Токен.

Начало положено — теперь немного теории.

С ботом можно работать двумя способами:

  1. Обращаться по адресу и получать новые сообщения
  2. Установить вебхук и ждать когда прилетит новое сообщение — как это сделать в 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

В логе событий мы видим, что пришло новое сообшение

А в боте видим ответа

It’s works!

Top