"Помнить все" на 1С Элемент + Телеграм
Вы можете напомнить себе о задаче, введя (или надиктовав) подобные фразы:
позвонить через 15 минут
напомнить завтра утром
погулять в 8 вечера в воскресенье
и даже
вынести мусор в последний понедельник следующего месяца без четверти пять
Давным-давно была программа «Помнить все» под андроид, позволяющая задавать напоминания голосом.
Правда, на последних версиях она уже не работает. Признаю, что появились гораздо более навороченные альтернативы.
Здесь сделана попытка выполнить подобный разбор на старых добрых регулярных выражениях. К переданному тексту последовательно применяются регулярные выражения, пытаясь найти в тексте описание даты/времени. Если часть строки точно не нужно анализировать, можно обрамить ее двойными угловыми скобками <<это не дата>>.
Напоминание придет в привязанный телеграм-бот.
Соответственно, это можно перенести куда угодно. В том числе и на 1С Элемент.
Разбор времени напоминаний находится в общем модуле АнализДат.
Значения даты/времени могут быть указаны как числом, так и прописью. Собственно, есть блок регулярных выражений, который переводит из прописи в число.
Чудес от разбора ожидать не приходится, но все фразы, что я мог придумать, заносил в общий модуль АнализДатТест.
В отдельной функции описаны идентификаторы времени: утром (10:00), днем (13:00), вечером (20:00). Их легко можно перенести в справочник.
Поскольку это не законченное приложение, а просто учебная заготовка - оно рассматривается мной как однопользовательское. Я не разбирался с правами.
И до полноценного мобильного клиента руки у меня тоже не дошли.
Поэтому по прекрасной статье infostart.ru/1c/articles/2119555 создал телеграм-бота. Как добраться до http-сервиса, подключение вебхука, там все описано.
Описал шаблон в http-сервисe /bot/{SpecialString}/*
Все настройки находится в справочнике СправочникНастройки, в котором всего одна запись с кодом 1.
Структура справочника:
Токен – полученный токен телеграм-бота.
АдресПриложения – путь к вашему приложению. В телеграм-боте есть кнопка «Открыть ссылку» по данному адресу.
SpecialString – строка, которая добавится в путь к сервису. Это определенная защита, добавленная, чтобы адрес отличался от стандартного. Честно говоря, баловство, но и времени не заняло.
КлючАвторизацииСбер – В Телеграм мы легко можем отправить речь. Я не нашел, как можно преобразовать в текст в 1С Элемент на сервере, поэтому просто обращаюсь к api SaluteSpeech сбербанка, бесплатный пакет для физических лиц. Нужно получить ключ авторизации, и указать его, https://developers.sber.ru/docs/ru/salutespeech/authentication.
Путь к http-сервису для установки вебхука формируется автоматически в методе МодульТелеграм.ПолучитьПутьWebhook(): "%{Рез.АдресПриложения}/api/k/bot/%{Рез.SpecialString}/"
На форму объекта вывел команды установки и удаления вебхука.
В случае записи речи, получение файла и получение текста через api сбербанка выполняется в функции МодульТелеграм.СкачатьИРазобратьРечь().
После того, как разобрали текст и получили время напоминания, нужно обеспечить обращение к боту в это время. Напоминания хранятся в соответствующем справочнике (СправочникНапоминаний). Структура достаточно простая: ДатаНапоминания, СтрокаИсходная, Выполнено, ДатаРегистрации, ИдЧата, Код.
При записи создается ЗапланированноеЗадание. Задание привязывается к функции менеджера справочника СправочникНапоминаний.ВызватьНапоминание(). Ключ задания – код справочника. При срабатывании задания в телеграм-бот отправляется оповещение. Можно избавиться от реквизита «Выполнено» и анализировать время и связанное задание, но это нормальное решение для учебных целей.
В модуле объекта:
@Обработчик
метод ПослеЗаписи(До: СправочникНапоминаний.Данные, ПараметрыЗаписи: СправочникНапоминаний.ПараметрыЗаписи)
если ПараметрыЗаписи.ЗаписьИзСобытия == Неопределено или не ПараметрыЗаписи.ЗаписьИзСобытия
если ЗапланированныеЗадания.ПолучитьПоКлючу(этот.Код) != Неопределено
ЗапланированныеЗадания.Удалить(этот.Код)
;
если не Выполнено
пер НовоеЗадание = ЗапланированныеЗадания.Создать(&СправочникНапоминаний.ВызватьНапоминание,этот.Код)
НовоеЗадание.Настроить(Расписание = Расписание.Однократно(этот.ДатаНапоминания.ВМомент(ЧасовойПояс.Текущий())),
Ключ = этот.Код,
Описание = этот.СтрокаИсходная).Запланировать()
НовоеЗадание.Запланировать()
;
;
;
В модуле менеджера:
@ВПроекте
метод ВызватьНапоминание(КодНапоминания: Строка): Строка
знч Эл = СправочникНапоминаний.НайтиПоКоду(КодНапоминания).ЗагрузитьОбъект()
новый ExecutionEvent(Details =
"В ${Эл.ИдЧата}, ${Эл.ДатаРегистрации|дд.ММ.гггг ЧЧ:мм} вы написали:
%{Эл.СтрокаИсходная}
"
).Записать()
знч ОтветСообщения = МодульТелеграм.ОтправитьТекстовоеСообщение(Эл.ИдЧата,
"В ${Эл.ДатаРегистрации|дд.ММ.гггг ЧЧ:мм} вы написали:
%{Эл.СтрокаИсходная}
",
МодульТелеграм.ВидыКлавиатуры.Продление
)
Эл.Выполнено=Истина
Эл.Записать(ПараметрыЗаписи = новый СправочникНапоминаний.ПараметрыЗаписи(ЗаписьИзСобытия = Истина))
возврат ОтветСообщения
;
На форму списка добавлена сортировка кода по убыванию. Эта форма списка открывается по умолчанию, поэтому сразу будет видно последние записи.
Код работы с Телеграм находится в модуле МодульТелеграм ))
Для проверки нужно:
- Опубликовать данный проект в 1С Элемент
- Подключить телеграм-бота
- В пользовательском режиме внести в справочник настроек единственный элемент с кодом 1
- Добавить полученный адрес https://***.1cmycloud.com/applications/***
- добавить любую строку в поле SpecialString
- внести в справочник настроек токен Телеграм
- для автоматического разбора речи нужно получить ключ авторизации SaluteSpeech. Записать его в справочник настроек.
- Записанная или проговоренная строка в боте будет обработана и добавлена в задания.
При наступлении запланированного времени в Телеграм придет сообщение.
Добавлены кнопки, с несколькими вариантами продления.
Сообщение будет повторено через указанное время.
Весь код выложен на https://github.com/KAO-GIT/keepka.