1С – бот для Telegram
Давно збирався розібратися як це працює, але все не було часу. І ось з’явилася задача на оформлення замовлень через бот телеграму і одразу знайшовся час). Почав шукати інформацію, і виявилося що інформації в інтернеті багато, але вся майже однакова наприклад як відправити повідомлення або як отримати. Мені потрібно було зробити кнопочки для зручного оформлення замовлення і ця інформація в інтернеті була описана дуже поверхнево. Виявилося що це достатньо легко зробити.
API telegram має багато функцій, я ж зроблю невелику нотатку по деяким моментам для майбутнього використання. Це не буде повноцінний механізм роботи, але будуть робочі приклади деяких функцій.
Створення боту Telegram
Спочатку треба створити бот з яким ми будемо працювати. В телеграм для цього є окремий бот @BotFather. Треба додати його в свої контакти і в чаті написати команду “/start”. Він нам виведе список всіх доступних команд з описами. Нам потрібно створити наш бот, для цього є команда
1 |
/newbot - create a new bot |
Далі читаємо питання і вводимо унікальну назву боту. Якщо бот створено отримаємо повідомлення про це, а також унікальний токен який нам буде потрібний для роботи через АПІ.
Додаємо наш бот в контакти і починаємо з ним працювати.
Підключення до серверу telegram через api.
Є варіант періодичного підключення до API серверу і отримання нових повідомлень. Інформації як це зробити в інтернеті багато тому робити це не буду. В мене на сервері 1С розгорнутий web-сервер, тому я вибрав більш зручний способ отримання повідомлень через запити з телеграму на наш сервер.
Важливо! Сервер повинен працювати в захищеному режимі з валідними сертифікатами. Я раніше писав як отримати безкоштовний сертифікат і як його встановити на iis сервер.
Для того щоб телеграм міг надсилати нам повідомлення, ми повинні йому передати УРЛ на який він буде це робити. Для цього нам потрібно в 1С зробити обробку цього урлу.
То ж створюємо новий HTTP сервіс в 1С та модуль обробки POST запитів.
Буде створена процедура обработки запитів в якій пишемо наш код обробки:
1 2 3 4 5 6 7 8 9 |
Функция МетодыОбработкаМетодовExchange(Запрос) //Отримаємо який метод приходить до нас ИмяМетода = Запрос.ПараметрыURL["ИмяМетода"]; //Якщо це повідомлення з телеграму то будемо обробляти Если ИмяМетода = "TelegramUpdateMessage" Тогда //............ КонецЕсли; КонецФункции |
Тепер ми можемо передати телеграму на яку адресу відправляти нові повідомлення.
Виглядати вона буде так:
1 |
url="https://server/baza1c/hs/ExchangeData/TelegramUpdateMessage"; |
де server – це доменне ім’я Вашего серверу, baza1c – ім’я бази вказане при публікації.
1 2 3 4 5 |
Ресурс = "bot" + Токен + "/setWebhook?" + Урл; Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL()); Запрос = Новый HTTPЗапрос(Ресурс); Ответ = Соединение.Получить(Запрос); ДвоичныеДанныеОтвета = Ответ.ПолучитьТелоКакСтроку(); |
де Токен – це Ваш токен отриманий при реєстрації Вашого боту.
Все, тепер при написанні нових повідомлень через бот Вони будуть одразу надсилатися на наш сервер.
Отримання нових повідомлень з telegram в 1С.
Процедуру та метод отримання повідомлень ми вже створили, тепер напишемо обробку отримання цих повідомлень.
Важливо! Якщо бот не отримає від нас відповідь, або отримає неправильну відповідь він буде повторно надсилати нам повідомлення до отримання відповіді.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//Якщо це повідомлення з телеграму то будемо обробляти Если ИмяМетода = "TelegramUpdateMessage" Тогда //Отримуємо дані повідомлень ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку(); //Читаємо отримані повідомлення в структуру із форматуJSON ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.УстановитьСтроку(ТелоЗапроса); Результат = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); //Створюємо структуру для формування відповіді СтруктураВыгрузки = Новый Структура; СтруктураВыгрузки.Вставить("chat_id",Результат.message.chat.id); //Формуємо файл відповіді у форматі JSON НастройкиСериализации = Новый НастройкиСериализацииJSON; НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата; НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO; НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь; ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Истина; ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписатьJSON(ЗаписьJSON, СтруктураВыгрузки, НастройкиСериализации); СтрокаJSON = ЗаписьJSON.Закрыть(); //Створюємо об'єкт для відправки відповіді Ответ = Новый HTTPСервисОтвет(200); Ответ.УстановитьТелоИзСтроки(СтрокаJSON); КонецЕсли; Возврат Ответ; |
Відправлення повідомлень з 1С в telegram
Для відправлення повідомлення нам потрібно знати наш токен, який ми отримали при створенні боту, ІД чату з клієнтом, яке ми отримали разом з повідомленням від нього і текст повідомлення, який ми йому хочемо відправити. Все далі відправляємо повідомлення в чат клієнта.
1 2 3 4 |
Ресурс = "bot" + Токен + "/sendMessage?chat_id=" + Формат(ИДЧата,"ЧГ=") + "&text= " + ТекстСообщения; Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL()); Запрос = Новый HTTPЗапрос(Ресурс); Ответ = Соединение.Получить(Запрос); |
Вставка в повідомлення кнопок і отримання результату їх натиснення.
Відправляти в чат тільки текст це добре, але не завжди зручно. Коли клієнту треба дати якийсь вибір то треба це зробити у вигляді кнопок, це буде зручно як для клієнта, так і буде менше помилок при введенні тексту.
Для того, щоб відправити кнопки в чат треба до повідомлення вище додати ще параметр “reply_markup” і опис кнопок у форматі json. Нам треба зробити вибір з декількох варіантів. Робимо масив цих значень і формуємо з них json.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
МассивВариантов = Новый Массив; МассивВариантов.Добавить("Варіант1"); МассивВариантов.Добавить("Варіант1"); МассивСтрок = Новый Массив; МассивКнопок = Новый Массив; Для каждого Вар Из МассивВариантов Цикл МассивКнопок.Добавить(Новый Структура("text, callback_data", Вар, Вар)); КонецЦикла; МассивСтрок.Добавить(МассивКнопок); СтруктураОтвета = Новый Структура; СтруктураОтвета.Вставить("inline_keyboard", МассивСтрок); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет,,,ЭкранированиеСимволовJSON.СимволыВнеASCII)); ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета); ВыборКнопок = ЗаписьJSON.Закрыть(); |
И к нашему сообщению их цепляем:
1 |
Ресурс = Ресурс + "&reply_markup=" + ВыборКнопок; |
Коли в чаті користувач натисне кнопка ми отримаємо те значення яке передали в параметрі “callback_data”.
В нашій функції, на яку ми отримуємо нові повідомлення, серед параметрів буде ознака натиснутої кнопки. Виглядає це так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку()); Результат = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); callback_query = ""; Результат .Свойство("callback_query",callback_query); //Нажата кнопка в чате Если ЗначениеЗаполнено(callback_query) Тогда ИдЧата = Результат.callback_query.message.chat.id; //Получаем значение нажатой кнопки и дальше можем обрабатывать ЗначениеНажатойКнопки = Результат.callback_query.data; КонецЕсли; |
Вставка лінків в повідомлення
Бувають ситуації коли треба щоб на натиснену кнопку відривався, наприклад, сайт компанії.
Такі кнопки відрізняються від звичайних кнопок тільки одним параметром. Для вичайних кнопок ми передавали так:
1 |
МассивКнопок.Добавить(Новый Структура("text, callback_data", Вар, Вар)); |
А для кнопок з посиланнями другий параметр міняємо на посилання на сайт.
1 |
МассивКнопок.Добавить(Новый Структура("text, url", Вар, "http://site.com")); |
Можливостей у API Telegram значно більше, але описані, на мій погляд, головні і далі при необхідності можна з іншими розібратись. І це достатньо щоб зробити повноцінний бот для телеграму. Далі вже справа техніки.
А замовити розробку чат-боту будь-якої складності, для будь якої конфігурації 1С Ви можете в компанії ІТ рішення для бізнесу яка розробила перший в України і дуже зручний чат-бот для доставки води.
Зразок бота не був би зайвим