{"id":338985,"date":"2026-07-14T14:55:17","date_gmt":"2026-07-14T14:55:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/miroocrm-cf7-sync\/"},"modified":"2026-07-14T14:54:59","modified_gmt":"2026-07-14T14:54:59","slug":"miroocrm-sync-for-contact-form-7","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/miroocrm-sync-for-contact-form-7\/","author":23531208,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.0.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"MirooCRM Sync for Contact Form 7","header_author":"Doozy Service Srl","header_description":"Sincronizza i submission di Contact Form 7 con MirooCRM. Crea una anagrafica (customer) + contatto (contact) via API JSON:API. Form selezionabili da admin, URL base e token configurabili.","assets_banners_color":"","last_updated":"2026-07-14 14:54:59","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/www.doozy.it","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.0":{"tag":"1.1.0","author":"wpdoozy","date":"2026-07-14 14:54:59"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[5445,1152,1150,5342,271514],"plugin_category":[42,58],"plugin_contributors":[271515],"plugin_business_model":[],"class_list":["post-338985","plugin","type-plugin","status-publish","hentry","plugin_tags-cf7","plugin_tags-contact-form-7","plugin_tags-crm","plugin_tags-lead","plugin_tags-miroocrm","plugin_category-contact-forms","plugin_category-user-management","plugin_contributors-wpdoozy","plugin_committers-wpdoozy"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/miroocrm-sync-for-contact-form-7.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>MirooCRM Sync for Contact Form 7 listens to the Contact Form 7 <code>wpcf7_mail_sent<\/code> hook and, for the forms you select in the plugin settings, creates the following on MirooCRM:<\/p>\n\n<ol>\n<li>A <strong>Customer<\/strong> record, with the form message stored in <code>notes<\/code> and the <code>lead_source<\/code> field filled in (default: \"CF7 Sito\").<\/li>\n<li>A <strong>Contact<\/strong> linked to that customer, with name, surname, email and phone taken from the CF7 fields.<\/li>\n<\/ol>\n\n<p>The MirooCRM JWT token always stays on the WordPress server: it is never exposed to the browser.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Settings page under <strong>Settings \u2192 MirooCRM Sync for Contact Form 7<\/strong> for API URL, JWT and lead source.<\/li>\n<li>Explicit selection of the CF7 forms to sync: forms that are not selected are ignored.<\/li>\n<li>Configurable CF7 \u2192 MirooCRM field mapping from the admin.<\/li>\n<li><strong>Asynchronous sync<\/strong> via WP-Cron: the submission responds immediately and the API calls run in the background. Can be disabled with the <code>miroocrm_cf7_async<\/code> filter.<\/li>\n<li><strong>JWT token encrypted at rest<\/strong> (AES-256-GCM with a key derived from the WordPress salts) and never printed back to the browser.<\/li>\n<li><strong>Duplicate-submission guard<\/strong>: identical submissions sent in quick succession are ignored.<\/li>\n<li><strong>Automatic retry<\/strong> on API calls in case of a network error or a 5xx\/429 response.<\/li>\n<li>Admin-readable log with personal data masked; mirrored to <code>error_log()<\/code> when <code>WP_DEBUG<\/code> is enabled.<\/li>\n<li>WordPress filters for custom logic: <code>miroocrm_cf7_field_map<\/code>, <code>miroocrm_cf7_customer_attrs<\/code>, <code>miroocrm_cf7_contact_attrs<\/code>, <code>miroocrm_cf7_async<\/code>, <code>miroocrm_cf7_dedup_ttl<\/code>, <code>miroocrm_cf7_http_timeout<\/code>, <code>miroocrm_cf7_http_retries<\/code>, <code>miroocrm_cf7_log_redact<\/code>.<\/li>\n<li>Action hooks <code>miroocrm_cf7_sync_success<\/code>, <code>miroocrm_cf7_sync_error<\/code>, <code>miroocrm_cf7_sync_partial<\/code>.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>Contact Form 7 active.<\/li>\n<li>A reachable MirooCRM API endpoint (e.g. <code>https:\/\/app.miroocrm.com\/api\/v1<\/code>).<\/li>\n<li>A MirooCRM Bearer JWT with permission to <code>POST \/customers<\/code> and <code>POST \/contacts<\/code>.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to MirooCRM, a CRM service operated by Doozy Service Srl. It is used to turn the Contact Form 7 submissions you choose into CRM records: for each selected form it creates a customer and a linked contact in your MirooCRM account.<\/p>\n\n<p>What data is sent, and when: when a visitor successfully submits one of the CF7 forms you enabled in the plugin settings, the plugin sends the mapped submission fields (such as name, surname, email, phone, message and company) to the MirooCRM REST API endpoint you configure (for example <code>https:\/\/app.miroocrm.com\/api\/v1<\/code>). Nothing is sent for forms that are not selected, and nothing is sent until an administrator has entered the API base URL and an API token. The token is stored on your server and is never sent to the browser.<\/p>\n\n<p>Using the MirooCRM service requires a MirooCRM account; its terms of use are accepted when the account is created. Legal documents for the service:<\/p>\n\n<ul>\n<li>Privacy policy: https:\/\/miroocrm.it\/privacy-policy\/<\/li>\n<li>Cookie policy: https:\/\/miroocrm.it\/cookie-policy\/<\/li>\n<\/ul>\n\n<p>The plugin does not communicate with any other external service.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>miroocrm-sync-for-contact-form-7<\/code> folder to <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin from the Plugins screen.<\/li>\n<li>Go to <strong>Settings \u2192 MirooCRM Sync for Contact Form 7<\/strong> and configure the API URL and JWT.<\/li>\n<li>Select the CF7 forms to sync and save.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20send%20emails%3F\"><h3>Does the plugin send emails?<\/h3><\/dt>\n<dd><p>No. Email delivery is still handled by Contact Form 7. This plugin only adds the MirooCRM sync, after the main email has been sent successfully.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20api%20is%20down%3F\"><h3>What happens if the API is down?<\/h3><\/dt>\n<dd><p>The call is retried automatically on a network error or a 5xx\/429 response. If it keeps failing, the error is logged and propagated through <code>miroocrm_cf7_sync_error<\/code>. The CF7 submission still succeeds for the user: the MirooCRM sync runs in the background and is best-effort.<\/p><\/dd>\n<dt id=\"is%20the%20sync%20immediate%3F\"><h3>Is the sync immediate?<\/h3><\/dt>\n<dd><p>The API calls run asynchronously via WP-Cron right after the submission, so the user does not wait for MirooCRM. On low-traffic sites, where WP-Cron fires on the next visit, there may be a small delay. To force inline (blocking) sync, use the <code>miroocrm_cf7_async<\/code> filter and return <code>false<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20exclude%20a%20specific%20form%20%28e.g.%20%22work%20with%20us%22%29%3F\"><h3>Can I exclude a specific form (e.g. \"Work with us\")?<\/h3><\/dt>\n<dd><p>Yes. Just leave it unselected in the list of forms to sync. Only the checked forms create a record on MirooCRM.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Performance: API calls run asynchronously via WP-Cron, so the CF7 submission no longer waits for MirooCRM.<\/li>\n<li>Security: JWT token encrypted at rest (AES-256-GCM) and no longer printed back to the browser on the settings page.<\/li>\n<li>Security: personal data is masked in the log.<\/li>\n<li>Robustness: duplicate-submission guard, automatic retry on network\/5xx\/429 errors, guard against incomplete mapping.<\/li>\n<li>Added <code>uninstall.php<\/code> to clean up options, cron events and transients on uninstall.<\/li>\n<li>New filters: <code>miroocrm_cf7_async<\/code>, <code>miroocrm_cf7_dedup_ttl<\/code>, <code>miroocrm_cf7_http_timeout<\/code>, <code>miroocrm_cf7_http_retries<\/code>, <code>miroocrm_cf7_log_redact<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: sync customers + contacts via JSON:API, settings page, configurable mapping.<\/li>\n<\/ul>","raw_excerpt":"Sync Contact Form 7 submissions to MirooCRM as customers and contacts via API, server-side, with selectable forms and configurable mapping.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/338985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=338985"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpdoozy"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=338985"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=338985"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=338985"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=338985"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=338985"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=338985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}