Опыт интеграции с мессенджером Telegram c 1C. Пустовой Вячеслав

19.07.2018 13:33:00   Инфобот (Infostart)    13536

Доклад будет полезен всем, кто интересуется возможностями интеграции 1С с мессенджером Telegram. Пустовой Вячеслав в формате короткого мастер-класса рассказывает о создании и настройке бота, позволяющего, к примеру, упростить процессы согласования платежей внутри компании, отгрузки со склада или получение оперативной информации о состоянии дебиторской задолженности.
Статью по мотивам доклада можно прочитать здесь: https://infostart.ru/public/819087/

Категории:
 Обмен данными

Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. PLAstic 295 19.07.18 17:51 Сейчас в теме
В след.раз зовите на любые эвенты про телеграм. Будет намного веселее.
Жаль, вы не изучили примеры с ИС при написании своего бота.

Косяки:
* update_id не является уникальным идом сообщения, как сказано на 16:30, это уникальный номер апдейта. А уникальный номер сообщения - это message.message_id. Конечно, уникальность имеется ввиду в контексте конкретного чата.
* Причиной ошибки, которую вы там разбирали из-за отсутствия lastname, является необязательность реквизитов в структуре message в том случае, когда они не указаны у пользователя. Т.е. это же может произойти и с username. Обратите внимание на надпись Optional вот тут.
* На 19:00 говорится не то. Не будут нам постоянно валиться одни и те же сообщения, если вы будете своевременно двигать счётчик последнего полученного апдейта и запрашивать апдейты с него. Обратите внимание тут на параметр offset.
* Судя по тому, что в функцию проверки наличия команды на 19:35 вы передаёте текст сообщения, вы не знаете, что сервера телеги сами парсят сообщения для бота и выделяют команды бота и много другое в отдельный массив. Почитайте про реквизит message.entities тут.
support; CyberCerber; +2
4. PLAstic 295 20.07.18 10:11 Сейчас в теме
* На 33:40 задают вопрос, мне кажется, про то, что вы передаёте в качестве callback_data. Конечно, у значения этого параметра есть ограничения. Я решил этот вопрос созданием регистра сведений СессииБота, куда записываю сгенерированный УникальныйИдентификатор() и структуру данных, связанных с ним и преобразованную с помощью ЗначениеВСтрокуВнутр() к строке. Т.о. в callback_data уходит идентификатор сессии, а когда приходит ответ, мы лезем в регистр, достаём оттуда структуру и по её параметрам идентифицируем этап процесса общения и кнопку, которая была нажата.
* На 37:00 и ранее они говорят про "длинные запросы" и какой-то второй метод получения апдейтов. Это webhook. Конечно, он намного быстрее и интерактивного бота, который бы не бесил своим медленным общением, можно сделать только на вебхуках. Хоть даже 3 секунды поставьте на интервал рег.задания при getUpdates, всё равно будет тормозить.
* Строго говоря, то, что вы называете на протяжении всего мастер-класса командами - это не команды бота. Это условные буквенно-циферные сочетания. Можете писать не "/report", а "$report", разницы не будет. Команды бота задаются у botfather и когда вы только введёте "/" в начале строки, вам сразу покажется список команд всех ботов, доступных в этом чате (в личке с ботом, конечно, он только один). И только в этом случае парсинг сервера телеги будет выделять их из текста сообщения и помещать в entities для вашего удобства.
* На 47:00 стоило бы ответить так: при получении сообщений у нас сразу происходит поиск отправителя по его telegram_id среди зарегистрированных пользователей системы. Если пользователь не найден, это означает, что кто-то незнакомый пытается общаться с ботом. Вы можете просто пропускать такие сообщения, можете записывать в базу с пустым пользователем и точно так же игнорировать (но в этом случае останется само сообщение для анализа, если это кому-то надо), можете отвечать что-то вроде "свяжитесь с таким-то челом для идентификации вас в системе" и этот офицер безопасности, убедившись, что запросы от сотрудника, пропишет ему этот telegram_id в базе и бот начнёт реагировать на его запросы.
support; +1
5. PLAstic 295 20.07.18 10:59 Сейчас в теме
На 50:00 задают хороший вопрос. Ответ на него, конечно, совсем другой, нежели был дан. Как я говорил выше, для любого инлайн-общения (это те самые кнопки под сообщением) стОит создать:
1) регистр сведений (СессииКнопок), куда записывать айдишники кнопок и связанные с ними данные;
2) регистр сведений (СессииСообщений), куда записывать айдишники чата и сообщения и состояние связанного с ними процесса.
Например, пришёл боту /start. Бот отвечает сообщением с кнопками "Календарь" и "Заказы". При отправке этого сообщения в РС СессииКнопок записываются две строки: с уидом первой кнопки и связанной с ней командой "ВывестиКалендарь" и уидом второй кнопки и командой "СписокЗаказов".
Далее чел нажимает кнопку "Календарь". Нам приходит колбэк с уидом какой-то кнопки. Лезем в РС СессииСообщений, видим, что ничего, связанного с этим сообщением нет, тогда это ответ от какой-то кнопки верхнего уровня, ок, проверяем РС СессииКнопок: находим команду "ВывестиКалендарь". Далее формируем клавиатуру со списком дней месяца, на которые есть запланированные мероприятия. По каждой кнопке записываем в СессииКнопок связанную с ней дату, а в СессииСообщений пишем структуру вроде
Структура("Меню, Этап", "Календарь", "ВыборДаты");
Когда чел жмёт кнопку даты, мы проверяем сначала СессииСообщений, видим, что это "Календарь" и сейчас происходит "ВыборДаты". Смотрим в СессииКнопок , что за уид пришёл нам в колбэке - это дата "12.08.2018". Отлично, теперь мы можем вывести список мероприятий на указанную дату.
На каждом уровне меню ещё стОит предусмотреть кнопки "Назад" и/или "Отмена", которые будут возвращать на уровень выше или полностью завершать общение удалением инлайн-клавиатуры вообще.
serg-lom89; slax; support; +3
Оставьте свое сообщение
Андрей Путин. Как делать интеграции правильно и быстро
Михаил Харитонов. Лайфхаки: Ускоряем и «расшиваем» сложные обмены
Скрипты DaJet Stream для обмена данными (первое знакомство)
Павел Ванин. Нестандартное использование Системы взаимодействия
DaJet Flow: проектирование конвейеров потоковой обработки данных, обменов данными и интеграции
DaJet Flow: многопоточный контекст выполнения плагинов и внедрение зависимостей
DaJet Flow: подсистема настроек
DaJet Flow: разработка плагинов
Платформа DaJet: сборка из исходников
DaJet Exchange - потоковый обмен данными в режиме реального времени при помощи сообщений