
Tôt ou tard, toute entreprise informatique (sous-traitance ou épicerie) souhaite organiser son propre espace où vous pouvez stocker des informations sur les projets, les employés et les ventes. Maintenir une correspondance de travail et discuter des tâches / stratégies / documents. Le plus souvent, ces entreprises commencent à tout coder elles-mêmes ou ont vu quelque chose pour Bitrix24, etc. Dans cette série d'articles, je parlerai de notreun vélo- expérience en automatisation de processus. Comme prévu, presque tous sont auto-hébergés, opensource et essaient de le faire presque sans codage.
Disclamer
Une série d'articles décrit un exemple de mise en œuvre d'infrastructures, l'auteur n'encourage pas à répéter et ne prétend pas être «correct» dans de telles approches. Certaines parties du système décrit sont effectivement et avec succès utilisées dans plusieurs organisations pendant 3 ans. L'auteur accepte volontiers les suggestions pour améliorer le système ou suggérer des solutions alternatives. Veuillez ne pas créer de discussions comme "qui en a besoin" et "quelles béquilles", qui n'en ont pas besoin, ne lisent pas et n'interfèrent pas avec les commentateurs
Alors, que peut demander une entreprise d'externalisation moyenne à un système similaire:
- Base de données des employés avec répartition des droits d'accès à l'information
- GIT , , 1
- Chat-Server (Messenger ) 1
- , 1
- / HR
- -
- ( )
– . - , - .

, " GIT ?", " ?" . .
, . , , LDAP . LDAP , , . 3 LDAP OpenLDAP , , , .
, RESTapi. , LDAP .
, OpenSource ERP/CRM (Odoo, Axellor ), OpenProject . , . - PHP, .
, EspoCRM. , " " , . , , CMS, .
, Espo :
- HR
- -
- (CRM :))
PHP .
:

CRM. .
( , ).
-> -> User ().
. ( ) :

, Skype, Telegram, VK, Facebook . (, ), , , , , ( ).
, .
/ .
-> -> -> .
- :

, , . , .
, - " " .
EspoCRM, . , - , - .
, . .
— . , . , — email.
— self-hosted . , , . .. 1000 , web- RESTapi. , — .
.
, , espo.
, , Node-RED.
Node-RED
, , .
Node-RED , : , - . , , , , .
Node-RED . , , API ..
API Token.
"-" - " URL ".

, .
. Directory API, , , :

( )
- :

, . , .
https://oauth.yandex.ru/authorize?response_type=token&client_id=<ID>
,

.
, , Node-RED.
global.set('YaConnectToken', 'AgAAAA......');
return msg;
global.get() .
Inject , Flow 1. , . ,

Node-RED + .
- Flow : inject, function, http request

- inject, , , JSON
{
"userName":"testuser",
"firstName":"Test",
"lastName":"User",
"emailAddress":"testuser@mydomain.ru",
"dob":"1988-01-01",
"gender":"male",
"passwordConfirm":"12345678Eiru",
"isActive":true
}
.
- function :
const TOKEN = global.get('YaConnectToken');
const user = msg.payload;
const body = {
'department_id': 1,
'is_admin': false,
'nickname': user.userName,
'name': {
'first': user.firstName,
'last': user.lastName
},
'birthday': user.dob,
'gender': user.gender,
'password': user.passwordConfirm,
'is_dismissed': user.isActive,
'position': user.title
}
return {
headers: {
'Authorization': 'OAuth ' + TOKEN,
},
payload: body
}
.
http request, POST, url https://api.directory.yandex.net/v6/users/

Deploy inject ( JSON inject function )
, http request , msg statusCode 200 201 payload:

! !
EspoCRM Node-RED
( CRM) Node-RED .
PHP, .
UserSaved.php EspoCRM custom/Espo/Custom/Hooks/User
:
<?php
namespace Espo\Custom\Hooks\User;
use Espo\ORM\Entity;
class UserSaved extends \Espo\Core\Hooks\Base {
public function afterSave(Entity $entity, array $options = []) {
$entityValues = $entity->getValues();
unset($entityValues['password']);
$entityValues['isNew'] = $entity->isNew();
$data = array(
'event' => 'afterSave',
'entity' => $entityValues,
);
$this->_callRed($data);
}
public function afterRemove(Entity $entity, array $options = []) {
$entityValues = $entity->getValues();
unset($entityValues['password']);
$data = array(
'event' => 'afterRemove',
'entity' => $entityValues
);
$this->_callRed($data);
}
private function _callRed($data) {
$data_string = json_encode($data);
$ch = curl_init('__NODE_RED_ENDPOINT__');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
}
Hook . ( ) , - // Espo, Node-RED. , Node-RED EspoCRM ( ) , localhost .
NODE_RED_ENDPOINT — .
isNew ,
passwordConfirm , .
, .
:
Node-RED. , . Flow, . ( ).
EspoCRM , , , .
:
- self-hosted GIT ( GitLab :))
- self-hosted Slack
- HR .
- .
FAQ:
Q: Pourquoi Node-RED est-il du tout si la demande peut être faite directement de PHP à Yandex?
R: Ayant une intégration du côté Node-RED, nous pouvons changer la configuration, ajouter de nouveaux services et hooks, aux changements d'utilisateurs, sans codage supplémentaire (sans compter les petites fonctions sur Node-RED). Le processus de déploiement des mises à jour se résume à un bouton.