Как связать 1с и телеграмм

Обновлено: 18.04.2024

В этой статье рассмотрим настройку и использование чат-бота Телеграмм в 1С Управление Нашей Фирмой.

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

Настройка Чат -бота в 1с Управление Нашей Фирмой

Включить Модуль Чат-бота можно в в разделе CRM по ссылке «Еще больше возможностей»

После включения модуля проходим по ссылке

На странице настройки содержится инструкция по настройке чат-бота

Открываем Телеграмм — в телефоне или на компьютере, в строке поиска набираем BotFather и вводим команду /newbot.

Бот попросит придумать имя новому боту — введите название бота. Бот проверит название на индивидуальность и, если такого же названия не существует, то зарегистрирует его.

Следующим шагом бот попросит создать пользователя бота — название пользователя может содержать латинские буквы и/или нижний дефис - TetrisBot или tetris_bot. В названии обязательно должно быть слово “bot” - название также проверяется на индивидуальность и, если похожих названий ранее создано не было, то создает пользователя с таким названием.

Копируем токен в строку в окне настройки в 1С УНФ

Нажимаем кнопку «Проверить», если результат положительный, то нажимаем «Активировать».

Далее ставим при необходимости галочки в чек-боксах «Картинки услуг» и «Картинки ресурсов», а также устанавливаем число кнопок в строке — зависит от размера надписи на кнопке.

Ниже настраиваем услуги

Выбираем уровень цен отображаемых в чате

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

Для сохранения настроек нажмите на крестик закрытия вкладки — перед закрытием программа спросит о необходимости сохранения настроек.

Для начала зарегистрируем бота, получим его 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(), которая в структурированном виде считывает весь пакет:

Дата публикации 15.03.2021

Использован релиз 1.6.24

Интеграция с Telegram работает с версией технологической платформы не ниже 8.3.17. Интеграция с мессенджерами не поддерживает работу с файлами: невозможно получить файл из мессенджера и передать файл внешнему пользователю.

  1. Раздел: CRM –Еще больше возможностей.
  2. Установите флажок "Чат, история изменений и видеозвонки (новый интерфейс)" и подключите обсуждения (чат). О том, как это сделать, см. здесь.




    Найдите в Telegram бот BotFather (или перейдите по ссылке https://telegram.me/botfather). Начните общение с ботом, нажав на кнопку "Запустить/Start" в чате (в мессенджере Telegram).



  • заканчиваться на суффикс bot;
  • быть уникальным в рамках Telegram.






Интеграция с мессенджерами не поддерживает работу с файлами: невозможно получить файл из мессенджера и передать файл внешнему пользователю.


Смотрите также

Пробовали ли вы общаться с клиентами, сотрудниками, партнерами и другими внешними пользователями с помощью telegram-бота ?

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

Чтобы произвести интеграцию, надо выполнить три простых шага:

  1. Подключение системы взаимодействия
  2. Создание Telegram-бота для входящих обращений
  3. Добавление интеграции на уровне системы взаимодействия.

1 шаг. Подключение системы взаимодействия

  1. Переходим в главное меню–> « Функции для технического специалиста » –> « Стандартные » –> « Управление системой взаимодействия ».
  2. Чтобы пройти регистрацию, введите адрес электронной почты , на которую придет код подтверждения.
  3. Введите полученный код и нажмите « Зарегистрировать ».

Чтобы после регистрации создать диалог внутри программы, необходимо:

1. Перейти на закладку « Обсуждения »;

2. Нажимаем на значок « Новое обсуждение »;

3. Указываем тему и пользователей ;

4. Нажимаем « ОК ».

Готово! Вы настроили внутренний чат.

Для того, чтобы выполнить интеграцию с Telegram, нужно выполнить еще два шага. Разбираем!

2 шаг. Создание телеграмм-бота для входящих обращений

1. Переходим в Telegram

2. В поле поиска вводим @BotFather. Это аккаунт для создания персональных ботов.

3. Переходим в диалог с ботом.

4. Нажимаем команду « Запустить » –> « New bot ».

5. После этого введите имя бота . Так он будет отображаться для пользователей.

6. Указываем никнейм бота .

8. Готово! Бот создан.

3 шаг. Добавить интеграцию на уровне системы взаимодействия

Остался всего один простой шаг, который соединит два предыдущих действия.

1. Заходим в программу под администратором .

2. Переходим в главное меню –> « Функции для технического специалиста » –> « Стандартные » –> « Управление системой взаимодействия » –> пункт « Интеграции ».

3. Нажимаем « Добавить ».

Задача:
Создать телеграм бота и научится работать с ним в «1С:Предприятие 8», через long polling и webhooks, используя Telegram bot API.

02.04.2021 Обновлено:
— Добавлено видео «Интеграция 1С с Telegram за 12 минут», где показано как с помощью системы взаимодействия работать с телеграм ботом.


В результате, будет сформирован токен доступа, который необходимо сохранить и держать в секрете, а созданного бота добавить себе в приложение «Телеграм».

2. Два способа работы с телеграм ботом.

При помощи «Telegram Bot API», есть два взаимоисключающих способа работы с телеграм ботом:

  1. Метод «getUpdates» – самостоятельно, выполняем запрос получения новых обновлений.
  2. Использование «Webhooks» – обновления приходят автоматически от сервера, на указанный URL-адрес.

Ответ приходит в виде JSON, не обработанные обновления хранятся на сервере до тех пор, пока бот их не получит, но они не будут храниться дольше 24 часов.

3. Подготовка конфигурации.

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8


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»

Сервис Apache

5.4 Откройте «Open Server Panel», но не запускайте, должен быть красный флажок. В конфигураторе открыть, меню «Администрирование – Публикация на веб-сервере…» выбрать каталог и нажать «Опубликовать», без перезапуска веб-сервера.

Публикация сервиса

Apache config


Их нужно сохранить в шаблоне «‪C:\OpenServer\userdata\config\Apache_2.4-PHP_7.2-7.4_server.conf», для того чтобы при следующем запуске «Open Server» они не затерлись.

Для проверки воспользуемся приложением «Postman»:

Postman test

В результате, внутренние локальные сервисы, станут доступны для внешнего взаимодействия:

Postman test ngrok

Postman test ngrok

Для эксперимента, попробуем это сделать через «Postman»:

Postman setWebhook

Для удаление webhook и переход на метод «getUpdates», достаточно вызвать метод «deleteWebhook»:

Теперь схема работы выглядит следующий образом:

Telegram webhooks

Читайте также: