Работа с сервисами Telegram, OpenWeatherMap.org, курсы валют РБ













Небольшая конфигурация по работе с Telegram.
Получение курсов валют, погоды по городу.
Сказал бы, что это больше проба пера, а не готовая и быстро работающая.
Для себя работать будет быстро)

Первоначально конфигурация планировалась для сбора курсов валют банков Беларуси,у которых API в публичном доступе без регистрации и SMS. =)

Затем, рассказав одному другу про простую идею, он говорит — а сделай какого-нить робота для работы с телеграмм, чтобы можно было получать курсы и прогноз погоды.

Идея понравилась, и приступил к пробе пера работы с Телеграмм.

Первоначально опишу, что были созданы "универсальные" объекты

Справочник 

Сервисы

  • имя сервера — имя сервера обращения к API
  • -https — признак защищенного соединения
  • -Токен — если требуется для авторизации(об этом ниже)
  • -КодАбревиатуры- краткий код сервиса для того что бы определить и красиво вывести в сообщении курсов и дальше для развития
  • -Формат даты — Формат в какую надо преобравывать Дату для API(если требуется).
  • Количество обращений за день-некоторые сервисы.

РегистрСведений 

  • ЖурналРегистрацииСервисов — в нем храним обращения на сервисы, признак успешного выполнения, описаниеОшибки, если не выполнен.

В справочнике "Сервисы" будут храниться наши настроенные сервисы(заполнение их опишу чуток ниже).

В РС "Журналы регистрация запросов" пишем запросы к сервисам, к которым будем обращаться (когда обращались и успешно ли и, если была ошибка, — описание ошибки).

Для начала собрал все API банков РБ, которые есть в публичном доступе.

У половины банков, а точнее у 2/3 курсы валют хранятся в разрезе подразделений, хотя есть и просто курсы валют.

Решил, что буду делать по подразделениям.

Были созданы следующие объекты для данного куска подсистемы:

Справочники

  •   Валюты
  •   Банки
  •   ПодразделенияБанка

РегистрСведений

  •   КурсыВалют

Модуль 

  • РаботаСКурсамиВалют

Регламентное задание

  • ЗаполнитьКурсы(по умолчанию запрос выполняется каждый час)

PS
В справочнике Банки созданы предопределенные элементы для большего удобства работы с ними.

В справочнике "Банки" в поле "Сервис" выбираем нужный нам элемент, который настроили.

После этой настройки запускаем регламентное задание.

Первоначально произойдет заполнение справочника валюты и курсы НБРБ.

Поскольку каждый банк предоставляет структуру ответа по валютам разные(у кого-то код валюты идет как USD,у кого-то код 984) ,создал 3 константы

  • валютаUSD
  • ВалютаEUR
  • ВалютаRUB

чтобы определить как-то, что это за валюта.

После заполнения данных констант, в следующий раз при отработке обновления курсов, произойдет заполнения регистра "Курсы валют" по банкам.

PS

Как писал выше, курсы валют заполняются по подразделениям, тут чуток соврал, поскольку в коде прописал по головному офису, но задел оставил на будущую реализацию, прошу сильно не бить. = )

Настраиваем регламентное "ЗаполнитьКурсы"  и по сути с валютами и все!

Дальше идет сервис для получения погоды.

Сначала идем на сайт https://openweathermap.org/ -крупный сервис предоставления данных о погодных условиях(Есть платные API и бесплатные).

-Какие мы будем использовать????

-Правильно!Бесплатные!))))

Регистрируемся на нем. 

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

PS
Токен, который пришел в письме, может быть сразу недоступен (до пары часов). 
Это пишется в документации.У меня стал доступен примерно через мин 30.

Для данного модуля были созданы

Справочники

  • Город
  • ПогодныеСобытия

Модуль 

  • РаботаСПрогнозомПогоды

РС

  • Погода

Что надо, чтобы получить данные о погоде?

В справочнике "Сервисы",там уже есть предопределенный элемент OpenWeatherMap.

Открываем его и заполняем 

  • Токен-берем из письма
  • Адрес сервера — api.openweathermap.org
  • https- ставим если защищенное соединение (в нашем случае ставим в истина)
  • В обработке "Получение данных",на закладке "Получение данных" вводим город и выполняем команду "Получить погоду по городу".

При выполнении команды,происходит обращение к сервису,после если все ответ положительный,тогда создается город(по ID),события погоды(по ID) и происходит запись в регистр "Погода".

В РС записываю данные 

  • Погодное событие
  • температру (цельсий)
  • Влажность(%)
  • давление (гетроПаскаль)

Данные записанные можно увидеть в выше описанном регистре сведений.

Дальше идет работа с Telegram.

Как создать бота в телеграмм и получить его Токен и прочую информацию, можно найти в интернете ,тут дублировать не буду а то и так много букав =)

Для работы с телеграмм были созданы следующие объекты

Справочники

  • ПользователиТелеграм

Модуль

  • РаботаСТелеграм

РС

  • ИсторияСообщений

РегламентноеЗадание

  • ОбщениеСБотомТелеграмм(расписание каждые 2 сек)

Для настройки необходимо зайти в справочник "Сервисы" и для одноименного элемента заполнить след. поля:

  • Токен- получен от @BotFather
  • Имя сервера — api.telegram.org
  • https- ставим если защищенное соединение (в нашем случае ставим в истина)

Работа производится с помощью метода GetUpdates который есть в документации.
В регистр сведений записываются сообщения полученные от бота

  • ID пользователя
  •  дата получения/отправки
  • текст сообщения

Команды, которые там созданы, конечно, "запилены" руками, что не есть хорошо, но для личного пользования и поиграться интересно. 

После получения списка обновлений,получаю ID пользователя и его структуру данных и смотрю есть ли с таким ID пользователь в базе.Если нету то создаю его.

Записываю данные в регистр "История сообщений" и затем анализирую команды пришедшие(текстом) уже по сравнению на имя команды выдаю то что мне надо.Данные отправленные фиксирую в том же регистре сведений.

Так же есть обработка, которая была сделана для отладки получения курсов,общение с ботом,получение погоды.

Что хотелось бы дальше попробовать и что улучшить???
1)Надо делать это все через вебхуки потому что если нагрузку дать я думаю робот будет "подтупливать" и отправлять с задержкой ответы.
 2)Сделать как то универсальнне настойку команд ,что бы гибче их настраивать можно было.
3)Отправлять красивые сообщение и с клавиатурой telegram.

PS
Опыт интересный для пробы пера с telegram,поскольку опыта работы  с большими мессенджерами с их API таких ресурсов не было.
Как переделаю на вебхуки и решу выше описанные цели тогда добавлю в это же статью или же уже новую.

19.07.2024
Новая версия конфигурации(v 1.1)
Что сделано было.
Было добавлена inline- клавиатура
клавиатура по получению курсов валют,поиска погоды по введенному городу на текущий момент и на ближайшие 2 дня.
Скрин шоты приложены выже.
ДТ- перезалита.
23.07.2024
Новая версия конфигурации(v 1.2)
Добавлено получение погоды по географическим координатам в обработке.
Добавлена настройка прокси если необходимо в справочнике "Сервисы".

Тестирование производилось на платформе 1С:Предприятие 8.3 (8.3.13.1644)

В файле прикреплена DT-шка с данными.
Перезалил CF так мне кажется удобнее для тех кто уже скачал и накатит обновление или просто захочет сам настроить все это сам.

2 Comments

  1. ring_andrey

    Телеграмм работает через прокси? Можете описать, какой устанавливаете адрес и где берете новые, пока не заблокировали существующий?

    Reply
  2. serg-lom89

    (1)у нас в РБ такого нету))))

    Не через прокси работает.

    надо в настройке сервиса предусмотреть это будет.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *