Создание телеграм бота с гугл авторизацией, обратными вызовами и уведомлениями об обновлении через сервер-маршрутизатор

Публикация № 932874 07.11.18

Интеграция с оборудованием и сервисами - WEB-интеграция

telegram google oauth2 auth api http rest nginx 3proxy proxy putty bot webhook restful server iis inline keyboard mtproxy messenger

Статья детально рассказывает обо всех аспектах настройки телеграм бота, работающего через сервер-маршрутизатор посредством обратных вызовов. Приведены примеры работы отправки/исправления сообщений, отправки файлов, работы с внутренними и встроенными запросами. Создание клавиатуры. Авторизация пользователей через gmail.

 TELEGRAM INLINE WEBHOOK BOT 

ОГЛАВЛЕНИЕ

  1. ВМЕСТО ПРЕДИСЛОВИЯ
  2. 1С REST СЕРВЕР
  3. НАСТРОЙКА ПРОКСИ СЕРВЕРА
  4. ТЕЛЕГРАМ БОТ
  5. OAUTH2, GOOGLE ПРИЛОЖЕНИЕ
  6. АРХИТЕКТУРА API
  7. ПОЛУЧЕНИЕ СООБЩЕНИЙ
  8. ОТПРАВКА СООБЩЕНИЙ
  9. ОТРИСОВКА КЛАВИАТУРЫ
  10. РЕАЛИЗАЦИЯ АВТОРИЗАЦИИ
  11. ОТПРАВКА ФАЙЛОВ
  12. ИСПРАВЛЕНИЕ СООБЩЕНИЙ
  13. ОБРАТНЫЕ ЗАПРОСЫ
  14. ВСТРОЕННЫЕ ЗАПРОСЫ

ЧАСТЬ 0. ВМЕСТО ПРЕДИСЛОВИЯ

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

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

Например зачастую люди пытаются “слушать обновления” бота и для этого они могут крутить метод getUpdates в цикле, регламентным заданием, планировщиком, еще каким извращением. В лучшем случае они знают про существование “long polling”. Но все равно это является очень и очень спорным решением.

Возможно кто то хотел использовать webhook’и, но столкнулся с недоступностью использования портов, поддерживаемых телеграммом.

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

В рамках серии статей я подробно разберу как сделать отличный inline webhook бот с постоянным доступом к api телеграмма. А бонусом вы получите собственный прокси сервер для сотрудников и друзей.

Статья будет дополнятся по мере возникновения вопросов, рекомендаций и спорных моментов.

Пример решаемой задачи

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

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

  • Рассылка сообщений в группы и авторизовавшимся пользователям
  • Получение уведомлений RESTful интерфейсом ИБ от серверов телеграмма
  • Отправка файлов
  • Редактирование сообщений
  • Создание клавиатуры (кнопки расположенные в несколько рядов и прикрепленные к сообщению)
  • Встроенные запросы и ответы на них
  • Авторизация в боте с помощью Google OAuth2 и сопоставление телеграмм аккаунта, почты и пользователя информационной базы
  • Некоторые хитрости архитектуры и оформления сообщений

А задачей будет удобное визирование заявок на оплату через мессенджер в cash flow подсистеме ИБ (казначействе). Ожидаемый порядок действий при визировании:

  1. Пользователь создает и подготавливает заявку на оплату
  • уведомляются авторизованные следующие звенья с возможностью принять или отклонить заявку из мессенджера
  • информация о созданной заявке отправляется в группу с прикрепленным документом
  1. Заявка согласовывается с держателем бюджета
  • уведомляются авторизованные следующие звенья с возможностью принять или отклонить заявку из мессенджера
  • обновляется информация в ранее отправленных сообщениях
  1. Заявка согласовывается с финансовым менеджером
  • уведомляются авторизованные следующие звенья с возможностью принять или отклонить заявку из мессенджера
  • обновляется информация в ранее отправленных сообщениях
  1. Утверждается казначеем
  • обновляется информация в ранее отправленных сообщениях

Последовательность настройки

Итак, что же нам потребуется для реализации?

  • VPS хостинг с любой операционкой (Я советую Debian или Ubuntu, тк по ним куча документации)
    • Цена вопроса 1-2$/мес это единственное за что придется платить, но как по мне, это мизерная цена для обхода любых блокировок и запуска удобного бота (нагрузка на сервер не ощущается даже при 50 активных клиентов http/socks5 прокси и проксирующего nginx)
    • putty
    • 3proxy
    • nginx
    • самоподписанный SSL сертификат (разберу получение)
  • Настроить web приложение 1С
    • Веб сервер (буду разбирать на примере iis)
    • http сервисы (можно и в расширении, если автоматизируете бухгалтерию или зуп на поддержке, ничего не придется снимать с последней)
    • Пробросить 1 любой порт для взаимодействия с телеграммом (опционально, если будет VPN тунель с хостингом)
  • Телеграмм бот
    • Включенный inline режим
    • Включенный webhook
  • Google OAuth2 приложение для веб сервера
    • client id
    • redirect url
    • secret key
    • scopes
  • 1С бэкэнд (в расширении)
    • restful api
    • общие модули и обработки по желанию
    • регистры сведений

Полезные ссылки

// API Telegram
https://core.telegram.org/bots/api

// Google OAuth2
https://console.cloud.google.com/apis/credentials/oauthclient/
https://developers.google.com/identity/protocols/OAuth2WebServer
https://developers.google.com/oauthplayground

// Putty
https://www.putty.org/
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-9
https://habr.com/post/127521/

// Nginx
https://nginx.org/ru/
https://wiki.archlinux.org/index.php/Nginx_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)

// 3proxy socks5 proxy server
https://www.3proxy.ru/

// MTProxy
https://github.com/TelegramMessenger/MTProxy

// Сервис для отладки проксирования webhook'ов телеграма:
https://www.webhookapp.com/

 


ЧАСТЬ 1. 1С REST СЕРВЕР

Инструкция настройки IIS 8.5 для 1Сv8.3

Основные шаги хорошо описаны тут: //infostart.ru/public/275820/

От себя хотелось бы добавить очевидное, при установке платформы 1с не забывайте выбирать установку web компонентов.

Естественно, вместо IIS вы можете использовать и Apache

Проброс портов

Необходимо пробросить один, произвольный порт для приема webhook уведомлений и публиковать по нему базу. Не обязательно, если организуем доступ к серверу через тунель. Распишу поподробнее, если возникнут проблемы.

Телеграм API может отсылать вебхуки только на порты 443, 80, 88, 8443, но используя проксирующий nginx это ограничение нам не важно.

Выделенный IP

Нам потребуется организовать доступ к нашему серверу. Если у нас есть выделенный ip и мы пробросили порт, то тут “все”.

Если выделенного ip у нас нет, то надо или организовать тунель (VPN) между сервером 1с и nginx сервером или использовать такие сервисы как https://www.noip.com/.

Опционально, для красоты (ну или если вам захочется в дальнейшем не самоподписанный сертификат, а бесплатный от lets encrypt) покупаем симпатичный домен и привязываем либо к 1с серверу, либо к nginx (зависит от планируемой архитектуры).
Это около 300 рублей/год.

Распишу подробнее если возникнут вопросы.

Поднятие http сервисов (REST) в 1С

Для того, чтоб опубликовать наш rest интерфейс из 1C Я советую придерживаться следующей последовательности:

 

  1. Запустить конфигуратор от имени администратора
  2. Создадим пользователя, от имени которого будут запускаться http сервисы если в вашей базе организован доступ по паре логин/пароль
  3. Создадим в расширении или основной конфигурации http сервис с названием “api” (название может быть произвольным), Я буду показывать на примере расширения
  4. Администрирование > Публикация на веб-сервисе
  5. В открывшемся окне выбираем имя публикациивеб-серверкаталог публикации (убедитесь в достаточных правах доступа для веб службы)
  6. Отмечаем необходимые галочки, если необходимо публиковать что-то помимо http сервисов.
  7. На вкладке “HTTP сервисы” отмечаем галочкой либо “api” если создавали напрямую в конфигурации, либо “Публиковать HTTP сервисы расширений по умолчанию” если создавали http сервис в расширении.
  8. (опционально) На вкладке “Прочие” задаем размер пула соединений и время жизни соединения (можно поставить подольше, чтоб первое обращение к вебсерверу не было долгим), включаем отладку.
  9. Нажимаем кнопку “Опубликовать

 

 

После этого в каталоге публикации (по умолчанию это “C:\inetpub\wwwroot\{base_name}”) появится файл default.vrd

Можем подредактировать его блокнотом.

Перед изменением и после него советую делать бэкапы этого файла: {yyММdd}_default.vrd.src

А также ставить пометку readonly на сам файл default.vrd

Вот как, примерно, он будет выглядеть:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		base="/YOUR_BASE_NAME_URL"
		ib="Srvr=&quot;localhost&quot;;Ref=&quot;YOUR_BASE_NAME&quot;;Usr=&quot;YOUR_HTTP_USER_NAME&quot;;Pwd=&quot;YOUR_HTTP_PASSWORD&quot;;"
		enable="false"
		allowexecutescheduledjobs="">
	<debug enable="true"
			protocol="http"
			url=""/>
	<ws enable="false" pointEnableCommon="false" />
	<httpServices publishExtensionsByDefault="true">
		<service name="api" 
		rootUrl="api" 
		enable="true" 
		reuseSessions="dontuse" 
		sessionMaxAge="20" 
		poolSize="10" 
		poolTimeout="20"/> 
	</httpServices>
	<standardOdata enable="false"
			reuseSessions="autouse"
			sessionMaxAge="20"
			poolSize="10"
			poolTimeout="5"/>
</point>

Прошу обратить внимание на тэг “httpServices” и организацию анонимного доступа (чтоб не требовало ввода логина/пароля и заходило через определенного пользователя) с помощью атрибута “ib”. Атрибутом “base” задается URL вашей базы.


ЧАСТЬ 2. НАСТРОЙКА ПРОКСИ СЕРВЕРА

Если прям сейчас не возможно арендовать VPS, можете временно пропустить эту часть и для отладки проксирования webhook'ов телеграма использовать предложенный pallid сервис:
https://www.webhookapp.com/

Советую логиниться на купленном сервере по сертификату, а не по паролю. Это и гораздо надежнее и удобнее и быстрее:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-9
https://habr.com/post/127521/

 

Аренда VPS сервера

Для дальнейшей настройки нам потребуется выделенный сервер (VPS). Нам не нужна мощная зверь-машина, достаточно самой минимальной комплектации за 1-3$/мес.

Найдем не лояльного к царской верхушке ограничениям роскомнадзора и соблюдениям “законодательства” хостера в белой стране (советую посмотреть в сторону Швеции, Нидерланд, Германии и тому подобных). Арендуем сервер, выбрав осью Ubuntu Server (можете и любую другую с чем привыкли работать, лично я предпочитаю Debian).

Если работаете под виндой, скачиваем putty, в противном случае у Вас уже наверняка есть ssh клиент.

Соединяемся с сервером по выбранному логину/паролю или сертификату.

Дальнейшие команды будут подразумевать наличие прав супер пользователя (su) или умение говорить от его имени (su do). И знакомство с управлением пакетами в вашей оси (apt, apt-get, pacman, yum)

Обновляем пакеты:

apt update && apt upgrade

Ставим необходимые пакеты, проводим нужную вам настройку.

Например я первым делом ставлю: ufwzshmcgitwgethtop, tmux

Socks5 прокси с 3proxy

apt install 3proxy

Правим конфиг:

nano /etc/3proxy/3proxy.cfg
nserver 8.8.8.8
nserver 77.88.8.8
nscache 65536
timeouts 1 5 30 60 180 1800 15 60
users $/etc/3proxy/.proxyauth
daemon
log /var/log/3proxy/3proxy.log D
logformat "- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
auth cache strong
proxy -n -p8080 -a
socks -p1080
admin -p8088

Добавляем логины и пароли авторизации:

nano /etc/3proxy/.proxyauth
{YourLogin1}:CL:{YourPassword1}
{YourLogin2}:CL:{YourPassword2}
{YourLogin3}:CL:{YourPassword3}

MTProxy

Вся настройка расписана в репозитории MTProxy телеграмма:

https://github.com/TelegramMessenger/MTProxy

Поставим зависимости

apt install git curl build-essential libssl-dev zlib1g-dev

Клонируем репу и переходим в полученный каталог

git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy

Собираем

make && cd objs/bin

Получаем секрет

curl -s https://core.telegram.org/getProxySecret -o proxy-secret

Получим конфигурацию

curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf

Генерируем секрет для пользователей

head -c 16 /dev/urandom | xxd -ps

Запускаем

./mtproto-proxy -u nobody -p 8888 -H 443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1

Желательно установить данное приложение как службу в вашем init или systemd.

 

Создание сертификата

SSL для работы применяет сочетание закрытого ключа и открытого сертификата. Ключ находится на сервере и доступа к нему нет. Сертификат же доступен всем пользователям, которые загружают контент с сервера. Для создания самоподписанного SSL и ключа нам нужно набрать в командной строке:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

На экране вы увидите несколько вопросов. Из компонентов команды можно выделить:

• Openssl – это базовый инструмент командной строки. Он нужен для создания и управления сертификатами, а также файлами OpenSSL и ключами;

• Подкоманда req показывает, что требуется запрос для подписи сертификата X.509 (CSR). Это стандарт инфраструктуры для открытых ключей, для управления сертификатами;

• Опция –x509 способна вносить поправки в предыдущую команду. Они сообщает о том, что нужно создать самоподписанный сертификат вместо запроса на его подпись;

• -nodes служит для пропуска опции защиты SSL-сертификата с помощью пароля. Это необходимо для тог, чтобы Nginx при запуске считывал файл без необходимости вмешательства пользователя. Если поставить пароль – его нужно будет вводить после каждой перезагрузки;

• Опция -days365 поможет задать срок действия сертификата;

• Параметр -newkey rsa:2048 дает возможность сделать одновременно сертификат и ключ, ведь он не был создан ранее. Число 2048 значит, что ключ будет на 2048 бит;

• Строка -keyout показывает, куда OpenSSL переместит полученный файл ключа;

• Опция -out делает то же самое, но для сертификата. С помощью вышеописанных опций вы сможете сгенерировать одновременно сертификат с ключом. Вам нужно лишь указать данные сервера, отображающиеся в SSL.

Строка common name очень важна. В нее нужно написать свое имя или полное доменное имя вашего сервера. Простыми словами: она нужна для связи с сервером доменного имени. Если его нет, укажите IP сервера. Поля будут выглядеть как-то так:

Common Name (e.g. server FQDN or YOUR name) []:{YOUR_PROXY_ADDRESS}

Обратите внимание, что файлы сертификата и ключа будут перемещены в папку /etc/nginx/ssl.

Если применять OpenSSL, вам предстоит также сделать специальные ключи Диффи-Хеллмана для поддержки PFS. Чтобы это сделать, наберите в командной строке:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Подождите несколько минут пока сгенерируются ключи. Они будут размещены в каталоге /etc/ssl/certs/dhparam.pem.

Проксирование запросов с nginx

Созданные нами ключи хранятся в папке: /etc/ssl. Теперь нам нужно будет внести правки в настройки веб-сервера Nginx

Установим сам nginx

apt install nginx
  1. В первую очередь – создать сниппет, показывающий папку, в которой хранятся SSL и ключ. Новый сниппет для Nginx создаем в папке /etc/nginx/snippets. Мы советуем вам отразить его назначение в названии. Наберите в консоли:
nano /etc/nginx/snippets/self-signed.conf

В файл добавим правило ssl_sertificate, указывающее путь к нашему сертификату. Кроме того, нам потребуется директива ssl_sertificate_key для пути к ключу:

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
  1. Теперь потребуется добавить настройки сертификата с помощью еще одного сниппета. Это позволит нам получить надежный механизм шифрования с помощью дополнительных возможностей безопасности. Заданные параметры получится применять в будущих конфигурациях веб-сервера Nginx. Дайте файлу какое-нибудь общее имя:
sudo nano /etc/nginx/snippets/ssl-params.conf

Настроим DNS-распознаватель для запросов с восходящего канала, а также добавим ssl_dhparam для поддержки ключей Диффи-Хеллмана. Получится вот так:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;

Учтите, что из-за самоподписанности сертификата, не будет использоваться SSL stapling. При этом сервер Nginx покажет предупреждение, выключит stapling для этого SSL и продолжит работать. Теперь сохраним изменения и закроем файл.

  1. И последнее: настроить обслуживание запросов SSL и их редирект. Эти настройки хранится в папке /etc/nginx/sites-available.

Создадим конфиг нового сайта (поменяйте адреса на свои):

nano /etc/nginx/sites-available/telegram.conf
server {
        listen 8443 ssl http2 default_server;
        listen [::]:8443 ssl http2 default_server;
        server_name {YOUR_PROXY_ADDRESS};
        include snippets/self-signed.conf;
        include snippets/ssl-params.conf;
        location /base1s/hs/api/telegram {
                proxy_pass https://{YOUR_BASE_ADDRESS}:{YOUR_BASE_PORT}/{YOUR_BASE_NAME}/hs/api/telegram;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                client_max_body_size 100M;
        }
}

Активируем сайт:

ln -s /etc/nginx/sites-available/telegram.conf /etc/nginx/sites-enabled/telegram.conf

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

nginx -t

Если все правильно, на экране вы увидите:

nginx: [warn] "ssl_stapling" ignored, issuer certificate not found
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

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

После этого потребуется перезапуск веб-сервера Nginx с помощью:

systemctl restart nginx

Настроим брандмауэр

Если используете брандмауэр ufw, то тут все просто, разрешаем порты:

ufw allow 8443
ufw allow 1080
ufw allow 443

 

 


ЧАСТЬ 3. ТЕЛЕГРАМ БОТ

Создадим бота

Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:

  • Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут

  • Добавляем к себе в контакт-лист бота с именем @BotFather

  • Запускаем процедуру "общения" с ботом нажатием кнопки Start. Далее перед нами предстанет список команд точно как на скриншоте.

  • Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot. Например, OnesBot или Ones_bot.

  • После создания бота, обратите внимание на строку с текстом:

    Use this token to access the HTTP API:

    За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

    • Присвоить боту описание
    • Установить аватар
    • Поменять token
  • С помощью меню включаем для бота Inline mode

  • Если необходимо - включаем для бота возможность работать с групами

 

Протестируем бота

Добавим бота к себе в контакт лист и инициируем с ним общение нажатием кнопки “start

 

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

 

Напишем боту произвольную фразу.

 

Для работы с http запросами я крайне рекомендую софтину postman, но для определенной унификации запросы буду писать с синтаксисом утилиты curl

Затем вобьём в адресную строку браузера (или с помощью curl на своем новом хосте) следующий запрос:

curl https://api.telegram.org/bot{YOUR_TOKEN}/getUpdates

В полученном JSON мы увидим свое сообщение.

Ответим себе от имени бота:

curl https://api.telegram.org/bot{YOUR_TOKEN}/sendMessage?chat_id={YOUR_ID_FROM_JSON}&text=TEST

От бота вам придет сообщение.

Таким образом можно проверять сообщения боту (long polling) и делать рассылку или реакцию на запрос.

Но long polling это не лучшее решение в плане надежности и нагрузки, да и вряд ли вам нужно бесконечное регламентное задание и хранение offset’а и прочих возможных точек отказа.

Вебхуки

Следующей командой научим нашего бота обращаться к настроенному proxy серверу по определенному порту. А также скормим наш сертификат. С помощью curl’a выполним запрос:

curl -F "url=https://{YOUR_PROXY_ADDRESS}:8443" -F "certificate=@/etc/ssl/certs/nginx-selfsigned.crt" "https://api.telegram.org/bot{YOUR_TOKEN}/setWebhook"

Затем выполним еще один запрос для того,чтоб получить информацию об успешности наших действий:

curl "https://api.telegram.org/bot{YOUR_TOKEN}/getWebhookInfo"

Ответ мы должны получить в JSON формате следующий:

{
    "ok": true,
    "result": {
        "url": "https://{YOUR_PROXY_ADDRESS}:8443",
        "has_custom_certificate": true,
        "pending_update_count": 0,
        "max_connections": 40
    }
}

Если получили нечто другое - разруливаем ошибку.

Если все сделали правильно - теперь телеграм будет самостоятельно отправлять запросы на указаный URL. А в нашем случае nginx будет пересылать эти запросы 1С.

В случае если ваш сервер будет лежать или неотвечать, телеграм неоднакратно сделает попытку доставить сообщение. Но пока, советую отложить бота в сторонку.


ЧАСТЬ 4. OAUTH2, GOOGLE ПРИЛОЖЕНИЕ

О трехногой авторизации

Для нашего бота не помешает сделать трехногую oauth2 авторизацию.

Это хорошее решение, в случае если нам нужно устанавливать личность пользователя.

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

Тк у моей компании есть корпоративный домен с gmail ящиками, а в базах у пользователей указаны email’ы (это поле есть практически в любой конфигурации) - мной было принято решение использовать OAuth2 Google для идентификации пользователя по цепочке:

Telegram ID <=> Gmail <=> Пользователь ИБ

При успешной аутентификации записывать в регистр сведений “ТокеныПользователей” с измерением “Токен“ и ресурсом ”Пользователь”. Опционально можно добавить измерение “Тип”, если вы будете хранить access/refresh токен для Gmail или другие токены и “Дату”, если ваш токен имеет время жизни.

Алгоритм авторизации

Как же для пользователя будет выглядеть аутентификация?

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

  1. Пользователь пишет боту, инициирует общение или выполняет некую “приватную” команду.
  2. Бот заявляет, что необходимо авторизоваться и отправляет пользователю предложение авторизоваться, например “Для авторизации наберите: /login”.
  3. Если пользователь хочет авторизоваться - нажимает на команду /login.
  4. Бот видит, что новый для него пользователь хочет авторизоваться и возвращает кнопки с вариантами авторизации через различные сервисы (таким образом можно сделать и свою веб форму входа с собственным алгоритмом, но для примера мы будем использовать трехногую серверную аутентификацию через гугл).
  5. Пользователь нажимает кнопку и у него отрывается браузер с предложением выбрать аккаунт для аутентификации.
  6. Выбрав аккаунт запрос отправляется в гугл.
  7. Гугл перенаправляет запрос нашему http сервису указаному при формировании кнопки в параметре “redirect_uri”, некий код в параметре “code”, а также идентификатор пользователя телеги переданный в параметре “state”.
  8. Обмениваем у гугла “code” на “access token” и основные данные о пользователе (включая email).
  9. Пытаемся найти пользователя с заданым емэйлом в базе. Если удается - пишем в регистр сведений сопоставление telegram id и пользователя, отправляем поздравления в телегу. Если не удается - сообщаем о неудачи.

Заведем приложение

Создадим новое веб приложение, для этого перейдем по ссылке:

https://console.cloud.google.com/apis/credentials

Учетные данные > Создать учетные данные > Идентификатор клиента OAuth > Веб-приложение

Название: Произвольное (Например Web OAuth)

Разрешенные источники JavaScript: Ваш домен и порт (Например https://domen.ru:12345)

Разрешенные URI перенаправления: Введите url мест куда будет перенаправлять ваше приложение. (Тут стоит указать https://domen.ru:12345/urbase/hs/api/telegram/)

Запишите секрет и идентификатор клиента, они вам понадобятся на этапе программирования авторизации. Если не верно указали настройки перенаправления или решите изменить путь - позже можно будет исправить.

Сохраните идентификатор клиента.

Во второй вкладке “Окно запроса доступа” заполните настройки окна доступа.

Области действия для API Google: email и profile

Авторизованные домены: ваш домен

Все остальное произвольно.

В третьей вкладке “Подтверждение прав на домен” добавьте свой домен.

Подробно тут останавливаться не буду, подскажу лишь то, что если у вас нет прямого доступа к корню домена, а только 1с‘ка, то можно подтвердить домен с помощью http сервиса вернув гуглу ожидаемые им параметры.

На этом создание OAuth приложения закончено. Поэкспериментировать с ним можете с помощью следующей площадки: https://developers.google.com/oauthplayground

 


ЧАСТЬ 5. АРХИТЕКТУРА API

Архитектура в общих чертах

 Итак, все приготовления завершены, наступает время открывать конфигуратор. На схеме нарисована предлагаемая упрощенная схема разбора ответа. Постараюсь в общих словах обрисовать архитектуру:

  1. Некое уведомление/webhook от телеграмма (в нашем случае пересылается с проксирующего nginx) приходит на http-сервис “api” (корневой url - api), на шаблон “telegram” (/telegram/), на произвольный http метод ANY с обработчиком “telegram”.

    Итого наш url для всех методов telegram’а: https://{YourDomen}:{YourPort}/{YourBase}/hs/api/telegram - на этот url ссылается настроенный ранее в части 2 проксирующий nginx.

  2. В процедуре-обработчике “telegram”:

    • Опционально устанавливаем Привилегированный режим
    • Опционально подключаем попытку/исключение и в случае исключения возвращаем 400 или 500 код и описание ошибки в теле (возможно в json с дополнительными параметрами, но сейчас не будем усложнять).
    • Разбираем в общем модуле “REST” параметры запроса и возвращаем структуру (это очень удобный подход для разработки http сервисов, тут можно записать все передаваемые в заголовках, url, application/json, text/plain, application/x-www-form-urlencoded, multipart/form-data в единую структуру и далее бизнес логикой приложения уже работать с этой структурой не задумываясь о парсинге и способе передачи параметров). Телеграм всегда присылает JSON, его довольно легко распарсить и превратить в структуру парой строчек кода.
    • Передаем полученную структуру в общий модуль телеграм в некую процедуру-фасовщик.
    • Возвращаем некое сообщение с кодом 200 об успешном завершении (также можно будет возвращать некую страницу уведомляющую об успешной oauth авторизации, но об этом далее)
  3. В процедуре-фасовщике (у меня это Телеграм.РазобратьЗапрос(ДанныеЗапроса) ) на основании полученных данных можем совершить следующее:

    • Закончить процесс начатой авторизации (возможно вы захотите вообще вынести эту процедуру в отдельный шаблон вашего api сервиса, например в hs/api/auth)
    • Отказать в дальнейшем выполнении (например если переданы данные не в json или запрос пришел не с нашего прокси-сервера или нехватает некоторых ожидаемых параметров или пользователь неавторизован и тп и тд)
    • Разобрать запрос как встроенный запрос (inline_query)
    • Разобрать запрос как обратный запрос (callback_query)
    • Разобрать запрос как сообщение от пользователя (message)

Процедура-обработчик запроса

Тут и далее в сниппетах кода Я буду приводить общие моменты/логику работы, не надо бездумно копипастить код в надежде, что все само-собой заработает. Модифицируйте под себя.

Функция telegram(request)
  Попытка
    УстановитьПривилегированныйРежим(Истина);
    requestData = REST.getRequestData(request);
    Телеграм.РазобратьЗапрос(requestData);
    Возврат REST.jsonResponse(Новый Структура, 200);
  Исключение
    Возврат REST.errorResponse(ОписаниеОшибки(), 500);
  КонецПопытки;
КонецФункции

Разбор запроса

Вот примерно таким образом можно разобрать запрос и привести его к единой структуре параметров:

// REST.getRequestData(request);
Функция getRequestData(Знач request) Экспорт
  requestData  = Новый Структура("Метод,ПутьБазовый,ПутьОтносительный,Параметры"
            , request.HTTPМетод
            , НРег(request.БазовыйURL)
            , НРег(request.ОтносительныйURL)
            , Новый Соответствие);
  
  ИсточникиПараметров  = СтрРазделить("Заголовки,ПараметрыURL,ПараметрыЗапроса", ",", Ложь);
  Для Каждого Источник Из ИсточникиПараметров Цикл
    Для Каждого КлючИЗначение Из request[Источник] Цикл  
      requestData.Параметры.Вставить(НРег(КлючИЗначение.Ключ), КлючИЗначение.Значение);    
    КонецЦикла;
  КонецЦикла;
  
  // Разбор тела для POST запроса
  cType  = requestData.Параметры["content-type"];
  Если cType = Неопределено Или ПустаяСтрока(cType) Тогда
    // ...              
  ИначеЕсли СтрНайти(requestData.Параметры["content-type"], "text/plain") Тогда
    // ...              
  ИначеЕсли СтрНайти(requestData.Параметры["content-type"], "application/x-www-form-urlencoded") Тогда
    // ...
  ИначеЕсли СтрНайти(requestData.Параметры["content-type"], "application/json") Тогда
    body    = request.ПолучитьТелоКакСтроку();
    paramArr  = Сериализация.ДесериализоватьJSON(body);
    Если ТипЗнч(paramArr) <> Тип("Структура") Тогда 
      ВызватьИсключение "В JSON надо передавать структуру (map) параметров.";
    КонецЕсли;
    Для Каждого param Из paramArr Цикл
      requestData.Параметры.Вставить(НРег(param.Ключ), param.Значение);  
    КонецЦикла;
  ИначеЕсли СтрНайти(requestData.Параметры["content-type"], "multipart/form-data") Тогда
    // ...
  КонецЕсли;
  
  ВыполнитьПриведениеТипов(requestData.Параметры); // Тут можно привести простые типы к более сложным по наименованию параметров 
  
  Возврат requestData;
КонецФункции

Если вдруг кто не умеет, JSON сериализуется и десериализуется довольно просто:

#Область JSON
Функция СериализоватьJSON(Данные) Экспорт
  ПриведениеКПростымТипам.Привести(Данные);
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    НастройкиСериализации = Новый НастройкиСериализацииJSON();
    НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь;
  НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
  НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДатаСоСмещением;
    ЗаписатьJSON(ЗаписьJSON, Данные, НастройкиСериализации);
    Возврат ЗаписьJSON.Закрыть();
КонецФункции // СериализоватьJSON()

Функция ДесериализоватьJSON(СтрокаJSON) Экспорт
  ЧтениеJSON = Новый ЧтениеJSON();
  ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
  Возврат ПрочитатьJSON(ЧтениеJSON);
КонецФункции // ДесериализоватьJSON()
#КонецОбласти

Фасовка запроса

И так, у нас есть единообразная структура параметров и нам надо решить, что далее с ними сделать и как обрабатывать, проще говоря расфасовать на дальнейшие процедуры.

Целиком код приводить не буду, но подскажу, что тут нужно куча условий.

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

// Телеграм.РазобратьЗапрос(Данные)
Данные.Параметры["referer"] // А вдруг пришло от accounts.google.com?
Данные.Параметры["inline_query"] // РазобратьВстроенныйЗапрос
Данные.Параметры["callback_query"] // РазобратьОбратныйЗапрос
Данные.Параметры["message"] // РазобратьСообщение

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

Например “сообщение” может не всегда содержать отправителя, необходимо предусматривать такие моменты либо через попытку-исключение, либо смотреть в содержание структуры:

Если Не Данные.Параметры["message"].Свойство("chat") Тогда Возврат КонецЕсли;

Также, неплохим решением будет завести регистр сведений со всеми логами, ошибками, полученными/отправленными сообщениями и сопутствующими данными.


ЧАСТЬ 6. ПОЛУЧЕНИЕ СООБЩЕНИЙ


ЧАСТЬ 7. ОТПРАВКА СООБЩЕНИЙ


ЧАСТЬ 8. ОТРИСОВКА КЛАВИАТУРЫ


ЧАСТЬ 9. РЕАЛИЗАЦИЯ АВТОРИЗАЦИИ


ЧАСТЬ 10. ОТПРАВКА ФАЙЛОВ


ЧАСТЬ 11. ИСПРАВЛЕНИЕ СООБЩЕНИЙ


ЧАСТЬ 12. ОБРАТНЫЕ ЗАПРОСЫ


ЧАСТЬ 13. ВСТРОЕННЫЕ ЗАПРОСЫ

 

Специальные предложения

Вознаграждение за ответ
Показать полностью
Лучшие комментарии
34. webester 35 17.12.18 02:58 Сейчас в теме
Если нагрузка небольшая для прокси можно использовать google cloud compute там в некоторых регионах микромашины бесплатно. Для ngnix должно хватить.
🅵🅾️🆇; +1 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. 🅵🅾️🆇 499 07.11.18 22:36 Сейчас в теме
Статью пописываю потихоньку. Если возникают вопросы или предложения по написанному - с удовольствием дополню статью, будет этакий роман или подробный гайд.
nef744; unduty; ice-net; ArtfulCrom; TreeDogNight; AtPups000; dsdred; jONES1979; +8 Ответить
2. blackhole321 1270 07.11.18 23:53 Сейчас в теме
Не рассматривали вариант реализации просто на iptables?
3. 🅵🅾️🆇 499 07.11.18 23:56 Сейчас в теме
(2)
iptables

Вы имеете ввиду просто заворачивать трафик с помощью iptables на VPS'ке?
Можно и так. Но у nginx всеже побольше возьможностей в управлении http трафиком и доменами, а ресурсов он не кушает совсем.

Сходу не смогу даже сказать, что там с https трафиком будет на iptables.
4. blackhole321 1270 07.11.18 23:59 Сейчас в теме
(3)
Вы имеете ввиду просто заворачивать трафик с помощью iptables на VPS'ке?

Да. виртуалка же Вам нужна только для этого?
5. 🅵🅾️🆇 499 08.11.18 00:01 Сейчас в теме
(4) Ну с iptables могут возникнуть проблемы с https трафиком. Это надо пробывать или вопрошать знающих сетевиков.
Дело в том, что сертификат выдается для https://api.telegram.org/ , а общаетесь вы с неким левым сервером.
Что тут выйдет, я не отвечу) Да и в чем, собственно, смысл, если nginx и на калькуляторе запуститься.

На виртуалке также поднимаются http/socks5/mtproxy proxy ну и все что захотите)
Опционален VPN тунель, если у вашей базы нет выделенного ip.
8. user829102 08.11.18 09:03 Сейчас в теме
(3)
Сходу не смогу даже сказать, что там с https трафиком будет на iptables

Я делал так. Зарегистрировал самый дешевый инстанс в DigitalOcean в Амстердаме. Установил на нем nginx + сделал самоподписанный сертификат по инструкции https://www.8host.com/blog/sozdanie-samopodpisannogo-ssl-sertifikata-dlya-nginx-v-ubuntu-16-04/
потом сделал так (нашел в интернете)
apt-get update && apt-get install -y nano nginx
nano /etc/nginx/sites-available/default #
в location добавить "proxy_pass https://api.telegram.org/;"
service nginx reload
И вместо https://api.telegram.org из 1ски обращаюсь к ip этого сервера в DigitalOcean
for_sale; +1 Ответить
13. 🅵🅾️🆇 499 08.11.18 12:02 Сейчас в теме
(8) Имено это в статье я и описываю)

Вместо
apt-get update && apt-get install -y nano nginx 

должно быть
apt update && apt upgrade && yes | apt install nginx

Этим Вы обновляете систему и ставите nginx, в вашей команде только обновляется индекс пакетов, по хорошему надо и существующие обновить.
Ну и nano у вас из коробки, наверняка, есть. Новичкам можно поставить mcedit - он попроще.

nano /etc/nginx/sites-available/default

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

в location добавить "proxy_pass https://api.telegram.org/;"

Собственно тут вы и указываете проксирование.

Вместо самоподписаного сертификаты возможно использовать бесплатный от let's encrypt, но его придется не забывать обновлять каждые 3 месяца. Также для такого сертификата надо будет прикупить домен.
6. eeeio 119 08.11.18 00:04 Сейчас в теме
спасибо. захватывающий роман! жду продолжения.
🅵🅾️🆇; +1 Ответить
7. 🅵🅾️🆇 499 08.11.18 01:54 Сейчас в теме
Небольшой оффтопик, нашел прикольного бота в телеге: @egrul_bot
9. surikateg 08.11.18 09:29 Сейчас в теме
Для каких целей прокси ставить?
11. 🅵🅾️🆇 499 08.11.18 11:41 Сейчас в теме
(9) Для пользователей. Также можете поставить MTProxy, оно позволяет закреплять канал у пользователей пользующихся вашими проксями и неотличимо от https трафика.

Проксирующий nginx нужен для проксирования webhook запросов, в следующих случаях:
1) провайдер не пущает трафик от api telegram'а
2) у вашей базы 1с нет выделенного ip
3) у вашей базы 1с нельзя открыть порт из следующих: 80, 443, 8080, 8443
4) просто хотите управлять своим трафиком (ну или балансировать, хотя вряд ли это Ваш вариант)

Если ваша база обладает белым ip и доступны порты, хостится не в россии, ваши пользователи спокойно сидят в телеге - смело пропускайте этот пункт.
10. pallid 257 08.11.18 09:44 Сейчас в теме
есть еще такой сервис для отладки https://www.webhookapp.com/, но пойдет и для проксирования
nomadon; 🅵🅾️🆇; +2 Ответить
12. 🅵🅾️🆇 499 08.11.18 12:01 Сейчас в теме
(10) Добавил в статью с указанием авторства.
14. Synoecium 731 08.11.18 12:18 Сейчас в теме
шикарно написано, жду продолжения
🅵🅾️🆇; +1 Ответить
15. woridasb 08.11.18 22:02 Сейчас в теме
Интересная статья намечается.
Такой вопрос, почему не стали использовать серфитикат от Let's Encrypt?
🅵🅾️🆇; +1 Ответить
16. 🅵🅾️🆇 499 09.11.18 01:02 Сейчас в теме
(15) Две причины:
1) для Let's encrypt нужен домен, а не просто ip
2) нужно обновлять каждые три месяца (тут можно и скрипт в cron добавить, наверное)

В общем это опционально и возможно (особенно если вы ожидаете посетителей на вебсервере этой VPS'ки).
Телега кушает и самоподписанные сертификаты.
Сам сертификат от let's encrypt получается очень просто, у них теперь скрипт есть, оно даже само в nginx прописывается.
17. woridasb 09.11.18 05:10 Сейчас в теме
(16) Домен тоже можно получить довольно просто и бесплатно. Взять в *.tk и будет тогда все по красоте )))
18. 🅵🅾️🆇 499 09.11.18 11:00 Сейчас в теме
(17) В таком случае для 1с'ки надо брать бесплатный домен в зоне *.cf.
Ну или оба)

У меня для домашнего сервера домен pfx.pw с кучей доменов третьего уровня на вроде git.pfx.pw - плачу 300 руб/год.
Домен короткий и левая реклама не вставляется. 300 рублей/год не такие уж и большие деньжища.
19. woridasb 10.11.18 19:05 Сейчас в теме
(18)
омен короткий и ле

Домен в зоне .tk второго уровня, в связке с pdd.yandex 0 рублей )))))
🅵🅾️🆇; +1 Ответить
20. V_V_V 13.11.18 16:28 Сейчас в теме
Когда ожидать продолжение?
🅵🅾️🆇; +1 Ответить
21. 🅵🅾️🆇 499 13.11.18 16:30 Сейчас в теме
(20) Глава раз в 3-5 дней, очень большая загрузка и другие проекты :c
Скорее всего сегодня напишу главу про заведение гугл приложения.
Там не очень много чего можно сказать.

Если чего не получается по моему гайду - я обязательно объясню и допишу.
Тк пишу его постфактум, по памяти как и что настраивал.
23. 🅵🅾️🆇 499 14.11.18 10:15 Сейчас в теме
(20) Специально для Вас вчера 2 главы осилил c:
24. V_V_V 14.11.18 13:52 Сейчас в теме
(23) Громадное спасибо за проделанную работу! Статья замечательная.
Будем ждать продолжение... :)
🅵🅾️🆇; +1 Ответить
22. JohnyDeath 300 14.11.18 08:40 Сейчас в теме
Статья однозначно должна пойти в закладки всем!
Спасибо автору.
DarkAn; 🅵🅾️🆇; +2 Ответить
25. user1024476 19.11.18 16:57 Сейчас в теме
маэстро, не подскажите как быть, если те самые 4 порта закрыты
что нужно сделать с nginx ?
26. 🅵🅾️🆇 499 19.11.18 17:00 Сейчас в теме
(25) Привет. Закрыты где, у базы 1с, а на VPS открыты?
В статье приведен пример в котором nginx на VPS'ке принимает соединения на 8443 порт и перенаправляет на {YOUR_BASE_PORT} порт веб сервера 1с:

server {
        listen 8443 ssl http2 default_server;
        listen [::]:8443 ssl http2 default_server;
        server_name {YOUR_PROXY_ADDRESS};
        include snippets/self-signed.conf;
        include snippets/ssl-params.conf;
        location /base1s/hs/api/telegram {
                proxy_pass https://{YOUR_BASE_ADDRESS}:{YOUR_BASE_PORT}/{YOUR_BASE_NAME}/hs/api/telegram;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                client_max_body_size 100M;
        }
}
Показать


У самого такая ситуация, довольно крупный хостер-франчайзи, не могут предоставить нужные мне порты.
user1024476; +1 Ответить
27. user1024476 19.11.18 18:26 Сейчас в теме
(26) точно, увидел всё, видимо глаза замылены были )
благо в качестве сервера пока что виртуалка и здесь все можно
хотел еще задать вопрос: heroku сюда никак не вклинить ?
28. 🅵🅾️🆇 499 19.11.18 18:33 Сейчас в теме
(27) Ну в рамках статьи рассматривается полноценная, хоть и сильно бюджетная, VPS. Heroku не пробывал, но мне кажется это не очень уместно для данного решения.
29. user1024476 19.11.18 18:56 Сейчас в теме
(28)позвольте еще вопрос
я же правильно понял , у нас из внешней сети доступен только проксирующий nginx ?
30. 🅵🅾️🆇 499 19.11.18 19:23 Сейчас в теме
(29) На маршрутизаторе сети 1с сервера должен быть прокинут 1 порт к серверу по которому будут обращаться вебхуки телеграмма (тот порт что в конфиге указан как {YOUR_BASE_PORT})

Также еще по 1 порту будут бегать пакетики для отправки сообщений. Этот порт просто должен не быть закрыть (не drop и не reject правила), как правило, ничего дополнительно для него настраивать не надо. В моем случае это порт socks5 проксей, который на VPS настраиваем через 3proxy (через него 1с будет слать сообщение и сидеть ваши друзья и коллеги).
user1024476; +1 Ответить
31. user1024476 20.11.18 14:39 Сейчас в теме
Развернул на azure сервер с убунту , поставил nginx, сгенерил сертификат, запустил сайт
1С стоит на апаче на хосте, доступном из внешней сети по определенному порту
запустил вебхук, приходит Webhook was set
вот только общаться в сервером он все равно, как я понял, не хочет
при getwebhookinfo приходит либо Wrong response from the webhook: 405 Not Allowed, либо ругается на сертификат (когда заного пытаюсь все настроить)
что мог упустить ?
32. 🅵🅾️🆇 499 20.11.18 14:41 Сейчас в теме
(31)
Что отвечает на curl "https://api.telegram.org/bot{YOUR_TOKEN}/getWebhookInfo" ?

Если что, можете писать мне в тележку, а решение проблемы напишем тут: @plugfox
48. Olenevod 27 15.04.20 14:43 Сейчас в теме
(32)
мне

Доброго дня. Удалось решить проблему? У меня такая же.
Не знаю что дальше делать. Уже фантазия кончилась как это победить.

простое перенаправление не дает эффекта. Это типа:
error_page 405 =200 $uri;

location *405 {
root /htdocs;
proxy_pass http://999.9.9.13:8443/botwebhook/hs/webhook;
}

получается вебхук не перенаправляет 405 даже на указанный сервер.
33. GlebBR 30 14.12.18 10:29 Сейчас в теме
очень хорошая статья, спасибо.
34. webester 35 17.12.18 02:58 Сейчас в теме
Если нагрузка небольшая для прокси можно использовать google cloud compute там в некоторых регионах микромашины бесплатно. Для ngnix должно хватить.
🅵🅾️🆇; +1 Ответить
35. seducer 82 05.04.19 12:37 Сейчас в теме
36. 🅵🅾️🆇 499 05.04.19 12:39 Сейчас в теме
(35) Будет)
Просто дикая нагрузка + пет проекты давят.
Очень много чего хочу опубликовать, сделать и рассказать, но времени и сил все нет :c
37. user853472 03.08.19 10:36 Сейчас в теме
Доброго времени суток! Интересная статья, автору спасибо!
Можете поделиться мыслями или частью кода по вопросу приема платежей в телеграм?
Связка 1С + Телеграм, нужно принять оплату и отправить клиенту сообщение.
Подскажите пожалуйста.
38. 🅵🅾️🆇 499 03.08.19 10:41 Сейчас в теме
(37) Не совсем понятен кейс.

Вам нужно отправить уведомление пользователю о некой платежке?
Если что, телега тем и хороша, что вы не можете инициировать общение ботом с живым человеком, только с тем, кто первым напишет.

Если прям оплата с помощью телеги, то это добавили сравнительно недавно, еще не думал о таком (работаю не в торговле):
https://core.telegram.org/bots/payments
39. user853472 05.08.19 09:44 Сейчас в теме
(38)
Оплата с помощью телеги. Этот метод видел. Говорят, что можно как то без метода этого. Отправить клиенту ссылку по которой он перейдет и оплатит. Нигде не могу найти примера...
40. user1281314 16.09.19 11:59 Сейчас в теме
41. rinik88 31 04.12.19 10:04 Сейчас в теме
главы 6 не хватает прям, да и остальных, статья замечательная. спасибо Вам за ваш труд.
42. 🅵🅾️🆇 499 04.12.19 16:12 Сейчас в теме
(41) Сейчас очень сильно занят другой фишкой.
Выгрузкой из любой типовой конфигурации на поддержки в postgres (организовываем data lake в компании).
А отсюда уже будут расти ноги всех прочих интеграций, в тч телеграма бота)
Тк можно будет сделать на порядок шустрее, производительнее и не ограничиваться рамками 1с)
43. user592773_demon1995.27 19.12.19 09:13 Сейчас в теме
Кто сталкивался в ошибкой: SSL error {error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed}
Как лечить может кто подсказать?
44. 🅵🅾️🆇 499 19.12.19 09:18 Сейчас в теме
(43) если сертификат самоподписанный, то не точь в точь по инструкции делаете
45. bursanb 8 10.03.20 15:34 Сейчас в теме
3proxy обязателен? а нельзя nginx использовать для отправки запросов в telegram?
46. 🅵🅾️🆇 499 10.03.20 16:30 Сейчас в теме
(45) можно, конечно.
Можно реверс прокси энжайникс, можно http и socks5 прокси.
47. bursanb 8 11.03.20 08:38 Сейчас в теме
Пример реализации использования nginx "туда-обратно".
В этой реализации вам необходимо отправлять запросы вместо "https://api.telegram.org/" на "https://{YOUR_PROXY_ADDRESS}:8443/"

server {
listen 8443 ssl http2 default_server;
listen [::]:8443 ssl http2 default_server;
server_name {YOUR_PROXY_ADDRESS};
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
location /base1s/hs/api/telegram {
proxy_pass https://{YOUR_BASE_ADDRESS}:{YOUR_BASE_PORT}/{YOUR_BASE_NAME}/hs/api/telegram;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100M;
}
location /to_telegram_to/ {
proxy_pass https://api.telegram.org/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100M;
}
}
Dinamika-IT; Olenevod; +2 Ответить
49. Olenevod 27 20.04.20 12:17 Сейчас в теме
(47) А не подскажете, вот эта локация /to_telegram_to/ она как-то создается отдельно как каталог? Это получается какой-то ресурс на nginx? Или необходимо чтобы http запросы от бота содержали такой путь, чтобы nginx понимал куда направлять запрос?
Я не очень сильно разбираюсь, в этом, и эксперименты ничего толкового не дают.
50. 🅵🅾️🆇 499 20.04.20 12:27 Сейчас в теме
(49)
to_telegram_to


Означает именно путь запроса.
На диске не обязательно должен быть такой каталог.
51. Olenevod 27 20.04.20 15:54 Сейчас в теме
(50) Спасибо, большое. Т.е. я правильно понимаю, что отправлять бот должен http запрос (на адрес сервера с nginx) примерно с таким путем ?

to_telegram_to/bot1234567890:FFHNLdQpmnBK7m8okyZ-RFy8mbHfeQio9xE/sendMessage
52. 🅵🅾️🆇 499 20.04.20 15:57 Сейчас в теме
53. bursanb 8 20.04.20 19:33 Сейчас в теме
(49)
это просто путь, вы можете его заменить на свой, главное это учесть при установке webhook telegram и в отправке запросов из 1С
Olenevod; +1 Ответить
58. Olenevod 27 07.06.20 21:26 Сейчас в теме
(47) Доброго дня.
Не подскажите, у вас не возникало случайно такой ошибки:
Все работало в обратную сторону (на https://api.telegram.org/), но в один момент на nginx стала появлятся ошибка 302. какое-то перенаправление. И в ответ приходит пустой JSON из ответа на http-запрос.

Нашел некую настройку (в инете). В ответе стал получать html код страницы с имене бота и всякими ссылками без какой либо информации.

Измененные настройки nginx:

Вместо звездочки * должна быть собака (почему-то не дает вставить этот символ)

location /to_telegram_to/ {
                proxy_pass https://api.telegram.org/;
                #proxy_connect_timeout 120;
                #proxy_send_timeout 120;
                #proxy_read_timeout 10;
                #send_timeout 120;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                client_max_body_size 100M;

                proxy_intercept_errors on;
                error_page 301 302 307 = *handle_redirects;
                }

        location *handle_redirects {
               set $saved_redirect_location '$upstream_http_location';
                proxy_pass $saved_redirect_location;
               }
Показать
59. 🅵🅾️🆇 499 08.06.20 00:11 Сейчас в теме
(58) 302 - не есть ошибка, это редирект.
Смотри в полученный заголовок "location" у него, а не в тело
Olenevod; +1 Ответить
54. Olenevod 27 26.05.20 08:25 Сейчас в теме
Ни у кого не было такой ситуации:
Например, если выполняются технические работы и база 1С недоступна.
Вебхуки продолжают накапливаться.
На VPS в логах соответственно ошибка 500.
А потом при включении доступности базы ошибка 500 остается.
В этом случае помогает только удалить вебхук и снова его установить (причем надо лезть на сам VPS из 1С как-то не получается).

Ботов становиться больше в одной базе и на каждого такие операции как-то не очень прикольно делать.
Кто как решил такую проблему?
55. 🅵🅾️🆇 499 26.05.20 10:48 Сейчас в теме
(54) Они и должны накапливаться, этим гарантируется доставка, это очень логичное поведение.
Если и после включения ошибка остается - значит дальше в логике где то ошибка и срабатывает исключение.
В "утешение" могу сказать, что через какоето время телеграм прекращает попытки достучаться до твоего бэка.
Olenevod; +1 Ответить
56. Olenevod 27 27.05.20 09:31 Сейчас в теме
(55) Спасибо что "утешили")
То что они накапливаются это хорошо, но вот почему надо делать переустановку вебхуков потом - непонятно. Попробую прикрутить ssh к 1с чтоб оттуда можо было отправлять запрос на VPS на переустановку вебхуков.
57. 🅵🅾️🆇 499 27.05.20 09:32 Сейчас в теме
(56) Ничего не знаю.
Ничего не переустанавливал.
60. Olenevod 27 07.07.20 10:07 Сейчас в теме
Всем привет. И снова я со своими вопросами..

Люди добрые, подскажите, кто знает: какова периодичность повторов "неудачных" вебхуков с телеграм сервера?
Это вопрос к тому, чтобы база успевала обрабатывать его иначе ошибка 504. И можно ли управлять временем через которое повторяется "непринятый" вебхук?

В интернете ничего не могу найти, даже намека на это...(
61. user1701526 18.11.21 12:07 Сейчас в теме
Мы пробрасываем лиды из ФБ в телегу и гугл таблицы через Webjack. Сервис работает как часы.
Можно получить месяц халявы и бесплатную настройку по промокоду semen21, напишите его в чат техподдержки на сайте
Оставьте свое сообщение

См. также

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция Промо

WEB v7.7 v8 Бесплатно (free)

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    58587    Serginio    33    

Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С (Часть 2)

WEB Интеграция с сервисами v8 1cv8.cf Россия Бесплатно (free)

Это вторая часть цикла статей, посвящённых типовому модулю интеграции 1С Предприятия и Битрикс24. Цель данной части: рассмотреть тонкости, связанные с обменом товарами и сопутствующими сущностями (спойлер - единицы измерения и свойства товаров). Также затронем некоторые нюансы связи сущностей 1С и Б24 (относящиеся не только к товарам) и их побочное влияние при переносе данных из модуля в модуль (при смене конфигурации, переустановки или обновлении модуля).

сегодня в 08:00    52    freegman74    0    

Web консоль управления сеансами 1С

WEB v8 1cv8.cf Бесплатно (free)

Мы дали ему название adm1c, он позволяет посредством веб доступа удалять или смотреть на сеансы в 1С базах и при необходимости удалять их. Да и что тут такого, сказали бы, есть же консоль на win, с нее же это можно делать, и все верно, но есть пара но.

вчера в 06:00    313    4ernuy    0    

Как выгрузить на сайт название номенклатуры, остатки на складах (с нулевыми остатками)

WEB v8 УТ11 Россия Бесплатно (free)

Доброго времени суток! В данной публикации я хотел описать решение задачи - Выгрузки наименования номенклатуры, остатки по складам, в том числе и нулевые остатки. Поскольку стандартная выгрузка при большой информационной базе сильно нагружает систему + длится достаточно долго, была поставлена вышеописанная задача. Возможно, кому то пригодится :)

10.11.2021    456    Menmo    8    

Online телефонный справочник из 1С: Зарплата и управление персоналом Промо

WEB Управление персоналом (HRM) Управление персоналом (HRM) v8 ЗУП3.x Россия Бесплатно (free)

В интернете представлено много реализаций online телефонных справочников организаций. Есть справочники, которые использует для хранения информации базу Active Directory (LDAP), есть справочники, которые реализованы с использованием СУБД (например, MySQL). Но я не нашел справочника, который использует информацию из базы 1С. Далее я рассмотрю данную разработку.

10.03.2017    27419    ruha    21    

Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С

WEB Интеграция с сервисами v8 1cv8.cf Россия Бесплатно (free)

Цель статьи - указать на подводные камни и нюансы, о которых “не пишут на заборах” и которые встретились мне за время внедрения типового модуля интеграции 1С и Битрикс24. Будет интересна для людей, кто подумывает о том, чтобы настроить интеграцию, и хотят понять, с чем столкнутся. А также для тех, кто уже работает с подобным обменом, столкнулся с какими-то из описанных ситуаций и хочет понять, что пошло не так и “как жить дальше”. Постараюсь все описать “человеческим” языком с минимальной долей терминов, так как статья, надеюсь, будет полезна не только программистам.

07.11.2021    1168    freegman74    10    

Внешняя компонента как REST-API-компонента...

Разработка внешних компонент WEB Linux v8 Бесплатно (free)

...и совсем немного кода на С[++]...

01.11.2021    1122    starik-2005    10    

Использование Gatekeeper для авторизации доступа к HTTP публикации сервера 1С

Администрирование ИТ-инфраструктуры Информационная безопасность WEB v8 Бесплатно (free)

В статье опишу вариант настройки Keycloack и GoGatekepper для авторизации доступа к HTTP публикации сервера 1С

22.10.2021    602    malikov_pro    0    

Кэширование COM-соединения. Три способа Промо

Перенос данных из 1С7.7 в 1C8.X Внешние источники данных WEB Практика программирования v8 Россия Бесплатно (free)

Статья о трех способах кэширования COM-соединения в 1С:Предприятии 8.x.

11.04.2013    43167    YPermitin    42    

Повышение производительности веб-сервисов. Переиспользование сеансов

WEB HighLoad оптимизация v8 Бесплатно (free)

Повышение производительности веб-сервисов. Переиспользование сеансов. Практическая реализация.

20.10.2021    1627    sorter1    2    

WEB/HTTP сервисы. Базовые отличия и применение на практике

WEB Практика программирования v8 Бесплатно (free)

Рассказываем о WEB и HTTP сервисах, их практическом применении, о шишках, которые мы набили, и о выводах, которые сделали. Спойлер: тех, кто дочитает статью до конца, ждет бонус от автора.

04.10.2021    5749    Neti    14    

Интеграция 1С с ГИИС ДМДК

Обмен через XML WEB v8 ERP2 Ювелирная промышленность и торговля Россия Бесплатно (free)

ГИИС ДМДК - единая информационная платформа для взаимодействия участников рынка драгоценных металлов и драгоценных камней. с 01.09.21 стартовал обязательный обмен данными с Федеральной пробирной палатой (ФПП) исключительно через ГИИС. А постепенно - с 01.01.2022 и с 01.03.2022 - все данные о продаже драгоценных металлов и камней должны быть интегрированы с ГИИС. У многих пользователей возникает вопрос как автоматизировать обмен между программой 1С и ГИИС ДМДК. В настоящей статье ВЦ Раздолье поделится своим опытом о реализации такого обмена. Автор статьи - Мордовин Антон - архитектор систем на базе 1С Внедренческого центра "Раздолье".

30.09.2021    4202    1СERP    35    

Заготовка для загрузки файлов по ftp Промо

WEB Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

3 процедуры и 1 макет

03.06.2013    31322    anig99    6    

Интеграция 1С с Битрикс24 через вебхуки

WEB v8 1cv8.cf Россия Бесплатно (free)

Пример получения токена и http запрос к API битрикса.

15.09.2021    1729    TyurinArt    8    

Обмен с HTTP сервисом файлами по формату multipart/form-data

WEB v8 1cv8.cf Россия Бесплатно (free)

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

07.09.2021    2686    ix5s    21    

Разработка гибридного web-приложения на 1С, возможности и ограничения

WEB v8 Бесплатно (free)

Все чаще разработчики склоняются к использованию 1C в качестве бэкенда при разработке веб-приложений. Но благодаря встраиванию веб-клиента 1С в сайт можно получить еще больше готовой функциональности. О том, как реализовать гибридное приложение за счет связки 1С с другими веб-технологиями, рассказал разработчик компании Neti Эльдар Мингалиев.

06.09.2021    2729    Бэнни    11    

Работа с WEB-сервисами под HTTPS на примере прямого обмена между базами (1С – 1С) 

Обмен данными и распределенная БД WEB v8 Россия Бесплатно (free)

Использование веб-сервисов 1С при обмене 1С – 1С позволяет быстро передавать достаточно большие объемы данных из базы-источника в базу-приемник в объектах языка 1С. Данный метод обмена может применяться при бесшовной интеграции между двумя базами 1С, но требует определенной серверной инфраструктуры (установленного и настроенного WEB-сервера).

03.09.2021    6174    UltraUnion2005    8    

Глава 2. Как я написал (собрал с инфостарта) свой парсер сайта 1С Releases

WEB Практика программирования v8 1cv8.cf 1С:Франчайзи, автоматизация бизнеса Россия Бесплатно (free)

Путешествие начинающего программиста 1С. Глава вторая. Призываем экспертов в комментарии, оптимизируем код, ругаемся на кривые руки автора. Автор же, в свою очередь, делится своим опытом, читает умные комментарии, стремится дать те знания, за которыми он сидел ночами тем, кто их хочет найти.

31.08.2021    892    ldmonster    4    

Взаимодействие с api Честный знак (Молочная продукция)

WEB Универсальные функции Практика программирования v8 1cv8.cf Бесплатно (free)

Обзор основных примеров взаимодействия с Честным знаком по api для нетиповых конфигураций.

30.08.2021    2046    user5300    45    

Умная маршрутизация: о сложностях интеграции с 1С (часть 2)

WEB v8 УТ11 Бесплатно (free)

В статье будет много примеров кода с комментариями работы расширения для обмена данными УТ11.4 с Яндекс.Маршрутизацией через выгрузку/загрузку EXCEL файла.

27.08.2021    1951    greencactus    6    

Встраивание форм 1С на страницы сайта

WEB v8 1cv8.cf Бесплатно (free)

В платформе 8.3.16 появилась возможность выводить на страницах сайта информацию из веб-клиента 1С так, что пользователь даже не заметит, что работает с платформой. Руководитель компании Айтон Михаил Пинягин на онлайн-митапе «Web-клиенты для 1С» рассказал о том, какие особенности нужно учесть при настройке встраиваемого веб-клиента, и какие возможности он дает.

27.08.2021    2764    mikepin    9    

Гарри Поттер и подкапотное пространство веб-клиента

WEB v8 Бесплатно (free)

При разработке сайтов, интегрированных с 1С через HTTP-сервисы, приходится бороться с кодировками, искать производительные интерфейсные решения и задумываться над безопасностью. В ходе онлайн-митапа «Web-клиенты для 1С» Юрий Лазаренко показал на практике, как работает магия самодельного веб-клиента и как решать проблемы, возникающие при интеграции.

20.08.2021    2919    TitanLuchs    19    

Умная маршрутизация: кейс интеграции с 1С (часть 1)

WEB v8 Бесплатно (free)

Как мы решали проблемы с доставкой в нашем интернет-магазине, внедрили новый бизнес-процесс за 3 месяца и научились меньшим количеством машин привозить больше заказов клиентам.

18.08.2021    4341    greencactus    40    

Примеры вызова в 1С методов API до реестров открытой части Электронного кабинета налогоплательщика (Украина)

WEB v8 Украина Бесплатно (free)

Примеры вызова в 1С методов API до реестров открытой части Электронного кабинета налогоплательщика, Украина. Тестирование проводил на 1С:Предприятие 8.3 (8.3.10.2561).

28.07.2021    868    Pervuy    4    

Телеграм-бот как инструмент

WEB v8 1cv8.cf Бесплатно (free)

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

21.07.2021    4190    M_A_D    19    

Доработка в расширении Яндекс маркета (скачать все этикетки)

WEB Практика программирования v8 УТ11 КА2 Бесплатно (free)

Доработка кнопки "Скачать все этикетки" - выбрали каталог и сохранили все за один раз, а не 100500 раз нажимаем кнопку сохранить.

08.07.2021    1025    rst_filippov    0    

Интеграция 1С 8 и HostCMS

WEB v8 1cv8.cf Бесплатно (free)

Интеграции 1С с сайтами очень сложно оценивать, ибо на сайте разработчика CMS, а может, и на странице конкретного модуля, зачастую можно найти инструкцию подключения обмена, но в ходе работы постоянно появляются подводные камни: то одно не выгружается, то другое, порой, кажется, все данные передаются, но документы или элементы справочников не заполняются. А перерабатывать типовой механизм зачастую бывает себе дороже. Причем бывают и ситуации, когда нужно вносить изменения и в 1С, и на сайте. Стоимость таких работ возрастает и встает вопрос о том, нужно ли это вообще. Сейчас я расскажу о том, как мы подключали HostCMS, а в конце статьи приведу результаты обмена.

04.07.2021    836    Koder_Line    0    

API ОФД-Я разбор документации с примерами

WEB v8 1cv8.cf Россия Бесплатно (free)

Примеры запросов 1С для получения данных с ОФД-Ярус через API.

20.04.2021    930    www76    0    

Работа через сервис 1С-Отчетность нескольких пользователей

Регламентированная отчетность Зарплата WEB v8 v8::СПР ЗУП3.x Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Организации, в которых количество сотрудников превышает установленное значение, обязаны отправлять отчетность по телекоммуникационным каналам связи. Это может быть Контур-Экстерн, Такском или любой другой провайдер. Все чаще пользователи 1С используют сервис 1С-отчетность. И все чаще сертификат оформляется на сотрудника отдела кадров или бухгалтерии. В случае, если нужно оформить несколько сертификатов, возникают трудности в версии ЗУП 3.1.14 и более поздних. О том, как с ними справиться, пойдет речь в данной публикации.

05.04.2021    2084    keat24    1    

Правила обмена больше не нужны

Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8 Распределенная БД (УРИБ, УРБД) WEB v8 Бесплатно (free)

Есть несколько общепринятых подходов к написанию обмена между 1С-системами, каждый из которых упирается в длительное изучение технологии, мучительную отладку правил конвертации и написание большого количества сервисного кода, в котором потом тяжело разобраться. О принципах работы универсального фреймворка liteExchange, который реализует быстрые обмены между 1С и внешними системами, и берет на себя всю техническую обвязку по стандартному преобразованию данных, на INFOSTART MEETUP Saint Petersburg.Online рассказал Николай Крылов.

17.03.2021    12348    Nikola23    40    

Как отправить сообщение Telegram в группу?

WEB v8 Россия Бесплатно (free)

Отправка сообщения в группу Telegram.

01.03.2021    3569    kite2    2    

Альфа-Авто 5.0 и современные HTTP сервисы

WEB v8 1cv8.cf Автомобили, автосервисы УУ Бесплатно (free)

Решение, позволяющее программным продуктам, работающим на устаревших версиях платформы 1С (8.2), интегрироваться с современными HTTP сервисами. Решение, интегрированное с HTTP-сервисом программы по расчету компонентов для изготовления ЛКМ, описанное в настоящей статье, успешно работает в одном из автосервисов, работающем на устаревшей платформе и конфигурации Альфа-Авто 5.0.

01.03.2021    1232    osivv    1    

Доступ из базы 1С к стандартному интерфейсу Odata базы 1С, в которой заведен пользователь

WEB v8 Россия Бесплатно (free)

Есть база, с пользователем/паролем, нужно подключиться к Odata из другой базы 1С, получить элементы справочника.

24.02.2021    1030    user823999    6    

Интеграция с API WB (Wildberries). Создание карточки товара (спецификации)

WEB v8 1cv8.cf ИТ-компания Россия Бесплатно (free)

Опыт интеграции с API WB (Wildberries), опыт создания карточки товара, получение токенов API WB.

18.01.2021    33625    jenyavp    59    

HTML редактор/editor (Wysiwyg) для WebKit 1С (CMS, B2B), альтернатива TinyMCE и стандартному ФорматированныйДокумент

WEB Интеграция с сервисами v8 v8::УФ 1cv8.cf Бесплатно (free)

Suneditor - отличная замена HTML редактору TinyMCE (бесплатному), в публикации с открытым кодом подключим его в 1С с WebKit, скачать HTMLeditor обработку можно бесплатно.

28.12.2020    4144    SizovE    25    

Выгрузка HTML описаний с картинками (Base64) товаров на сайт/интернет-магазин/B2B, разберем регулярное выражение получения тега body, ПолучитьHTML, ФорматированныйДокумент

WEB Универсальные функции Практика программирования v8 v8::УФ 1cv8.cf Бесплатно (free)

Редактор HTML платформы 1С простой и очень удобный для небольших задач, однако ПолучитьHTML возвращает отдельно картинки и отдельно целиком HTML страницу со ссылкой на имена этих картинок, что неудобно для отправки в базу данных сайта/интернет-магазина/веб-приложения/B2B. Разберем на открытом коде, как решить эту проблему, напишем универсальную функцию получения значения любого тега HTML на регулярных выражениях. Бонусом - возможность редактировать теги HTML в текстовом режиме.

24.11.2020    1307    SizovE    4    

Как сделать интеграцию (обмен) с интернет-магазином? Пошаговый план действий (Часть 1)

WEB v8 1cv8.cf УУ Бесплатно (free)

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

19.11.2020    9301    markbraer    12    

Чтение вложенных свойств Структур Структуры, Соответствий, свойства через точку, разбор JSON

WEB Интеграция с сервисами Универсальные функции Практика программирования v8 Бесплатно (free)

JSON: {user.device.type} - как получить значение {type}? А если вложенность значительно глубже? Как проверить, что оно заполнено или удалить его - всё это в публикации с открытым кодом и даже без рекурсии. Бонусом разбор дерева значений - ДанныеФормыЭлементДерева, СтрокаДереваЗначений.

17.11.2020    2322    SizovE    2    

Web Dashboard (мобильная и десктопная версия): оптимальная схема организации взаимодействия с зоопарком систем

WEB v8 Бесплатно (free)

Задача: из множества систем (1С:ERP, 1C:CRM, Кронос:WMS, 1С:Розница, 1С:УПП...) оперативно и онлайн осуществлять мониторинг на телефоне/десктопе/планшете/телевизоре бизнес-аналитику в дашборде для директора. Рассмотрим в статье, как правильно интегрировать между собой все базы, какие для этого инструменты использовать.

10.11.2020    17624    SizovE    2    

Отладка модуля ДиадокПро

WEB v8 1cv8.cf Бесплатно (free)

В обработке ДиадокПро все дополнительные модули встроены во внешние обработки, которые хранятся в макетах. Это усложняет процесс самостоятельной интеграции, так как теряется возможность попасть в них в режиме отладки. Но не всё так страшно, поэтому ниже инструкция)

30.10.2020    4791    Максим-777    19    

JSON примеры меню B2B web-приложения "Личный кабинет" на движке EDIbot для телефона/десктопа

WEB v8 Бесплатно (free)

Рассмотрим на примерах работу движка EDIbot при организации меню B2B "Личного кабинета" (мобильная версия, версия десктоп) грузовладельца WMS-системы.

29.10.2020    1408    SizovE    0    

Обмен с сайтом посредством Post-запроса, json

WEB v8 1cv8.cf Бесплатно (free)

Задача - передавать на сайт объекты с наименованием и уникальным идентификатором (УИ), которые изменяются в 1С. Также нужно сохранять историю отправленных пакетов.

29.10.2020    6014    John_d    26    

Организация HTTP публикации каталога товаров используя PostgREST

WEB v8 1cv8.cf Бесплатно (free)

В статье опишу порядок установки настройки и использования PostgREST на примере организации каталога товаров.

05.10.2020    1832    malikov_pro    2    

Интеграционная прослойка(middleware) на Golang. Часть 5 - Обмен с 1С через HTTP-сервисы платформы

WEB v8 Бесплатно (free)

В этой статье научим прослойку отправлять данные в 1С, для этого используем HTTP-сервисы платформы. Обменяемся данными с новым справочником Клиенты. Но главное создадим HTTP-сервис для получения сообщений из очереди RabbitMQ.

28.09.2020    2863    dmitry-irk38    4