29, 30, 31 октября
Санкт-Петербург, Невский пр. 100 Концертный зал «Колизей»
8-800-5555-256
Перезвонить мне
«Управление и технологии автоматизации учета на платформе 1С:Предприятие»
Опыт интеграции с мессенджером Telegram c 1C. Пустовой Вячеслав
День программиста — профессиональный праздник программистов, отмечаемый в 256-й день года. Число 256 выбрано потому, что это количество различных значений, которые можно выразить с помощью восьмиразрядного байта. Также это максимальная целая степень числа 2, которая не превышает количества дней в году (365).
Статью по мотивам доклада можно прочитать здесь:
Жаль, вы не изучили примеры с ИС при написании своего бота.
Косяки:
* update_id не является уникальным идом сообщения, как сказано на 16:30, это уникальный номер апдейта. А уникальный номер сообщения - это
* Причиной ошибки, которую вы там разбирали из-за отсутствия lastname, является необязательность реквизитов в структуре message в том случае, когда они не указаны у пользователя. Т.е. это же может произойти и с username. Обратите внимание на надпись Optional
* На 19:00 говорится не то. Не будут нам постоянно валиться одни и те же сообщения, если вы будете своевременно двигать счётчик последнего полученного апдейта и запрашивать апдейты с него. Обратите внимание
* Судя по тому, что в функцию проверки наличия команды на 19:35 вы передаёте текст сообщения, вы не знаете, что сервера телеги сами парсят сообщения для бота и выделяют команды бота и много другое в отдельный массив. Почитайте про реквизит message.entities
* На 37:00 и ранее они говорят про "длинные запросы" и какой-то второй метод получения апдейтов. Это
* Строго говоря, то, что вы называете на протяжении всего мастер-класса командами - это не команды бота. Это условные буквенно-циферные сочетания. Можете писать не "/report", а "$report", разницы не будет. Команды бота задаются у botfather и когда вы только введёте "/" в начале строки, вам сразу покажется список команд всех ботов, доступных в этом чате (в личке с ботом, конечно, он только один). И только в этом случае парсинг сервера телеги будет выделять их из текста сообщения и помещать в entities для вашего удобства.
* На 47:00 стоило бы ответить так: при получении сообщений у нас сразу происходит поиск отправителя по его telegram_id среди зарегистрированных пользователей системы. Если пользователь не найден, это означает, что кто-то незнакомый пытается общаться с ботом. Вы можете просто пропускать такие сообщения, можете записывать в базу с пустым пользователем и точно так же игнорировать (но в этом случае останется само сообщение для анализа, если это кому-то надо), можете отвечать что-то вроде "свяжитесь с таким-то челом для идентификации вас в системе" и этот офицер безопасности, убедившись, что запросы от сотрудника, пропишет ему этот telegram_id в базе и бот начнёт реагировать на его запросы.
1) регистр сведений (СессииКнопок), куда записывать айдишники кнопок и связанные с ними данные;
2) регистр сведений (СессииСообщений), куда записывать айдишники чата и сообщения и состояние связанного с ними процесса.
Например, пришёл боту /start. Бот отвечает сообщением с кнопками "Календарь" и "Заказы". При отправке этого сообщения в РС СессииКнопок записываются две строки: с уидом первой кнопки и связанной с ней командой "ВывестиКалендарь" и уидом второй кнопки и командой "СписокЗаказов".
Далее чел нажимает кнопку "Календарь". Нам приходит колбэк с уидом какой-то кнопки. Лезем в РС СессииСообщений, видим, что ничего, связанного с этим сообщением нет, тогда это ответ от какой-то кнопки верхнего уровня, ок, проверяем РС СессииКнопок: находим команду "ВывестиКалендарь". Далее формируем клавиатуру со списком дней месяца, на которые есть запланированные мероприятия. По каждой кнопке записываем в СессииКнопок связанную с ней дату, а в СессииСообщений пишем структуру вроде
Структура("Меню, Этап", "Календарь", "ВыборДаты");
Когда чел жмёт кнопку даты, мы проверяем сначала СессииСообщений, видим, что это "Календарь" и сейчас происходит "ВыборДаты". Смотрим в СессииКнопок , что за уид пришёл нам в колбэке - это дата "12.08.2018". Отлично, теперь мы можем вывести список мероприятий на указанную дату.
На каждом уровне меню ещё стОит предусмотреть кнопки "Назад" и/или "Отмена", которые будут возвращать на уровень выше или полностью завершать общение удалением инлайн-клавиатуры вообще.