Настройки безопасности, приватности и шифрования в Telegram | Блог Касперского

Настройки безопасности, приватности и шифрования в Telegram | Блог Касперского Сертификаты

Безопасность telegram для самых осторожных

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

  • Используйте для входа в Telegram отдельный номер телефона. А может быть, даже виртуальный номер телефона вместо настоящего мобильного. Однако будьте осторожны и убедитесь в том, что этот номер не одноразовый — иначе к вашему аккаунту может получить доступ кто-то другой.
  • Включайте защищенное соединение, чтобы скрыть свой IP-адрес — Telegram может сообщать его, например, по запросу правоохранительных органов.
  • Подумайте о том, чтобы использовать другой мессенджер, более приспособленный для безопасного и конфиденциального общения — например, Signal или Threema. В отличие от Telegram, все чаты в них шифруются по умолчанию и есть дополнительные механизмы обеспечения конфиденциальности. Но они не так популярны, и в них нет некоторых функций, которые привлекают пользователей Telegram.

Ну и, конечно же, не забывайте о том, что даже самый безопасный в мире мессенджер становится беззащитным, если к вашему устройству кто-то получит доступ — физический или удаленный.

Поэтому обязательно блокируйте все свои устройства пин-кодом, вовремя обновляйте все установленные на них программы и операционную систему, а также защищайте их от вредоносного ПО надежным антивирусом.

Достаем соединение для бота telegram

Привет, Miped!

Не давно я начал заниматься одним моим не коммерческим проектом — бот в Телеграмм. Я не знаю, если на этом форуме кодеры, поэтому объясню. Все телеграм боты работают на API Telegram, если прочитаете его документацию, то увидите, что для корректных запросов, необходимо, что бы скрипт делал запрос из https соединения. А что бы получить это самое https соединение нужен sll сертификат (если покупать, выходит около 2к в год, как я понял).

Так вот здесь я расскажу как вам получить это самое https соединение бесплатно (на один месяц — думаю для разработки в самый раз).

Необходимо:
Телефон (Россия, или страны СНГ)
Електронная почта

1. Заходим на сайт https://beget.com/ru/free-hosting (не реклама)
2. Регистрируем себе бесплатный хост на один месяц. Сама система Beget выделит вам бессрочный домен вида (ваш_ник.beget.ru)
3. Далее следуем этой инструкции https://beget.ru/news/2021/letsencrypt (не реклама)
Все подключение и оформление Sll сертификатв идет автоматически.
Если при проверке Https соединения не выходит, так называемого зеленого зомка смело пишите в поддержку хостинга (у меня решили проблему за час) (Не думайте, что я нахваливаю, но поддержка у них чамая адекватная которую я встречал за все время пока хостил сайты)

Далее закидываем ваш скрипт через FTP, и устанавливаем на WebHook Telegram

Вот и все.

Есть и другие способы получения https соединения, например на хабре писали, что можно достать через хостинг Heroku. Я использовал и его, но данная платформа выдает права только на запуск скрипт, и не дает прав на запись и удаление файлов, что было важным аспектом моего проекта.

§

Привет, Miped!

Не давно я начал заниматься одним моим не коммерческим проектом — бот в Телеграмм. Я не знаю, если на этом форуме кодеры, поэтому объясню. Все телеграм боты работают на API Telegram, если прочитаете его документацию, то увидите, что для корректных запросов, необходимо, что бы скрипт делал запрос из https соединения. А что бы получить это самое https соединение нужен sll сертификат (если покупать, выходит около 2к в год, как я понял).

Так вот здесь я расскажу как вам получить это самое https соединение бесплатно (на один месяц — думаю для разработки в самый раз).

Необходимо:
Телефон (Россия, или страны СНГ)
Електронная почта

1. Заходим на сайт https://beget.com/ru/free-hosting (не реклама)
2. Регистрируем себе бесплатный хост на один месяц. Сама система Beget выделит вам бессрочный домен вида (ваш_ник.beget.ru)
3. Далее следуем этой инструкции https://beget.ru/news/2021/letsencrypt (не реклама)
Все подключение и оформление Sll сертификатв идет автоматически.
Если при проверке Https соединения не выходит, так называемого зеленого зомка смело пишите в поддержку хостинга (у меня решили проблему за час) (Не думайте, что я нахваливаю, но поддержка у них чамая адекватная которую я встречал за все время пока хостил сайты)

Далее закидываем ваш скрипт через FTP, и устанавливаем на WebHook Telegram

Вот и все.

Есть и другие способы получения https соединения, например на хабре писали, что можно достать через хостинг Heroku. Я использовал и его, но данная платформа выдает права только на запуск скрипт, и не дает прав на запись и удаление файлов, что было важным аспектом моего проекта.

Загрузка полученных файлов

Т.к. в сообщении приходит только идентификатор файла, то необходимо его как то получить.

Для этого существует GET-метод getFile, у которого есть один обязательный параметр file_id

Метод возвращает объект типа File, это еще не файл, но он уже доступен по ссылке, которую необходимо собрать из полученных данных.

Как включить сквозное шифрование в telegram: «секретные» чаты

При этом сквозное шифрование в Telegram есть — просто его нужно включать отдельно. Поэтому, если вы дорожите конфиденциальностью своих данных, надо не забывать использовать чаты, в которых сквозное шифрование включено, — Telegram называет их «секретными» чатами.

В «секретных» чатах и текст сообщений, и картинки, и видео, и все остальные файлы передаются с использованием сквозного шифрования. Ключ для расшифровки есть только у собеседников — поэтому Telegram не может получить доступ к этим данным.

Про сертификаты:  ECL - Центр языкового тестирования СПбГУ

Более того, содержимое «секретных» чатов не хранится на серверах Telegram. «Секретные» чаты хранятся только на устройствах участников переписки — как следствие, к ним нельзя получить доступ с другого устройства, плюс они исчезают при выходе из Telegram и при удалении приложения.

Секретные чаты доступны в приложениях для iOS, Android и macOS. В веб-версии и в приложении для Windows «секретные» чаты не поддерживаются, потому что эти версии не могут обеспечить безопасное хранение переписки на устройстве. Так что использовать Telegram для конфиденциальных разговоров на компьютере с Windows или Linux нежелательно.

Как внутри чата понять, включено ли сквозное шифрование: иконка с замочком

Поскольку в Telegram есть два типа чатов — обычные «облачные» и «секретные», в которых включено сквозное шифрование, в некоторых случаях бывает важно вовремя понять, в каком из них вы общаетесь. Если в переписке есть какие-то очень важные данные, то лучше бы этому чату быть «секретным», верно?

К сожалению, внутри «секретные» и «облачные» чаты выглядят практически идентично, различаясь буквально несколькими деталями. Чтобы убедиться в том, что сквозное шифрование включено, поищите значок замочка рядом с именем или номером телефона вашего собеседника.

Также можно кликнуть по иконке вашего собеседника — если в чате используется сквозное шифрование, то в самом низу открывшегося окна отобразится строчка Ключ шифрования.

Как настроить безопасность и приватность в приложении telegram

Также не помешает правильно настроить безопасность и конфиденциальность в приложении. Для этого нажмите кнопку Настройки в правом нижнем углу экрана и выберите пункт Конфиденциальность.

Как создать «секретный» чат в telegram

В текущих версиях приложений Telegram опция создания «секретного» чата спрятана довольно глубоко, и ее не так-то легко обнаружить — особенно начинающему пользователю мессенджера.

Чтобы создать «секретный» чат, необходимо открыть профиль вашего собеседника, нажать кнопку с тремя точками (иногда у нее есть подпись Еще, а иногда подписи нет) и выбрать Начать секретный чат.

После этого откроется чат, сообщения в котором будут зашифрованы сквозным шифрованием (поначалу в окне чата даже будет об этом специально написано). Также можно установить время, по истечении которого ваши сообщения будут автоматически удаляться: для этого надо кликнуть на значок часов в панели ввода сообщения.

Разумеется, автоматическое удаление сообщений не помешает вашему собеседнику сделать скриншоты, но в таком случае в чате появится сообщение об этом. Правда, есть исключение: если скриншот сделал пользователь на macOS, то уведомление об этом не придет.

Кнопки (клавиатуры)

У метода sendMessage есть еще один очень интересный параметр — reply_markup, который отвечает за быстрые ответы.

Типов таких быстрых ответов на данный момент 4: InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardHide и ForceReply.

Это клавиатура, которая привязана к сообщению. У этого объекта всего одно поле inline_keyboard, которое содержит массив строк с массивами кнопок (2 мерный массив кнопок или массив массивов с кнопками)

Кнопка — это объект InlineKeyboardButton, у которого только одно обязательное поле — text

Есть еще ряд полей, основное из которых — callback_data. Это данные, которые будут отправлены после нажатия кнопки пользователем. Сюда можно записывать идентификаторы из 1С (документа или справочника), числа и т.д. для последующей обработки.

Второй полезный параметр — url, в котором указывается ссылка, которая будет открыта при нажатии на кнопку

 Пример JSON-описания клавиатуры

{
    "inline_keyboard": [
        [{
                "text": "Обычная кнопка",
                "callback_data": "ОтветНаСообщение1"
            }
        ],
        [{
                "text": "Ссылка",
                "callback_data": "ОтветНаСообщение2",
                "url": "infostart.ru"
            }, {
                "text": "Переслать контакт",
                "switch_inline_query": "Это отличный канал"
            }, {
                "text": "Ответить каналу",
                "switch_inline_query_current_chat": "Это точно"
            }
        ]]
}

Представление клавиатуры

Настройки безопасности, приватности и шифрования в Telegram | Блог Касперского

Код 1С

МойToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
АдресTelegramAPI = "api.telegram.org";
ПроксиАдрес = "159.138.22.170";
ПроксиПорт = 3128;

ЧатID = "882646417";
ТекстСообщения = "<b>Внимание, опрос</b>
        |<i>Как тебе такое, Илон Маск?</i>";

ТекстКнопок = "
|{
|    ""inline_keyboard"": [
|		[{
|                ""text"": ""Обычная кнопка"",
|                ""callback_data"": ""ОтветНаСообщение1""
|            }
|        ], 
|		[{
|                ""text"": ""Ссылка"",
|                ""url"": ""//infostart.ru/""
|            }, {
|                ""text"": ""Переслать контакт"",
|                ""switch_inline_query"": ""Это отличный канал""
|            }, {
|                ""text"": ""Ответить каналу"",
|                ""switch_inline_query_current_chat"": ""Это точно""
|            }
|        ]]}";

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);
СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());

АдресЗапроса = "bot" 
                  МойToken 
                  "/sendMessage"
                  "?chat_id=" 
                  ЧатID
                  "&text=" 
                  ТекстСообщения
                  "&parse_mode=HTML"
                  "&reply_markup="
                  ТекстКнопок;
                
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
Попытка
   ОтветHTTP = СоединениеHTTP.Получить(ЗапросHTTP);
   Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку());
Исключение
   ВызватьИсключение "Ошибка отправки сообщения";
КонецПопытки;

Набор кнопок, которые не привязаны к конкретному сообщению а закреплены внизу окна диалога.

Объект имеет одно обязательное поле keyboard, которое содержит массив массивов кнопок с более простым типом нежели InlineKeyboard — KeyboardButton с основным полем text, данный объект можно не использовать и сразу формировать массив строк.

Еще один важный параметр клавиатуры, но не обязательным, является resize_keyboard, который отвечает за «авто высоту» кнопок.

По умолчанию данный параметр установлен в false и клавиатура растягивается на высоту основной клавиатуры, что выглядит громоздко (см. скрин в примере).

Еще один опциональный параметр — one_time_keyboard, который при установке в true скрывает клавиатуру после нажатия кнопки.

Код 1С

ЧатID = "882646417";
ТекстСообщения = "<b>Внимание, опрос</b>
        |<i>Как тебе такое, Илон Маск?</i>";

ТекстКнопок = "
|{
|    ""keyboard"": [
|			[""Кнопка 1""], 
|			[""Кнопка 2"",""Кнопка 3"",""Кнопка 4""]
|		]}";

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);
СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());

АдресЗапроса = "bot" 
                  МойToken 
                  "/sendMessage"
                  "?chat_id=" 
                  ЧатID
                  "&text=" 
                  ТекстСообщения
                  "&parse_mode=HTML"
                  "&reply_markup="
                  ТекстКнопок;
                
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
Попытка
   ОтветHTTP = СоединениеHTTP.Получить(ЗапросHTTP);
   Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку());
Исключение
   ВызватьИсключение "Ошибка отправки сообщения";
КонецПопытки;

Настройки безопасности, приватности и шифрования в Telegram | Блог Касперского

ReplyKeyboardHide — Своего рода команда управления видимостью для клавиатуры ReplyKeyboardMarkup 

ForceReply — команда инициирующая цитату на отправляемое сообщение

Настройки безопасности в telegram

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

После этого выберите пункт Автоблокировка и установите какое-нибудь небольшое значение — одну минуту или пять. Если ваше устройство поддерживает вход по отпечатку пальца или по распознаванию лица — можете включить здесь же соответствующую опцию.

Дальше стоит обезопасить аккаунт от угона с помощью двухфакторной аутентификации. Поскольку первичным способом подтверждения входа в аккаунт в Telegram служит одноразовый код в SMS, то в качестве второго фактора мессенджер предлагает задать пароль.

Про сертификаты:  Эксперты рассказали, как будет работать система «зеленых» сертификатов - Газета.Ru

Для этого на вкладке Конфиденциальность выберите Двухэтапная аутентификация (в Android) или Облачный пароль (в iOS) и установите какую-нибудь надежную комбинацию. Важно помнить, что вводить этот пароль вы будете нечасто, поэтому его очень легко забыть. Так что лучше сохранить его в каком-нибудь надежном месте — например, в менеджере паролей.

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

Настройки конфиденциальности в telegram

Чтобы не делиться лишней информацией со всеми 500 миллионами пользователей Telegram, стоит настроить приватность профиля. Для этого пройдитесь по пунктам настроек Конфиденциальность и поменяйте установленные значения — по умолчанию все эти данные и возможности доступны всем желающим. Мы рекомендуем вот такие настройки:

  • Номер телефона -> Кто видит мой номер телефонаНикто.
  • Номер телефона -> Кто может найти меня по номеруМои контакты.
  • Последняя активность -> Кто видит, когда я в сетиНикто.
  • Фотография профиля -> Кто видит мою фотографиюМои контакты.
  • Звонки -> Кто может мне звонитьМои контакты (или Никто, если вас вообще не интересует эта функция).
  • Звонки -> Peer-to-peerМои контакты (или Никто, если предпочитаете не делиться информацией о своем IP-адресе с собеседниками).
  • Пересылка сообщений -> Кто может ссылаться на мой аккаунт при пересылке сообщенийМои контакты.
  • Группы и каналы -> Кто может приглашать меняМои контакты.

Также можете заглянуть в Конфиденциальность -> Управление данными и удалить из хранилища Telegram ту информацию, которые покажется вам лишней.

Обработка входящих сообщений

Сообщения, полученные от сервера telegram это массив объектов с типом Update. У данного типа есть обязательное поле update_id и ряд опциональных, зависящих от типа входящего сообщения. Основное доп.поле — message с типом Message заполнено у входящих текстовых сообщениях, входящих файлах, фотографиях, аудио сообщениях, входящем сообщении с контактом, георасположением, видео и стикеры.

Второе доп.поле — callback_query с типом CallbackQuery — это результат нажатия на кнопку клавиатуры InlineKeyboardMarkup

Отправка документов (файлов)

За отправку файлов отвечает POST-метод sendDocument, у которого 2 обязательных поля — chat_id и document.

Поле document может иметь тип строки, это нужно тогда, когда мы переотправляем уже полученный файл и в этом случае указываем идентификатор файла.

Второй тип, который может содержать поле document — это сам отправляемый файл в формате multipart/form-data

Сам формат multipart/form-data достаточно простой, его цель — оправить серверу ряд разнородных данных (файлы, строки и т.д.) в одном сообщении (файле). Это своего рода zip-архив без сжатия, где не только файлы, но и другие данные.

Сервер, получив сообщение, должен понять где заканчиваются/начинаются блоки с данными и что там за данные. Для этого ему необходим разделитель данных — boundary и некая запись о характере данных блока.

Вернемся к нашему методу sendDocument, которому необходимо передать 2 параметра — строковый chat_id и файл document

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

--%Разделитель%
Content-Disposition: form-data; name="chat_id"

%ЧатID%
--%Разделитель%
Content-Disposition: form-data; name="document"; filename="%ИмяФайла%"

%СодержимоеФайла%
--%Разделитель%--

Со строковыми значениями вопросов не возникает — делаем СтрЗаменить и все, но есть еще и содержимое файла, которое нужно в итоговый запрос подсунуть.

Для решения этой проблемы у 1С есть метод ОбъединитьФайлы, который объединяет переданный в него массив файлов в один.

Разделим шаблон на части — певая это текст до %СодержимоеФайла%, а вторая это текст после %СодержимоеФайла%. Запишем эти 2 текста в файлы и используем ОбъединитьФайлы подсунув между текстовиками отправляемый файл.

Настройки безопасности, приватности и шифрования в Telegram | Блог Касперского 

МойToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
АдресTelegramAPI = "api.telegram.org";
ПроксиАдрес = "159.138.22.170";
ПроксиПорт = 3128;
ЧатID = "882646417";

ПутьКФайлу = "C:1.pdf";
Boundary = "----" Строка(Новый УникальныйИдентификатор());

Файл = Новый Файл(ПутьКФайлу);

//Определяем массив для процедуры ОбъединитьФайлы
МассивФайловДляОбъединения = Новый Массив;

МассивФайловДляОбъединения.Добавить(ПолучитьИмяВременногоФайла("txt"));
ФайлОтправкиНачало = Новый ЗаписьТекста(МассивФайловДляОбъединения[0], КодировкаТекста.UTF8);
НачальныеДанные = "--%Разделитель%
|Content-Disposition: form-data; name=""chat_id""
|
|%ЧатID%
|--%Разделитель%
|Content-Disposition: form-data; name=""document""; filename=""%ИмяФайла%""
|";
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%Разделитель%",Boundary);
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%ЧатID%",ЧатID);
НачальныеДанные = СтрЗаменить(НачальныеДанные,"%ИмяФайла%",Файл.Имя);

ФайлОтправкиНачало.ЗаписатьСтроку(НачальныеДанные );
ФайлОтправкиНачало.Закрыть();

МассивФайловДляОбъединения.Добавить(ПутьКФайлу);

МассивФайловДляОбъединения.Добавить(ПолучитьИмяВременногоФайла("txt"));
ФайлаОтправкиКонец = Новый ЗаписьТекста(МассивФайловДляОбъединения[2], КодировкаТекста.UTF8);
КонечныеДанные = "
|--%Разделитель%--";
КонечныеДанные = СтрЗаменить(КонечныеДанные,"%Разделитель%",Boundary);

ФайлаОтправкиКонец.ЗаписатьСтроку(КонечныеДанные);
ФайлаОтправкиКонец.Закрыть();

ИмяИтоговогоФайла = ПолучитьИмяВременногоФайла("txt");
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяИтоговогоФайла);

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);

СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());

АдресЗапроса = "bot" 
                  МойToken 
                  "/sendDocument";
				
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
ЗапросHTTP.Заголовки.Вставить("Connection", "keep-alive");
ЗапросHTTP.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" Boundary);

ЗапросHTTP.УстановитьИмяФайлаТела(ИмяИтоговогоФайла);

Попытка
	ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

Отправка контактов

GET-метод sendContact позволяет отправить контакт пользователю спец.сообщением.

Метод похож на sendMessage за исключением нескольких обязательных полей:

phone_number — строковое представление телефонного номера

first_name — Имя контакта

Настройки безопасности, приватности и шифрования в Telegram | Блог Касперского

МойToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
АдресTelegramAPI = "api.telegram.org";
ПроксиАдрес = "159.138.22.170";
ПроксиПорт = 3128;

ЧатID = "882646417";
Телефон = "88005555256";
ИмяКонтакта = "Инфостарт";

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);
СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());

АдресЗапроса = "bot" 
                  МойToken 
                  "/sendContact"
                  "?chat_id=" 
                  ЧатID
                  "&phone_number=" 
                  Телефон
                  "&first_name="
                  ИмяКонтакта;
                
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
Попытка
   ОтветHTTP = СоединениеHTTP.Получить(ЗапросHTTP);
   Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку());
Исключение
   ВызватьИсключение "Ошибка отправки сообщения";
КонецПопытки;

Отправка сообщения

Для отправки сообщения используется GET-метод sendMessage, обязательных параметров всего два chat_id и text

chat_id можно взять из полученных сообщений

МойToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
АдресTelegramAPI = "api.telegram.org";
ПроксиАдрес = "159.138.22.170";
ПроксиПорт = 3128;

ЧатID = "882646417";
ТекстСообщения = "Привет мир!";

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);

СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());

АдресЗапроса = "bot" 
                  МойToken 
                  "/sendMessage"
                  "?chat_id=" 
                  ЧатID
                  "&text=" 
                  ТекстСообщения;
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
Попытка
   ОтветHTTP = СоединениеHTTP.Получить(ЗапросHTTP);
   Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку());
Исключение
   ВызватьИсключение "Ошибка отправки сообщения";
КонецПопытки;

При этом запросе сервер ответит, что все Ок

{
    "ok": true,
    "result": {
        "message_id": 63,
        "from": {
            "id": 123456789,
            "is_bot": true,
            "first_name": "Представление имени моего бота",
            "username": "unikalnoe_imya_bot"
        },
        "chat": {
            "id": 882646417,
            "first_name": "u0410u043bu0435u043au0441u0430u043du0434u0440",
            "last_name": "u041bu0435u043eu043du043eu0432",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585714087,
        "text": "u041fu0440u0438u0432u0435u0442 u043cu0438u0440!"
    }
}

У метода sendMessage есть еще ряд необязательных параметров, один из них это parse_mode, который включает нужный синтаксис оформления текста сообщения. Таких режимов два — HTML и Markdown

Проще говоря, этот параметр говорит по каким правилам должно оформляться сообщение

Я приведу пример отправки сообщения в синтаксисе HTML

МойToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
АдресTelegramAPI = "api.telegram.org";
ПроксиАдрес = "159.138.22.170";
ПроксиПорт = 3128;

ЧатID = "882646417";
ТекстСообщения = "<b>Жирный</b>, <strong>Жирный</strong>
        |<i>Курсив</i>, <em>Курсив</em>
        |<a href=""//infostart.ru/"">Ссылка на Infostart</a>
        |<code>встроенный код фиксированной ширины встроенный код фиксированной ширины встроенный код фиксированной ширины</code>
        |<pre>предварительно отформатированный кодовый блок  фиксированной  ширины</pre>";

Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", ПроксиАдрес, ПроксиПорт);
Прокси.Установить("http", ПроксиАдрес, ПроксиПорт);

СоединениеHTTP = Новый HTTPСоединение(АдресTelegramAPI,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());

АдресЗапроса = "bot" 
                  МойToken 
                  "/sendMessage"
                  "?chat_id=" 
                  ЧатID
                  "&text=" 
                  ТекстСообщения
                  "&parse_mode=HTML";
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
Попытка
   ОтветHTTP = СоединениеHTTP.Получить(ЗапросHTTP);
   Сообщить(ОтветHTTP.ПолучитьТелоКакСтроку());
Исключение
   ВызватьИсключение "Ошибка отправки сообщения";
КонецПопытки;

В чат при этом запросе прилетит вот такое сообщение

Про сертификаты:  Купить алюминиевый лист - цена в Москве. Алюминиевый лист АМг, АМц, А5

Показ привью отправленной ссылки можно отключить с помощью параметра disable_web_page_preview

Для этого нужно к запросу добавить строку &disable_web_page_preview=true

Также у метода есть параметр reply_to_message_id, который принимает идентификатор сообщения, на которое делается ответ.

Получение сообщений

Для получения сообщений существуют 2 совершенно разных способа

Примеры сообщений с типом message

{
    "update_id": 910197306,
    "message": {
        "message_id": 86,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585918817,
        "text": "Привет"
    }
}
{
    "update_id": 910197307,
    "message": {
        "message_id": 87,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585918914,
        "photo": [{
                "file_id": "AgACAgIAAxkBAANXXoczwpsWTe0vVGbgqoIE2F-QLUMAAsawMRuPMzhI42EHxc1ukRTFUsWSLgADAQADAgADbQADL3YAAhgE",
                "file_unique_id": "AQADxVLFki4AAy92AAI",
                "file_size": 6109,
                "width": 320,
                "height": 116
            }, {
                "file_id": "AgACAgIAAxkBAANXXoczwpsWTe0vVGbgqoIE2F-QLUMAAsawMRuPMzhI42EHxc1ukRTFUsWSLgADAQADAgADeAADMHYAAhgE",
                "file_unique_id": "AQADxVLFki4AAzB2AAI",
                "file_size": 21653,
                "width": 800,
                "height": 289
            }, {
                "file_id": "AgACAgIAAxkBAANXXoczwpsWTe0vVGbgqoIE2F-QLUMAAsawMRuPMzhI42EHxc1ukRTFUsWSLgADAQADAgADeQADLXYAAhgE",
                "file_unique_id": "AQADxVLFki4AAy12AAI",
                "file_size": 29564,
                "width": 1080,
                "height": 390
            }
        ]
    }
}

 {
«update_id»: 910197308,
«message»: {
«message_id»: 88,
«from»: {
«id»: 882646417,
«is_bot»: false,
«first_name»: «Александр»,
«last_name»: «Леонов»,
«username»: «Rentgengl»,
«language_code»: «ru»
},
«chat»: {
«id»: 882646417,
«first_name»: «Александр»,
«last_name»: «Леонов»,
«username»: «Rentgengl»,
«type»: «private»
},
«date»: 1585918960,
«document»: {
«file_name»: «планческие-скалы-собер-баш.gpx»,
«mime_type»: «application/octet-stream»,
«file_id»: «BQACAgIAAxkBAANYXocz8Iiqq7kpgxE3bIEdkzgg9lEAAscIAAKPMzhIERX5PAABX3kxGAQ»,
«file_unique_id»: «AgADxwgAAo8zOEg»,
«file_size»: 25422
}
}
}

{
    "update_id": 910197309,
    "message": {
        "message_id": 89,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585918994,
        "voice": {
            "duration": 2,
            "mime_type": "audio/ogg",
            "file_id": "AwACAgIAAxkBAANZXoc0ErVnVqUEVoHi4zcfqzu49h4AAsgIAAKPMzhIZr__wXIAAc3bGAQ",
            "file_unique_id": "AgADyAgAAo8zOEg",
            "file_size": 7373
        }
    }
}
{
    "update_id": 910197310,
    "message": {
        "message_id": 90,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585919030,
        "location": {
            "latitude": 37.236881,
            "longitude": 39.827734
        }
    }
}
{
    "update_id": 910197311,
    "message": {
        "message_id": 91,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585919128,
        "poll": {
            "id": "5203966058699948035",
            "question": "Как тебе такое Илон Маск",
            "options": [{
                    "text": "Да",
                    "voter_count": 0
                }, {
                    "text": "Нет",
                    "voter_count": 0
                }
            ],
            "total_voter_count": 0,
            "is_closed": false,
            "is_anonymous": true,
            "type": "regular",
            "allows_multiple_answers": false
        }
    }
}
{
    "update_id": 910197322,
    "message": {
        "message_id": 100,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585920052,
        "contact": {
            "phone_number": "88777898892",
            "first_name": "",
            "vcard": "BEGIN:VCARDnVERSION:3.0nFN:nORG:nTITLE;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=93=D0=BE=D1=80=D0=B3=D0=B0=D0=B7nTEL;CELL:8877789-88-92nEND:VCARD"
        }
    }
}
{
    "update_id": 910197324,
    "message": {
        "message_id": 102,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585920216,
        "audio": {
            "duration": 201,
            "mime_type": "audio/mp3",
            "title": "90",
            "performer": "Монеточка",
            "file_id": "CQACAgIAAxkBAANmXoc4ft2Lvo9TAxiyyCcUq1ipBnAAAswIAAKPMzhI7jXuFr4VwA8YBA",
            "file_unique_id": "AgADzAgAAo8zOEg",
            "file_size": 8080469
        },
        "caption": "Музычка"
    }
}
{
    "update_id": 910197317,
    "message": {
        "message_id": 95,
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "chat": {
            "id": 882646417,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "type": "private"
        },
        "date": 1585919845,
        "text": "Кнопка 1"
    }
}
{
    "update_id": 910197312,
    "callback_query": {
        "id": "3790937497865976306",
        "from": {
            "id": 882646417,
            "is_bot": false,
            "first_name": "Александр",
            "last_name": "Леонов",
            "username": "Rentgengl",
            "language_code": "ru"
        },
        "message": {
            "message_id": 92,
            "from": {
                "id": 1148631456,
                "is_bot": true,
                "first_name": "Имя моего бота",
                "username": "LeonGLbot"
            },
            "chat": {
                "id": 882646417,
                "first_name": "Александр",
                "last_name": "Леонов",
                "username": "Rentgengl",
                "type": "private"
            },
            "date": 1585919611,
            "text": "Внимание, опросnКак тебе такое, Илон Маск?",
            "entities": [{
                    "offset": 0,
                    "length": 15,
                    "type": "bold"
                }, {
                    "offset": 16,
                    "length": 26,
                    "type": "italic"
                }
            ],
            "reply_markup": {
                "inline_keyboard": [
                    [{
                            "text": "Обычная кнопка",
                            "callback_data": "ОтветНаСообщение1"
                        }
                    ],
                    [{
                            "text": "Ссылка",
                            "url": "//infostart.ru/"
                        }, {
                            "text": "Переслать контакт",
                            "switch_inline_query": "Это отличный канал"
                        }, {
                            "text": "Ответить каналу",
                            "switch_inline_query_current_chat": "Это точно"
                        }
                    ]
                ]
            }
        },
        "chat_instance": "2548144641495767324",
        "data": "ОтветНаСообщение1"
    }
}

Проблема с сертификатом в telegram

Использую сервер с ISPmanager 5.8, ОС Ubuntu Server 16.04.
Порт 443 открыт, доступ извне есть. Генерирую ключ такой командой:

openssl req -newkey rsa:2048 -sha256 -nodes -keyout tele.key -x509
-days 365 -out tele.pem -subj «/C=RU/ST=Krasnodar Krai/L=Tuapse/O=telegram/CN=tele.zhirov.su»

Далее, что я делаю… Через Sublime открываю tele.key и tele.pem, копирую код в ISPmanager при создании сертификатавведите сюда описание изображения

В доменном имени сайта прикрепляю этот сертификат — всё успешно. Браузер видит сертификат.

Далее — отправляю телеграму tele.pem ключ:

<form action="https://api.telegram.org/botТОКЕНБОТА/setwebhook" enctype="multipart/form-data">
        <input type="hidden" name="url" value="https://tele.zhirov.su/bot.php">
        <input type="file" name="certificate">
        <input type="submit" value="Отправить данные">
    </form>

В ответ приходит:

{«ok»:true,»result»:true,»description»:»Webhook was set»}

Проверяю командой getWebhookInfo, получаю такое на выходе:

{«ok»:true,»result»:{«url»:»https://tele.zhirov.su/bot.php«,»has_custom_certificate»:false,»pending_update_count»:0,»last_error_date»:1485273410,»last_error_message»:»SSL
error {336134278, error:14090086:SSL
routines:ssl3_get_server_certificate:certificate verify
failed}»,»max_connections»:40}}

Так же пробовал отправлять и такой командой через терминал:

curl -F "url=https://tele.zhirov.su/bot.php" -F "certificate=tele.pem" "https://api.telegram.org/botТОКЕНБОТА/setwebhook"

Что делать, я уже не знаю… Может сертификат не правильно добавляю или отправляю?

Прокси

Прокси нужен для обхода блокировок РосКомНадзора, если у вас провайдер не блокирует сайт telegram.org, то прокси можно не создавать.

Самое главное: сквозное шифрование в telegram по умолчанию не используется

Первое, что нужно знать о Telegram: в «облачных» чатах — так Telegram называет стандартный тип чатов, которые используются по умолчанию, — не применяется сквозное шифрование. Что такое сквозное шифрование и почему оно важно для безопасности переписки — можно прочитать тут.

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

Соединение

В документации написано:

Оцените статью
Мой сертификат
Добавить комментарий