Telegram один із найбільш сучних та технологічних месенджерів. І це відкриває багато нових можливостей для розробки додаткових інструментів для бізнесу. Мова йде про боти, які можуть частково автоматизувати спілкування з клієнтами, тим самим звільнити час для менеджерів та операторів для інших важливих задач.
API telegram має багато функцій, він постійно розвивається. Розглянемо тільки деякі можливості роботи з ботами на прикладах деяких функцій.
1. Створення боту Telegram
Перше, що треба зробити - це створити бот для якого будемо розробляти функціонал. В телеграм для цього є окремий бот @BotFather. Додаєте його в свої контакти і в чаті пишете команду “/start”. Він виведе список всіх доступних команд з описами. Для створення боту є команда:
1
|
/newbot - create a new bot
|
Далі спілкуємось з ботом і пошагово заповнюємо дані. Спочатку вводимо унікальну назву боту. Якщо ім'я вільне отримаємо повідомлення та унікальний токен який нам буде потрібний для роботи через АПІ.
Додаємо бот в контакти і можемо з ним працювати.
2. Підключення до серверу telegram через api.
Є варіант самостійного підключення до API серверу телеграму для отримання нових повідомлень. Це не дуже зручно, бо постійно треба посилати запит, щоб отримати нові повідомлення якщо вони є.
Більш цікавий варіант - це розгорнути власний веб сервер і тоді телеграм буде сам надсилати нам нові повідомлення. Веб сервер обов'язково повинен працювати в захищеному режимі з валідними сертифікатами. Для надсилання повідомлень, нам треба в телеграм передати УРЛ на який він буде це робити.
Для початку створемо її обробку. Створюємо новий 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Запрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
ДвоичныеДанныеОтвета = Ответ.ПолучитьТелоКакСтроку();
|
де Токен – це Ваш токен отриманий при реєстрації Вашого боту.
Якщо все зроблено правильно, при написанні нових повідомлень через бот Вони будуть одразу надсилатися на веб сервер.
3. Отримання нових повідомлень з 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);
КонецЕсли;
Возврат Ответ;
|
4. Відправлення повідомлень з 1С в telegram
Повідомлення отримали, теперь відправляємо в чат повідомлення для клієнта. Для відправлення повідомлення нам потрібно знати токен, який отримали при створенні боту, ІД чату з клієнтом, яке ми отримали разом з повідомленням від нього і текст повідомлення, який ми йому хочемо відправити. Все далі відправляємо повідомлення в чат клієнта.
1
2
3
4
|
Ресурс = "bot" + Токен + "/sendMessage?chat_id=" + Формат(ИДЧата,"ЧГ=") + "&text= " + ТекстСообщения;
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
|
5. Вставка в повідомлення кнопок і отримання результату їх натиснення.
З текстом розібрались, для зручності треба вивести кнопку і обробити її натискання клієнтом.
Для того, щоб відправити кнопки в чат треба до повідомлення додати ще параметр “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;
КонецЕсли;
|
6. Вставка лінків в повідомлення
Бувають ситуації коли треба щоб на натиснену кнопку відривався, наприклад, сайт компанії.
Такі кнопки відрізняються від звичайних кнопок тільки одним параметром. Для вичайних кнопок ми передавали так:
1
|
МассивКнопок.Добавить(Новый Структура("text, callback_data", Вар, Вар));
|
А для кнопок з посиланнями другий параметр міняємо на посилання на сайт.
1
|
МассивКнопок.Добавить(Новый Структура("text, url", Вар, "http://site.com"));
|
Можливостей у API Telegram значно більше, але для розуміння механізму цього достатньо.