La fonctionnalité M2M, permet d'envoyer un courrier et des pièces jointes entre deux instances de Maarch Courrier, ou entre Maarch Courrier et une autre GEC.
L'expéditeur du courrier sera automatiquement créé dans la base de données s'il n'existe pas.
Il est également possible de recevoir un accusé de réception et de suivre l'avancement de notre courrier chez le destinataire.
Les données sont transmises dans une archive ZIP soit par l'envoi de mail (et Maarch Capture), soit par web service REST, soit manuellement. Cette archive ZIP est appelée par la suite "Pli numérique"
Dans les trois cas, une configuration doit être faite dans l'administration de l'application
Afin de pouvoir configurer votre instance M2GEC, il est nécessaire de créer le fichier m2mconfig.xml dans le dossier _config de votre instance custom avant de renseigner les informations dans l'écran d'administration des paramètres. Vous trouverez un exemple de ce fichier dans le dossier config de votre instance Maarch Courrier (m2m_config.xml.default)
1) Vérifier que le docserver_id ARCHIVETRANSFER existe dans la table docservers. S'il n'existe pas, passer cette commande dans la base de données :
INSERT INTO docservers (docserver_id, docserver_type_id, device_label, is_readonly, enabled, size_limit_number, actual_size_number, path_template, ext_docserver_info, chain_before, chain_after, creation_date, closing_date, coll_id, priority_number, docserver_location_id, adr_priority_number)
VALUES ('ARCHIVETRANSFER', 'ARCHIVETRANSFER', 'Fast internal disc bay for archive transfer', 'N', 'Y', 50000000000, 1, '/opt/maarch/docservers/archive_transfer/', NULL, NULL, NULL, '2017-01-13 14:47:49.197164', NULL, 'archive_transfer_coll', 10, 'NANTERRE', 2);
Vérifier également que le chemin /opt/maarch/docservers/archive_transfer/ existe sur votre serveur et que les droits soient correctement positionnés. Sinon modifier ce chemin, ou créer le dossier.
2) Vérifier que le docserver_type ARCHIVETRANSFER existe dans la table docserver_types. S'il n'existe pas, passer cette commande dans la base de données :
INSERT INTO docserver_types (docserver_type_id, docserver_type_label, enabled, is_container, container_max_number, is_compressed, compression_mode, is_meta, meta_template, is_logged, log_template, is_signed, fingerprint_mode)
VALUES ('ARCHIVETRANSFER', 'Archive Transfer', 'Y', 'N', 0, 'N', 'NONE', 'N', 'NONE', 'N', 'NONE', 'Y', 'SHA256');
Afin de transférer les documents entre les deux instances, le protocole utilisé est SEDA2.
Le pli numérique est une archive ZIP, contenant :
Exemple de paquet transféré :
ArchiveTransfer_20181008_164539_bblier.zip
Exemple de bordereau SEDA2 généré : (Par soucis de lisibilité, le fichier encodé en base64 a été enlevé)
<?xml version="1.0" encoding="UTF-8"?>
<ArchiveTransfer xmlns="fr:gouv:culture:archivesdefrance:seda:v2.0">
<Comment>Bernard BLIER (Ville de Maarch-les-bains - Service Courrier - support@maarch.org) : Votre message est prêt à être envoyé avec les fichiers joints suivants :
sdfsddf: sdfsddf.pdf
</Comment>
<Date>2018-10-08T16:45:39+02:00</Date>
<MessageIdentifier>ArchiveTransfer_20181008_164539_bblier</MessageIdentifier>
<CodeListVersions>
<ReplyCodeListVersion>""</ReplyCodeListVersion>
<MessageDigestAlgorithmCodeListVersion>""</MessageDigestAlgorithmCodeListVersion>
<MimeTypeCodeListVersion>""</MimeTypeCodeListVersion>
<EncodingCodeListVersion>""</EncodingCodeListVersion>
<FileFormatCodeListVersion>""</FileFormatCodeListVersion>
<CompressionAlgorithmCodeListVersion>""</CompressionAlgorithmCodeListVersion>
<DataObjectVersionCodeListVersion>""</DataObjectVersionCodeListVersion>
<StorageRuleCodeListVersion>""</StorageRuleCodeListVersion>
<AppraisalRuleCodeListVersion>""</AppraisalRuleCodeListVersion>
<AccessRuleCodeListVersion>""</AccessRuleCodeListVersion>
<DisseminationRuleCodeListVersion>""</DisseminationRuleCodeListVersion>
<ReuseRuleCodeListVersion>""</ReuseRuleCodeListVersion>
<ClassificationRuleCodeListVersion>""</ClassificationRuleCodeListVersion>
<AuthorizationReasonCodeListVersion>""</AuthorizationReasonCodeListVersion>
<RelationshipCodeListVersion>""</RelationshipCodeListVersion>
</CodeListVersions>
<DataObjectPackage>
<BinaryDataObject id="res_letterbox_0_104">
<Attachment filename="0030_1200000707.pdf">BASE64_DU_DOCUMENT</Attachment>
<MessageDigest algorithm="sha256">d4ae804a0e20cd61d63a92056506fe40fe6d46ade73a5803c54cf5ebf024cc2896133f7314da49edcaab61f9c3049f74030d153b30566f9822f2722173105e95</MessageDigest>
<Size>111108</Size>
<FormatIdentification>
<MimeType>application/pdf</MimeType>
</FormatIdentification>
</BinaryDataObject>
<DescriptiveMetadata>
<ArchiveUnit id="mail_1">
<Content>
<DescriptionLevel>File</DescriptionLevel>
<Title>[CAPTUREM2M]Réponse à votre courrier du 27-06-2018</Title>
<OriginatingSystemId>104</OriginatingSystemId>
<Status>Nouveau courrier ou document non qualifié</Status>
<Writer>
<FirstName>Barbara</FirstName>
<BirthName>BAIN</BirthName>
</Writer>
<CreatedDate>2018-06-27</CreatedDate>
</Content>
<ArchiveUnit id="archiveUnit_res_letterbox_0_104">
<Content>
<DescriptionLevel>Item</DescriptionLevel>
<Title>sdfsddf</Title>
<OriginatingSystemId>104</OriginatingSystemId>
<Status>Nouveau courrier ou document non qualifié</Status>
<Writer>
<FirstName>Barbara</FirstName>
<BirthName>BAIN</BirthName>
</Writer>
<CreatedDate>2018-06-27</CreatedDate>
</Content>
<DataObjectReference>
<DataObjectReferenceId>res_letterbox_0_104</DataObjectReferenceId>
</DataObjectReference>
</ArchiveUnit>
</ArchiveUnit>
</DescriptiveMetadata>
<ManagementMetadata></ManagementMetadata>
</DataObjectPackage>
<ArchivalAgency>
<Identifier>org_987654321_DGS_SF</Identifier>
<OrganizationDescriptiveMetadata>
<Name>Préfecture de Maarch Les Bains</Name>
<Communication>
<Channel>url</Channel>
<CompleteNumber>https://cchaplin:maarch@demo.maarchcourrier.com/rest/saveNumericPackage</CompleteNumber>
</Communication>
<Contact>
<PersonName>MARTIN Nicolas</PersonName>
<Communication>
<Channel>phone</Channel>
<CompleteNumber></CompleteNumber>
</Communication>
<Communication>
<Channel>email</Channel>
<CompleteNumber>info@maarch.org</CompleteNumber>
</Communication>
<Address>
<CityName>MAARCH LES BAINS</CityName>
<Country>FRANCE</Country>
<PostOfficeBox>13</PostOfficeBox>
<StreetName>RUE LA PREFECTURE</StreetName>
</Address>
</Contact>
</OrganizationDescriptiveMetadata>
</ArchivalAgency>
<TransferringAgency>
<Identifier>org_987654321_DGS_SF</Identifier>
<OrganizationDescriptiveMetadata>
<LegalClassification>Ville de Maarch-les-bains</LegalClassification>
<Name>Service Courrier</Name>
<Communication>
<Channel>url</Channel>
<CompleteNumber>https://cchaplin:maarch@localhost/maarch_v2</CompleteNumber>
</Communication>
<Contact>
<DepartmentName>Service Courrier</DepartmentName>
<PersonName>Bernard BLIER</PersonName>
<Communication>
<Channel>phone</Channel>
</Communication>
<Communication>
<Channel>email</Channel>
<CompleteNumber>florian.azizian@maarch.org</CompleteNumber>
</Communication>
<Address></Address>
</Contact>
</OrganizationDescriptiveMetadata>
</TransferringAgency>
</ArchiveTransfer>
Afin de pouvoir envoyer un pli numérique, un utilisateur doit faire parti d'un groupe qui a le privilège "Enregistrer un pli numérique".
L'envoi de pli numérique se fait dans la partie "Eléments envoyés" visible dans la fiche détaillée, ou la page de traitement. Cliquer ensuite sur le logo "Envoyer un pli numérique" afin d'accéder au formulaire d'envoi.
Le pli numérique peut être transmis selon 3 méthodes. Cela dépend du moyen de communication de l'expéditeur et du destinataire.
Envoi par webservice
Aucun paramétrage à faire en plus. Les courriers, accusé de réception et suivi des demandes seront visibles en tant réel (sauf ralentissement réseau).
Envoi manuel
Si les 2 instances ne sont pas joignables, il est possible d'enregistrer le pli numérique et de le transférer au destinataire "manuellement".
Pour cela :
Envoi par mail automatisé
Attention, avec cette méthode, la transmission des pli numérique, des accusés de réception et du suivi des demandes ne sont pas instantanés. Cela dépend de la fréquence d'exécution des scripts d'envoi de mail et de capture.
Pour utiliser cette méthode, il faut paramétrer Maarch Capture :
1) Copier le fichier [racine_Maarch_Capture]/config/samples/Capture_m2m_sample.xml.default vers [racine_Maarch_Capture]/config/Capture.xml. Et modifier les chemins des attributs maarchLogParam et directory en fonction de votre environnement.
2) Copier les 4 fichiers [racine_Maarch_Capture]modules/MailCapture/samples/MailCapture_M2M{_ACK, _NOTIFICATION, _REPLY}.xml.default vers [racine_Maarch_Capture]modules/MailCapture/MailCapture_M2M{_ACK, _NOTIFICATION, _REPLY}.xml.default
3) Copier le fichier [racine_Maarch_Capture]/modules/MaarchWSClient/samples/MaarchWSClient_m2m_sample.xml.default vers [racine_Maarch_Capture]/modules/MaarchWSClient/MaarchWSClient_m2m_sample.xml. Et modifier l'attribut uri en fonction de votre environnement.
4) Copier le script [racine_Maarch_Capture]/scripts/samples/linux/CAPTURE_M2M.sh.default en [racine_Maarch_Capture]/scripts/samples/linux/CAPTURE_M2M.sh
Il faut ensuite rendre ce script exécutable avec la commande "chmod +x", puis le lancer en tâche planifié.
Les logs de Maarch Capture sont visibles dans le fichier que vous avez indiqué dans l'attribut directory du fichier Capture.xml
De plus, il faut que l'envoi de mail soit correctement configuré dans votre application (Voir la documentation).
Après l'envoi d'un pli numérique, celui-ci est visible dans la liste des plis numériques.
Vous pouvez voir si le pli numérique a été reçu par le destinataire en vérifiant que la date de réception soit bien remplie.
Dans la liste des plis numérique envoyés, cliquer sur un pli numérique.
Le détail du pli numérique envoyé s'affiche.
Aussi, vous pouvez voir :
Les actions sont enregistrées dans l'historique :
C'est tout à fait possible, grâce au contact que vous créez dans l'instance émettrice via le champ "Identifiant contact externe de l'adresse du contact" qui doit être de la forme SIRET/ENTITY_ID correspondant à une entité de l'instance destinatrice.
Ex : vous pouvez envoyer un pli numérique au service informatique de la ville de Maarch-les-Bains, si vous avez créé dans votre instance émettrice le contact "Service informatique de Maarch-les-Bains". Le contact "Service informatique de Maarch-les-Bains" doit avoir dans le champ "identifiant du contact externe" le numéro de SIRET de l'entité "service informatique" de Maarch-les-Bains.
Pour étayer cet exemple, imaginons que vous souhaitez envoyer deux plis numériques à la ville de Maarch-les-Bains. Un pour le service informatique, un autre pour le service comptabilité.
Le paramétrage et les étapes suivantes devront alors être validées :
Etape 0 : dans l'instance destinatrice, la ville de Maarch-les-Bains, il faut que j'ai les deux entités déclarées avec le champ numéro de SIRET unique. J'ai donc créé le service informatique (ou Direction des Systèmes d'Information) avec le num SIRET 45239273100025/DSI et le service comptabilité (Direction des Finances) avec le SIRET 45239273100025/FIN.
Etape 1 : je créé le contact "Service Informatique de Maarch-les-Bains" avec comme identifiant MAARCH2MAARCH "45239273100025/DSI", l'URL correspondante à l'instance de destination, les identifiants utilisateur et mot de passe de l'utilisateur Webservice
Etape 2 : je créé le contact "Service Comptabilité de Maarch-les-Bains" avec comme identifiant MAARCH2MAARCH "45239273100025/FIN", l'URL correspondante à l'instance de destination, les identifiants utilisateur et mot de passe de l'utilisateur Webservice
Etape 3 : une fois mon courrier enregistré (associé au contact "Service Informatique de Maarch-les-Bains") j'envoie le pli numérique au service informatique de la ville de Maarch-les-Bains
Etape 4 : une fois mon courrier enregistré (associé au contact "Service Comptabilité de Maarch-les-Bains") j'envoie le pli numérique au service comptabilité de la ville de Maarch-les-Bains
Depuis le répertoire ./sql vous avez à votre disposition un fichier SQL vous permettant de vous aider à charger des contacts candidats au M2GEC. C'est un fichier exemple quand vous êtes en multi-instances. Cela vous permet de charger les contacts des autres instances de votre plateforme, vous permettant ainsi de faire des transferts de courriers entre vos instances.
./sql/m2m_contacts_samples.sql
Voici son contenu :
--CREATE GROUP FOR M2GEC
DELETE FROM usergroups WHERE group_id = 'MAARCHTOGEC';
INSERT INTO usergroups (group_id,group_desc) VALUES ('MAARCHTOGEC', 'Envoi dématérialisé');
DELETE FROM usergroups_services WHERE group_id = 'MAARCHTOGEC';
INSERT INTO usergroups_services (group_id, service_id) VALUES ('MAARCHTOGEC', 'manage_numeric_package');
--CREATE SECURITY FOR M2GEC
DELETE FROM security WHERE group_id = 'MAARCHTOGEC';
INSERT INTO security (group_id, coll_id, where_clause, maarch_comment) VALUES ('MAARCHTOGEC', 'letterbox_coll', '1=0', 'Aucun courrier');
--CREATE A USER FOR M2GEC
DELETE FROM users WHERE user_id = 'cchaplin';
INSERT INTO users (user_id, password, firstname, lastname, mail, status, mode) VALUES ('cchaplin', '$2y$10$993vH6NihRnLIEN4FdlNu.ta.SRHH6984HfG/cmCMS.USyjXEpiQi', 'Jean', 'WEBSERVICE', 'dev.maarch@maarch.org', 'OK', 'rest');
DELETE FROM usergroup_content WHERE user_id = 24;
INSERT INTO usergroup_content (user_id, group_id, role) VALUES (24, 11, '');
--CREATE CONTACTS FOR M2GEC
DELETE FROM contacts where id >= 1000000;
-- INSTANCE A
INSERT INTO contacts VALUES (1000000, 1, 'Custom 1', 'Custom 1', 'Custom 1', NULL, NULL, '13', 'RUE LA PREFECTURE', NULL, NULL, '99000', 'MAARCH LES BAINS', NULL, NULL, NULL, '{"url": "http://127.0.0.1/MaarchCourrier/cs_custom_1/", login: "cchaplin", "password": "Gzb35N9t::248178e69ec75ced9b8be2dc1ff465bf"}', NULL, 21, '2018-04-18 12:43:54.97424', '2020-03-24 15:06:58.16582', true, NULL, '{"m2m": "org_custom_1"}');
INSERT INTO contacts VALUES (1000001, 1, 'Custom 2', 'Custom 2', 'Custom 2', NULL, NULL, '13', 'RUE LA PREFECTURE', NULL, NULL, '99000', 'MAARCH LES BAINS', NULL, NULL, NULL, '{"url": "http://127.0.0.1/MaarchCourrier/cs_custom_2/", login: "cchaplin", "password": "Gzb35N9t::248178e69ec75ced9b8be2dc1ff465bf"}', NULL, 21, '2018-04-18 12:43:54.97424', '2020-03-24 15:06:58.16582', true, NULL, '{"m2m": "org_custom_2"}');
INSERT INTO contacts VALUES (1000002, 1, 'Custom 3', 'Custom 3', 'Custom 3', NULL, NULL, '13', 'RUE LA PREFECTURE', NULL, NULL, '99000', 'MAARCH LES BAINS', NULL, NULL, NULL, '{"url": "http://127.0.0.1/MaarchCourrier/cs_custom_3/", login: "cchaplin", "password": "Gzb35N9t::248178e69ec75ced9b8be2dc1ff465bf"}', NULL, 21, '2018-04-18 12:43:54.97424', '2020-03-24 15:06:58.16582', true, NULL, '{"m2m": "org_custom_3"}');
-- FOR EACH INSTANCE
DO $$
BEGIN
IF (SELECT current_database() = 'custom_1') THEN
UPDATE entities set business_id = 'org_custom_1';
END IF;
END $$;
DO $$
BEGIN
IF (SELECT current_database() = 'custom_2') THEN
UPDATE entities set business_id = 'org_custom_2';
END IF;
END $$;
DO $$
BEGIN
IF (SELECT current_database() = 'custom_3') THEN
UPDATE entities set business_id = 'org_custom_3';
END IF;
END $$;