Русский
Русский
English
Статистика
Реклама

Addons

Обзор разработки дополнений для amoCRM, с использованием webHook и виджетов

09.03.2021 18:08:33 | Автор: admin

Содержание

  1. WebHook

  2. Виджет

  3. Техническая поддержка

  4. Итог

Мы не использовали все возможности разработки под amoCRM, ограничились приватным виджетом и webHook, поэтому ниже речь пойдет именно об этом

WebHook

К каждому аккаунту(на пробном только в течении 14 дней)можно установитьwebHook,документация подробно описывает процесс. Разработка каких-либо интеграций при этом не нужна.

В нашем случае было достаточно информации одобавлении сделки.

На сервере по указанному url в файле(в данном случаеindex.php)первым делом необходимо сырые POST данные преобразовать из json в массив php:

//если в сырых POST данных первый символ { значит это jsonif(strlen($sRawPost) > 0 && $sRawPost[0] == "{"){    $sDecode = json_decode($sRawPost, true);    if($sDecode !== null)         $_POST = $sDecode;}

ВgetпараметрыwebHookпри создании новой сделки ничего не приходит, а вpostпримерно следующее:

{    "leads": {        "add": [            {                "id": 4564454,                "name": "Название товара",                "status_id": 7534534,                "price" => 0,                "responsible_user_id": 453453453,                "last_modified": 1612007407,                "modified_user_id": 0,                "created_user_id": 0,                "date_create": 1612007407,                "pipeline_id": 4546445,                "tags": [                    {                        "id": 7899                        "name": tilda                    }                ]            }        ],        "account_id": 19277260        "custom_fields": [            {                "id": 448797,                "name": "name_field",                "code": "code_field",                "values": [                    {                        "value": "string"                    }                ]            }        ],        "created_at": 1612007407,        "updated_at": 1612007407    },    "account": [        {            "subdomain": "subdomain",            "id": 19217260,            "_links": [                "self": "https://subdomain.amocrm.ru"            ]        }    ]}

Очевидно чтоидентифицировать аккаунтиз которого была отправка запроса можно по ключуaccount, аleads["add"][0]["account_id"] == account["id"].

Вleads["add"][0]["tags"]находятсяспециальные метки, которые можно присвоить сделке, и по которым на стороне принимающего сервера можно как-то идентифицировать, в нашем случае нужен был тег со значениемtilda.

Но больший интерес представляетleads["add"][0]["custom_fields"]- этомассив произвольных полей сделки.

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

Для редактирования полей сделки нужно зайти в любую сделку или в интерфейс создания новой сделки, затем перейти во вкладку "Настроить".

Редактирование полей сделкиРедактирование полей сделки

Новое поле сделки может быть скрыто из веб-интерфейса для редактирования и может быть доступно только на стороне API.

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

$aAdd = $_POST['leads']['add'][0]; //извлекаем имена полей$aNameCustomFields = array_column($aAdd['custom_fields'], 'name'); //здесь пишем проверку наличия нужных полей //получаем значение поля$idOrder = $aAdd['custom_fields'][array_search('ORDERID', $aNameCustomFields)]['values'][0]['value'];
Добавление нового поля сделкиДобавление нового поля сделки

А дальше все зависит от целей использования webHook :)

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

Виджет

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

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

Затем необходимо создатьструктуру виджетасостоящую из директорий и файлов.

Код виджета пишется наjavascript, шаблоны виджета наtwig, в js доступенjquery, есть возможность использованияcss

В директории виджета необходимо наличие файлаmanifest.json- файла конфигурации виджета,в документации есть подробное описание, аздесьописаны типы полей. Не забываем олокализацииi18n.

Стоит учесть что виджет подключается только к темобластям сайта, которые будут указаны вmanifest.json

В документации есть разделWEB SDKкоторый также посвящен созданию виджетов.

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

Если виджет используетajax запросы со стороннего сервера(например как было у нас, виджет обращался к нашему серверу), то сервер должен отправлять заголовокAccess-Control-Allow-Origin: *:

header("Access-Control-Allow-Origin: *");

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

Это не очень удобно, к тому же вmanifest.jsonкаждый разпри загрузке виджета нужно менять версиюwidget.version, иначе обновление виджета произойдет не сразу.

Техническая поддержка

Через чат amoCRM на всех страницах сайта CRM можно быстро получить ответы на многие вопросы. CRM платная для использования, но предоставляется бесплатный доступ на 14 дней. Однако,мы не собирались пользоваться самой CRM, а лишьпредоставлять нашу интеграцию. Возможность разработки виджета возможна только в течении 14 дней. После истечения периода, нам понадобилось продлить пробный период, обратившись в онлайн чат мы получили дополнительные 10 дней. Однако, позже через онлайн-чат удалось выяснить чтодля разработчиков публичных интеграций естьспециальный бесплатныйтехнический аккаунт. Также во время разработки нам потребовалось узнатьip адреса серверов amoCRM, с которых они присылают webHook на наш сервер, тех. поддержка через онлайн чат любезно их предоставила.На момент написания статьи, ip адреса серверов amoCRM не находятся в публичном доступе, узнать информацию о них можно через онлайн-чат на сайте.

Итог

В целом мне понравилось разработка для amoCRM, понятная и объемная документация с примерами, однако загрузка виджета доставляет определенные неудобства.

Подробнее..

Xtables-addons фильтруем пакеты по странам

17.07.2020 18:15:01 | Автор: admin

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

Предыстория


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

Подготовка операционной системы


Фильтрация будет настраиваться с помощью утилиты iptables, которой требуется расширение для работы с GeoIP-данными. Такое расширение можно найти в xtables-addons. xtables-addons устанавливает расширения для iptables в виде самостоятельных модулей ядра, благодаря чему не нужно перекомпилировать ядро ОС.

На момент написания статьи актуальная версия xtables-addons 3.9. Тем не менее, в стандартных репозиториях Ubuntu 20.04 LTS можно найти только 3.8, а в репозиториях Ubuntu 18.04 3.0. Установить расширение из пакетного менеджера можно следующей командой:

apt install xtables-addons-common libtext-csv-xs-perl

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

apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl

Клонируем репозиторий:

git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons

cd xtables-addons-xtables-addons

xtables-addons содержит множество расширений, но нас интересует только xt_geoip. Если не хочется тащить в систему ненужные расширения, их можно исключить из сборки. Для этого нужно отредактировать файл mconfig. Для всех желаемых модулей поставить y, а все ненужные отметить n. Собираем:

./autogen.sh

./configure

make

И устанавливаем с правами суперпользователя:

make install

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

INSTALL /root/xtables-addons-xtables-addons/extensions/xt_geoip.koAt main.c:160:- SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:72- SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:79sign-file: certs/signing_key.pem: No such file or directory

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

cd /lib/modules/(uname -r)/build/certs

cat <<EOF > x509.genkey

[ req ]default_bits = 4096distinguished_name = req_distinguished_nameprompt = nostring_mask = utf8onlyx509_extensions = myexts[ req_distinguished_name ]CN = Modules[ myexts ]basicConstraints=critical,CA:FALSEkeyUsage=digitalSignaturesubjectKeyIdentifier=hashauthorityKeyIdentifier=keyidEOF

openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem

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

depmod -a

modprobe xt_geoip

Убедимся, что xt_geoip загружен в систему:

# lsmod | grep xt_geoipxt_geoip               16384  0x_tables               40960  2 xt_geoip,ip_tables

Дополнительно убедимся, что расширение загрузилось в iptables:

# cat /proc/net/ip_tables_matches geoipicmp

Нас все устраивает и остается только добавить название модуля в /etc/modules, чтобы модуль заработал после перезагрузки ОС. С этого момента iptables понимает команды geoip, но ему не хватает данных для работы. Приступаем к загрузке базы данных geoip.

Получение базы данных GeoIP


Создаем каталог, в котором будет хранится информация, понятная расширению iptables:

mkdir /usr/share/xt_geoip

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

Версия из пакетного менеджера


Скрипт лежит по пути /usr/lib/xtables-addons, однако при попытке запуска можно увидеть не самую информативную ошибку:

# ./xt_geoip_dl unzip:  cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.

Ранее в качестве базы данных использовался продукт GeoLite, ныне известный как GeoLite Legacy, распространяемый по лицензии Creative Commons ASA 4.0 компанией MaxMind. С этим продуктом произошло сразу два события, которые сломали совместимость с расширением для iptables.

Во-первых, в январе 2018 года объявили о прекращении поддержки продукта, и второго января 2019 года с официального сайта убрали все ссылки на скачивание старой версии базы. Новым пользователям рекомендуется использовать продукт GeoLite2 или его платную версию GeoIP2.

Во-вторых, c декабря 2019 года MaxMind заявила о значительном изменении в доступе к их базам. Чтобы соответствовать Калифорнийскому закону о защите прав потребителей, компания MaxMind приняла решение прикрыть распространение GeoLite2 регистрацией.

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


После на почту придет сообщение с просьбой установить пароль. Теперь, когда мы завели аккаунт, нужно создать лицензионный ключ. В личном кабинете находим пункт My License Keys, а затем нажимаем на кнопку Generate new License Key.

При создании ключа нам зададут только один вопрос: будем ли мы использовать этот ключ в программе GeoIP Update? Отвечаем отрицательно и нажимаем на кнопку Confirm. Во всплывающем окне будет отображен ключ. Сохраните этот ключ в надежное место, так как после закрытия всплывающего окна вы больше не сможете посмотреть ключ полностью.


У нас есть возможность скачивать базы GeoLite2 в ручном режиме, но их формат не совместим с форматом, который ожидает скрипт xt_geoip_build. Здесь на помощь приходят скрипты GeoLite2xtables. Для работы скриптов устанавливаем perl-модуль NetAddr::IP:

wget https://cpan.metacpan.org/authors/id/M/MI/MIKER/NetAddr-IP-4.079.tar.gz

tar xvf NetAddr-IP-4.079.tar.gz

cd NetAddr-IP-4.079

perl Makefile.PL

make

make install

Далее клонируем репозиторий со скриптами и записываем в файл полученный ранее лицензионный ключ:

git clone https://github.com/mschmitt/GeoLite2xtables.git

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=\123ertyui123\' > geolite2.license

Запускаем в работу скрипты:

# Скачиваем данные GeoLite2./00_download_geolite2# Скачиваем информацию о странах (для соответствия коду)./10_download_countryinfo# Конвертируем GeoLite2 базу в формат GeoLite Legacy cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv |./20_convert_geolite2 /tmp/CountryInfo.txt > /usr/share/xt_geoip/dbip-country-lite.csv
MaxMind накладывает ограничение в 2000 скачиваний в сутки и при большом количестве серверов предлагает кэшировать обновление на прокси-сервере.
Обратите внимание, что выходной файл обязательно должен называться dbip-country-lite.csv. К сожалению, 20_convert_geolite2 выдает не идеальный файл. Скрипт xt_geoip_build ожидает три колонки:

  • начало диапазона адресов;
  • конец диапазона адресов;
  • код страны в iso-3166-alpha2.

А выходной файл содержит шесть колонок:

  • начало диапазона адресов (строковое представление);
  • конец диапазона адресов (строковое представление);
  • начало диапазона адресов (числовое представление);
  • конец диапазона адресов (числовое представление);
  • код страны;
  • название страны.

Это несоответствие критично и может быть исправлено одним из двух способов:

  1. править 20_convert_geolite2;
  2. править xt_geoip_build.

В первом случае сокращаем printf до нужного формата, а во втором изменяем присваивание переменной $cc на $row->[4]. После этого можно выполнять сборку:

/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip

. . . 2239 IPv4 ranges for ZA  348 IPv6 ranges for ZA   56 IPv4 ranges for ZM   12 IPv6 ranges for ZM   56 IPv4 ranges for ZW   15 IPv6 ranges for ZW

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

Версия из исходных кодов


При установке из исходных кодов скрипты xt_geoip_* располагаются в каталоге /usr/local/libexec/xtables-addons. В этой версии скрипта используется база данных IP to Country Lite. Лицензия Creative Commons Attribution License, а из доступных данных те самые необходимые три столбца. Скачиваем и собираем базу:

cd /usr/share/xt_geoip/

/usr/local/libexec/xtables-addons/xt_geoip_dl

/usr/local/libexec/xtables-addons/xt_geoip_build

После этих действий iptables готов к работе.

Используем geoip в iptables


Модуль xt_geoip добавляет всего два ключа:

geoip match options:[!] --src-cc, --source-country country[,country...]Match packet coming from (one of) the specified country(ies)[!] --dst-cc, --destination-country country[,country...]Match packet going to (one of) the specified country(ies)NOTE: The country is inputed by its ISO3166 code.

Способы формирования правил для iptables, в целом, остаются неизменными. Для использования ключей из дополнительных модулей необходимо явно указывать название модуля с ключом -m. Например, правило для блокировки входящих TCP-соединений на 443 порту не из США на всех интерфейсах:

iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP

Файлы, созданные xt_geoip_build, используются только при создании правил, но не учитываются при фильтрации. Таким образом, для корректного обновления базы geoip необходимо сначала обновить iv*-файлы, а затем пересоздать все правила, которые используют geoip в iptables.

Заключение


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

Подробнее..

Модули и расширения для Godot 3, ссылки и краткий обзор существующих

24.10.2020 06:20:38 | Автор: admin

Различие модуля и расширения:

Расширение (plugin/addon) - работает в официальном редакторе Godot и не требует никаких дополнительных действий, и работает со стандартными шаблонами экспорта.

Модуль (module) - требует модификации исходного кода и сборки всего редактора Godot, также сборки каждого из шаблонов для экспорта на каждую из платформ.

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

Установка модулей и расширений:

Расширения (plugin/addon) - для установки скопируйте расширение в каталог addons в вашем проекте. Структура должны быть такой - addons/<название расширения>/, достаточно скопировать <название расширения> в каталог addons. И включить в опциях проекта Проект (Project) - Настройки проекта (Project Settings)

Модули (module) - в большинстве случаев достаточно скопировать каталог с модулем в godot_<версия исходный код>/modules/<название модуля> и сделать сборку Godot редактора и нужных шаблонов следуя инструкции. После сборки функционал модуля станет доступным.

Расширения:

Godot Console - позволяет создавать простой UI элемент Консоль, и просто добавлять туда команды, полезно во многих случаях.

Godot-3D-text-plugin - позволяет прямо в редакторе создавать трехмерный объект(mesh) в форме текста, создавать буквально двумя кликами, есть поддержка шрифтов. Для получения объекта нажать Convert to MeshInstance.

smoothing-addon - позволяет просто создавать плавную интерполяцию положения трехмерных объектов, больше информации по ссылке на расширение. Видео использования, физический ФПС установлен на 8, слева реальная позиция, справа используя smoothing-addon:

3D Trail addon for Godot - оставляет плоский след за объектами, к сожалению геометрия следа генерируется на CPU, что даст сильную нагрузку при использовании на десятках объектах одновременно. Лучше всего использовать не более чем на нескольких объектах.

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

Scatter - для его работы требуется другой плагин Polygon Path, позволяет делать дубликаты одного объекта в выделенной области, например трава или деревья.

Godot-Planar-Reflection-Plugin - создание отражений с помощью камеры. Может пригодиться для реалистичных отражений. Можно также использовать для отражений в воде Больше информации и примеров по ссылке.

Дальше не совсем плагины, просто готовые полезные шейдеры, скрипты, и примеры:

Godot Realistic Water - хороший и быстрый шейдер воды с выделением (используя depth) объектов пересекающих воду.

Godot_force_shield_shader - простой эффект энергетического щита, главное то что реализована логика выделения пересекающих объектов используя depth.

Screen-Space-Decals - логика отпечатков на шейдерах, так как в Godot 3 нет поддержки decals. Более комплексное использование этой техники в Godot я описал в своей статье на хабре ссылка, где есть ссылки на исходный код моего измененного шейдера.

Simple Wind Shader - пример использования и создания шейдера анимации движения травы и листвы под действием ветра.

Mirror example - проект с примером создания зеркала

Camera Control Script - очень полезный скрипт для контроля камеры, по сути шаблон для всех трехмерных камер.

Модули:

Futari-addon - очень полезный модуль для GPU-частиц, позволяет добавлять физический коллайдер сферу или плоскость, и частицы будут взаимодействовать с ними, также можно добавлять области с ускорением на подобии ветра. Эта логика работает и в WebGL2. На хабре есть статья с моим примером использования этого модуля. Есть демо проект от автора.

HeightMap terrain plugin - создание площадей как карты высот, есть поддержка разных текстур, травы, также LOD и физика. Полноценный HeightMap с которым можно делать все что требуется.

Godot-lportal - добавляет поддержку occlusion culling в Godot 3. Я лично не нашел применения этому плагину, по утверждению автора этот плагин позволяет делать даже порталы в Godot 3 без потери производительности. Также, возможно, этот плагин будет добавлен в Godot 3 в будущем.

Godot-lsimd - добавляет поддержку SIMD в Godot 3. Использовать можно прямо в GDScript, ускоряя работу с массивами и большими объемами данных.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru