Telegram-боты

Публикация № 667516 01.09.17

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

telegram телеграм бот

Описание теории, разбор архитектуры и пример реализации telegram-ботов. Сразу скажу, со структурированием изложения мало что могу поделать. :) редакция от 18.07.2018 Правки последней редакции выделены жирным.

В языке 1С все мы в той или иной степени спецы, но того же нельзя сказать применительно к Telegram (далее «телега»). Почему? Причина в высоком уровне входа в API. Лично я, когда почитал страницу на сайте телеги, подумал «и где же дока по апишке?» Оказалось, это и была «типа самодостаточная дока по апишке» в понимании разработчиков. Потом был период ковыряния интернета на предмет реализации той или иной функции средствами платформы 1С. Что-то находилось, но в основном только вопросы без ответов или адски колхозные решения.

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

Смотрю уже не первый месяц ИС и вижу отдельные попытки исследования API Telegram и даже создания конструкторов ботов. Попытки не систематизированные, часто, неоптимальные или устаревшие, не использующие нынешние возможности платформы в полной мере. А для конструкторов просто не вижу перспектив. Если целевая аудитория конструктора - пользователи, то они не смогут написать обработчик какой-либо команды бота и будут ограничены возможностями конструктора, а если программисты, то для них наиболее оптимальной реализацией ботов будет исключение сервисных механизмов конструктора. Понятно, что разбираться в API телеги мало кому хочется, было бы удобно, если бы оно уже было разобрано и имелся бы набор функций для бота. Это и хочу предложить вам ниже. Теория, затем разбор архитектуры решения, почему именно так, а не иначе, и наконец, сам код. Долго думал, надо ли мне это, ведь можно снимать сливки с рынка, обладая информацией. Под публикацией вы найдёте выгрузку из куцей конфигурации, которой хватит для понимания и демонстрации содержания статьи (я поставил 0sm, но сайт поставил 1).

 

Что такое телеграм-бот? Упрощу описание: это просто запись в таблицах на серверах телеги, что есть такой «пользователь» телеги с типом «бот». Значит, ему могут писать, он может отвечать, его можно добавлять в группы и пр. Нюанс только в том, что обычный пользователь – человек и он с помощью клиента телеги сам может прочитать, ответить, добавиться в группу и пр, а тут нам надо каким-то образом читать/отправлять сообщения и мониторить прочие события, которые происходят с ботом.

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

Читать можно двумя способами: лазить на сервера и проверять/забирать новые сообщения (способ «getUpdates») или, наоборот, отправить телеге ссылку, куда она должна скидывать новые сообщения сама (способ «вебхук»).

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

Для getUpdates есть история. Пока я писал первого бота, я отправлял ему тестовые сообщения и всё было хорошо, но когда я запустил его в «прод», бот замолчал. Я начал исследовать и выяснилось, что новые сообщения вообще не приходят боту. Ну, думаю, часто бот отвечал и телега его забанила. Прошло несколько дней, ситуация не изменилась. Тогда я полез в доку и выяснил, что хотя у метода getUpdates все операнды опциональны, всё же стОит обратить внимание на первый из них:

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

Получается, для каждого бота надо хранить ид последнего апдейта, прибавлять к нему 1 и запрашивать с получившегося ида апдейты. По-умолчанию сервера выдают 100 новых апдейтов. Количество можно указать в операнде limit от 0 до 100. На практике этим параметром можно пренебречь. Например, бот умер на неделю, ему наслали 1000 сообщений. Он первым запросом получит первые 100, следующий запрос будет получать вторую сотню и т.д.

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

Как описывалось выше, в случае со способом получения апдейтов getUpdates мы заинтересованы в как можно более стремительной реакции бота. Исходя из этого следует, что соединение с сервером телеги должно устанавливаться один раз и общение бота будет происходить в рамках этого соединения. Нюанс в том, что рег.задание создаёт фоновое задание каждые 3 секунды и новое фоновое задание создаётся в новой среде, которая не знает, что соединение уже установлено. Способ передачи HTTPСоединения между фоновыми заданиями я пока не нашёл. Создавал на форуме уже две темы и получал неприемлемые ответы. Поэтому пока могу предложить колхоз – установку соединения каждым фоновым заданием.

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

Чтобы описать ботов, сделал отдельный справочник «Боты», где все боты задаются предопределёнными элементами для удобства ссылок на них в коде. Первый необходимый реквизит – ид бота, он же «токен». Вторым реквизитом можно указать имя обработки бота. Выше я упоминал ид последнего апдейта, полученного ботом. Можно хранить его в реквизите справочника. Считать каждый раз запросом МАКСИМУМ() от всех ид апдейтов данного бота, хранящихся в ИБ будет более затратным по мощностям и времени.

Далее получается, что сообщения надо читать многим ботам. Так зачем плодить этот механизм? Так появилось отдельное рег.задание «Чтение апдейтов». Оно запускается каждые 3 секунды и читает апдейты для всех ботов, у которых указано, что им апдейты надо читать автоматически. Галка «Автоматическое получение апдейтов» – ещё один реквизит справочника.

Теперь обратим внимание на ограничения ботов. Например, у одного бота мне надо было, чтобы он отвечал на запросы только из личек, а в группах не общался, а у другого – чтобы он имел возможность работать в инлайн-режиме. Не надо городить в коде то, что может быть реализовано средствами самОй телеги. У ботов есть создатель - @botFather, который может это всё настроить. Рекомендую вам полазить по его настройкам и изучить их.

Ещё одно ограничение, которое может быть полезно, - это ограничение типов сообщений, получаемых ботом. Например, у меня есть бот, который читает только локи (location). Убрать лишний флуд можно операндом allowed_updates метода getUpdates и этот список типов сообщений тоже может храниться в реквизите справочника «Боты».

Полученные апдейты не всегда, но в большинстве случаев целесообразно хранить в ИБ. Это пригодится и для анализа запросов при разработке, и для разделения механизмов чтения и обработки апдейтов. Для цели хранения апдейтов можно создать регистр сведений «СообщенияБотам». Структура апдейта весьма витиевата, поэтому создавать под каждый его реквизит отдельный реквизит в РС нет смысла. В конце разработки бота вы заметите, что из всех реквизитов часто вам нужны только несколько: автор сообщения, ид сообщения, ид чата, текст сообщения (если это текстовое сообщение). Сравните с полным описанием структуры сообщения. Всё остальное, как например, ид сообщения, в ответ на которое пришло текущее сообщение, может быть получено из отдельного реквизита регистра, где хранится полный текст сообщения со всей структурой. Т.о. структура РС может быть следующего вида:

update_id
Бот - Поскольку в РС хранятся сообщения от всех ботов, то надо знать владельца этого апдейта.
МоментВремени
Пользователь - Я рекомендую сразу создать доп.реквизит TelegramID у сущностей ИБ, описывающих персонажей, которые могут общаться с ботом - контрагенты, физ.лица, сотрудники и т.п. В реквизите я храню саму сущность, это удобно для анализа, но это не принципиально.
message_id - Часто нужен, например, для ответа на сообщение.
chat_id - Нужен всегда - в какой чат отвечаем?
Обработан - Признак того, что данное сообщение было обработано ботом. Удобен для отладки, когда вылетает ошибка на обработке сообщения. При устранении ошибки запускаем заново бота и пытаемся обработать сообщение повторно.
ТипСообщения - Этот реквизит нужен для анализа типа сообщения и реакции на него.
ТекстСообщения - Если тип сообщения - message, то в реквизите текст сообщения.

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

Я не претендую на полный обзор всех возможностей ботов, но планирую описать наиболее интересные и полезные из них: отправку/получение файлов, inline-клавиатуры, «перманентные» клавиатуры, команды бота и некоторые другие возможности.

 

Начнём с самого простого – с команд бота. Сразу открою, что эти команды должны быть описаны у создателя ботов. Т.о. при вводе слеша первым символом сообщения пользователю будет показываться список предопределённых команд бота с заданным вами описанием. Это удобно. Учитывайте сразу, что пользователь может написать команду рАзНыМ регистром и добавить в конце @имя-вашего-бота. Последнее необходимо для точной идентификации бота-получателя команды. Например, в группу добавили трёх ботов. У каждого бота есть команда /start. Какому боту написали /start в группе? Именно @имя-вашего-бота после команды и уточняет получателя.

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

Для анализа наличия команд удобно использовать свойство Message.Entities. Сервер телеги сам парсит пришедшее от пользователя текстовое сообщение и выделяет из него части вроде юзернеймов, команд бота, ссылок, хэштегов и пр. У каждого элемента этого массива есть свойство Type. Для команд бота у него будет значение "bot_command". Таким образом, вы можете не парсить ручками текст сообщения, а анализировать именно это свойство.

 

Теперь про клавиатуры. Они бывают двух типов - ReplyKeyboard, которые я называю "перманентными" и InlineKeyboard.

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

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

Строго говоря, у апдейтов нет типов. Типы я ввёл для удобства дальнейшей обработки их ботами. На стадии записи апдейта в ИБ я проверяю наличие тех или иных параметров и устанавливаю тип апдейта. Например, если есть свойство callback_query, ставлю тип callbackquery, если у параметра message есть location, то ставлю тип location. Сразу становится понятно - прислали текст, или локу, или нажали инлайн-кнопку.

Как описать клавиатуры? У перманентных клавиатур кнопка имеет только один параметр - название (text). У инлайн - название (text) и значение (callback_data). На самом деле у них есть и другие параметры, открывающие потрясающие возможности, но их я описывать тут не буду пока. Значение инлайн-кнопок д.б. именно строковым, т.е. запихнуть туда ЗначениеВСтрокуВнутр() не получится. Рекоментую туда передавать УникальныйИдентификатор. И тут возникает хороший вопрос "зачем"...

Зачастую боты имеют многоуровневые меню. Например, сначала нам надо узнать у пользователя склад самовывоза, а потом время, когда он собирается приехать. Как это можно реализовать? Он даёт нам команду, что хочет забрать товар сегодня, мы в ответ выводим сообщение "да не вопрос, куда собираетесь ехать?" и с этим сообщением передаём инлайн-клавиатуру со списком возможных складов. Можно в качестве значения кнопки передавать уникальный идентификатор элемента справочника "МестаХранения" из ИБ, но это неудобно, т.к. при ответе надо понимать, на какой вопрос пришёл ответ.

Создаём РС "ВариантыОтветов", где измерением ставим реквизит "Идентификатор" с типом УникальныйИдентификатор, добавляем текстовый ресурс "Значение" и реквизит "ДатаСоздания". Ресурс будет содержать ЗначениеВСтрокуВнутр() от нужного нам значения, а реквизит нужен для последующего удаления данных сборщиком мусора, чтобы эти варианты не висели в ИБ вечно. В качестве значения кнопки передаём Идентификатор. Это позволит "привязать" кнопку к структуре, которая по ходу ответов от пользователя будет заполняться значениями его ответов.

Итак, пользователь выбрал склад, нам пришёл апдейт callbackquery, в этом апдейте указан код кнопки и из него мы понимаем, что за кнопка была нажата. Теперь можно изменить текст сообщения с клавиатурой на "Самовывоз со склада такого-то. Уточните время:" и клавиатуру заменить на предопределённые значения часов типа 09:00, 10:00 и т.д. При этом, выводя клавиатуру с часами есть несколько способов учесть ответ пользователя на предыдущий вопрос. Нам где-то надо хранить предыдущие ответы. Мы можем их включать в структуру из РС "ВариантыОтветов", а можем создать отдельный РС "СессииБота". В нём будет измерением ид чата (у приватных чатов он совпадает с ид пользователя телеги) и знакомые нам ресурс "Значение" и реквизит "ДатаСоздания". Если вам удобнее, можете вместо одного ресурса "Значение" создать отдельные ресурсы под каждое значение ответа пользователя. Из примера выше это будут "Склад" и "Время". Универсальность единого ресурса в том, что в нём можно хранить структуры разного состава реквизитов.

При поступлении апдейта callbackquery смотрим по РС "ВариантыОтветов", что пришло. Смотреть удобнее, когда с идентификатором проассоциировано не просто значение объекта ИБ, а структура, где указано, что за меню это было и значение ответа. Т.е. структура вида:

Операция: "ВыборСклада"
Значение: a763cfbb-f94f-4c67-8e13-0e96a3a7f353

Отсюда сразу понятно, что надо в РС "СессииБота" в сессии из соответствующего чата присвоить реквизиту "Склад" ссылку на элемент справочника "МестаХранения" с идентификатором "a763cfbb-f94f-4c67-8e13-0e96a3a7f353".

Когда пользователь выберет конкретное время, нам придёт callbackquery со ссылкой на запись в РС "ВариантыОтветов". Также, как и со складом, достаём из РС информацию, что это выбиралось время и что было выбрано такое-то конкретное время. Устанавливаем его в РС "СессииБота" и получаем заполненную структуру ответов от пользователя. Обновляем текст сообщения, чтобы отразить в нём результат выбора пользователя и убираем клавиатуру вообще.

Все клавиатуры - это JSON. Исходно это текст и его можно хранить в текстовых реквизитах. Вспоминаем, что в платформе 1С есть объекты и методы для работы с этим форматом: ЧтениеJSON, ПрочитатьJSON. Клавиатура - это массив строк из массива кнопок. В интернете полно генераторов, где можно задать массив и он будет преобразован в JSON, но можно и поэкспериментировать на примерах из 1С. Создайте массив из массивов структур с элементами text и callback_data и преобразуйте его с помощью кода в JSON:

СтруктураОтвета = Новый Структура;
СтруктураОтвета.Вставить("inline_keyboard", МассивСтрок);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,,ЭкранированиеСимволовJSON.СимволыВнеASCII));
ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);

Должно получиться что-то вроде этого:

{
	"inline_keyboard":
	[
		[
			{"text":"Разрешить","callback_data":"%1"},
			{"text":"Отклонить","callback_data":"%2"}
		]
	]
}

Поскольку в перманентных клавиатурах у кнопок есть только один реквизит text, разработчики решили нас порадовать упрощённой формой описания клавиатуры:

{
	"keyboard":
	[
		[
			"Разрешить",
			"Отклонить"
		]
	]
}

 

Не всегда общение возможно с помощью клавиатур, иногда от пользователя ожидается текстовый ввод. Выходит, при поступлении текстового сообщения боту надо знать: это просто пользователю скучно или он отвечает на какой-то вопрос, заданный ему на каком-то этапе общения? Рассмотрим для примера функцию отправки отзыва о боте. Пользователь нажимает кнопку перманентной клавиатуры "Оставить отзыв". Мы видим, что есть такая кнопка, выводим ему "Следующим сообщением оставьте всё, что вы думаете обо мне" и ожидаем от пользователя сообщение. Это ожидание надо где-то зафиксировать. Я для этого создал РС "СессииКонтрагентов", очень похожий по структуре на "СессииБота". В нём хранятся текущие статусы общения с пользователем, если они есть. Например, после вывода сообщения пользователю про написание отзыва, следует записать в этом регистре, что в таком-то чате у нас теперь статус "ОжиданиеОтзыва". И когда придёт следующее сообщение, мы предварительно проверим статус и выполним соответствующую его обработку.

Следует отметить, что если общение с ботом ведётся в группах, то одновременно с ним могут общаться больше одного пользователя и по каждой ветке общения надо хранить текущий этап беседы. Это означает, что в РС СессииКонтрагентов надо добавить измерением ид сообщения: мы всегда будем знать, что у нас в таком-то чате, по такому-то сообщению сейчас такой-то этап общения. Привязки целого диалога к одному сообщению возможны в случае, когда мы меняем его текст и клавиатуру. Небольшая сложность поджидает нас при необходимости ввода текстовых ответов, как в примере выше с отправкой отзыва. Это легко решается переводом клиента в режим ответа на сообщение:

Параметры = Новый Структура("reply_markup, parse_mode", "{""force_reply"":true}", "Markdown");
НовоеСообщение = Боты.ОтправитьСообщение(Бот, Сообщение.Чат, "Укажите дату последнего медицинского осмотра в формате дд.мм.гггг:
|Например: _28.01.2018_",, Параметры);

В примере я передаю два параметра:

  1. parse_mode со значением Markdown говорит, что надо использовать при показе сообщения клиенту условное оформление (те самые подчёрки вокруг даты дают курсив);
  2. reply_markup со значением force_reply:true (JSON) говорит, что надо принудительно перевести клиента в режим ответа на это сообщение.

В результате клиент не задумывается о том, чтобы выделить нужное сообщение и выбрать "Reply", а вы получаете ответ, который привязан к вашему сообщению: в полученном сообщении надо анализировать реквизит Message.reply_to_message .

 

Теперь немного про отправку и приём файлов. Каждый залитый в телегу файл получает свой ид. Если вы хотите залить тот же файл ещё раз, выгоднее сделать это, указав тот самый ид файла. В этом случае перекачка выполняться не будет, а будет дана ссылка на файл на серверах телеги. Подробно об этом сказано здесь. Из трёх способов, о которых говорится по ссылке, как правило, всех интересует только один способ - как файл с диска или из ИБ залить в телегу. Сказано про это весьма лаконично:

Передайте файл, используя multipart/form-data как это обычно делает браузер.

Такая краткость вводила и меня в ступор поначалу. Потом начал гуглить, как же заливает файлы браузер и нашёл несколько статей, в.т.ч. и с реализацией на платформе 1С. К сожалению, примеры писались ещё под платформу 8.2, где всё было не столь радужно как в 8.3. Не буду подробно описывать, как происходит перекачка файлов, предоставлю вам эмоции первооткрывателей-гуглёжников. Во вложении содержится кусок кода для отправки различных видов медиа в чаты. В данной конфигурации он у вас не будет работать, потому что общий модуль "ПрисоединенныеФайлы" я просто дёрнул из БСП и он алярмит об ошибках. Практически все типовые конфигурации построены на базе БСП, поэтому часть функций по работе с присоединёнными файлами к объектам ИБ я не стал колхозить, а использовал стандартную функциональность. Если ваша конфигурация почему-то не использует БСП, можете написать свою функцию получения прикреплённого файла.

Один момент колхоза в реализации работы с файлами у меня есть. Как я говорил выше, если файл уже заливался на сервера телеги, то нам выгоднее использовать его ид, полученный после закачки. Я не стал создавать отдельный реквизит, потому как пришлось бы его создавать во всех справочниках "*ПрисоединенныеФайлы", а задействовал под хранение ида реквизит "Описание", который у меня не использовался. Если в вашей конфигурации он используется, тогда придётся создавать отдельный.

 

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

Скачать файлы

Наименование Файл Версия Размер
Telegram-боты:

.dt 95,75Kb
166
.dt 09.06.3 95,75Kb 166 Скачать

Специальные предложения

Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. zeltyr 416 04.09.17 11:09 Сейчас в теме
Эх, эту бы статью, да неделю назад, когда я только со всем этим начал разбираться.
Сейчас 90% статьи уже своим умом дошёл.
Но всё равно, большое спасибо вам за труд.
AnchoSt; NewLifeMan; +2 Ответить
26. user853472 26.02.18 11:39 Сейчас в теме
(1)

Доброго времени суток! Подскажите как отправить фото с клавиатурой inline_keyboard?

ддКартинка = Блюдо.Ссылка.ОсновноеИзображение.Хранилище.Получить().ПолучитьДвоичныеДанные();

времКаталог = КаталогВременныхФайлов();
времФайлКартинки = ПолучитьИмяВременногоФайла("jpg");
имяВремяФайла = СтрЗаменить(времФайлКартинки,времКаталог,"");

ддКартинка.Записать(времФайлКартинки);

СтрокаСоединения = "/bot" + Константы.Токен.Получить() + "/sendPhoto";

//Определяем массив для процедуры ОбъединитьФайлы
МассивФайловДляОбъединения = Новый Массив;

//Формируем начальный фрагмент файла POST-запроса
ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);

//Формируем конечный фрагмент файла POST-запроса
ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);

ТекстДляОтправки = "";

Boundary = "----" + Строка(Новый УникальныйИдентификатор());

// ЧАТ
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id"""+ Символы.ПС + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + СокрЛП(Формат(Клиент.Код,"ЧГ=0")) + Символы.ПС;

// ПОДПИСЬ
Подпись = "Наименование: " + Блюдо.Ссылка.Наименование + Символы.ПС + "Цена: " + Блюдо.Ссылка.Цена;

ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""caption""" + Символы.ПС + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + СокрЛП(Подпись) + Символы.ПС;

// ФОТО
ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""photo""; filename=""" + имяВремяФайла + """" + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Type: image/jpg" + Символы.ПС;

//КЛАВИАТУРА
клСтруктура = Новый Структура;
Строки = Новый Массив;
Кнопки = Новый Массив;
Кнопки.Добавить(Новый Структура("text, callback_data", "В корзину", Блюдо.Ссылка.Код));
Строки.Добавить(Кнопки);
клСтруктура.Вставить("inline_keyboard",Строки);

ЗаписьJSON = Новый ЗаписьJSON;
//ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,,ЭкранированиеСимволовJSON.Нет)); //Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,,ЭкранированиеСимволовJSON.СимволыВнеASCII)
ЗаписатьJSON(ЗаписьJSON,клСтруктура,,);
Клавиатура = ЗаписьJSON.Закрыть();

ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""reply_markup""" + Символы.ПС+ Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + СокрЛП(Клавиатура) + Символы.ПС;

ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
ФайлОтправкиНачало.Закрыть();

МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
МассивФайловДляОбъединения.Добавить(времФайлКартинки);

ТекстДляОтправки = "";
ТекстДляОтправки = ТекстДляОтправки + Символы.ПС + "--" + Boundary+"--";
ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
ФайлаОтправкиКонец.Закрыть();
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);

ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");

ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);

HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
HTTPЗапрос.АдресРесурса = СтрокаСоединения;

Результат = ОтправитьЗапросНаОбработкуВTelegramPOST(HTTPЗапрос);

Для Каждого Файл Из МассивФайловДляОбъединения Цикл
УдалитьФайлы(Файл);
КонецЦикла;
Показать


Если убрать блок который отвечает за клавиатуру, то картинку отправляет, а с клавиатурой сервер возвращает ответ "IMAGE_PROCESS_FAILED"
42. Hobbit_Jedi 06.07.19 01:45 Сейчас в теме
(26)
IMAGE_PROCESS_FAILED

Буквально сегодня с этим бодался. Помогло использование кодировки ANSI (без BOM) везде, где можно указать кодировку.
2. eskor 97 04.09.17 14:56 Сейчас в теме
+ Слежу за этим вопросом еще со времен первой публикации.
"Телега" единственный мессенджер с вменяемым API, поэтому в корпоративных проектах ему быть.
Мой "питомец" уже пару лет отчеты шлет :)
kamervan; +1 Ответить
3. V_V_V 05.09.17 11:12 Сейчас в теме
Адский поток сознания, а не статья... На разделы побить бы, что-ли.
Имею собственноручно созданного бота - вот ничем бы не помог этот набор слов.
GreenDragon; VachKirp; zzumma; dj_serega; +4 Ответить
4. PLAstic 291 05.09.17 13:05 Сейчас в теме
Друзья, кто скачал конфигурацию, в неё закралась ошибка. Я выложил новую версию конфигурации, но вы можете устранить ошибку и вручную: в РС "ЗапросыБоту" реквизит "ТипСообщения" должен иметь тип "Перечисление.ТипыСообщения".

Для оперативной связи моя телега.
5. imedeev 3 06.09.17 09:34 Сейчас в теме
Тяжело читать - сплошной текст, но тема интересная.
Когда то сам делал - для вечерней отправки отчета по ОРП для босса
6. volodya82 1 06.09.17 09:41 Сейчас в теме
{ОбщийМодуль.Боты.Модуль(72)}: Метод объекта не обнаружен (ПриПолученииСообщения)
7. PLAstic 291 06.09.17 09:56 Сейчас в теме
(6) Спасибо, закомментировал. Этот кусок кода относился к ботам, которым нужна дополнительная обработка при получении апдейтов. Поскольку фича мало интересная, я не стал её описывать и удалил упоминание.
8. more 15 07.09.17 21:19 Сейчас в теме
Хорошая информация, для первичного погружения очень хорошо.
9. flyer 229 26.09.17 13:12 Сейчас в теме
подскажите почему возникает ошибка для getUpdates : Conflict: can't use getUpdates method while webhook is active?
10. PLAstic 291 26.09.17 14:15 Сейчас в теме
(9) У вас был установлен вебхук для получения апдейтов. В апи подробно про это было сказано: https://core.telegram.org/bots/api#making-requests-when-getting-updates
Если его надо выключить, то надо отправить deleteWebhook.
11. flyer 229 28.09.17 13:14 Сейчас в теме
(10) с этим разобрался спасибо!
еще подскажите такая ситуация. а то что то видимо делаю не так. добавил бота. test_123456789_bot я с телефона пишу ему и на компьютере вижу сообщение. попросил другого пользователя найти этого бота и ему написать но его сообщения не появляются у меня.
12. sdwggg 05.10.17 15:33 Сейчас в теме
кто-нибудь знает, как реализовать следующее?
Бот должен ожидать от пользователя ввода даты. При этом на самом устройстве (в данном случае на iPhone) должна появиться клавиатура выбора даты, а не обычная текстовая и не циферная, чтобы в конечном итоге боту была отправлена команда вида "ДД.ММ.ГГГГ"
13. PLAstic 291 05.10.17 23:51 Сейчас в теме
(137) Виды клавиатур я уже описывал. Для данного случая подходит только инлайн, но делать клавиатуру для ввода времени - это весьма забавно, имхо.
14. Lyolik 8 31.10.17 11:44 Сейчас в теме
Интересно, а как к кнопке добавить картину - для наглядности. На пример, как на скрине...
Прикрепленные файлы:
15. botokash 377 01.11.17 13:52 Сейчас в теме
(14) Это эмоджи, добавляйте просто в текст кнопки
16. Lyolik 8 02.11.17 11:04 Сейчас в теме
(15) Что, именно, нужно добавить? У эмоджи есть какое-то текстовое представление или код? Если да, то где можна это посмотреть? Спасибо.
17. botokash 377 02.11.17 11:50 Сейчас в теме
(16) Эмоджи это текст. Заходишь например на emojipedia.org, находишь понравившееся, и копипастом добавляешь себе.
21. Kabz 77 08.11.17 14:50 Сейчас в теме
(17) что не все вставляеться.
29. devonec_team 120 03.07.18 21:28 Сейчас в теме
(21) решил проблему с эмоджи так. Захожу на https://apps.timwhitlock.info/emoji/tables/unicode. Беру столбец Bytes. Пример: \xF0\x9F\x93\x9E и заменяю на %F0%9F%93%9E и вставляю в текст ,в telegram отображается эмоджи. Может кто то знает как это гуманно сделать средствами 1с, я делаю Стрзаменить.
maikl007; maksa2005; +2 Ответить
18. guy_septimiy 02.11.17 13:44 Сейчас в теме
Доходил аналогично автору тестовым путем в июне.
В целом, хорошая статья, проясняющая для новичка не в теме, многие моменты.
Автору респект
NewLifeMan; PLAstic; +2 Ответить
19. Master598 07.11.17 14:42 Сейчас в теме
кто может потерпеть мои вопросы новичка? в личном чате. а то запутался.
хочу сделать бота в группе и чтобы через 1с туда напоминала и люди уже не могли отмазаться, что Почты много, затерялось письмо, или в 1с не заходил уже 3 дня.

п.с. не халявщик, сижу читаю ваши коды, и пробую понять как это все мне под себя прикрутить.
20. PLAstic 291 08.11.17 09:04 Сейчас в теме
Вполне можешь задавать здесь. Ответы на вопросы могут быть полезны и остальным.
NewLifeMan; +1 Ответить
22. taishy 52 21.12.17 16:29 Сейчас в теме
Кто знает, можно ли подключаться из 1С к телеграм от имени клиента?(не бота)
23. PLAstic 291 22.12.17 11:31 Сейчас в теме
(22) Теоретически это возможно. Где-то на гитхабе есть исходники tgmcli (или как-то так). Это библиотека для работы от имени пользователя телеги. Сам не сталкивался, только слышал. Думаю, ваши шансы всё равно стремятся к нулю, но удачи.
25. taishy 52 22.12.17 11:48 Сейчас в теме
(23) Есть бредовая идея сделать обмен на базе телеграма. В качестве бота думал сделать главный узел, а в удаленных - в режиме клиента (для инициирования диалога с ботом и отправки запросов)
24. Alexey_ 25 22.12.17 11:44 Сейчас в теме
27. devonec_team 120 01.07.18 10:35 Сейчас в теме
полезная статья, кто нибудь решал такую проблему: режим обмена через webhook, задаю вопрос пользователю он быстро набирает много сообщений пока я не ответил. Как мне отсекать ответы пользователя которые лишние. Пример: Я задал вопрос , пользователь набрал быстро 3 ответа. Бот должен отработать только один ответ(самый первый.).Как только ответит бот, общение продолжается.
28. PLAstic 291 01.07.18 14:14 Сейчас в теме
(27) если ты будешь делать сессии по сообщениям с клавиатурой, то после получения ответа я их удаляю обычно. Т.е. все последующие запросы не найдут сессии и не будут обработаны.
30. пользователь 03.07.18 21:29
Сообщение было скрыто модератором.
...
31. devonec_team 120 04.07.18 11:54 Сейчас в теме
решил проблему с эмоджи так. Захожу на https://apps.timwhitlock.info/emoji/tables/unicode. Беру столбец Bytes. Пример: \xF0\x9F\x93\x9E и заменяю на %F0%9F%93%9E и вставляю в текст ,в telegram отображается эмоджи. Может кто то знает как это гуманно сделать средствами 1с, я делаю Стрзаменить.
32. PLAstic 291 18.07.18 12:47 Сейчас в теме
Статья обновлена, жирным выделены дополнения.
33. ROM_1C 691 15.09.18 00:52 Сейчас в теме
34. slavik_s 12.10.18 18:27 Сейчас в теме
Скачал конфигурацию, а в ней почти ничего нет. Очень интересует вопрос как решить перенос кнопок на другую строку, чтобы кнопки выстроились одна под другой?
36. PLAstic 291 12.10.18 18:45 Сейчас в теме
(34) в статье про кнопки написано.
37. slavik_s 13.10.18 01:31 Сейчас в теме
(36) По этому коду
{
"inline_keyboard":
[
[
{"text":"Разрешить","callback_data":"%1"},
{"text":"Отклонить","callback_data":"%2"}
]
]
}
Кнопки выстраиваются в одну строку [Разрешить] [Отклонить] а надо чтобы друг под другом
[Разрешить]
[Отклонить]
На моем примере это так:
{
"inline_keyboard": [
[
{
"text": "08:10 - Сидоров",
"callback_data": "1539327600;000000002292"
},
{
"text": "10:10 - Иванов",
"callback_data": "1539334800;000000003398"
},
{
"text": "10:10 - Петров",
"callback_data": "1539336600;000000003404"
},
{
"text": "12:10 - Голубев",
"callback_data": "1539343800;000000003397"
}
]
]
}

На каждой кнопке Время и Фамилия пациента получающего услугу в указанное на кнопке время и они должны размещаться одна под другой иначе их просто не видно если в одну строку.
35. slavik_s 12.10.18 18:31 Сейчас в теме
еще интересует как отправлять кнопки ReplyKeyboard ? В сообщении?
38. stako8 18.01.19 08:21 Сейчас в теме
Может кто сталкивался: отправляю клавиатуру "bot******/sendMessage?chat_id=******&text=Меню&reply_markup={"inline_keyboard":[[{"text":"1","callback_data":"1"},{"text":"2","callback_data":"2"}]]}", она приходит пользователю, тот нажимает на не, но через "getUpdates" не приходит ответ что он нажал. Куда копать?
39. slavik_s 18.02.19 13:59 Сейчас в теме
(38)Через getUpdates ответ обязательно приходит, вопрос лишь в том какой ответ и кому. Может придти ошибка соединения, тогда нужно копать прокси. В ответе в реквизите Код Состояния при успешном исходе приходит код = 200. Когда пользователь нажал кнопку, то через getUpdates не ему а ВАМ (то есть БОТу) приходит КАКУЮ КНОПКУ ОН НАЖАЛ. На каком компьютере запрашиваете через getUpdates туда и приходит информация о нажатой кнопке. В вашем случает ответ будет 2 или 1. Далее вы программно обрабатываете какой ответ послать пользователю на телефон в зависимости от того какую кнопку 1 или 2 он нажал и отправляете ему ответ сформированный вашей программой или Ботом.
40. stako8 18.02.19 14:07 Сейчас в теме
(39) Это понятно, в getUpdates должно прийти CallbackQuery, но не приходит. Сообщения корректно приходят. Я вот думаю просто клавиатуру не правильно передаю. Кто то писал про кодировку и что туда передаётся какой то лишний символ и типо из-за него может telegram не понимать что отправить обратно боту в CallbackQuery(ответ от клавиатуры).
41. slavik_s 01.03.19 17:11 Сейчас в теме
(40) Пример кнопок, когда я писал календарь для выбора и отправки даты боту
Функция ЗаписатьJS(СтруктураJS) Экспорт

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто,,,ЭкранированиеСимволовJSON.СимволыВнеASCII));
ЗаписатьJSON(ЗаписьJSON,СтруктураJS);
Возврат ЗаписьJSON.Закрыть();

КонецФункции // ЗаписатьJS()

Процедура ОтредактироватьНаборКнопокДляВыбранногоМесяца(chat_id,message_id,ДатаВремя)
ПараметрыСоедин = ПолучитьПараметры();
HTTPСоединение = Telegram_Сервер.HTTPСоединениеTelegram(ПараметрыСоедин);
Назв = СимволЮникодаВУрл(128309);
Строки = Новый Массив;
ДеньСтарта = НачалоМесяца(ДатаВремя);
Завтра = ТекущаяДата() +86400;
ДеньСтарта = ?(Завтра > ДеньСтарта,Завтра,ДеньСтарта);
unixtime = Формат(ДатаВремя - Дата(1970,1,1,1,0,0),"ЧГ=0");
Ответ = "ВM;"+unixtime+"";
НазвМесяца = Формат(ДатаВремя,"ДФ= ""ММММ гггг 'г'""");
ГалкаЗеленая = КодироватьСтроку(Символ(9989), СпособКодированияСтроки.КодировкаURL);
Кнопка = Новый Массив;
InlineKeyboardButton = Новый Структура;
InlineKeyboardButton.Вставить("text",ГалкаЗеленая+" "+НазвМесяца);
InlineKeyboardButton.Вставить("callback_data",Ответ);
Кнопка.Добавить(InlineKeyboardButton); //новая кнопка в массив клавиатуры в строке
Строки.Добавить(Кнопка);
Кнопки = Новый Массив;
// строка дней недели
Для НомерДняНедели = 1 По 7 Цикл
Если НомерДняНедели = 1 Тогда
НазвКнопки = "пн";
ИначеЕсли НомерДняНедели = 2 Тогда
НазвКнопки = "вт";
ИначеЕсли НомерДняНедели = 3 Тогда
НазвКнопки = "ср";
ИначеЕсли НомерДняНедели = 4 Тогда
НазвКнопки = "чт";
ИначеЕсли НомерДняНедели = 5 Тогда
НазвКнопки = "пт";
ИначеЕсли НомерДняНедели = 6 Тогда
НазвКнопки = "сб";
ИначеЕсли НомерДняНедели = 7 Тогда
НазвКнопки = "вс";
КонецЕсли;
InlineKeyboardButton = Новый Структура;
InlineKeyboardButton.Вставить("text",НазвКнопки);
InlineKeyboardButton.Вставить("callback_data",НазвКнопки);
Кнопки.Добавить(InlineKeyboardButton); //новая кнопка в массив клавиатуры в строке
КонецЦикла;
Строки.Добавить(Кнопки); // добавили ряд кнопок с названиями дней недели
////////////////////////////////////////////////////////////­//////////////////////////
ТекДата = ДеньСтарта;
ПервыйПонедельник = ТекДата - (ДеньНедели(ТекДата)-1)*86400;
НомерМесяца = Месяц(ДатаВремя);
ТекДата = ПервыйПонедельник;
Для НомерСтрокиНедели = 1 По 6 Цикл
Кнопки = Новый Массив; //массив из 7 кнопок в ряд
КолВоКнопокСцифройВряду = 0;
Для НомерДняНедели = 1 По 7 Цикл
unixtime = Формат(ТекДата - Дата(1970,1,1,1,0,0),"ЧГ=0");
ТекНомерДняНедели = ДеньНедели(ТекДата);
ТекНомерМесяца = Месяц(ТекДата);
Если (ТекНомерМесяца = НомерМесяца) И (ТекДата >= Завтра) Тогда
НазвКнопки = День(ТекДата);
КолВоКнопокСцифройВряду = КолВоКнопокСцифройВряду + 1;
Иначе
НазвКнопки = " ";
КонецЕсли;
InlineKeyboardButton = Новый Структура;
InlineKeyboardButton.Вставить("text",НазвКнопки);
InlineKeyboardButton.Вставить("callback_data",unixtime);
Кнопки.Добавить(InlineKeyboardButton); //новая кнопка в массив клавиатуры в строке
ТекДата = ТекДата + 86400;
КонецЦикла;
Если КолВоКнопокСцифройВряду > 0 тогда
Строки.Добавить(Кнопки);
КонецЕсли;
КонецЦикла;

InlineKeyboardMarkup = Новый Структура;
InlineKeyboardMarkup.Вставить("inline_keyboard",Строки);
КнопкиJs = Telegram_Сервер.ЗаписатьJS(InlineKeyboardMarkup);
СтрокаСоединения = "bot" + ПараметрыСоедин.token + "/editMessageText?chat_id=" + chat_id +"&message_id=" + message_id+ "&text=Теперь выберите дату, когда Вы планируете приехать? Можете вернутся и к выбору "+ГалкаЗеленая+" месяца&reply_markup="+КнопкиJs+"&parse_mode=Markdown";
HTTPЗапрос = Telegram_Сервер.HTTPЗапросTelegram(СтрокаСоединения);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Если HTTPОтвет.КодСостояния <> 200 Тогда
Данные = Telegram_Сервер.ДесериализоватьJSON(HTTPОтвет.ПолучитьТелоКакСтроку());
Сообщить("редактор кнопок3 = "+Данные.description+"");
Возврат;
КонецЕсли;


КонецПроцедуры
43. Hobbit_Jedi 06.07.19 01:53 Сейчас в теме
А можно как-то сделать так, чтобы бот сам регистрировал свои команды у БотФазера?
А то тупо получается - их нужно и в исходном коде и в чате БотФазера дважды прописывать. И следить за синхронностью этих списков.
44. Hobbit_Jedi 06.07.19 12:39 Сейчас в теме
(43) Решил в полуавтоматическом режиме.
Боту включил (в настройках у БотФазера) режим инлайн-бота, и добавил (уже в коде бота) обработку инлайн запроса, в ответ на который бот выбрасывает текст с описанием своих команд, в виде, пригодном для БотФазера.
Получилось, что к БотФазеру нужно стучаться вручную. Вручную же набирать команду /setcommands. Вручную же указать имя бота, для которого устанавливаются команды. А потом делаем инлайн-запрос к нашему боту и он отдает список своих команд.
В любом случае удобнее, чем вручную все это молотить.
45. user775441 07.10.19 16:50 Сейчас в теме
Добрый день! Два вопроса:
1. Почему при нажатии на кнопку в боте он думает около 15 секунд - начинает крутиться колесико на кнопке. Хотя если дернуть данные сразу же, то оказывается, что ответ уже получен. То есть по факту ответ отправлен быстро, а пользователю кажется, что бот сильно тормозит. В чем может быть проблема?
2. Почему делаете интервал обновления регзадания 3 секунды, а не 1? Так ведь бот быстрее реагирует. Есть какие то ограничения?
46. PLAstic 291 07.10.19 16:53 Сейчас в теме
(45) Если честно, я вообще не думал, что бот будет использоваться в режиме getUpdates. С вебхуком реакция бота сводится к малозаметному минимуму.
Там механизм построен так, что одно рег.задание, общее для всех ботов, получает для всех сообщения, а другое - это задание самогО бота, которое анализирует наличие новых сообщений и обрабатывает их. Вроде так.
Соответственно, разница во времени между выполнением первого и второго - это и есть 15 секунд.
Ограничений нет на интервал, но я бы поставил тогда секунду именно паузой между выполнениями рег.заданий, чтобы при большой загрузке не было нахлёста заданий друг на друга. Не могу сформулировать, приведёт ли это к ошибкам, просто для гарантии поставил бы.
47. Rollam 06.11.19 13:58 Сейчас в теме
Добрый день!
Реализовал отправку сообщения с привязанной к нему Inline-клавиатурой. Ответы получаю через getUpdates.
Всё работает, за исключением одного нюанса: ответ на нажатие (callback_query) "живёт" ровно 2 минуты с момента нажатия пользователем (засекал), после чего исчезает, даже если не вызывать getUpdates до истечения 2-х минут.
Вам что-нибудь об этом известно? Информации по этому таймауту нигде нет.
48. Rollam 07.11.19 10:00 Сейчас в теме
(47) Пока что меня пытаются убедить в том, что такого не может быть и мне кажется.
49. PLAstic 291 07.11.19 10:44 Сейчас в теме
(47) Т.е. у клиента нет проблем с отправкой сообщений, он нажимает пункт, происходит регистрация на серверах телеги, но когда спустя 2 минуты мы делаем getupdates, то тычка там нет? А попробуйте нажать сначала один пункт клавиатуры, а спустя полторы минуты другой. И ещё спустя минуту проверить getupdates. В ответе будет только второй тычок или оба?
50. Rollam 07.11.19 11:12 Сейчас в теме
(49) Проверил. В ответе был лишь один "тычок", последний. Кажется, это "незадокументированная особенность".
51. Rollam 07.11.19 11:12 Сейчас в теме
(50) При этом простые текстовые сообщения, созданные менее 24 часов назад, возвращаются, как и ожидалось.
52. PLAstic 291 07.11.19 11:14 Сейчас в теме
(51) Да, скорее всего, есть TTL у callback_query, потому что они сами по себе не несут смысловой нагрузки и телега решила, что двух минут достаточно для получения. Иначе, если их хранить относительно долго, то весить они будут много.
53. rinik88 31 02.03.20 08:23 Сейчас в теме
Добрый день, вопрос, при отправке /comment приходит ответ, если ответить то заново приходит тот же ответ, не совсем понятно как он без записи в регистры понял что это именно та сессия или он не понял? в процедуре где оставить коммент запись в регистр закомментированы.
54. vit59 55 11.06.20 11:29 Сейчас в теме
Добрый день,

Спасибо за статью и небольшое дополнение

"Как описывалось выше, в случае со способом получения апдейтов getUpdates мы заинтересованы в как можно более стремительной реакции бота. Исходя из этого следует, что соединение с сервером телеги должно устанавливаться один раз и общение бота будет происходить в рамках этого соединения. Нюанс в том, что рег.задание создаёт фоновое задание каждые 3 секунды и новое фоновое задание создаётся в новой среде, которая не знает, что соединение уже установлено. Способ передачи HTTPСоединения между фоновыми заданиями я пока не нашёл. Создавал на форуме уже две темы и получал неприемлемые ответы. Поэтому пока могу предложить колхоз – установку соединения каждым фоновым заданием."

В рамках одного регл задания, можно использовать keep-alive и "вечный цикл", в цикле использовать одно и тоже HTTPСоединения,
установить условия выхода из цикла и может понадобиться искусственная пауза если в цикле нет данных для обработки,
т.е если данные есть, тогда данные обрабатываются в цикле, если после нескольких попыток или интервала времени данных нет, тогда выход из цикла и повторный запуск регл задания.
55. PLAstic 291 11.06.20 11:33 Сейчас в теме
(54) Это один из неприемлемых ответов. :)
На самом деле установка соединения не является значимой по времени, чтобы заморачиваться об этом. С getUpdates в принципе невозможно достичь нулевого отклика от бота.
56. user775441 02.09.20 15:11 Сейчас в теме
Добрый день! Система выдает ошибку "{"ok":false,"error_code":409,"description":"Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first"}" - подскажите, как это исправить?
57. PLAstic 291 02.09.20 16:40 Сейчас в теме
Так там же всё написано. Вариантов получения обновлений два. У вас установлен вебхук, поэтому гетапдейтс вы использовать не можете. Удалите сначала вебхук.
58. schanya 13 23.09.20 17:02 Сейчас в теме
Добрый день! А как удалить кнопку из чата? Как правильно использовать ReplyKeyboardRemove?
59. schanya 13 24.09.20 16:42 Сейчас в теме
62. simuljakr 199 02.05.21 15:42 Сейчас в теме
(58) У меня та же проблема. Можете написать как решили?
63. schanya 13 06.05.21 09:47 Сейчас в теме
(62)
Процедура УдалитьКнопки(ИмяБота, СтруктураСообщения) Экспорт
КнопкиJs = СформироватьJSON(Новый Структура("ReplyKeyboardRemove"));

ID_Пользователя = СтруктураСообщения.from.id;
СтруктураНастроек = ПолучитьНастройкиTelegram(ИмяБота);
Приемник = "bot" + СтруктураНастроек.token + "/sendMessage?chat_id=" + СтрЗаменить(Формат(ID_Пользователя, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text=" + "Принято!" + "&reply_markup="+КнопкиJs;
HTTPСоединение = Новый HTTPСоединение(СтруктураНастроек.api,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос(Приемник);
Ответ = HTTPСоединение.Получить(HTTPЗапрос);
КонецПроцедуры

Функция СформироватьJSON(СтруктураДанных, ФормироватьСПереносами = Ложь)
ЗаписьJSON = Новый ЗаписьJSON;
Если ФормироватьСПереносами Тогда
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
Иначе
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, Символы.Таб));
КонецЕсли;
НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON;
НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением;
НастройкиСериализацииJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
ЗаписатьJSON(ЗаписьJSON, СтруктураДанных, НастройкиСериализацииJSON);
Возврат ЗаписьJSON.Закрыть();
КонецФункции
simuljakr; +1 Ответить
64. simuljakr 199 06.05.21 09:52 Сейчас в теме
65. schanya 13 06.05.21 10:39 Сейчас в теме
(64) Давно уже не занимался telegram, если пример не сработает, попробуйте
КнопкиJs = СформироватьJSON(Новый Структура("remove_keyboard", Истина));
simuljakr; +1 Ответить
67. simuljakr 199 06.05.21 10:52 Сейчас в теме
(65)
КнопкиJs = СформироватьJSON(Новый Структура("remove_keyboard", Истина));


ЗАРАБОТАЛО!!!!
СПАСИБО!!!!
68. simuljakr 199 07.06.21 12:56 Сейчас в теме
(65), а случайно не знаете - можно ли сделать бота "закрытым" - чтобы неизвестные пользователи не могли ему отправлять сообщения?

Понятно, что это можно реализовать на стороне 1С - проверять ID отправителя - и отвечать только тем, чьи ID добавлены в список доверенных.... Но мне хотелось бы заблокировать эту возможность раньше - на уровне Телеграм - чтобы незнакомые пользователи не могли даже отправить боту сообщение. Типа как закрытый аккаунт в ВК.
69. schanya 13 07.06.21 14:30 Сейчас в теме
(68) Не знаю. Думаю, нужно читать документацию к Telegram.
66. simuljakr 199 06.05.21 10:49 Сейчас в теме
60. maksa2005 407 25.09.20 15:05 Сейчас в теме
Случайно не знаете как передать в
 {
            "keyboard": [[
                 {
                       "text": "Список задач",
                       "callback_data": "/g1"            
                   }, 
                   {
                       "text": "Создать задачу",
                       "callback_data": "/g2"            
                   }],[{
                       "text": "Главное меню",
                       "callback_data": "/g3"            
                   }]
            ]
        }
Показать

callback_data - передать json. По умолчанию string и длина 100 (вроде)
Суть такова чтобы отправить js и его получить в составе сообщения.
61. user1590519 27.04.21 19:24 Сейчас в теме
Статья актуальна? У меня вылезает ошибка
getUpdates : Conflict: can't use getUpdates method while webhook is active
. Как бороться?

И ещё вопрос. Я вообще питонист, но жизнь заставила переехать, и в моём городе сплошь 1С-разработчики требуются. Стало открытием, что на 1С, оказывается, можно даже телеграм бота запилить! Я написал себе Telegram бота на питоне с использованием библиотеки pyTelegramBotAPI. Бот ежедневно парсит вакансии по заданным параметрам. Но мне нужно практиковаться с 1С, и вот интересно, можно ли переписать его по образу и подобию, но на 1С? Я могу скинуть сюда код, чтобы вы посмотрели?
70. GorkyGorod 13.10.21 13:02 Сейчас в теме
(61) ВАШ бот использует веб-хуки, удалите веб-хук перед использованием метода получения данных "Периодический запрос"
Оставьте свое сообщение

См. также

SALE! 25%

Конструктор ботов Телеграм, редакция 2

Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

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

15000 11250 руб.

18.06.2021    46617    227    229    

286

Платформа интеграции 1С с чат-ботами (Telegram, Viber, Instagram, ICQ, Facebook, ВКонтакте, Skype, Одноклассники, Яндекс.Алиса, WhatsApp, Verbox, Jivochat)

Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Мощный модуль для интеграции 1С с чат-ботами: Telegram, Viber, Viber Business, Instagram, ICQ, Facebook, Vkontakte, Skype, Одноклассники, Яндекс.Алиса, WhatsApp, WhatsApp Business, а так же виджеты чата для сайтов: Verbox, Jivochat. Это универсальное и эффективное решение с большими возможностями, простым интерфейсом, наличием визуального конструктора, базовыми сценариями поведения из коробки, позволяющий запустить чат-ботов в течении 1-го дня.

29000 руб.

08.10.2019    52800    41    0    

142

Интеграция 1С и WhatsApp (Ватсап)

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

WhatsApp — самый популярный мессенджер не только в России, но и во всем мире. Его установили более 70% москвичей и 59% пользователей смартфонов по всей стране (по данным института современных медиа MomriInstitute).

9600 руб.

02.07.2018    90831    195    239    

165

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов

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

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

13200 руб.

27.12.2021    24479    61    129    

151

Email, SMS, Telegram рассылки из 1С - Директ Маркетинг

Управление взаимоотношениями с клиентами (CRM) Мессенджеры и боты SMS рассылки Email рассылки Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Полный набор инструментов для качественных транзакционных и маркетинговых Email, SMS, Telegram рассылок из 1С

7788 руб.

07.04.2014    79164    35    188    

122

Интеграция Whatsapp / Instagram c 1C через сервис Wazzup (расширение, для УНФ 1.6 / УНФ 3.0, УТ 11, КА 2, ERP 2 (все версии), платформа 8.3.14)

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

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

14400 руб.

30.11.2020    9570    6    13    

12

Личный кабинет сотрудника для ЗУП 3.1 в Telegram

Зарплата Учет рабочего времени Кадровый учет Мессенджеры и боты Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

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

9600 руб.

21.03.2022    10257    8    10    

17

Легкий документооборот (+чат-бот для Telegram)

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

Расширение для согласования справочников и документов в конфигурациях "1С: Бухгалтерия 3.0", "Управление нашей фирмой", "1С ERP Управление предприятием". Ролевая адресация, условная маршрутизация, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для абонентов 1cfresh.com. Сертификат 1С-Совместимо. Расширение входит в TOP устанавливаемых на 1cfresh.com https://dev.1cfresh.com/

14900 руб.

15.11.2018    20022    14    45    

42

Интеграция 1С с телефонией и чатами WhatsApp и Telegram

Телефония, SIP Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Россия Управленческий учет Платные (руб)

Интеграция 1С с телефонией и чатами WhatsApp и Telegram автоматизирует работу оператора со звонками и чатами и добавит вашей 1С элементы CRM системы. Храните всю историю взаимоотношений в 1С, не теряйте звонки, скачивайте, прослушивайте в любое время из карточки клиента или журнала звонков, держите руку на пульсе, используя блок отчетов по звонкам. Интегрируйте вашу 1С и чатами WhatsApp и Telegram, общайтесь с клиентами с единого номера и в одном окне. Теперь чаты с клиентами хранятся в карточке партнера в 1С, а не в личных мобильных ваших менеджеров.

4100 руб.

28.04.2022    8247    2    5    

22

Расширение "Интеграция Viber"

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Расширение "Интеграция Viber" для конфигураций "Управление небольшой фирмой для Украины", "BAS Small business", "Управление нашей фирмой" (при небольших доработках подойдет практически к любой конфигурации на тонком клиенте). Научим свою 1С управлять Viber-ботом, и не одним, а сколько душе угодно...

4200 руб.

29.01.2020    13161    8    11    

17

Заготовка для использования технологии GPT в 1С

Идеи и тренды в разработке Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

10 стартмани

25.05.2023    4054    4    mkalimulin    28    

19

ChatGPT и 1С

Идеи и тренды в разработке Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже несколько месяцев в сети шумят разговоры о чат-боте ChatGPT, я решил не оставаться в стороне и тоже поинтересовался, что это за штуковина, чем она может быть полезна и пора ли искать новую работу программистам, копирайтерам, а заодно и дизайнерам, которых вот-вот подсидит Midjorney?

16.05.2023    8628    300_po_vstrechke    31    

63

Интернет-магазин в Телеграм

Мессенджеры и боты Сайты и интернет-магазины Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Как мы создали продающий в Телеграм интернет-магазин с возможностью оплаты online для карт банков России.

15.05.2023    788    wrooom    0    

13

Закрытие месяцев за период с отправкой результата в телеграм для КА, УТ

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

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

1 стартмани

15.05.2023    2023    5    itcorpru    2    

3

Чат GPT (OpenAI) + генератор изображений

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для взаимодействия с известным в последнее время "искусственным интеллектом", созданным OpenAI, включающая в себя генерацию изображений и чат-бота.

5 стартмани

10.04.2023    4449    5    Jokstr    4    

4

ChatGPT в 1С для самых маленьких

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример использования в 1С примитивного чата с ИИ на движке ChatGPT.

3 стартмани

30.03.2023    6564    11    SerVer1C    34    

15

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

Мессенджеры и боты Бесплатно (free)

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

23.03.2023    2589    ivanov660    4    

34

Автоответчик для мессенджера WhatsApp, с искусственным интеллектом ChatGPT

Мессенджеры и боты Россия Абонемент ($m)

Автоответчик для мессенджера WhatsApp, с искусственным интеллектом ChatGPT Умеет: - автоматически отвечать на сообщения пользователей, с использованием искусственного интеллекта ChatGPT - понимает русский (любой) язык - отвечать на русском (любом) языке - отвечать от имени мужчины (женщины) - не отвечает в групповых чатах

1 стартмани

12.03.2023    2084    3    ManyakRus    3    

8

Расширение "ИНФОБАЗА. Интеграция с OpenAI" - ChatGPT в 1С

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Беларусь Россия Абонемент ($m)

Расширение "ИНФОБАЗА. Интеграция с OpenAI" позволяет использовать языковую модель ChatGPT прямо из 1С (конфигурация 1С Управление компанией для Беларуси).

1 стартмани

02.03.2023    2766    29    NikitaXa    8    

8

Робот рассылки по WhatsApp

Мессенджеры и боты Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Обработка рассылки использует локальное EXE-приложение WhatsApp, а именно активацию отправки через переход по навигационной ссылке вида whatsapp://send?phone=79ххххххх12&text=TEXT, затем ждет секунду и делает SendKey(ENTER) для запуска отправки сообщения, и так далее по всем строкам таблицы.

1 стартмани

28.02.2023    2167    3    user739143    2    

6

Мессенджер Avito для 1С:CRM

Мессенджеры и боты Платформа 1С v8.3 1С:CRM ПРОФ, КОРП Россия Управленческий учет Абонемент ($m)

Добавление канала диалогов для 1С:CRM из популярного сайта объявлений.

10 стартмани

26.02.2023    1898    3    andryandry    6    

3

Чат "Беседка" на управляемых формах

Мессенджеры и боты Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

02.02.2023    2199    5    user-sergey    14    

4

Telegram: Согласование заявок на расходование денежных средств

Бюджетирование и планирование Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Расширение конфигурации для согласования заявок на расходование денежных средств через чат бот Telegram. Проверено на платформе 1С:Предприятие 8.3 (8.3.22.1750). Проверено на конфигурациях: 1С:ERP Управление предприятием 2 (2.5.10.74), Управление торговлей, редакция 11 (11.5.10.52).

10 стартмани

24.01.2023    2888    16    Pira    2    

9

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

Мессенджеры и боты Бесплатно (free)

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

12.01.2023    1690    Anton64    2    

18

Взаимодействие с сотрудниками и клиентами из одного окна конфигурации 1С (Телеграм, ВКонтакте, Facebook, Discord). Преимущества, технические особенности, подводные камни

Мессенджеры и боты Бесплатно (free)

Мессенджеры есть в телефоне у всех активных пользователей программ. И если мы хотим оперативно взаимодействовать через 1С со своими клиентами или сотрудниками, у нас появляется обоснованная причина интегрировать нашу конфигурацию с различными мессенджерами. О том, как технически решить задачу такой интеграции, настроить логирование и отобразить чат «единого окна» в интерфейсе 1С:Предприятия, на митапе «Мессенджеры и 1С» рассказал системный архитектор сервиса 1С:БухОбслуживание Матвей Серегин.

10.01.2023    2430    Akcium    2    

18

Работа с Telegram Bot для 1С

Мессенджеры и боты Платформа 1С v8.3 8.3.14 Конфигурации 1cv8 Россия Абонемент ($m)

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

2 стартмани

26.12.2022    2971    4    user1540741    0    

1

Получение отчетов из 1С в Телеграм с помощью расширения Боцман

Мессенджеры и боты 8.3.14 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, реализующая функционал получения выбранных отчетов 1С через Телеграм-бот. Параметры отчетов также можно задавать через бот перед формированием отчета или использовать предустановленные параметры. Выбор отчетов, предустановленных параметров и параметров для установки происходит стандартными средствами БСП. Демо этой обработки работает в телеграм: @Telega1C_Bot по адресу: https://t.me/Telega1C_Bot

3 стартмани

07.12.2022    2580    10    DrWeb3    14    

6

Работа с API Rocket.Chat из 1С - Отправка сообщений и файлов, получение списков каналов и пользователей

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Rocket.Chat - опенсорсный корпоративный чат. Может рассматриваться в качестве альтернативы Slack. Существует возможность установить собственный сервер, что очень актуально в свете текущей геополитической обстановки.

5 стартмани

11.11.2022    3325    9    madonov    3    

9

[FREE] Библиотека для интеграции 1С с Whatsapp шлюзом (API) "Whatsgate"

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Функционал библиотеки позволяет полностью манипулировать элементами системы "Whatsgate" (Например: отправить сообщение с прикрепленным файлом, получить чаты и т.д.). Это позволит вам разработать множество интересных и полезных решений, начиная от интеграции с типовыми решениями и заканчивая целыми CRM системами!

1 стартмани

03.11.2022    3465    13    TheNabiulla    0    

9

Telegram бот для ЗУП 3.1 (Telegram bot)

Мессенджеры и боты Сложные периодические расчеты 8.3.14 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Бот предназначен для получения информации по сотрудникам из БД ЗУП: "Расчетный листок" и количество отработанных смен за выбранный месяц. Реализован в виде расширения конфигурации Зарплата и управление персоналом, редакция 3.1.

1 стартмани

30.09.2022    3952    16    dima-2828    19    

6

Уведомления в Телеграмм со ссылкой на любой документ

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Добавление кнопки [Уведомление в Telegram] во все формы справочников и документов. Уведомления можно использовать для согласований или для технической поддержки. Крайне простая установка и настройка.

1 стартмани

20.09.2022    6279    27    wrooom    25    

33

Обмен данными между базами 1С посредством передачи сообщений

Обмен между базами 1C Мессенджеры и боты Платформа 1С v8.3 Абонемент ($m)

Разбор примера демо-реализации группового чата с использованием стороннего сервиса. Цель, - знакомство с некоторыми функциями платформы DESP. Вопросы эффективности и безопасности не затрагиваются. Исполняемый код серверной части платформы не представлен в данной публикации, но выполняется в "облаке", в демо-режиме.

1 стартмани

12.07.2022    3626    0    kodkraft    0    

2

Бесплатная отправка сообщений в Whatsapp бот из 1С

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: Имеются 200 контрагентов, которым ежедневно нужно из отчета 1С выслать сумму их задолженности или предоплаты в Whatsapp (рассылка должна идти с номера менеджера этих контрагентов).

2 стартмани

08.06.2022    11466    48    John_d    48    

143

История развития телеграм-ботов в одной сибирской компании

Идеи и тренды в разработке Мессенджеры и боты Бесплатно (free)

Хочу рассказать историю развития и применения Telegram-ботов в одной компании. Говорить буду о том, что сделано, а не как сделано. Идея написать об этом возникла, так как, делясь опытом с коллегами, неожиданно обнаружил, что реализованные фичи вызывали немалое удивление, по принципу: "А так можно было?". Надеюсь, мой рассказ будет вам полезен и вдохновит на создание чего-нибудь занятного.

28.03.2022    2020    zeltyr    2    

13

Отправка сообщений в своей группе Телеграм (telegram)

Мессенджеры и боты Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Простой инструмент для отправки сообщений в телеграм из 1С (бесплатно).

22.03.2022    6131    317    e9504100606    13    

25