Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Дублирование почтовой рассылки в Telegram канал

Терещенко Виктор Посмотреть все статьи >> Программист 1С партнерской сети "ИнфоСофт"
04.11.2021
3806
Время прочтения - 7 мин.
Заказать консультацию

Всем доброго времени суток и приятного дня.

Речь в статье пойдёт о работе с таким мессенджером как «Telegram». В частности, будет поэтапно разобрана реализация конкретной задачи по дублированию почтовой рассылки в Telegram канал.

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

 

О TELEGRAM

API

Итак, первое, что нам необходимо для взаимодействия с Telegram - это его API.

Для тех, кто не знает, поясняем: API (программный интерфейс приложения, интерфейс прикладного программирования) (application programming interface) — описание способов, которыми одна компьютерная программа может взаимодействовать с другой программой.

Или в нашем случае – это документация Telegram, описывающая доступные нам методы, их содержание и способы взаимодействия с ними.

В случае Telegram существует два вида API: непосредственно Telegram API и Bot API.

Telegram API вместе с библиотекой TDLib предоставляет максимально широкий функционал вплоть до создания собственной кастомной версии клиента, но наша задача не требует сложных решений, поэтому в примере речь пойдёт о втором виде API.

А именно Bot API. Он создан командой Telegram специально для простоты интеграции с мессенджером посредством ботов (специальные аккаунты в рамках программы, которые не требуют дополнительного номера телефона, являясь таким образом «подаккаунтом», привязанным к основному аккаунту пользователя), создание и настройку которых сделали максимально прозрачными и доступными рядовым пользователям.

Мы не будем подробно останавливаться на описании самого API или его методов, отметим лишь кратко два из них, которые будут использованы далее в реализации:

sendMessage – позволяет отправлять и форматировать сообщения.

 1.png

sendDocument – позволяет отправлять файлы расширений GIFPDF и ZIP с ограничением по размеру до 50 Мбайт.

2.png

Однако стоит отметить, что существуют специальные методы (sendPhoto, sendVideo, sendAudio и пр.) для отправки определенных типов файлов мультимедиа.

Выше приведены лишь некоторые из параметров доступные для этих методов, а с полным описанием перечня параметров, всех доступных методов, изменений, технических нюансов и всего, что касается Bot API, вы можете ознакомиться подробнее по ссылке.

3.png

 

BOTS

Далее остановимся подробнее на создании бота для нашего будущего Telegram канала.

4.png 

Создание бота осуществляется через родительского бота «@BotFather» самого мессенджера.

В диалоге с ним будет предложен список доступных команд, среди которых нас интересует «/newbot», после выбора которой будет последовательно предложено выбрать сначала имя для бота (допустимо использование кириллицы), а затем «username», который оканчиваться на «bot».

Готово. Бот создан, и перед нами его «токен» - уникальный идентификатор, с помощью которого мы можем управлять ботом (обратите внимание, как и указано в описании после токена, с его помощью любой может получить доступ к вашему боту, поэтому не следует его разглашать).

Отметим, что бот не имеет статуса «в сети» или «не в сети», он считается всегда активным и после создания не нуждается в вашем пользовательском аккаунте.

Остаётся только создать канал и добавить в него в качестве администратора нашего бота.

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

НАСТРОЙКИ СОЕДИНЕНИЯ

Итак, перейдём к самой реализации отправки в конфигураторе.

Для начала определимся с параметром необходимым для обоих методов отправки - chat_id.

Если ваш канал подразумевается, как публичный, тогда этот параметр будет соответствовать названию вашего канала, которое вы задавали при создании канала, написанный через «@».

Однако, если вы хотите создать частный канал, то для обращения к нему передаваемый параметр должен быть в следующем формате «-100155558». Методов для получения «числового» id много, остановимся на одном.

Ответ на передаваемый запрос всегда содержит id вашего канала в данном формате, поэтому можем сделать следующее:

  1. Отправим запрос по id в формате названия канала (через «@») сделав его для начала публичным;

  2. Получив ответ, получаем из него id любым удобным способом (просмотром значения выражения ответа (клавиша F9) или сообщив его в пользовательском режиме);

  3. После чего делаем канал частным.

5.png

Итак, всё, что нам понадобится для соединения:

Наши токен и id, предполагаемый массив вложений, а также в параметрах самого соединения: имя сервера – api.telegram.org, ЗащищенноеСоединениеOpenSSL и соответственно 443-ий порт, так как наше соединение использует расширение протокола http, а именно https (80-ый порт для http).

6.png

(parse_mode – является необязательным параметром, вы можете передавать строки без какого-либо форматирования)

Для наглядности итоговая строка запроса выглядит так:

/bot2044848806:AAG3vI2tEagfX1ah5OWAMgBGDQ6ohVS/sendMessage?chat_id=@Rassilki&text=<b>Отправка</b>

Отправляем этот текст в наш Telegram канал&parse_mode=HTML

7.png

Так выглядит первый запрос, в котором мы передаем текст письма.

 

ОТПРАВКА ВЛОЖЕНИЙ

Далее реализуем отправку вложений.

Так как мы заведомо не знаем о возможных форматах прикладываемых файлов, то самое простое решение формировать архивы из вложений до 50 Мб (ограничение Telegram) и производить отправку каждого отдельным сообщением (запросом) после основного запроса с текстом.

В первом цикле: при обходе вложений проверяем их суммарный размер до 50 Мб (в примере размер взят чуть меньше), записываем каждый архив при заполнении и формируем массив архивов.

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

8.png

 11111.png

Тело запроса для отправки формируется с помощью multipart/form-data - это составной тип содержимого, чаще всего использующийся для отправки HTML-форм с бинарными (не-ASCII) данными методом POST протокола HTTP.

Далее во втором цикле: обходим созданный ранее массив архивов, формируем двоичные данные каждого архива в формате multipart/form-data и по аналогии с первым запросом для текста создаём запрос для каждого архива с единственной разницей, что здесь для запроса мы устанавливаем тело из полученных двоичных данных.

11.png

12.png

На этом отправка завершена. Результат будет выглядеть примерно так:

13.png

В заключение хотелось бы отметить, что с помощью Telegram API вы, конечно, можете реализовать это всё и без создания бота или сделать этот процесс более автоматизированным. Но новые методы потребуют новых знаний и решений (работа с авторизацией, привязкой к номеру телефона, хранением сессии, множество новых методов для полноценного освоения интерфейса и пр.), поэтому начинайте с малого, осваивайте новое и успешных всем отправок.


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Рассказать друзьям
Для разработчиков 1С
Вам может быть интересно: