Опыт интеграции мессенджера Telegram c 1C

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

Предыстория

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

Возникла идея интегрироваться с каким-нибудь мессенджером, например, WhatsApp, Viber или Telegram. Хотели Skype, но он в последнее время не очень хорошо работает, особенно на мобильных устройствах. Выбрали Telegram, потому что это наиболее защищенный мессенджер, к тому же его тогда как раз хотели заблокировать – это стало дополнительной рекламой.

Все отнеслись скептически, но решили попробовать. Посмотрели статьи на Инфостарте, поняли, что это несложно. Тем более, у Telegram открытое API и все достаточно быстро работает. Попробовали, и это оказалось удобным:

  • Первым делом, мы сделали согласование заявлений на отгрузку – при проведении документа реализации руководителю отдела отправлялось сообщение с Excel-файлом, где можно было посмотреть, какие товары отгружаются сейчас со склада.
  • С еще одним руководителем мы сделали согласование платежей. Он, сидя на совещании, мог видеть в мессенджере уведомление о необходимом платеже, и, если все нормально, нажимать кнопку «Согласовано». Это оказалось действительно очень удобным, согласование проходило быстро и оперативно. По крайней мере, работало лучше, чем через почту.
  • Затем директор вошел во вкус. Мы создали ему список специальных команд, которые он мог отправить боту в Telegram, чтобы получить оперативную информацию о состоянии расчетного счета, о наличии дебиторской задолженности и т.д. Получился практически «Монитор руководителя», но через бот. Это тоже оказалось интересным решением, и нашему клиенту понравилось.

Создание бота

 

Теперь я расскажу, как это работает и как это устроено внутри.

  • Сначала нужно зарегистрировать бота. Для этого находим в Telegram канал BotFather и пишем ему команду «/newbot».
  • Теперь нужно придумать ему название – я назову своего бота test_infostart2024_bot.
  • После этого необходимо придумать его имя, которое заканчивается на «bot» – имя нашего бота будет infostart2024_bot.
  • Сейчас BotFather проверит, есть ли уже такие зарегистрированные боты в системе, и выдаст нам токен.

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

 

 

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

 

Конфигурация TelegramBot

Теперь я расскажу, как это сделано с точки зрения конфигурирования в 1С. Я сделал конфигурацию, которую потом выложу.

В конфигурации есть:

  • Один общий модуль Telegram_Сервер – в нем 500-1000 строк, не больше.
  • Три регистра сведений:
    • Telegram_ИсторияСообщений;
    • Telegram_Пользователи;
    • Telegram_Настройки.

 

В регистре сведений Telegram_ИсторияСообщений хранится история входящих и исходящих сообщений.

  • Здесь у нас три измерения:
    • ID_сообщения;
    • ВидСообщения – об этом измерении я расскажу чуть подробнее позже;
    • И Пользователь – это измерение нужно, чтобы видеть, кто общается с ботом.
  • И есть два ресурса:
    • Команда;
    • И Сообщение.

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

 

 

В справочнике Telegram_КомандыСистемы есть реквизиты:

  • Описание;
  • ТипКоманды – это перечисление. Здесь может быть либо отправка файла, либо просто сообщение;
  • КодОбработки – этот реквизит нужен для того, чтобы можно было добавлять команды не через конфигуратор, а сразу написать какие-то ответы в режиме «1С:Предприятие», чтобы постоянно не обновлять систему.

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

 

 

Еще у нас есть регистр Telegram_Пользователи, где мы храним информацию о соответствии пользователя Telegram и пользователя нашей системы.

  • Здесь у нас два измерения:
    • ИмяПользователяТелеграм;
    • ID_Пользователя.
  • И один ресурс «Пользователь», где хранится ссылка на элемент справочника «Пользователи».

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

Также есть регистр Telegram_Настройки.

  • Здесь у нас два измерения:
    • ИмяБота;
    • API.
  • И один ресурс token – это токен, по которому у нас будут идти сообщения.

 

В регистре сведений Telegram_Настройки мы записываем:

  • Имя бота – сюда можно написать любое имя;
  • Api – это всегда api.telegram.org;
  • И Token – тот токен, который был назначен нам при регистрации.

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

 

 

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

 

 

Посмотрим, что происходит при этом в коде. Как только срабатывает обработка ожидания, запускается процедура ПрочитатьСообщенияПользователя().

Сначала устанавливается HTTPСоединение. Строчки подключения стандартные для всех API:

  • В переменную Источник мы прописываем токен бота и команду, которую нужно передать в Telegram. Для получения сообщений за последние 24 часа используется команда /getUpdates;
  • HTTPСоединение открывается через 443-й порт;
  • В заголовке HTTPЗапроса прописываем, что будет передаваться структура JSON.

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

 

 

Сначала мы попадаем в процедуру ДесериализоватьJSON – это стандартная процедура преобразования нашей строки JSON в структуру данных.

 

 

Структура входящего сообщения изнутри выглядит следующим образом.

  • Первое поле ok – это значение, куда записывается результат вызова – правильно или неправильно прошло сообщение.
  • И второе поле result – это массив сообщений за 24 часа, который вернул нам бот. В этом массиве можно увидеть, что четыре человека нам уже что-то написали. Каждый элемент массива – это структура, состоящая из полей:
    • update_id – это уникальный код сообщения, который нам прислали;
    • message – это непосредственно само сообщение.

 

Открываю любое сообщение из массива.

 

 

Здесь тоже вложенная структура – можно увидеть, от кого пришло сообщение (поле from), можно посмотреть текст сообщения (поле text), можно посмотреть сам чат (поле chat).

 

 

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

 

 

То же самое мы видим при просмотре структуры chat.

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

 

 

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

  • Сначала в переменную СообщениеID я сохраняю ID конкретного сообщения для того, чтобы с ним дальше работать.
  • Далее у нас идет проверка ПроверитьНаличиеСообщенияПоID. Дело в том, что после каждого запроса к серверу Telegram в результат попадают все сообщения за 24 часа. И мы должны где-то хранить информацию о том, какие сообщения мы уже обработали, а какие нет. Для этого у нас есть регистр сведений Telegram_ИсторияСообщений, где мы храним всю историю. Здесь я проверяю, было ли уже обработано это сообщение от бота или нет.
  • Далее у нас производится вызов функции ВернутьКомандуTelegram, где мы принимаем команду (сообщение, которое нам прислали) и проверяем, есть ли у нас эта команда в справочнике Telegram_КомандыСистемы. Если описание не вернулось, мы должны ответить, что не знаем такой команды.
  • Далее в процедуре ЗаписатьИсториюСообщений мы записываем в регистр сведений Telegram_ИсторияСообщений информацию о том, что это сообщение было обработано, после этого оно становится старым.
  • И, наконец, в процедуре ОбработатьОтветПользователя вызываем процедуру обработки ответа.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь по командам. У нас есть справочник с историей сообщений. Здесь хранится информация обо всех сообщениях – и входящих, и исходящих.

 

 

На данный момент всем всегда приходит один ответ: «Извините, я такого не знаю», потому что никаких команд мы в справочник «Команды системы» еще не вводили.

 

 

Заведем новую команду в справочник «Команды системы».

  • В качестве типа команды выбираем «Сообщение».
  • В поле «Наименование» напишем то, что могут написать боту пользователи, например, «Привет».
  • Поле «Описание» заполняем для справки.
  • И в поле «Код обработки» заносим простые команды, которые будут выполнены из кода через оператор «Выполнить()». В данном случае, я напишу:
    ОтветСистемы = "Привет, дружище. Как дела?".

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Посмотрим, как реализована обработка ответа пользователя.

  • Если в качестве команды попадает известная команда – мы ее обрабатываем.
  • А если мы команду не знаем, то отвечаем «Извините, я такого не знаю».
  • И дальше мы отдаем ответ пользователю.
    • Если тип команды – Файл, то производится отправка файла пользователю.
    • А если тип команды – Сообщение, то мы берем стандартную структуру HTTPСоединение и для этого соединения создаем HTTPЗапрос, куда передаем команду /sendMessage с параметром chat_id, в который записываем значение переменной СтруктураСообщения.chat.id. В результате сообщение благополучно отправляется именно тому пользователю, который нам написал.

 

 

Сейчас проверю, будет ли теперь работать команда «Привет».

 

 

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

 

 

Теперь я расскажу, как можно в отправляемом сообщении реализовать кнопки. Я у себя в конфигурации реализовал две кнопки, которые реагируют на команду «Вечером все идем в кино!!!». В обработке «Telegram обработка отладки» напишем сообщение «Вечером все идем в кино!!!» и нажимаем на кнопку «Отправить сообщение пользователям».

 

 

Теперь мне приходит сообщение с кнопками «Согласовать» и «Не согласовать».

 

 

Код такой:

  • Мы добавляем простейшие кнопки в массив, вставляем их в структуру и записываем в JSON.
  • Дальше отправляем стандартное сообщение – оно всегда отправляется одинаково, независимо от того, с кнопками вы его отправляете, или без. Просто в конце добавляете reply_markup или ваши кнопки, которые вы перечисляете – их может быть две или три, сколько вам удобно.
  • И, соответственно, когда пользователь отвечает, вы этот ответ обрабатываете.

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

 

 

Добавляю в справочник «Команды системы» еще одну команду – help. В ней мы просто запросом пробегаемся по справочнику наших команд и выводим название команды и ее описание.

 

 

Теперь, когда я пишу боту команду help, я получаю ответ – все команды и их описание.

 

 

Еще одна команда –
eport. Она присылает нам отчет со всеми сообщениями пользователей, их ID и т д. Соответственно, если вы куда-то это встроите, то сможете отправлять любой отчет, например, оборотно-сальдовую ведомость, отчет о дебиторской задолженности и т.д. В этой команде мы:

  • Создаем новый табличный документ;
  • Обращаемся к отчету в системе, вызываем его экспортную процедуру СкомпоноватьРезультатТабДок, которая компонует результат в табличный документ;
  • Создаем временный файл с расширением xlsx;
  • Записываем табличный документ в этот временный файл.

 

 

Теперь по команде
eport мне приходит отчет по истории сообщений.

В конфигураторе это все обрабатывается следующим образом.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Этот код я взял из одной хорошей статьи с Инфостарта.

Здесь мы прописываем заголовки, текст отправки, имя файла.

 

 

И в конце вызываем команду sendDocument.

У Telegram открытый API, можно с ним разобраться. Конечно, когда постоянно работаешь в 1С – это сложно, но можно день-два посидеть, потестировать, и становится все понятно.

Система более-менее рабочая. Я постарался сделать поменьше объектов метаданных: два справочника, три регистра. Справочник «Пользователи» я не стал вытаскивать из «Библиотеки стандартных подсистем», потому что вместе с ним там идет огромное количество связанных объектов. Но если вы его объедините, он нормально объединится.

 

Вопросы

Как так получилось, что вы начали пользоваться Telegram?

Первоначально у нас был достаточно крупный клиент, у которого была проблема – чтобы провести отгрузку со склада, нужно было согласовать ее состав с руководителем. Плюс они еще согласовывали платежный календарь – какие платежи сегодня платить. А руководители отдела, которые за это отвечают, постоянно находились в разъездах или на совещаниях. Из-за этого постоянно происходили задержки – по отгрузке, по оплатам. Соответственно, это тормозило определенные бизнес-процессы в компании. И мы предложили им с чем-нибудь интегрироваться, сделали им через Telegram согласование распоряжений на отгрузку и платежей. Попробовали, запустили, всем понравилось, все начали активно пользоваться. Как обычно люди на совещаниях сидят? Они слушают, что говорят, и попутно решают свои дела. Пришло сообщение – он быстро нажал на «Согласовать» или «Не согласовать». Тем самым, повысилась оперативность работы. А потом уже директор начал с этим «играться» – отправлял определенные команды и ему приходил, например, размер дебеторской задолженности.

 

Целевая аудитория – какое количество человек?

100 человек.

 

А аутентификацию как организовали? Зная наименование бота, к нему можно подключиться. Как вы это отсекали?

У бота в настройках можно настроить приватность. Соответственно, настроить вход по паролю и т.д. И на стороне 1С можно реализовать отключение обработки сообщений для неизвестных системе пользователей. Здесь есть регистр Telegram Пользователи. И те, кто боту писал, сюда автоматически попали. Вот он, ID у каждого пользователя. Связка с пользователем системы проставляется вручную. Мы сделали это соответствие через регистр, чтобы не мучиться, но можно привязаться к контактной информации. Например, вы можете в контактную информацию добавить поле ID_Telegram и прописать туда ID пользователя. Этот ID можно узнать по входящему сообщению.

 

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

Поле для творчества очень большое. API тоже очень большое, можно много чего «накопать». В зависимости от задачи и того, что вам требуется. Мы сделали так – нас устраивало.

 

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

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

 

А можно ли добавлять дополнительные ключи – например, чтобы получить отчет по какому-то конкретному контрагенту? Как будет выглядеть команда – report и наименование контрагента?

Команду необязательно писать через слэш – вы ее можете определить, как вам удобно. Например, вы задаете команду ДебиторскаяЗадолженность, потом пробел и ставите какой-то определенный спецсимвол (например, @), после которого пишете название контрагента. Когда у вас эта команда попадает в 1С, там вы уже парсите, что к чему относится и, соответственно, передаете уже эти параметры в отчет.

 

А как вы решали проблему с возможным флудом сообщений от пользователя? Насколько я понял, у вас все пользователи бота – это ваши сотрудники. А были ли какие-то возможности у бота, которые могли использовать сторонние неподконтрольные люди – контрагенты, например или еще кто-то. У нас сейчас основные пользователи нашего бота – это студенты. Они нам неподконтрольные. Мы не можем дисциплинарно наказать человека за то, что он нам пришлет 5000 сообщений.

По chat.id можно отключить обработку сообщений целиком.

 

А вообще Telegram не банит, когда слишком часто к нему обращаешься?

Нас ни разу не банили.

 

А есть ли какие-нибудь ограничения его использования?

Единственное ограничение, которое есть – это отправка исходящих сообщений. Там, по-моему, допускаются пики до 30 сообщений в секунду. Это – основное узкое место.

 

Еще вопрос по кнопкам – в callback_data есть жесткое ограничение в 64 символа. В этой конфигурации реакция на кнопки реализована через ответ на данные в callback_data или в базе данных записывается еще что-то, что используется при обработке callback?

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

 

А почему вы выбрали Telegram? С WhatsApp вы интеграцию не рассматривали?

С WhatsApp мы не работали. Там нет открытого API. Насколько я знаю, WhatsApp собираются сделать корпоративную версию и там уже давать API за деньги. В Viber есть открытое API, но в Viber, насколько я знаю, нет кнопок. К тому же Viber еще и не все файлы поддерживает. По крайней мере, раньше так было – какие-то файлы отправляешь, он пишет – я этот формат не знаю. А в Telegram открытое API, можно использовать кнопки и можно свободно обмениваться теми же самыми Excel-евскими документами.

 

А можно ли реализовать обращения к API не через обработчик ожидания?

Мы это делали регламентным заданием.

 

Это понятно, но стучаться постоянно все равно неохота.

Можно заставить отправлять Telegram push-уведомления – высунуть наружу HTTP-сервис, который будет получать сообщения. У Telegram есть такая возможность – там можно создать подписку и указать типы сообщений, которые будут приходить по этой точке. Но здесь есть ограничение – нужно «высунуть наружу» HTTP-сервис. Это вообще отличная идея, когда из 1С ничего в Telegram не стучится, а все сообщения разбирает сам IIS (или Apache). Потому что у нас была такая проблема – создавалась дополнительная нагрузка на 1С, потому что она должна была одновременно обрабатывать эти сообщения. Тут нужно поступать в зависимости от того, для чего вам нужен этот бот. Если вы хотите, чтобы у вас постоянно было 1000 пользователей, и они массово писали, я думаю, что через 1С это будет сделать сложно. Можно, но сложно. Думаю, что тогда нужно будет запускать отдельную базу 1С, чтобы она работала только с Telegram. А если вы хотите запустить просто информирование внутри компании, то таких возможностей вам хватит, достаточно поставить время для запросов – одну-две минуты.

 

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

Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2024 COMMUNITY. Больше статей можно прочитать здесь.

В 2024 году приглашаем всех принять участие в 7 региональных митапах, а также юбилейной INFOSTART EVENT 2024 в Москве.

Выбрать мероприятие.

32 Comments

  1. PLAstic

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

    Reply
  2. support

    (1) Так что ж вы к нам не приехали со своим докладом? На новую конференцию тоже можно еще успеть https://event.infostart.ru/2018/#invite_speaker

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

    Reply
  3. beefit

    Скриншоты кода это крутяк

    Reply
  4. dmurk

    В прошлом году опробовал функцию, когда Telegram стучится обратно на HTTP сервис. Всё бы хорошо, но есть два «но»:

    1. Обязательно должен использоваться несамоподписанный SSL сертификат с отпечатком SHA256

    2. Объект платформы HTTPЗапрос не в состоянии сформировать корректное вложение SSL сертификата при доступе к WebAPI Telegram, приходилось использовать Fiddler, для того чтобы отдать Telegram сертификат, при помощи которого начнется поступление входящих запросов

    Reply
  5. Infactum

    (1) Поддержу.

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

    (2) А не приехал он к вам, имхо, потому что не считает подобное решение достойным демонстрации на всероссийской конференции.

    Вы организуете конференции уже не первый год. При этом уровень технических докладов как был низким, так и остается. В рамках голосования регулярно побеждают темы, которые просто выбрали из-за того, что в них фигурирует название технологии/продукта, о котором все говорят, + 1С. А по факту там примеры уровня hello world . Эта статья тому пример.

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

    Reply
  6. PLAstic

    (4) Я каждые три месяца выписываю бесплатный сертификат Comodo. Не имею проблем.

    Reply
  7. PLAstic

    (5) Всё так. Я не считаю эту тему достойной освещения перед широким сообществом, учитывая, что на самОм же ИСе представлена пара исчерпывающих статей.

    Reply
  8. nomadon

    (3) это что бы не скопипастили бесплатно, скрин отладчика с пустыми полями и кнопками — что бы разработчик не переключался, а даже при чтении потихоньку отлаживал

    Reply
  9. nomadon
    Можно заставить отправлять Telegram push-уведомления

    что-то пошло не так со словом push

    Reply
  10. support

    (5) Мы пускаем всех, кто проходит народное голосование среди участников конференции. Качество каждого доклада и харизму каждого спикера никто не гарантирует. Выступающий сам принимает решение, насколько качественно ему подготовиться. У нас многие выступают можно сказать впервые на сцене. Но у каждого есть самоконтроль и самоцензура. Если спикер хочет сдалать обзор какой-то технологии, то он ее и делает. Поэтому мы приветствуем тех, кто уже публиковался на портале. Но именно таким образом мы можем найти новых «звёзд».

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

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

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

    Reply
  11. support

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

    Reply
  12. KonstB

    (0) как Вы обошли блокировку телеграма в РФ?

    Телеграм на телефоне работает. Адрес https://api.telegram.org/ без прокси молчит.

    Reply
  13. Infactum

    (12) Когда проходил IS event ничего еще не блокировалось.

    Ну а сейчас какие проблемы через прокси зайти то?

    Reply
  14. KonstB

    (13)

    Ну а сейчас какие проблемы через прокси зайти то?

    Не увидел у Вас на скриншотах прокси. Подумал, возможно Вы как-то по другому обошли блокировку

    Reply
  15. Infactum

    (14) Я не автор. Но все варианты крутятся вокруг построения маршрута без блокировок. Не хотите прокси — настройте маршрутизацию на уровне шлюза / роутера.

    Reply
  16. PLAstic

    (12)

    1. Как ни странно, но многие бизнес-провайдеры не блокируют трафик.

    2. Для получения апдейтов по getUpdates достаточно впн-соединения.

    Или другие способы:

    1. Вывод сервера с ботами из РФ.

    2. Проксирование трафика заграничным сервером.

    Reply
  17. dmurk

    (6) Да, я тоже решил этот вопрос ))

    Reply
  18. PLAstic

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

    Reply
  19. Gureev

    Телега удобный мессенджер, жаль что ненадежный.

    Reply
  20. stako8

    (19) Чем это ненадежный? 2 раза в год ложится на несколько часов? или тем что роскомнувыпоняли его пытается блокировать, но уже везде встроен автообход и только через 1С его надо «ручками» делать…непонятно, объясните свою точку зрения!

    Reply
  21. Gureev

    (20) тем что не способен оперативно адаптироваться к законодательству стран в которых работает.

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

    Reply
  22. stako8

    (21) т.е. надо поддерживать страны где все законы противоречят друг другу и по одному ты не прав, а по второму законы ты не прав вдвойне — увольте!

    Reply
  23. Gureev

    (22)

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

    не очень понял этот поток сознания.

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

    Видимо просто не хочет. Эта и есть та самая ненадежность.

    Reply
  24. PLAstic

    (23) Для каждого пользователя свои приоритеты. Кому-то нравится позиция телеги не давать читать сообщения в приватных чатах. И для корпоративного сектора, имхо, это важно. А кому-то важнее распространённость и они пользуются, например, ватсапом. Но тут напрямую встаёт вопрос автоматизации общения с мессенжером. Кто ещё у нас поддерживает схожие возможности ботов?

    Reply
  25. Gureev

    (24) Корпоративный сектор общается в действительно защищенных мессенджерах.

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

    Я бы хотел, чтоб у Дурова купили телегу, и вывели ее на цивилизованные рельсы.

    Reply
  26. PLAstic

    (25) Прям в действительно защищённых? Тогда такому сектору глубоко по барабану, у кого он установлен и они, совершив свой выбор, навязывают его определённому кругу. Кругу кого? Конечно, сотрудников, и конечно, для внутрикорпоративного общения.

    А вот когда нужно общение с внешними контрагентами — клиентами или поставщиками, тогда выбирают наиболее массовые и функциональные мессенжеры, потому что такие установлены у многих и могут многое. Возвращаемся к моему предыдущему сообщению — у каждого свои приоритеты.

    Reply
  27. Gureev

    (26)

    А вот когда нужно общение с внешними контрагентами

    Когда это электронную почту мессенджерами заменили?)

    Reply
  28. PLAstic

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

    У меня есть боевые клиенты, которые ушли от почты. Конечно, это не традиционная торговля товарами.

    Reply
  29. lishniy

    Спасибо за ваш труд. Конфигурация хоть и не универсальная, но дает довольной быстрый старт.

    Единственное не понял зачем вы все время получаете все сообщения? У себя пока сделал так

    Процедура ПрочитатьСообщенияПользователя() Экспорт
    ПоследнийИД = Константы.TelegramOffset.Получить();
    СтруктураНастроек = ПолучитьНастройкиTelegram();
    
    //Установим соединение
    Источник = «bot» + СтруктураНастроек.token + «/getUpdates» + ?(ПоследнийИД = 0, «», «?offset=» + Формат(ПоследнийИД, «ЧГ=»));
    …
    
    Если HTTPОтвет.КодСостояния = 200 Тогда
    Данные = ДесериализоватьJSON(HTTPОтвет.ПолучитьТелоКакСтроку());
    Если Данные.ok И Данные.result.Количество()>0 Тогда
    СообщениеID = 0;
    Для каждого СтрокаМассива Из Данные.result  Цикл
    
    UpdateID = СтрокаМассива.update_id;
    
    …
    КонецЦикла;
    Константы.TelegramOffset.Установить(UpdateID+1);
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры

    Показать

    Таким образом, я получаю только новые сообщения

    Reply
  30. yuli

    Добрый день! При попытке получения сообщения от пользователя возникает ошибка

    Reply
  31. yuli
    Ключ = СтруктураНастроек.token;
    Попытка
    
    Сервер = СтруктураНастроек.api;
    
    Если ИспользоватьПрокси Тогда
    HTTPСоединение = Новый HTTPСоединение(Сервер,,,,ИнтернетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);
    Иначе
    
    
    HTTPСоединение  =  Новый HTTPСоединение(СтруктураНастроек.api,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    
    
    КонецЕсли;
    
    
    Исключение
    
    КонецПопытки;
    
    
    
    
    //Установим соединение
    
    
    Источник = «bot» + СтруктураНастроек.token + «/getUpdates»;
    HTTPЗапрос = Новый HTTPЗапрос(Источник);
    
    HTTPЗапрос.Заголовки.Вставить(«Content-type», «application/json»);
    
    HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос); // — вот здесь возникает ошибка

    Показать

    Reply
  32. guerro

    (31) получилось исправить?

    Reply

Leave a Comment

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