Подключить телеграмм бота к базе данных 1с что бы показывал остаток товара
Задача:
Создать телеграм бота и научится работать с ним в «1С:Предприятие 8», через long polling и webhooks, используя Telegram bot API.
02.04.2021 Обновлено:
— Добавлено видео «Интеграция 1С с Telegram за 12 минут», где показано как с помощью системы взаимодействия работать с телеграм ботом.
В результате, будет сформирован токен доступа, который необходимо сохранить и держать в секрете, а созданного бота добавить себе в приложение «Телеграм».
2. Два способа работы с телеграм ботом.
При помощи «Telegram Bot API», есть два взаимоисключающих способа работы с телеграм ботом:
- Метод «getUpdates» – самостоятельно, выполняем запрос получения новых обновлений.
- Использование «Webhooks» – обновления приходят автоматически от сервера, на указанный URL-адрес.
Ответ приходит в виде JSON, не обработанные обновления хранятся на сервере до тех пор, пока бот их не получит, но они не будут храниться дольше 24 часов.
3. Подготовка конфигурации.
3.2 Создаем пустую (вспомогательную) конфигурацию и выполняем «Загрузить конфигурацию из файлов…», используя папку «src» (см. п. 3.1):
Коннектор: Загрузка конфигурации
Перенос общего модуля
3.4 Создаем константу «Токен» (тип «Строка», длина 100) и сохраняем в ней полученный токен из п. 1.
3.5 Добавляем подсистему и обработку «РаботаСБотом».
3.6 В обработке добавляем форму, далее реквизит формы «Журнал» (тип «ТекстовыйДокумент») и команду «ТестТокена», для которой создаем функцию обработчик с директивой «&НаСервереБезКонтекста». В обработчике, отправляем запрос к методу API «getMe» — который используется для проверки токена аутентификации и возвращает основную информацию о боте:
4. Метод «getUpdates».
Из 1С, самостоятельно, периодически обращаемся к методу API «getUpdates», для получения 100 самых ранних неподтвержденных (не полученных ранее) обновлений, в виде JSON объекта «Update».
4.1 На форму обработки, добавляем команду «Обновить» и функцию обработчик с директивой «&НаСервереБезКонтекста». Перед отправкой запроса, при необходимости заполняются параметры:
offset | Идентификатор возвращаемого обновления — каждое обновление имеет свой числовой идентификатор «update_id». |
limit | Ограничивает количество получаемых обновлений. Принимаются значения от 1 до 100. |
timeout | Тайм-аут в секундах для длительного опроса. |
allowed_updates | Задается список типов обновлений, которые должен получать бот. |
Для нашего примера, будет заполнен только параметр offset равным 0, для того чтобы получить все не обработанные обновления. Процедура обработки команды «Обновить» на клиенте:
Методы «ОбновитьНаСервере» и «ОбработатьОбновление»:
5. Использование «Webhooks»
5.4 Откройте «Open Server Panel», но не запускайте, должен быть красный флажок. В конфигураторе открыть, меню «Администрирование – Публикация на веб-сервере…» выбрать каталог и нажать «Опубликовать», без перезапуска веб-сервера.
Их нужно сохранить в шаблоне «C:\OpenServer\userdata\config\Apache_2.4-PHP_7.2-7.4_server.conf», для того чтобы при следующем запуске «Open Server» они не затерлись.
Для проверки воспользуемся приложением «Postman»:
В результате, внутренние локальные сервисы, станут доступны для внешнего взаимодействия:
Postman test ngrok
Для эксперимента, попробуем это сделать через «Postman»:
Для удаление webhook и переход на метод «getUpdates», достаточно вызвать метод «deleteWebhook»:
Теперь схема работы выглядит следующий образом:
блок "сallback_query" как раз говорит нам о нажатии на такую кнопку, в нем будет содержаться информации о коде нажатой кноки, в нашем примере это "1" или "2"
далее обратабываем так как нам надо
Специальные предложения
(3) В заголовке статьи написано: " создаем бота. " -, я ожидал увидеть описание процесса, а что видим внутри? ссылки на другие статьи, где описан процесс, а все что ваше личное упрятано в обработку. Поэтому я делаю такой вывод. Правильней звучало бы "Пример использования бота Telegram".
(4) Добавил тексты основных процедур
Хотел описать, но код вроде настолько простой что вроде и объяснений не надо
Мнение одного специалиста, который делал и для ФБ (на php), и для телеграм (он писал мне в личку, поэтому имя не публикую):
На 1С не делал, делал на php. но там чуть чуть меньше возможностей, есть ограничения и т.д. В принципе можно на php запустить на сайте готовый какой нить движок работы с фейсбуком, и написать для него АПИ интерфейса для 1с. Это самое простое решение будет
В результате чтения публикации Вы получите готовую внешнюю обработку, позволяющую получать из 1С данные, запрашиваемые через Telegram.
В данной статье рассмотрим следующее:
Для начала, зарегистрируем бота, получим его id - токен. В Telegram для этого создан специальный бот — @BotFather.
Добавляем его в контакт. Получаем получаем список его команд, написав ему /start.
Этого, в принципе, достаточно.
2. Создание обработки в 1С
Создадим внешнюю обработку. Добавим реквизиты обработки строковый переменной длины «Бот», «Токен», «Сервер».
Т.к. обработку не будем привязывать к конкретной конфигурации, то список понимаемых команд будем хранить в табличной части обработки «ТаблицаПонимаемыхКоманд» (а так, в принципе, команды можно хранить в справочнике конфигурации).
Реквизиты ТЧ строковые: «Имя», «ВыполняемоеДействие», «Параметр», «Описание»
Команды пользователя (те, которые он буде писать боту) по той же причине будем хранить в табличной части «КомандыПользователей» (если не делать обработку универсальной, то, конечно, предпочтительно использовать регистр сведений – далее, в листингах кода укажем примеры и для регистра сведений тоже).
Реквизиты ТЧ: числовые «chat_id», «date», булево «Выполнено» и строковый «Команда».
Теперь создадим управляемую форму обработки, назначим ее основной и разместим реквизиты «Бот» и «Токен» (необязательно, но для наглядности):
Также создадим реквизит формы «Дерево» – тип «ДеревоЗначений». В нем будут отображаться чаты. Для наглядности выведем его на форму. Колонки дерева создадим программно (см.далее).
Для события формы ПриСозданииНаСервере добавим процедуру:
Если Вы используете версию 1С 8.3.6 и выше, то в процедуре ПрочитатьДвоичныеДанныеОтвета() будем использовать новый объект ЧтениеJSON()
.
В процедуре ЗаполнитьРС() будем заполнять табличную часть «КомандыПользователей» (или же регистр сведений). (код процедуры далее).
Процедура ЗаполнитьСтруктуруИзОтветаJSON() заполняет дерево чатов:
Если Вы используете версию 1С ниже 8.3.6 то процедура ПрочитатьДвоичныеДанныеОтвета() будет такой:
Как уже было сказано, в процедуре ЗаполнитьРС() будем заполнять табличную часть «КомандыПользователей» (или же регистр сведений). (код процедуры далее).
Процедура ЗаполнитьСтруктуруИзОтветаJSON() – это парсер JSON и рекурсивное заполнение дерева для версии ниже 1С 8.3.6:
Теперь опишем процедуру, заполняющую табличную часть «КомандыПользователей» либо регистр сведений:
Если вы будете использовать регистр сведений (я назвал его «КомандыПользователей»), то закомментируйте/разкомментируйте соответствующие участки кода.
Обратите внимание, что если версия ниже 1С 8.3.6, то в коде переменную Параметр надо преобразовать из Юникода (этот участок обозначен в коде в комментарии - разкомментируйте его):
Для этого используем две функции Юникод – парсер (он нужен только для версии 1С ниже 8.3.6):
В процедуре ЗаполнитьРС() вызывается функция ВыполнитьКомандуБота(ЗаписьРегистра, Параметр), где ЗаписьРегистра – это строка табличной части ТаблицаПонимаемыхКоманд (либо запись Вашего регистра сведений). Параметр – параметр команды (то что написал боту пользователь).
- о версии операционной системы;
- о версии используемого 1С:Предприятия 8 в формате ....(например, 8.2.9.200);
- Уникальный идентификатор клиента. Для данного компьютера и данного пользователя операционной системы идентификатор один, вне зависимости от информационной базы и пользователя информационной базы;
- о веб-браузере (userAgent);
- о размере оперативной памяти;
- Идентификатор процессора;
- тип платформы, в рамках которой осуществляется работа.
Для того, чтобы все работало автоматом лучше использовать фоновое задание. Но так как наша Обработка не привязана к конкретной базе данных и к конкретной конфигурации. То подключим обработчик ожидания.
Создадим команду формы «ЗапускФоновыхЗаданий», разместим соответствующую кнопку на форме. Обработчик команды:
Вот и все – Обработка прилагается.
Отдельное спасибо пользователю Инфостарт igo1 - перекодировка из Юникода (Unicode) в строку.
Для начала зарегистрируем бота, получим его id - токен. В Telegram для этого создан специальный бот — @BotFather. Добавляем его в контакт. Получаем получаем список его команд, написав ему /start.
Этого, в принципе, достаточно.
2. Создание обработки в 1С
Создадим внешнюю обработку. Добавим реквизиты обработки строковый переменной длины «Бот», «Токен», «Сервер».
Т.к. обработку не будем привязывать к конкретной конфигурации, то список понимаемых команд будем хранить в табличной части обработки «ТаблицаПонимаемыхКоманд» (а так, в принципе, команды можно хранить в справочнике конфигурации).
Реквизиты ТЧ строковые: «Имя», «ВыполняемоеДействие», «Параметр», «Описание»
Команды пользователя (те, которые он буде писать боту) по той же причине будем хранить в табличной части «КомандыПользователей» (если не делать обработку универсальной, то, конечно, предпочтительно использовать регистр сведений – далее, в листингах кода укажем примеры и для регистра сведений тоже).
Реквизиты ТЧ: числовые «chat_id», «date», булево «Выполнено» и строковый «Команда»
Теперь создадим управляемую форму обработки, назначим ее основной и разместим реквизиты «Бот» и «Токен» (необязательно, но для наглядности):
Также создадим реквизит формы «Дерево» – тип «ДеревоЗначений». В нем будут отображаться чаты. Для наглядности выведем его на форму. Колонки дерева создадим программно (см.далее).
Для события формы ПриСозданииНаСервере добавим процедуру:
Если Вы используете версию 1С 8.3.6 и выше, то в процедура ПрочитатьДвоичныеДанныеОтвета() будем использовать новый объект ЧтениеJSON().
В процедуре ЗаполнитьРС() будем заполнять табличную часть «КомандыПользователей» (или же регистр сведений). (код процедуры далее).
Процедура ЗаполнитьСтруктуруИзОтветаJSON() заполняет дерево чатов:
Если Вы используете версию 1С ниже 8.3.6 то процедура ПрочитатьДвоичныеДанныеОтвета() будет такой:
Как уже было сказано, в процедуре ЗаполнитьРС() будем заполнять табличную часть «КомандыПользователей» (или же регистр сведений). (код процедуры далее).
Процедура ЗаполнитьСтруктуруИзОтветаJSON() – это парсер JSON и рекурсивное заполнение дерева для версии ниже 1С 8.3.6:
Теперь опишем процедуру, заполняющую табличную часть «КомандыПользователей» либо регистр сведений:
Если вы будете использовать регистр сведений (я назвал его «КомандыПользователей»), то закомментируйте/раскомментируйте соответствующие участки кода.
Обратите внимание, что если версия ниже 1С 8.3.6, то в коде переменную Параметр надо преобразовать из Юникода (этот участок обозначен в коде в комментарии):
Для этого используем две функции Юникод – парсер (он нужен только для версии 1С ниже 8.3.6):
В процедуре ЗаполнитьРС() вызывается функция ВыполнитьКомандуБота(ЗаписьРегистра, Параметр), где ЗаписьРегистра – это строка табличной части ТаблицаПонимаемыхКоманд. Параметр – параметр команды (то, что написал боту пользователь).
Вот и все – обработка прилагается.
Отдельное спасибо пользователю Инфостарт igo1 - перекодировка из Юникода (Unicode) в строку.
Основу для построения чата для версии 1С ниже 8.3.6 (парсер JSON) получил отсюда
UPD. В комментариях был задан вопрос " как отправлять файлы ".
Вот текст процедуры, которая выполняет отчет "Продажи" (на СКД), сохраняет результат в Excel и отправляет в Telegram:
? возникает ошибка типа Ошибка при вызове метода контекста (ОбъединитьФайлы)
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
по причине:
Ошибка сборки файла
по причине:
Ошибка совместного доступа к файлу 'C:\Users\Гуру\AppData\Local\Temp\v8_7B5A_12.txt'
(163) А зачем посылать клавиатуру в тот момент когда отсылаем картинку? В момент отправки картинки на сервер Телеграм, он возвращает уникальный номер картинки, поэтому в дальнейшем достаточно покупателю отсылать этот номер, а сервер находит вашу картинку и посылает её. Порядок работы нужно изменить. Сначала отсылаем ВСЕ КАРТИНКИ и получаем их номера из Телеграм и записываем их у себя в базу. А теперь имея номер картинки посылаем file_id и подпись под картинкой и необходимую клавиатуру, то есть манипулируем уже не картинками, а номерами file_id. Об этом же все написано в документации Телеграм Bot API.
Ух, жесть какая-то :)
Все больше на ИС обработок скрещивания1С и прочего и прочего :)
Это замечательно, но напоминает анекдот о том, как британские ученые скрещивали слона и слона, не для пользы, а так просто, "позырить" :)
- я так частенько от наработок других программистов что-то интересное для себя нахожу, поэтому и сам готов поделиться.
Luchik , отличная статья, толково и не затянуто. Надо будет поэкспериментировать с Telegram, а то раньше все руки не доходили разобраться.
Спасибо, "плюс в репу".
(198) Кто за прогресс, за развитие науки и технологий, тот, кто и сам занимается этим развитием в 1С, не может быть резистом.
Телеграм это тема! Жаль что у меня сервер в закрытой сети, так бы тоже нашел применение. Автору респект за труды и статью.
Столкнулся вот с такой ошибкой:
: Ошибка при вызове метода контекста (ПрочитатьДвоичныеДанныеОтвета)
ПрочитатьДвоичныеДанныеОтвета(ДвоичныеДанныеОтвета);
по причине:
Переполнение стека встроенного языка на сервере
по причине:
Обработка.ТелеграммБот.Форма.Форма.Форма : 32 : СформироватьДерево(ДеревоЗн, ДеревоЗн, ЧтениеJSON);
Обработка.ТелеграммБот.Форма.Форма.Форма : 71 : СформироватьДерево(Дерево, НовСтр, ЧтениеJSON);
Обработка.ТелеграммБот.Форма.Форма.Форма : 75 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON, ЧтениеJSON.ТекущееЗначение);
Обработка.ТелеграммБот.Форма.Форма.Форма : 83 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON);
.
Обработка.ТелеграммБот.Форма.Форма.Форма : 75 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON, ЧтениеJSON.ТекущееЗначение);
Обработка.ТелеграммБот.Форма.Форма.Форма : 83 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON);
Обработка.ТелеграммБот.Форма.Форма.Форма : 75 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON, ЧтениеJSON.ТекущееЗначение);
Обработка.ТелеграммБот.Форма.Форма.Форма : 0
по причине:
Переполнение стека встроенного языка на сервере
(97) Проблему решил следующим образом:
(100) Я давал выше вариант, при котором никаких проблем нет. Уже несколько ботов сделал и они прекрасно работают.
(104). не нашел ваш вариант решения ошибки "Переполнение стека встроенного языка на сервере ", который вы давали выше. Могли бы вы продублировать?
Вторая
Опрашиваем через GetUpdates - пишем в регистр ID, текст, ChatID и статус - отвечено или нет
ну а потом просто сравниваем то что пришло и отвечено - игнорим, то что пришло и не отвечено отвечаем и пишем статус.
(30) iolko, Да, я как раз выбрал первый способ!
Теперь я задумался над авторизацией пользователя, для открытия доступа к командам бота.
Никто не знает, как можно пограммно провести аудентификацию пользователя?
(31) TreeDogNight, Легко. если пользователь отправляет команду, допустим MyId - то отправляешь ему Его ID дальше ручками вносишь ее в спр пользователи.
а потом уже, чтобы отсеить ненужных проверяешь если ChatId есть в спр пользователей - велком , если нет ну не судьба тогда )))
Это первый вариант - при котором можно использовать первый вариант получения обновлений.
2 вариант - придумка для корпоративных систем (с которым нужно использовать второй вариант получения обновлений) - запрос на добавление, запоминаем ID и просим ввести адрес корпоративной почты, отправляем на этот адрес какой то сгенерированый ПИН, и ждем подтверждения.
(31) TreeDogNight, Ну и Вам адресую этот вопрос)
Есть ли варианты кроме перебора дерева с поиском значения message_id?
Теперь у меня встал новый вопрос. Как вывести клавиатуру?
Как я понял, мы должны передать в метод sendMessage сериализованную JSON-структуру, но к сожалению примеров этой структуры нигде не приводится.
Но к сожалению клавиатура не появилась. Либо текст JSON неправильно сформировали, либо его нужно сувать не в заголовки.
Всё, наконец разобрался с этой клавиатурой!
Оказывается текст с параметрами нужно было приклеить к строке с ресурсмом и установить как тело запроса!
Вот код:
Kireno; maksa2005; mevgenym; AlX0id; JohnyDeath; ui69; rayastar; Renegade; Anchoret; madonov; METAL; WanGoff; _also; Luchik; eskor; + 15 – Ответить
Подскажите как вывести фото с кнопками обратной связи?
Фото получается отослать, а вот вывести вместе с клавиатурой вообще никак.
Легко. если пользователь отправляет команду, допустим MyId - то отправляешь ему Его ID дальше ручками вносишь ее в спр пользователи.
а потом уже, чтобы отсеить ненужных проверяешь если ChatId есть в спр пользователей - велком , если нет ну не судьба тогда )))
также обернуть число chat_id в обертку
Теперь можно вызывать процедуру ПрочитатьДвоичныеДанныеОтвета, передавая ей текстовую строку. Зачем? Чтобы не записывать эти двоичные данные в файл и не читать из него назад:
Испытал удивление от потэгового анализа JSON. Есть функция ПрочитатьJSON(), которая в структурированном виде считывает весь пакет:
До этого я долгое время занимался разработкой чат-ботов на php, но поскольку на 1С сижу тоже достаточно плотно - возникла идея, почему бы не написать небольшое расширение для интеграции 1С с популярным, а нынче даже разрешенным и всячески поощряемым к использованию мессенджером Телеграм.
Настройка веб-сервера выходит за рамки этой статьи. Скажу только, что при настройке вы можете использовать сертификат подписанные удостоверяющим центром (например я использую бесплатные сертификаты Let's Encrypt) или создать свой, самоподписанный сертификат. Во втором случае вам нужно будет дополнительно нажать кнопку "Сертификат. " и вставить в открывшееся окно открытый ключ вашего сертификата начиная с -----BEGIN CERTIFICATE----- и заканчивая -----END CERTIFICATE-----
На этом настройка модуля Боцман закончена и можно переходить к созданию ботов
Добавление бота
Добавление ботов происходит также в обработке "Настройка ботов" или через справочник "Боты Телеграм" в меню Боцман. Для добавления нового бота нажмите кнопку "Создать":
Поля Код, Наименование и Родитель - определяют как будет выглядеть ваш бот в справочнике ботов и не влияют на его работоспособность. Назначение остальных полей:
Закладка "Основное"
Токен - токен вашего бота, полученный при создании бота в Телеграм (см. предыдущую статью)
Секрет - случайная строка генерируется при создании бота и может быть перегенерирована нажатием на кнопку очистки поля. Используется для авторизации Телеграм при вызове вебхука.
Обработка - элемент справочника Внешние отчеты и обработки, содержащий обработку, обеспечивающую функционирование логики вашего бота. Будет рассмотрено подробнее в разделе "Программирование логики бота".
Режим отладки - при установленном флаге бот отправляет ошибки в чат из которого был вызван или пользователю, установленному как администратор бота (см. далее, поле Администратор)
Режим профилактики - при установленном флаге бот обрабатывает только команды в чате с администратором (см. далее), а остальным пользователям выдает стандартный ответ указанный в поле "Текст профилактики".
Текст профилактики - Текс, который бот будет выдавать пользователям не являющимся администратором при попытке взаимодействия с ботом, если бот находится в режиме профилактики. В тексте можно использовать символы замены >, которые будут заменены их значениями.
Закладка "Параметры"
Закладка "Словарь"
В некотором роде значения в этой таблице аналогичны закладке Параметры, но есть отличия. Значения используются при вызове функции __(Строка) в модуле Боцман. Могут использоваться для перевода или изменения строк, прописанных в коде. Если Строка не найдена в колонке "Строка", то функция __(Строка) вернет саму строку. Если найдена - вернет значение из колонки Перевод. Подробнее см. раздел "Методы модуля".
Закладка "Дополнительно", "Запрос контакта"
Благодарность за контакт - текст, который будет отправлен пользователю, после успешного получения контакта. Например: "Спасибо, теперь вы можете начать пользоваться нашим замечательным ботом". Рекомендация: Лишний раз не просить у пользователей контакт. Чаще всего это бывает нужно, если вы хотите связать работу вашего бота с каким-либо другим сервисом и иметь возможность объединить данные о пользователях с одним номером телефона в Телеграм и стороннем сервисе.
Закладка "Дополнительно", "Команда /name"
Обрабатывать команду /name автоматически - бот может автоматически обрабатывать команду /name в чатах с пользователями. Эта команда позволяет пользователю изменить имя регистрации (по умолчанию пользователь регистрируется с именем и фамилией указанными в настройках его мессенджера).
Запрос нового имени - текст отправляемый пользователю в ответ на команду /name. Например: "Введите новые имя и фамилию".
Закладка "Дополнительно", "Работа в группах"
Закладка "Дополнительно", "Прочие настройки"
Администратор - пользователь - администратор бота. В чат этому пользователю, при включенном режиме отладки, будут приходить ошибки, возникающие при работе бота и время выполнения запросов. В режиме профилактики пользователь, указанный как администратор, имеет возможность штатной работы с ботом, в то время как на все другие запросы бот будет отвечать текстом указанным для режима профилактики.
Обрабатывать команду /chatid - при установленном флаге, в ответ на команду /chatid бот вернет идентификатор чата в котором была введена эта команда. Иногда этот идентификатор нужен для настройки сторонних приложений. Если флаг снят - команда будет передана в вашу обработку.
Сообщать об изменении статуса - если флаг установлен бот будет сообщать администратору об изменении статуса в группах. Подключен, отключен, заблокирован и т.д.
Кастомная клавиатуры - максимальная ширина строки для кастомной клавиатуры (выводится вместо стандартной буквенно-цифровой).
Кнопки
Методы модуля
Методы описаны начиная с самых необходимых для быстрого старта и первый - это конечно:
Возвращает соответствие, содержащее ответ сервера Телеграм.
Возвращает соответствие, содержащее ответ сервера Телеграм.
Работа с файлами
90% потребностей вашего бота покрываются предыдущими двумя функциями, но раз уж мы работаем в 1С и вероятно будем использовать ботов для отправки отчетов вот еще несколько полезных функций для отправки и получения файлов:
Возвращает соответствие, содержащее ответ сервера Телеграм.
Возвращает соответствие, содержащее ответ сервера Телеграм.
- Сессия (обязательный) - содержит структуру сессии;
- ИдФайла (обязательный) - идентификатор файла, который нужно получить с сервера Телеграм.
Возвращает имя временного файла, полученного с сервера Телеграм.
Клавиатуры
Телеграм позволяет разработчику бота определять собственные клавиатуры. Клавиатуры делятся на кастомные и инлайн-клавиатуры. Кастомные клавитуры появляются вместо обычной буквенно-цифровой клавиатуры и позволяют нажатием кнопки быстро ввести типовой ответ:
КлавиатураТелеграм - возвращает кастомную клавиатуру. Используется для быстрого создания простых клавиатур. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- Кнопки (обязательный) - строка с текстом кнопок разделенных запятыми или массив элементов типа соответствие с полями:
- text - текст отображаемый на кнопке;
- request_contact - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту контактные данные пользователя;
- request_location - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту местоположение пользователя.
КастомнаяКлавиатураИзКнопок - возвращает кастомную клавиатуру. Используется для более гибкого создания кастомных клавиатур. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- Кнопки (обязательный) - основные кнопки клавиатуры. Могут быть автоматически отсортированы и будут расположены в строках по несколько кнопок, если общая длина текста не превышает заданную в настройках бота. Массив элементов типа соответствие с полями:
- text - текст отображаемый на кнопке;
- request_contact - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту контактные данные пользователя;
- request_location - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту местоположение пользователя.
УбратьКлавиатуруТелеграм - позволяет убрать кастомную клавиатуру на устройстве пользователя. Вызывается без параметров
- Сессия (обязательный) - содержит структуру сессии;
- Кнопки (обязательный) - основные кнопки клавиатуры. Могут быть автоматически отсортированы и будут расположены в строках по несколько кнопок, если общая длина текста не превышает заданную в настройках бота. Масси элементов типа соответствие с полями:
- text - текст отображаемый на кнопке;
- callback_data - данные, которые будут переданы в качестве параметра в вызов вашего бота при нажатии кнопки. Максимально 64 байта;
КнопкаКастомКлавиатуры - позволяет более удобно создать соответствие, определяющее кнопку для кастомной клавиатуры. Параметры:
Возвращает соответствие, которое можно использовать в качестве элемента массива кнопок при создании кастомной клавиатуры.
КнопкаКолбэка - позволяет более удобно создать соответствие, определяющее кнопку для инлайн-клавиатуры. Параметры:
- Текст (обязательный) - текст кнопки, который будет установлен в качестве поля text кнопки инлайн-клавиатуры;
- Данные (обязательный) - текст или двоичные данные, которые будут установлены в качестве поля callback_data кнопки инлайн-клавиатуры. Маскимально 64 байта;
Возвращает соответствие, которое можно использовать в качестве элемента массива кнопок при создании инлайн-клавиатуры.
ЗавершитьКолбэк - после того, как пользователь нажимает кнопку инлайн-клавиатуры, на кнопке отображается вращающееся колесико, показывающее пользователю, что процесс обработки вызова еще не завершен. После окончания обработки вызова инлайн-кнопки ваш бот должен вызвать эту функцию, для уведомления пользовательского клиента об окончании обработки. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- КолбэкИд (обязательный) - идентификатор вызова, который передается во входных параметрах вызова;
- Текст - текст, который может быть показан пользователю во всплывающем окне или строке уведомлений;
- ПоказыватьУведомление - если Истина - текст будет показан пользователю в строке уведомлений. В противном случае в виде всплывающего окна. По умолчанию: Ложь;
- АдресПерехода - можно указать адрес вида: t.me/your_bot?start=XXXX, позволяющий вызвать вашего бота с параметром. По умолчанию: Неопределено;
- ВремяКэширования - можно указать максимальное время в секундах, в течение которого результат запроса может быть кэширован на стороне пользователя. По умолчанию: 0;
Возвращает соответствие, содержащее ответ сервера Телеграм.
Функции для работы с сессией
Для хранения значений между вызовами вы можете использовать сессию, которая представляет из себя структуру 1С. Значения добавленные в сессию с помощью Сессия.Вставить() не сохраняются между вызовами. Сессия.Удалить() также имеет эффект только в течение текущего вызова. Для сохранения и удаления значений между вызовами используйте следующие функции:
ЗаписатьЗначениеВСессию - сохраняет переданное значение в сессии. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- ИмяПараметра (обязательный) - имя добавляемого или изменяемого параметра;
- Значение (обязательный) - сохраняемое значение.
Возвращает записанное значение.
УдалитьЗначениеИзСессии - удаляет значение из сессии. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- ИмяПараметра (обязательный) - имя удаляемого параметра;
УстановитьТекущуюКоманду - при обработке вам вероятно потребуется сохранять данные о текущей обрабатываемой команде или статусе вашего скрипта обработки. Это можно сделать и с помощью функции ЗаписатьЗначениеВСессию, но использование УстановитьТекущуюКоманду немного удобнее. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- Команда (обязательный) - имя команды;
Вызов этой функции полностью аналогичен вызову: ЗаписатьЗначениеВСессию(Сессия, "ТекущаяКоманда", Команда);
КомандаВыполнена - полностью аналогичен вызову: УдалитьЗначениеИзСессии(Сессия, "ТекущаяКоманда"). Парамеры:
- Сессия (обязательный) - содержит структуру сессии;
Заключение
Модули расширения также содержат некоторые не документированные здесь служебные функции. Вы можете использовать их в разработке вашего бота, но их работа не гарантируется в следующих релизах. Написано на 8.3.14.
Расширение Боцман покрывает основные потребности и сильно упрощает разработку и интеграцию чат-ботов в систему 1С:Предприятие.
Любые вопросы и предложения по доработке пишите в комментарии.
Обработка реализующая функциональность @echo_1c_bot приложена в архив вместе с расширением. Вы можете использовать ее в качестве шаблона для разработки своего бота. Также вы можете попробовать созданный с помощью Боцман
Читайте также: