В Telegram из 1С: сообщения с эмодзи (смайлы, пиктограммы, иконки) пользователям и группам

Обработка отправляет сообщения с эмоджи (смайлы, иконки, пиктограммы) пользователю или группе в Телеграм. Она также показывает список пользователей и групп, которые связывались с Вашим ботом, из этого списка можно выбрать получателя сообщения.

Обработка представлена как простой пример, публикую ее т.к. сам не сразу нашел ответ на вопрос, как отправить смайлы в Телеграм из 1С. Проверена на платформе 8.3.10.2753 и 8.3.11.3133.

Перед отправкой сообщений нужно заполнить настройки.

Настройки

Токен: API-токен Вашего бота, который Вы получили от @BotFather при создании бота в Телеграм. Если бота у Вас еще нет — заведите его, уйдет полминуты, в результате чего @BotFather Вам сообщит что-то вроде этого:

Use this token to access the HTTP API 123456789:AAbbCC00ddEEffGGhhIgKLmnopQFK3-KLAA

Прокси: любой https или socks5 прокси за пределами юрисдикции РКН. Я использую Tor-браузер: если его запустить, то в системе появится  локальный socks5 прокси, использующий сеть тор. На скрине выше именно тор-прокси используется эской. Это и бесплатно, и быстро, и стабильно. Бесплатный сторонний сервер может работать медленно или стать недоступным, в этом случае настройки прокси для Telegramm придется менять. Сеть же Tor работает отлично, и РКН до нее пока не добрался. Если Ваш прокси https — заполняйте настройку без префикса https://. Если socks5 — заполняйте с префиксом socks5:// как на скрине.

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

Для отправки сообщения нужно, чтобы получатель один раз дал на это свое "согласие". Согласие выражается в том, что пользователь отправит хотя бы одно сообщение Вашему боту или просто найдет его в Телеграмм и нажмет кнопку START. Для отправки сообщения в группу просто подпишите своего бота в эту группу. После того, как пользователи или группы "засвидетельствовали" свое согласие получать сообщения от Вашего бота — нажмите кнопку Показать таблицу получателей. Внизу обработки выведется таблица для выбора получателя сообщения. Выберите двойным щелчком строку таблицы с нужным получателем, напишите текст сообщения, кликните нужные пиктограммы (в текст отправки будут вставляться html-тэги иконок) и жмите Отправить сообщение.

Сохраните где-нибудь ИД получателей — если в течение 24 часов пользователь не отправит Вашему боту ни одного сообщения — то этот пользователь перестанет появляться в таблице получателей. Отправлять ему сообщения Вы по прежнему сможете, для этого ИД нужно будет ввести вручную в поле Получатель. То же самое произойдет с ИД группы, если в группе не будет сообщений в течение 24 часов. Если не записали или потеряли ИД получателей — просто попросите их еще раз отправить сообщение боту, в таблице они снова будут появляться в течение 24 часов.

Технические детали.
Большая часть emoji в Telegram — одиночные символы таблицы юникода, как обычные буквы алфавита. Чтобы отправить такие символы по API в GET-запросе (…/SendMessage?text=…), их нужно предварительно URL-кодировать, как, впрочем, и русские буквы. Например, чтобы отправить русский текст "рука" полюс иконку ладони (это  символ юникода с порядковым номером 9995), надо использовать

КодироватьСтроку("рука" + Символ(9995), СпособКодированияСтроки.КодировкаURL);

Но подобный код не будет работать для юникод-символов с порядковым номером больше 65535, просто потому что 1C с ними не умеет работать. А именно в этом диапазоне большинство смайлов. Есть вариант сразу узнать binhex нужного символа, закодированного в UTF-8. В этом случае нужно между байтами binhex поставить знаки % — и мы получим готовый URL-кодированный символ для параметра GET в Телеграм. Моя обработка работает не с binhex, а с десятичными порядковыми номерами символов в таблице юникода. Обработка сама переводит номер символа за пределами понимания эски (например смайл 128512) в URL — кодированный вид. Иными словами, с символом номер 128512 обработка сделает то же, что делал бы код эски:

КодироватьСтроку(Символ(128512), СпособКодированияСтроки.КодировкаURL);

 если бы эска умела работать с символами юникода за пределами границы 65535.

17 Comments

  1. Dwiss

    {ВнешняяОбработка.ОтправитьТелеграмму.МодульОбъекта(10)}: Ошибка при вызове метода контекста (Получить)

    ХттпОтвет = ХттпСоединение.Получить(ХттпЗапрос);

    по причине:

    Ошибка работы с Интернет: Не могу установить соединение

    тор установлен, в нем все проходит в 1С нет

    {«ok»:true,»result»:{«id»:753458953,»is_bot»:true,»first_name»:»virtex_bot»,»username»:»vrtks_bot»}}

    Reply
  2. uno-c

    Тор-браузер должен быть запущен, и порты он бывает разные открывает 9150 или 9050. Если тор-браузер работает нормально с АПИ телеграмма — можно посмотреть в настройках его прокси, и такие же поставить в обработку. Например Если в браузере в прокси написано 127.0.0.1 порт 9150 и работает — то попробуйте прописать в обработке socks5://127.0.0.1 и порт 9150. Если используете тор-консоль — то она выводит при запуске какой порт слушает.

    Reply
  3. Dwiss

    https://habr.com/ru/sandbox/115268/

    Пробовал и так и так не проходит из 1С

    127.0.0.1 порт 9050

    и как у вас на картинке с открытым браузером

    Reply
  4. uno-c

    у Вас файловая база?

    Reply
  5. Dwiss

    да

    Reply
  6. uno-c

    А другой браузер, например Firefox (не Tor), через прокси тора работает? Проверить можно на 2ip.ru, что не Ваш комп светится.

    Reply
  7. Dwiss

    нет

    Reply
  8. uno-c

    значит недоустановилось в нем что-то. Можно перегрузить комп. Или попробовать консольный тор, только он логин/пароль у меня требовал, любой лишь бы был. Консоль кстати и удобней — совсем маленький exe-шник, я в последнее время им пользовался при отладках всяких интеграций 1С и телеграмма. Единственное — еще рекомендую в настройках запретить exit-node российские. А то получится точка выхода из тора опять под РКНом, и снова никакого телеграмма 🙂

    Reply
  9. Dwiss

    не помогло

    Reply
  10. uno-c

    И консольный не? Настройки с которыми у меня сейчас консольный работает прикрепил в картинке.

    Reply
  11. Dwiss

    Может тор не настроен? но в нем все работает

    Reply
  12. Dwiss

    через tor.exe тоже самое

    Reply
  13. uno-c

    Даже не знаю, что еще предположить, смотреть надо. Попробуйте vpn бесплатный. Я пользую hide.me, на месяц бесплатно 2 гига дают, каждый месяц заходить продлевать надо. Выйти на hide.me чтоб зарегистрироваться надо в обход РКН (через тот же тор-браузер), а сам их VPN пока нормально подключается РКН не блокирует. Только в обработке в модуле объекта уберите везде прокси из HTTPсоединений, если через vpn пойдете. Вместо

    ХттпСоединение = Новый HTTPСоединение(«api.telegram.org»,,,,ИнетПрокси,,Новый ЗащищенноеСоединениеOpenSSL);

    нужно без ИнетПрокси

    ХттпСоединение = Новый HTTPСоединение(«api.telegram.org»,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
    Reply
  14. Dwiss

    спс. так работает, чего с тором не могу понять

    Reply
  15. uno-c

    Кстати tor.exe консольный. Чтобы мы правильно друг друга понимали — я имел в виду Tor Expert Bundle, например с этой страницы https://2019.www.torproject.org/download/download. Он когда запускается — консоль висит, и если например неверное подключение к нему указать — без socks5:// например просто 127.0.0.1 или логин/пароль пустой оставить — он прямо в консоли выводит сообщения, что что-то не так, типа вы пытаетесь подключиться через https прокси, а я только socks5 работаю и тд.

    Reply
  16. Dwiss

    именно его и запускаю он показывает и Ip и порт и пытается ломиться но не получается у него

    Reply
  17. uno-c

    Да, странно, не сталкивался с подобным. Очень редко тор раньше не пропускал к api.telegram.org, как я понял, это когда точка выхода тора в России оказывалась. Путем настроек в файле torrc этот момент обходил.

    DataDirectory ..DataTor
    GeoIPFile ..DataTorgeoip
    GeoIPv6File ..DataTorgeoip6
    ExcludeExitNodes {ru}

    и запуск батником

    tor.exe -f torrc
    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *