Опыт разработки ботов на 1С: от идеи до продукта, кейсы использования

12.01.23

Интеграция - Мессенджеры и боты

Телеграм-боты прочно вошли в нашу жизнь – через них удобно получать уведомления и обращаться к информационным системам за нужными данными. О тонкостях двусторонней интеграции телеграм-бота с 1С без публикации базы 1С на веб-сервере на митапе «Мессенджеры в 1С» рассказал аналитик Тинькофф банка Антон Локтионов.

Хочу поделиться с вами опытом разработки телеграм-ботов. Расскажу историю своего продукта – что интересного было сделано, и какие вопросы пришлось решать в процессе разработки.

 

https://lh6.googleusercontent.com/vqm7S_OxtmB3Zwx6ORhD0zVSgdrVd6g8-UQrXf6_PlCom7YzH0GSIRrezAjhRONnirj7L3X0I3hOqRM6pI8q7JQXGfqo1oQYJLUil1joGm-tRTHRq-GYtKwfGLb1xom7qfPxstRJ-bAFBbHXtf-Kxw_00l6bGx39_f_6K6T9pJu28Da_HBXFW2evN4JQ0A

 

В конце 2016 года мне пришла идея создать конструктор уведомлений в Телеграм. В то время в ИТ-сообществе была довольно популярна тема настройки разных оповещений по событиям – при возникновении ошибок или для каких-либо алертов. Кроме того, я видел, что на Инфостарте уже есть популярные продукты, которые позволяют создавать рассылки через SMS и Email. А мне показалось логичным использовать для внутренних рассылок именно Telegram, потому что это дешевле SMS и удобнее Email.

Я накидал план реализации подсистемы со множеством фич. Как потом оказалось, какие-то из них можно было вообще не делать, но мною двигало желание прокачать свои навыки разработки на интересных лично мне задачах.

 

https://lh4.googleusercontent.com/F2YFpnd9A2QemqjfGo5NeD7tXMaZ_5lePg4SJQ49xo6L70msQVlKHLWT9yVVXgDKhcz3qto6THYLvbwzc3sGTt1XOsr4cZbCeTpiRlAaj9prPoVshtCiPAiVR0QPoiS7eur13YxTFkxfgSvHUZJ9aeQX-Sj1Pk-M8jKaspt8M3BVQEwPvtVP2keXKphLgw

 

Идея состояла в том, чтобы дать возможность простому пользователю в режиме 1С:Предприятие создавать различные уведомления по событиям. 

  • Для этого достаточно было двух справочников «События» и «Шаблоны сообщений». Создавалось событие, и на основании этого события создавался шаблон сообщения.

  • Предполагалась, что между 1С и Telegram будет реализована односторонняя связь – просто чтобы была возможность отправлять сообщения.

  • И основным вопросом для реализации первой версии продукта было то, что отправка сообщений в Telegram возможна только по ID пользователя, который никому не известен в отличие от вариантов с SMS и Email, когда координаты адресата заранее известны – это номер телефона и почта.

 

Получение ID пользователя

 

https://lh3.googleusercontent.com/Yr0DVnwPAyMb1NNn8vrE3ItaK6WXiwWx_I5o3RWOH8lViwSA6ldIa43FjSJK7EM02DBHGowzmSZHqdBVChGh5WObl_e5XhM0YS_9NKCT5t5hQnmwPaeLvDEK1UozmIa2HLb7CztvP1H2_pI_YVTofoXqPNWe0L4tCDtIbaUTq5tybN1sv7UDllrI4Qq9FQ

 

Я начал думать, как организовать этот процесс выяснения ID пользователя и придумал следующий вариант. 

  • В первой версии был интерфейс, в котором пользователю в 1С предлагалось найти в Telegram бота по его имени и отправить ему предложенный код подтверждения.

  • А в 1С по нажатию кнопки «Проверить сообщение» забирались новые сообщения от бота, в сообщении искался заданный код подтверждения и если находила такое сообщение, то выводила информацию о найденном пользователе, и мы могли его привязать. 

  • Привязка означала, что мы можем какой-то конкретный объект 1С, например, конкретный пользователь или контрагент (карточку контрагента) связать с ID конкретного пользователя бота.

 

https://lh6.googleusercontent.com/fpnxiwJcoHUbiCHpnBIVWwxkSAtDuw0F8wsH4qfL-NMLEN6n4T_kefas4xdDyAbV3MuQlNY3RaFCiBwrp1aFlmodi6stzzILjhNyPByOzf9yLf7SsTxB7m4SY0_bZCF4G2RVQM3lQglewzo6hjN7Unpp1V5tvwDvyaTxbQoPyL-zUh9IvR24lPBlgMT_4g

 

Это работало, но пользователи часто хотели получать уведомления не в личку, а в группы. Например, компания хотела, чтобы бот отправлял уведомления по поступлению товаров в группу, где были все сотрудники отдела закупок. В связи с этим была добавлена возможность привязывать к справочникам 1С группы Telegram, а потом – каналы обоих видов – публичные и приватные. 

И потом, когда для Telegram появились боты, которые позволяют просто узнать свой ID, пользователю можно было просто вручную вбить свой ID и привязать к нужному объекту в 1С.

Но было понятно, что все эти варианты больше подходят для внутреннего использования в компаниях, потому что эта операция по получению ID выглядит не очень дружелюбно.

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

 

https://lh6.googleusercontent.com/_sAydGHn-n5wlI4ZZMtXdy8eTuo8E6UUlgz9OWKa-m3n1VCy1lnxwf4nWBf-A5VXHP_rLB3HmtiAWINm9yxQiNa90ZCd3GONG2owU8HwZfDrPQnwLTJ4pEwcn0p-l_B8izMmi4vP7VusN821qMnx57JFsLGpR2u37pT3eaqTSbz0XaWKhHTvNOQ_YiqfGw

 

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

Если мы нажмем кнопку «Поделиться контактом», Telegram просто отправляет в чат наш контакт. 

В этот момент, когда бот получает контакт, и 1С обрабатывает это событие, мы ищем по всем объектам 1С, есть ли у них такой номер телефона, и, если есть, привязываем найденный объект к ID этого текущего пользователя. 

Вот такая механика авторизации по номеру телефона.

 

https://lh3.googleusercontent.com/GBEL7L1oDebtcqlg03p-yFgKB5Mb_8TFt_FdgsSGlYisZNgz5ioHnOmTwaoBRP2orG9TDdvMr95eIisQWA_wsCFVV_tlLKq6EDbghxHxogFk8r2NwVS_f4FlLX_tWDM91r5CuEFWLxuR0G5RXefpbxF8HE73d_onqC8D-6-noUsKxfNj6wie1IzM6P2TpA

 

Интересный момент: по кнопке отправки номера телефона в сообщении, по сути, приходит обычный контакт – это стандартный объект Telegram. Поэтому нужно обязательно проверять, кому он принадлежит. 

Здесь на скриншоте показано, как мы проверяем, соответствует ли ID пользователя, который отправил контакт, ID, привязанному к этому контакту. Это нужно обязательно делать.

 

Подсистема уведомлений. События и шаблоны сообщений

 

https://lh5.googleusercontent.com/soEeMXkZMhC3QM-sfM96SiBX9hIFQ0yX-OHAu46hWplwJ1CqDrNPlobAYRuO3APiXOQFpsZr5dUnNJPVHfjYbPP_FltxldKecvKWCKNQEoWI3Mz-UczsJqPcaH02gML1YD0F1yUWyyzDh6WqAUb67MFgTj9RGB-OANTu_0yyMJs41sLFQ16W_CqTb_Mljw

 

Возвращаемся к подсистеме уведомлений. Один из основных ее объектов – это справочник «Событие». 

Здесь можно выбрать вид события:

  • Проведение документа

  • Запись задачи

  • Запись элемента справочника

  • Регламентное задание (по расписанию)

В основном, сообщения в Telegram отправляются при проведении документов или записи справочников. Также можно было установить различные произвольные условия отбора – для этого динамически формировалось СКД на основании источника события.

 

https://lh6.googleusercontent.com/bG7SpaUQ_n9-B5AqZmgI4vDXfv_NLF6GKMXPxYNwSuzz2lXwugSZyur5PqN8NogI8gqFvLTjzMsxjXe6yrXZGBM3mPymVx7CYpXHbl-yuNDb_qq6_5TVlJE46IJsHB-esUm3HboxPcL8ikozsg6tgP6YQLfWyqtxpZY09Sx2E2F3MxvzLsdbueevxu-jVw

 

На основании события создается шаблон сообщения. 

В шаблоне мы можем использовать статический текст, включающий любые поля источника сообщения – в данном случае, источником является документ «Заявка на расход средств». 

Если нам не хватает каких-то полей, мы можем зайти в режим редактирования схемы СКД и прямо в режиме 1С:Предприятие добавить нужные поля и потом их использовать в шаблоне.

Кроме текста, конечно, еще нужно указать получателей – ими могут быть какие-то поля источника (например, Ответственный или Контрагент). Либо конкретный элемент справочника, если мы просто хотим, чтобы такое сообщение приходило администратору или какому-то конкретному пользователю.

 

https://lh3.googleusercontent.com/20o7btoHMcJJVA4UkB-T0PJkw3L8tTiDsqGyTotGueE-Qv1V8Un-CjlDElTmAIho2nI0kbJydB4c_o6ID831J4HJoJxvXxrh8sO5TgHdsNZyXIRqKw58KVHu0Ol-UGegkhPt3rJ1hfAsQqSRcr09kytIhQjA8nptAxJKemxbMPu0eHDBzgicJtGz0N75mg

 

В первой версии я даже заморочился с интерфейсом выбора смайлов – очень много потратил время на реализацию этой штуки. 

И потом в процессе развития и поступления обратной связи от пользователей уже добавил возможность выводить в текст сообщения табличных частей и отправки печатных форм – это тоже можно все в режиме конструктора настроить без знания программирования обычному пользователю

И в таком формате эта подсистема уведомлений использовалась. Но этого было недостаточно.

 

https://lh4.googleusercontent.com/-USsFb2M1njOSgubqezOu60-0WQgDpJS4a6XBsesYvkIvoo2Ha3-nzMOCAgG1GahT6H-syKL3gSK7Zxhuiwmentd0aQ7Tgl6IqN29iIJNxit-fsmRFVwZQI6Xr3yeJK-b1numxjSsCN_OmlO3Vtm725j5L99cpxR3ElITk4N82qJxcZxJapM_L0O-QdshQ

 

Кто-то из пользователей хотел получать некоторые поля сообщения в виде хештегов – с помощью хештега можно быстро находить сообщения в Telegram.

И тут я начал думать, как это реализовать универсально, потому что не хотелось каждый раз лезть в код конфигурации у клиента и там вносить изменения, а потом заниматься обновлениями. Пришла мысль, что можно сделать вызов функции прямо из шаблона сообщения. Это бы позволило не только превращать любое поле источника в хештег, но и выводить результат любой функции, которая уже есть в конфигурации. 

Например, был кейс, когда у клиента в конфигурации была какая-то кастомная функция, получающая дебиторскую задолженность. И чтобы вывести ее в сообщение, достаточно было заключить ее в специальную конструкцию (скобки со знаком вопроса), вызвать ее и передать в эту функцию поле источника. Например, это может быть контрагент из текущего документа реализации.

В данном случае, на скриншоте мы видим вывод информации по истории бизнес-процесса согласования.

 

https://lh6.googleusercontent.com/josf6fpoxEDusClQnP7DdMGfEr2PYVSg24fZ8MaDrUz2Mx7cDGBzMo0M7veV_sBfd1tMh-rki3vl1qgTDAVcTXa3T6k3ddqfIhS8KpenGDiQL1PAlKPmyTpI3Ya606YiJkBM3hBwQwU7xr4b97T5SN6eeU2fqeXkZSA2Jg-7OfM7R1xZOQqN1TeBjxwfOw

 

Если очень сильно заморочиться на хештегах, может получиться примерно такая история. 

  • Сообщение в центре слайда – это то, что приходит из бота автомойки. Тут почти все в хештегах. 

  • А справа – пример карточки бронирования из конфигурации 1С:Отель. Здесь мы видим вывод хештега #Бронирование и для примера номер комнаты выведен в виде смайлов.

Такие хештеги реализованы с помощью вызова функции прямо в шаблоне сообщения.

 

https://lh6.googleusercontent.com/BiwqMvHPUgAbHP1Z92jrdm8c5sgS3fZoOBMjOQkWxAaexsBQvnECHgYqdH1fAI6MUYbffoO0rJ5ezeWagh_F-cEEtGQ9F6nznIiwcj-9MyPdl6R9jWJ2IsgNIcuoypD5bz5Qc7Te36HMxBSq_6id-D6DPkYXDThin1211lWbOJG-UUiJtoGipnXJTjB3Qw

 

Пару слов о том, что можно было не делать.

  • В изначальной версии я также реализовал документ массовой рассылки – документ, с помощью которого можно было выбрать список контактов и отправить им одинаковое сообщение.

  • Отправка отчетов по расписанию тоже никому не зашла, никто не понял, в каких кейсах это можно использовать.

  • И была еще функциональность сбора отзывов. Ею тоже никто не пользовался, к сожалению, но наработки по сбору отзывов я в дальнейшем использовал для справочника «Клавиатуры» – чуть позже я покажу пример, как он работает.

 

Подсистема меню. Двусторонняя связь с Telegram

 

https://lh3.googleusercontent.com/Ge5MTn_RzfvQZ9fgvx0lX0Hw-lddZC0iVNu-UCISeD6wwqS7geeryIvcTe5AfGo6spOO7d3n40cZSyZkXsGaoKiyuAApITeeZIAKgfQpcbW7vJDjsQ4g-6wHlhb7capdp-1BO5tLoc_Iox94cE_6kFuTT70aUkySNzBiBz4G_ZZpuK89UNvVv2ifSIBLIQ

 

Логичным продолжением этой подсистемы уведомлений стала подсистема меню. Она родилась из потребности клиентов самостоятельно запрашивать отчеты. В отличие от уведомлений это подразумевало полноценную двустороннюю связь между 1С и Telegram. 

Я начал думать, как можно это настроить. И тут возможные варианты – всем, я думаю, известны. 

  • Это либо публикация базы на веб-сервере и получение сообщений от Telegram на Webhook. 

  • Либо регламентное задание и получение новых сообщений методом getUpdates.

 

https://lh6.googleusercontent.com/QAu3B37R_88xrFqg_E1RUB4VKEkf6Fj9u1eh_OapDhSZCzU4nNrg0VYFirGTUNLCUB8BqRBZQuFgyVimExZQ_pqj87KYiO5nN5fXXrLVfo0kqem6W0DIxRPJyfKEEQnkkh1LrSXkk1RIqtxiPke_pWMzadWMdmfuq7mnX0gt-e5UMutBgVYB2Y6b3vdP-A

 

Webhook я изначально не стал рассматривать, потому что не хотел с каждым клиентом решать инфраструктурные вопросы – связываться с публикацией на веб-сервере и настройкой SSL. Это занимает очень много времени.

Поэтому я стал смотреть в сторону getUpdates. Для этого процесса настраивалось регламентное задание, которое с небольшим интервалом, например, каждые 5 секунд, стучалось методом getUpdates на сервер Telegram за очередной порцией сообщений.

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

 

https://lh5.googleusercontent.com/bQLO_gqB2fnJniTxyqN6P_7koEiWY8KKJQE0DLE0zNF3msQ81R6uo-HXRITS_3uMS3-c0D-kDuzk1AIimZ-1JhOPSJXvnSOwfL_cXgD1s3xqMxxPQea1qyXzhh0NUd2bt72Zy6V_q3EX5ItU7DwWZD2b3J0mirHNHEIEOSy_Gm6dvFZKpPnxDMf_iQNZ-A

 

Полез в документацию ботов, начал читать про метод getUpdates. 

Там было написано, что вариант с регламентным заданием и опросом сервера – это, так называемый short polling, который должен использоваться только для тестовых целей.

В противовес short polling есть понятие long polling. Это рекомендуемый метод. Он подразумевает передачу параметра timeout вместе с методом getUpdates. Для сервера Telegram это будет означать, что он будет держать соединение до тех пор, пока либо не произойдет новое событие, либо не закончится таймаут.

 

https://lh4.googleusercontent.com/dWrd8A0XailM5Lx_Ux5ztguG7Y6GRimEn2Cas2l1oeNx0CA52jbxF4PEdhuTpURUqtcVnYA6osagAi4EmOWjqHJriwxrKxz9-8l_nM7VgXHY4y2q8lV8bv-kx0kQ_pXJ7ChBam9d-Kx7k9jLsg-bltOg33DV9FtHN8n9U2wIn648NeU6tbT2-2CMsPWDLQ

 

Как реализовать это в 1С?

Тут снова не обойтись без регламентного задания, в котором нужно обязательно заполнить свойство Ключ – в этом случае, если уже есть запущенные задания с таким ключом, оно не будет стартовать, и не будет конфликтов методов. 

В обработчике получения сообщений находится цикл, который можно прервать двумя способами:

  • либо по флагу в настройках – например, такое может понадобиться, если нужно обновлять базу или произвести какие-то другие действия;

  • либо по какому-то условию – например, если вы хотите, чтобы регламентное задание перезапускалось по истечению какого-то времени.

А в теле цикла размещаем процедуру ПолучитьНовоеСообщение(), где отправляем запрос getUpdates, не забыв указать параметр timeout – обычно рекомендуется 30 секунд, но я ставлю промежуток больше:

  • такое значение таймаута мы передаем в параметрах запроса getUpdates; 

  • и на уровне 1С при создании HTTPСоединения мы также указываем такое же значение таймаута, чтобы 1С раньше времени не прервала соединение.

Мы получаем новое сообщение, его обрабатываем и следом сразу отправляем новый запрос на получение сообщения – таким образом получается обрабатывать события практически мгновенно, при этом не публикуя базу на веб-сервере.

 

Оптимизация скорости

 

https://lh3.googleusercontent.com/lIYJi8QacF5alunte2rgtnfqq0R1AlL_I2V0OxSDwe0Urvhd2dhoAeL89V5NwoWIfUit2yT0o75ilfZ75QNwnFdpRNh8NMzFK-quZXHGFo7WDoSN4W5xGJRjJPtOHAkpqb9MM3QwCKf421yqRJiEdbtfO4ukIy-vtUFO7BWrj1AhrqhKQ_J50mRVcqLURw

 

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

Кэширование HTTP-соединения на уровне 1С. Для этого нам просто нужно вынести процедуру создания объекта HTTPСоединение в общий модуль с включенным флагом «Повторное использование возвращаемых значений». Это позволит переиспользовать установленное один раз соединение с сервером Telegram – получается довольно ощутимая скорость отклика.

Второй метод, который позволяет не задерживать обработку сообщений – это использование фоновых заданий. При получении нового сообщения мы запускаем его обработку в фоне и, не дожидаясь его завершения, берем в работу следующее сообщение. Таким образом можно значительно увеличить пропускную способность бота, особенно, если вы отправляете клиентам тяжелые файлы, или, например, изображения.

 

https://lh3.googleusercontent.com/Eto1Gb44CU8GLNZjx1qihWO8PtaTosb4UjcQ3z6bR5rYmR_Mq0FCW8qtj_SKn2k6J5saEMIDZOaaAbt41nM-NCfncE_q2vDTqlKuHV57ntHW1g0-UxJsZrVJc4_pqNCA-TmqX6mpG8RkM5VRjkJDVCsVMEZ4FihvPfJhbiCTlVrv4v12G2bXQnMGLWaB4w

 

К сожалению, на этом вопросы по получению событий из Telegram не закончились, потому что у многих компаний вообще нет сервера 1С, они работают на файловых базах. А на файловых базах постоянно запущенное фоновое задание не дает запускаться другим фоновым заданиям. В этом, в принципе, нет ничего страшного – если работа других регламентных заданий не нужна, можно работать. Но зачем отказываться от других заданий ради бота?

Поэтому я искал другие варианты, как можно обеспечить надежную и главное, быструю работу бота на файловой базе. И придумал создать отдельную утилиту на C#, которая держит long poll соединение с сервером Telegram, а события в 1С отправляет по COM-соединению.

Эту программку нужно держать включенной на любом компьютере, где есть доступ к файловой базе. Это довольно надежно работает и по скорости не уступает варианту на базе 1С – при этом, конечно, работа фоновых заданий не блокируется.

Многие мои клиенты продолжают работать на файловых базах и пользуются этим решением.

 

Справочник Меню. Настройка доступа

 

https://lh6.googleusercontent.com/qdltF-cqGx3BekLxgC-PQQvd697kn5FsDxSt5t_UTkwaWkyS0kfW7VYSooxgPVzVQ-vLc72Ea36qJN7zcfLhtrZnwADHNJrmzgvxkt2mCvzZOeNCcTmSitZVWpVJA3Jf57Kqead0-OXRXKOXHqmzK2FQuRBA4lmuOBptWb8i9aTVhc11Qkt3vub0NZbLkw

 

Возвращаемся к вопросу реализации отчетов по запросу пользователя. 

Входной точкой для взаимодействия с ботом у меня является меню. Меню – это кнопки на месте клавиатуры. Так как хотелось максимально уйти от обновления конфигураций после внедрения был выбран вариант с отдельным справочником, через который можно настраивать состав кнопок, их внешний вид, и подвязывать алгоритм обработки ответов.

 

https://lh3.googleusercontent.com/vb4LspVWjNxoiDEUMTexRLFl_QNU8HgkS4zk40RZ8-3ynIs7C_EymcSBQPbSbpDRoOjMnhU5mFD62ccRsvQAAHOq12OA0YIJ-hdrAm4nq8uvICZzZVQAuICzsUetf8_4TpDXVPSWi8Ar0vpdZcqSfkiKl5VD4lxaGWblBzBqnU4X0RFKV7y7KR_AGiHbqw

 

Пару слов по поводу доступов – доступ был сделан на основе справочника «Меню».

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

  • Гости – те пользователи, которые нашли бота через поиск или перешли по прямой ссылке. 

  • Пользователи, о которых что-то известно в 1С – это могут быть:

    • либо конкретные элементы справочников, например, элементы «Администратор» или «Директор» справочника «Пользователи»;

    • либо типы справочников, к которым мы можем привязывать ID пользователей бота – например, справочники «Контрагенты» или «Пользователи».

 

https://lh4.googleusercontent.com/4j5sFloyexMJrYX4xaRRjcO609JKl6FB-ME9Q_RMrismCjaKFkm_0Ap8Jbw6aMPDtRA66UXCpPYYtncjBNwzF900_Tsk_JIMcwos7uNmPTyuUKxt3vuf9yhN6v6_9w6VLsCV4fYiiUeZ5Os2fKBwCIItzx8Y2xrCevDi0Un3SwIds7P2TQnF8Nba2LUSbA

 

Как это все организовано? На базе справочника «Меню» мы можем создать различные пункты меню и предоставить для них разные доступы. 

  • Например, для новых клиентов, о которых мы ничего не знаем, дать доступ на розничный прайс-лист.

  • Директору и бухгалтеру дать права на финансовые отчеты, выбрав их в доступе. 

  • А, например, всем пользователям, которые привязаны к справочнику «Контрагенты» мы дадим возможность запрашивать, например, отчет по дебиторской задолженности, акт сверки или индивидуальный прайс-лист.

В процессе обработки получения нового сообщения мы будем знать, что текущий пользователь бота привязан к справочнику «Контрагенты» и, зная контрагента, к которому он привязан, можем определить для него возможные доступы.

 

Инлайн vs Обычные кнопки меню

 

https://lh3.googleusercontent.com/CJSfVuTwxXomcWx29HHuxcx_Ykk1lv7kvRiqVlGJQYq-4CDYohk9CwW_xhh2KS-q3rU_Kz6bTp7DWY-sNtIQt5um7-gFh1JkYwfIyFIXqlHNPLZL1xT410w5xQZvVwCHe7-mYNIlVbPFukLcQv6zctV8cJrVe2R0fFMbzSXI63EHmTZGrewcDx_UPMB42w

 

Расскажу про различия между инлайн и обычными кнопками меню:

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

  • инлайн-кнопки привязываются к конкретному сообщению. 

Основное различие инлайн и обычных кнопок заключается в том, что обычная кнопка отправляет в чат текст, который на ней написан. 

А инлайн-кнопка отправляет данные, которые не видны пользователю и заданы для этой кнопки программно. 

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

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

В данных инлайн-кнопки можно хранить уникальный идентификатор объекта и получать по этому идентификатору однозначно объект в 1С. В итоге в парадигме моей подсистемы обычные кнопки – статичны, их набор задается через справочник, а инлайн-кнопки используются внутри сценариев, их можно динамически менять.

 

https://lh6.googleusercontent.com/LGVgudDZ6wivmPXajFrq2bR0_DldKCToF0aCbCSY259E4cvuYsHK3mqboyr3oi4-8YkYaL0z6zwNxAbHLTbAeXXybSSZ1eEKEH9fv8sXxwPDwWB14I_nomfoPrMSLO7QNnZDDq5A7b5zWU07npi4ytOhzI4ZPLLBjmGQr3g1NTRSpo2xN-N7Fdv0qCHVRQ

 

На слайде показано, как это выглядит. 

Например, если мы хотим предоставить пользователю возможность выбрать один из складов, мы пишем запрос, в котором получаем нужные данные. После чего создаем конструктором таблицу с этими кнопками. 

При создании кнопки обязательно нужно для нее установить:

  • текст – название склада, которое будет на ней написано;

  • и данные, которые будут не видны пользователю – там у меня идет четырехзначный код обработчика события и дальше через нижнее подчеркивание уникальный идентификатор ссылки на склад.

Код обработчика события – это код специального элемента справочника «Действия». Когда мы получим событие с этими данными, мы поищем, есть ли элемент с таким кодом в нужном справочнике. И, если мы его найдем, то выполним алгоритм, который написан в теле этого обработчика.

 

https://lh3.googleusercontent.com/CFwyjyroX6S1BNavNAKbRwO1stHmubG_PzJEWa9aReTxo4e6zsZFl4bVt-uEL91mSJAMZ2VVU5_pwmt2ZTuk7Jg5HQsITwhPqWxtcmL1ExaWwAA0F3QDYitek6hSj4vBYkr-ptYr4x1dZy2No95-aFTeDBTLFUxaqoim6pCYwIqH-4FkPmAU3iS6kSSbUg

 

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

  • в справочнике «Действие» определяются обработчики для обычных кнопок меню, 

  • а справочник «Обработка callback» используется для обработки инлайн-событий.

В этих справочниках у меня есть возможность отредактировать запрос через схему СКД. Это очень удобно, потому что позволяет быстро накидать в режиме 1С:Предприятие запрос по извлечению нужных данных. Там же можно указывать какие-то параметры. Например, получить текущего пользователя – например, контрагента, и выбрать заказы, которые принадлежат только ему.

И затем в теле алгоритма мы можем получить эти данные с помощью специального метода.

 

https://lh5.googleusercontent.com/GP4PeuSVaRpPVx-qP8_CWZoSxXazdCEW_cRCmQDfBgH5FjH93lVHAQdgSy7nibGiLO_A_lRjI9kNNZF6S8SMW-x6NkT8B_TfTxwriN1ID-CSvD-zt7fMEQS7e8KEf5CER1pduWrsmpJycFoJVnypsCYhSp3I2JlJ4cNbAgJJcy8ZH7Bh13DmpBBWbPit-Q

 

По инлайн-кнопкам – есть множество возможностей. Основное – это то, что их можно менять динамически.

На скриншоте показан пример, как можно:

  • изменять клавиатуру;

  • изменять одновременно клавиатуру и текст сообщения;

  • или удалять клавиатуру. 

Чуть позже мы посмотрим, как это будет выглядеть на реальных кейсах.

 

https://lh4.googleusercontent.com/Ky9bXYdSc9Cl8bOTv8nnEtDtHRFmNmfk__QGQkitrHnBQkiS9FAMKo7w8t1H-uq2AnepPr-JSuBZbEy1HHFhJptTwev416SbrlvNRd6Sfgg_SosUNadly4KR4JRC4760YdFcBi91-eFbpVcRtW-rB_mBjL07x-OqEWWiVPsnYEtju78mnssto-rOXdvtZQ

 

По инлайн-клавиатурам также есть ограничения. 

  • Во-первых, в параметре data можно хранить только 64 символа.

  • Во-вторых, есть ограничение на количество кнопок в одной клавиатуре. В последний раз я столкнулся с тем, что лимит составлял 40 штук.

 

https://lh6.googleusercontent.com/mvc7wme8kFk0_0A4KVYS6r8_e3q0NaoNJ-U4eSl-SaAY1ony1i3LHR5E9q_egH0ijUOZqy5vrhoAIEAD2hmyFrHLrBC0DJ2hD08_z88FUiBZVExH0gpsc1sN0rdCRhgtOVLyylpN6a2XdiFeOcdgvAwxBd9dcoBHL9ERzz1QcZFATjduwQTu-gGQprZk5w

 

Но что делать, если нужно вывести весь справочник? Например, мы хотим предоставить клиенту возможность смотреть список всех своих заказов и скачивать накладные по ним.

Чтобы это сделать, нужно дать возможность листать результаты данных. Для этого был реализован метод «ПолучитьКлавиатуруСтраницы()». 

  • В него мы передаем таблицу – те данные, которые мы будем использовать и отображать. 

  • Вторым параметром – количество элементов на одной странице.

  • Третий параметр отвечает за номер отображаемой в данный момент страницы.

  • И дальше – коды обработчиков для кнопок «Назад» и «Далее».

Когда мы нажимаем на «Назад» и «Далее», мы снова получаем результат нужного запроса, переключаем нужную страницу – прибавляем или убавляем ее. И отправляем запрос на изменение инлайн-клавиатуры.

 

https://lh3.googleusercontent.com/j2rL1-HrUQ0UGn1hq0CZpLAaesjz8UO5p4FJ_5SJbvw33U9F4T8p1fVwbF8pMs2UA21mN2CSposaZyQ3vDJqV-MHJJx9WEOTpr4vfwzbWUABJfoTQDTHtk8Chb40Dh7RWNyaSv7yuWdmDHrX1V4kBTM9egZICw96kyCFoaENa1D0PAgHnOvxj_DgGN9OTQ

 

Продолжением этого механизма стало отображение каталога товаров.

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

 

https://lh3.googleusercontent.com/lDkNoLX5_L2dR2EeMid1POBAlSocn4IEKywd2wuqU6yOurRuml_wMycUPwsELUOGyKED4zq94ZnXVH2K3rG0U_vymLp0fYx78SAQgvliF23E3PutWpE8iAKeHKzZJ5y-KONNomCQdT6s3pqLhk9adcQj_loosCCp5ho20-C1UZvpCtMANETd1GemN461vA

 

Вот так это может выглядеть на реальном боте.

Мы здесь видим папки и конкретные элементы номенклатуры.

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

Есть отдельные кнопки для пролистывания каталога «Назад» и «Далее» и для перемещения по уровням иерархии «На уровень наверх».

При нажатии на карточку конкретного товара открывается его описание с изображением – вы можете указать количество и положить товар в корзину.

 

Как быстро создать согласование документа

 

https://lh4.googleusercontent.com/0ZkiywIcOJ3-_vp0XD5LAl8YDXyrfaE0GyM8flmTnxxae9X2jX0pwN9gJ5E1Y0JuHKcd37q-NP0G3fRz9x6SSWCxdd0wxbIjFhORgblz7ldXTFaICa-hU0uaJxCp-DwubIJWmJ-mevXLopBgSQBdtOJtwA6QUhP-jaXqbVcqayiPTqeuhhwRBYxyTBRezA

 

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

Шаг 1. Мы создаем событие с видом «Проведение документа» и указываем тип документа – например, мы хотим согласовать заявку на расход средств.

Шаг 2. На основании этого события создаем шаблон. В нем прописываем текст сообщения и указываем получателя.

 

https://lh5.googleusercontent.com/UYH6Ra3HdfnKaW2ybsA6uK0JJZx-g9UbX9A0GNOaURW0E8INfpX6KGe-iKk5lQOlbQ1TkB6jSk_4AesIj3EmgQaaAK2fUMWDKEhSdJ6RATRUyhBntC1zuKdYRxioEaye4U9wr_UmH6tzDSKbchqcmT-WbXcXn1yN0BURVi-ikzhiqKdgtNVGqOJIxbk0Yw

 

Шаг 3. Прикрепляем к шаблону сообщения элемент справочника «Клавиатуры», в котором добавлена одна кнопка «Согласовать» – в поле «Возвращаемое значение» пишем для нее код обработчика события. И устанавливаем здесь флаг «Обработать событие» – он при формировании этой клавиатуры автоматически добавит к обработчику события GUID текущего объекта.

 

https://lh3.googleusercontent.com/4BahO6HaCHTtCNpJH8JZdX4WZ_l71KuT_naras6ljbyOmwVLVJ_1JUHWbQrfwLTtFsK6YR7EHeKwEUctTCOeUj3EdSW22mOdn0-MOEZK0mBYzo74hk3WVHhn9E1jUS9m6Lil3jxxlMDkwXK_GSO4byFnMTfpykdlUI5HKe-8syqgZsYv1dHHYbMV12zrOw

 

Это позволит нам создать обработчик события с нужным кодом. В нем мы получаем ссылку по GUID-у объекта, производим какие-то действия, и потом можем отправить всплывающее сообщение о статусе операции и удалить клавиатуру, чтобы пользователь не мог ничего лишнего сделать с уже согласованным документом.

 

https://lh4.googleusercontent.com/AkJLjdR7687kw9p6kZIxY2QmmmNYjpBsvcTvn19YjgT9ansPDk77VS4lIgf_fMCwUFMcr5K4Qm3bitb3_ZINaRK9E4Ze2S5Maeq0EBJgdTNt0Mi_a4vhdi5LBAyYdu2bGdAeA3vdic8FTgn-ijcVZMpk9J2eUI4Yr_oNmT7xYVTzJl5Q3TzHqzjDqC-t2Q

 

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

В момент, когда мы провели документ в 1С, в мессенджер автоматически приходит сообщение с одной кнопкой. Если мы на нее нажмем, то отобразится всплывающее сообщение и удалится клавиатура.

 

Кейсы

 

https://lh6.googleusercontent.com/wcHvfLj1nzdKC-2Mx-W0Bfelg-jJYeDN23ewmysZmdyryElZyOPjq-oD4mkSlOU_50fpiH1N16ohoTpC8xoS8M0CDVSQLCEPYHxwcEK49jrbKRnnG6qS_Vj2G2hx7eNku8u-lhLBUIl_6-ZQsyn9M8vz78hOzOT3zS1dq9WhFk9bQ1vn3cnKSKX3Dqe3UQ

 

Теперь несколько кейсов из реальной практики.

Бот для отеля. Это – один из первых ботов, основанных на этой подсистеме, по запросу от этого клиента как раз-таки и была реализована возможность создавать кнопки. 

Здесь мы видим:

  • многоуровневое меню с возможностью запроса различных отчетов;

  • и автоматические уведомления в группу администраторов по бронированию.

 

https://lh3.googleusercontent.com/ZCOtRieRfN4rZL9WPDgeBECD9o0A5Uw2PuiyMwXzCPSK8CTUKEyoeyz4cpJsltEesPX-x6bl5hQ8Ka-SRV6Q6i6DUGNSzF_RFEi0qD66pJ2zQzCzjLK5JDbihH2M0QiWcgEQIvByhO4MJhbv1cPipa91Z2KzDm5IAPtz6Zepqw_ejQlnUSB3aytTdyWwBg

 

B2B-продажи. Бот для компании, которая занимается продажами видеооборудования. Основного смысл этого бота в том, чтобы дать возможность партнерам оформлять заказы и скачивать счета на оплату по различным типам цен.

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

  • Можем поискать по наименованию, если мы заранее знаем, какой товар нам нужен – выбираем из предложенных найденных вариантов, получаем карточку товара, добавляем его в счет. 

  • Запрашиваем корзину – можем ее просмотреть и очистить

  • Также можем сформировать заказ по кнопке «Сформировать отчет». При этом в 1С будет создан документ, и клавиатура изменится на предложенные типы цен, доступные этому клиенту – он сможет по нажатию на нужный тип цен скачать счет на оплату.

 

https://lh3.googleusercontent.com/gViBSD9j_-LSZ-fWkYOKONxd79Fjhyl8bilZO9ogFQ6-yRmAtdhlY1VLYxgCw22rGftKuX7cy2kXPWviFfnV-HPVIIdgtau_NSUWwUq9RL7oWw3vmrw2Ux3xekSEDpe-RkqZUOvGZvytjX3oEp8oFLkIsGwIkMK5pjNRrrp_K9TIy0n3xcAT2cQniay7GQ

 

Бот для нескольких автосервисов. Здесь используется авторизация по номеру телефона клиента.

 Т.е. клиент, по которому есть информация в 1С, может:

  • авторизоваться здесь в боте по номеру телефона, и ему сразу будет доступен остаток его бонусных баллов;

  • запросить штрихкод своей карты лояльности для зачета скидки на кассе;

  • и скачать свою сервисную книжку.

 

https://lh6.googleusercontent.com/PMxpErdx0g0rrJqocAmcWo_wNEnucvNLq6EsA6nEsOx8kRJxo8moCU2k7ibIp7bgwHA2BO3sd2D-0iAG9P4Y-s8gIy-q1meo3qM13twjLzxUIU-3COu2f9n2rfCu3_SWJqRqd-FEarTyU0MlBCJ8JqXzA2xgZwutCCHyXG3LBoFZJ4w_fbPhPSVKV53FSg

 

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

Здесь есть различные категории отборов. Мы можем их отмечать и видеть сразу в тексте сообщения, какие категории мы выбрали для отбора. При этом категорий может быть много. Мы можем перемещаться, листать весь список возможных вариантов, отмечать или снимать флажки на разных страницах.

Когда мы отметим все, что нужно, и нажмем кнопку «Сформировать», нам придет отчет в pdf с выставленными отборами.

 

Работа при блокировке, и производительность при большой нагрузке

 

https://lh6.googleusercontent.com/EHNm3IZxcyhnJnxnuGAr_v0zK7VTHLBROtEHqyZdFyFOAC6XP5Bluz9akwFaXfSlWomprod53Lx1zfUy3XP1dr3etE-fZ4nk_Ek_r1ja_mrL0NqtAmxEYhyyPg9EkI4U2YfW1x-1iolUx-SqRnnnWM3Vtl_hDHJCR-6nqbq40uVOFHyF4AaaRlYzfINKCA

 

В период блокировки Telegram во все клиенты были добавлены настройки прокси-серверов. 

Бесплатные прокси показали себя очень плохо, и те, кто хотел продолжать пользоваться ботами, покупали платные – с ними никаких проблем замечено не было.

 

https://lh3.googleusercontent.com/JV3Do-nG30ralGlWjENqVhwY98s3FhgZTEl1354qOvwrslblyiHkBKjvZTX0EOqf-TWDkdeQ9Eea2DUNl8AYy2J66yG8uv8jFWv8Ke9er-Y_FCWsC-OBNFZ3oBmozNsThZmFVsCkjef3w6XVPekLdBnj9-2qAsxS02OipQjtV8SDYp4tM5u7piBylcFlHA

 

Что касается нагрузки, самый нагруженный проект – поддержка для консультантов в сети ювелирных магазинов. 

Там около 15 пользователей, которые постоянно загружают тяжелые отчеты в pdf и запрашивают карточки товаров с фотографиями – это невероятное количество событий от онлайн-кнопок.

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

 

Другие мессенджеры

 

https://lh5.googleusercontent.com/UlwRKP7E4DkwTA93j5ooFO_lp0X4W-9KIk58Rqqw8G1ICX63j_r5AGMSvLqmujWg9z9BwAFyvaXpK7l3pypP3t0Hh19hqEdIqOOejGc_3TNXDj5vwmYZQcMs5KD9dfWQII3kbeALnJaJMBNx0Nk7sfSyRlFSYAubIOi7GajSxmmq31P9UIRTubfsJYCCwA

 

Другие мессенджеры я тоже рассматривал. 

  • Пользователи спрашивали, можно ли было сделать интеграцию с чем-то более распространенным, чем Telegram, например, с ВКонтакте. Я сделал интеграцию с ВКонтакте, но по факту оказалось, что она никому не нужна

  • Viber – тоже достаточно распространенный мессенджер, но отличается очень непрозрачной политикой в отношении ботов. Там было много историй, связанных с разделением публичных аккаунтов и ботов. Сейчас они внедряют какие-то лимиты, после которого все сообщения от бота будут платные.

  • Telegram из всех мессенджеров отличается наиболее продвинутым API, поэтому я остановился на нем и другие мессенджеры не стал внедрять в подсистему.

 

Рекомендации и выводы

 

https://lh4.googleusercontent.com/kASrZgCWAofs1Vift5S5ml5rUn300fpzXyx3wDavi0KYweH5UgO25SUNuTwwD_C8mDoSBZlo6BhGrwzk8OdoGOwlmu5M5kTL0rfARqcmK-0XnLfSXRtAJneJg0y96UkytG9sUKdeZEXO_Ka_fjeHvOZyiM1z4-FQr1EXNiQqVTv0ClPojYzZq4Qy_m6hkw

 

Рекомендации простые.

  • Как я уже сказал, если вы используете getUpdates, то делайте это правильно – через long polling.

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

 

https://lh3.googleusercontent.com/3k-y55euu3tPGW_aCRj5CY6K28KoF8D8bCAd_Ja-irUB5vQW2M4pG1cQDwBMe0ymSL3tSXn5E9hyklGfksVLWY6yPYRT-8iaMAw6OzAbHoEmDZpcQtPV55FqAkfWq0hInuSmrRMnkWk33vnXPsUuDoOpp5utSLMWzTW5NPfqiY5kcZ8IvDzfAkCEvMjvLw

 

Я думаю, что за мессенджерами будущее как за средством коммуникации между клиентом и бизнесом. 

 

https://lh4.googleusercontent.com/FCpWNbMyZU4kzYmxw4b7zo4ztQbNTC6cg8lPnvFjXoCgesyR4O-nGmfSMTMm-mK_oEEKNrJxw7ONxRDoSg75XQFDJ242DLaFiuU-ljyAKxDsK5hNxGpIum183X4UwW_5Zi1k7DHRgFTqPC6lFpugxCxlE_stANnEzf8_GmqHlee__Kc4tfAj3DSvF7MJfQ

 

И, хотя некоторые изначальные надежды на искусственный интеллект чат-ботов не оправдались (развитие этих технологий пока неточно интерпретирует запросы пользователей), боты в бизнесе приносят много пользы.

Поэтому нужно начинать с понятных кейсов для клиента – например, использовать мессенджер вместо SMS для получения кода скидки. Это позволит бизнесу экономить на SMS, а пользователь сможет получить контролируемый канал коммуникации с бизнесом.

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на митапе Мессенджеры и 1С.

См. также

Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    9482    58    12    

34

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 руб.

27.12.2021    38196    108    161    

201

SALE! 25%

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15000 11250 руб.

18.06.2021    65558    312    272    

369

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    30270    35    49    

71

Мессенджеры и боты Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Данное расширение представляет собой интерфейс взаимодействия 1С с сервисом Wazzup. Данный сервис позволяет вести беседу с использованием номера телефона, привязанного к Whatsapp. Почитать о сервисе и его условиях использования можно по ссылке https://wazzup24.com/. На данный момент расширение поддерживает почти все доступные через API функции. Обновление от 19.05.2023, версия 2.1!

14400 руб.

30.11.2020    13594    8    13    

15

Мессенджеры и боты SMS рассылки Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Решение реализовано в виде расширения. Заменяет отправку смс на отправку в WhatsApp через Green-api. Отправка чека картинкой.

7800 руб.

15.05.2024    1544    3    6    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 12.01.23 19:16
Сообщение было скрыто модератором.
...
2. artbear 1563 06.02.23 21:23 Сейчас в теме
Отличная статья получилась, спасибо!
3. пользователь 07.02.23 13:04
Сообщение было скрыто модератором.
...
4. пользователь 07.02.23 13:23
Сообщение было скрыто модератором.
...
5. пользователь 07.02.23 13:26
Сообщение было скрыто модератором.
...
6. пользователь 07.02.23 13:28
Сообщение было скрыто модератором.
...
7. Semargl84 16 15.05.23 18:44 Сейчас в теме
Добрый день! Решение тиражируете?
8. bayselonarrend 2087 07.12.23 10:24 Сейчас в теме
Статья хорошая, плохо только, что в ней опять поддерживается древняя 1Сная байка о том, что long polling лучше webhook. Проще ли реализовать polling? Гораздо. На этом плюсы заканчиваются.

Webhook я изначально не стал рассматривать, потому что не хотел с каждым клиентом решать инфраструктурные вопросы – связываться с публикацией на веб-сервере и настройкой SSL. Это занимает очень много времени.


Нежелание или невозможность решать с клиентом вопросы веб-сервера и SSL это понятно, но говорить что long polling - рекомендуемый метод? Это такой же костыль, как и short polling, но немного более оптимальный, который можно использовать лишь в тех же самых случаях, когда нет веб-сервера и возможности обрабатывать https.

1.При поллинге на вашем сервере необходимо постоянно выполнять действия и нагружать систему. На одном из слайдов написано, что не нагружаются сервера телеграм, но, во-первых, какое мне дело до серверов телеграм, а во-вторых, вы все равно бомбордируете его запросами, на которые ему необходимо отвечать. Реже, чем при short polling, но тем не менее.
2. Лично мне вообще не понятно, как может родится предположение, будто адовое полотнище, еще и с чтением данных из базы, циклически выполняемое на своем сервере, может быть оптимальнее, чем просто IIS/Apache, слушающие порт. Банально есть кусок кода, который выполняется каждые 50 секунд ~1700 раз в сутки, хотя туда может вообще ничего не прийти.
3. На слайде видно, что сообщения обрабатываются из массива в цикле. Т.е., как я понимаю, при большом количестве сообщений последнее сообщение будет ждать выполнения действий над предыдущим, в отличии от wh, где обработка начинается отдельным потоком сразу при получении. Не говоря уже о том, что и сама обработка не требует столько действия, которые можно скинуть на сам телеграм: не нужно записывать/читать/сравнивать номера сообщений, думать об актуальности и пр.

Поллинг нужен, но все равно лишь как вынужденная мера при наличии серьезных ограничений на стороне заказчика. Охренеть от того, что где-то что-то сбойнуло, не записался номер сообщения, сообщения порезало по дате при смене суток, телеграм изменил номера из-за того, что ботом 2 недели никто не пользовался - при таком подходе не просто, а очень просто. В отличии от wh, который просто долбит тебе сутки сообщение сам, пока ты не вернешь ему код 200, и ты всегда знаешь, что это сообщение новое, ты его не обработал и проверять это тебе не надо. При этом оно пришло одно и в ту же секунду, когда было отправлено пользователем, без дополнительных действий с твоей стороны.
native-api; +1 Ответить
9. Anton64 192 07.12.23 11:55 Сейчас в теме
(8) В статье написано, что Long polling рекомендуемый метод по сравнению с short polling.
По пунктам:
1) Там сравнение long и short polling. Про их разницу в контексте самого телеграма. Инфа больше для людей, которые используют short poll. Если посмотрите публикации на инфостарте, то станет понятно, что большинство разработчиков даже не задумываются об этом, несмотря на низкую скорость обработки запросов при short poll.
2) Я разве что-то писал про то, что getUpdates оптимальнее webhook? Для каждого случая своё решение. Боты на getUpdates распространены и на других технологиях, опять же из-за того, что не нужен https адрес, а можно просто запустить бота там, где есть доступ к интернету. Если есть возможность полноценно опубликовать бота с вебхуками, то это замечательно.
3) Есть возможность отвечать на сообщения фоновым заданием. В таком случае обработка следующего сообщения не тормозится логикой ответа на текущее.

В целом, ваш посыл понятен. Если сравнивать Webhook и Long Polling, то при возможности лучше выбрать Webhook. Спору нет.
Но есть еще и другие нюансы, которые могут вносить коррективы:
1) не всегда есть доступ до инфраструктуры заказчика. В таком случае физически не получится настроить всё, что необходимо для Webhook. Потратить впустую время на выяснение этого факта - слишком дорогое удовольствие, по крайней мере для меня;
2) практика работы с 1С показывает, что если есть возможность ограничиться средствами самой 1С, то лучше так и сделать. Иначе возможны ситуации, когда придется потратить очень много времени на разборы с тем, что никак к решению не относится. Здесь довольно сложно передать мысль, но я это прочувствовал на своём опыте)

Если абстрагироваться от 1С, то ботов на других технологиях я абсолютно всегда делаю на Webhook. Согласен с тем, что это проще и удобнее.
native-api; bayselonarrend; +2 Ответить
10. bayselonarrend 2087 07.12.23 12:58 Сейчас в теме
(9)Да, значит я неправильно понял
Оставьте свое сообщение