{"id":274197,"date":"2026-01-16T15:32:41","date_gmt":"2026-01-16T15:32:41","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rt-webhook-for-contact-form-7\/"},"modified":"2026-05-13T14:55:17","modified_gmt":"2026-05-13T14:55:17","slug":"rt-webhook-for-contact-form-7","status":"publish","type":"plugin","link":"https:\/\/es.wordpress.org\/plugins\/rt-webhook-for-contact-form-7\/","author":23301688,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.0.0","stable_tag":"trunk","tested":"6.9.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"RT Webhook for Contact Form 7","header_author":"","header_description":"An advanced webhook integration for Contact Form 7 with field mapping and conditional logic.","assets_banners_color":"3e699d","last_updated":"2026-05-13 14:55:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":30,"downloads":436,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":{"3.0.0":"<p>Major update with architectural improvements and enhanced REST API reliability. No breaking changes to existing webhook configurations. Back up your site and test on staging before upgrading in production.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3531102,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3531102,"resolution":"772x250","location":"assets","locale":"","width":1544,"height":500}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3531102,"resolution":"1","location":"assets","locale":"","width":1027,"height":650},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3531102,"resolution":"2","location":"assets","locale":"","width":1026,"height":640},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3531102,"resolution":"3","location":"assets","locale":"","width":1020,"height":704},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3531102,"resolution":"4","location":"assets","locale":"","width":1040,"height":465},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3531102,"resolution":"5","location":"assets","locale":"","width":1018,"height":678}},"screenshots":{"1":"<strong>Webhook List<\/strong> \u2014 Overview of all webhooks with name, connected form, endpoint URL, and status controls.","2":"<strong>General Settings<\/strong> \u2014 Set the webhook name, CF7 form, endpoint URL, HTTP method, and publish status.","3":"<strong>Field Mapping<\/strong> \u2014 Map CF7 form tags to custom JSON keys using dropdown selectors. Add and remove rows as needed.","4":"<strong>Conditional Logic<\/strong> \u2014 Enable a rule with field, operator (Equals \/ Does Not Equal \/ Contains), and value inputs.","5":"<strong>Custom Headers<\/strong> \u2014 Add multiple name-value HTTP header pairs for authentication and API access.","6":"<strong>Request Logs<\/strong> \u2014 Inspect the last 10 webhook calls: URL, method, headers, JSON payload, status code, and response body."}},"plugin_section":[],"plugin_tags":[262806,1152,261800,15439,141701],"plugin_category":[],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-274197","plugin","type-plugin","status-publish","hentry","plugin_tags-cf7-webhook","plugin_tags-contact-form-7","plugin_tags-make-com","plugin_tags-webhook","plugin_tags-zapier","plugin_committers-raintech357"],"banners":{"banner":"https:\/\/ps.w.org\/rt-webhook-for-contact-form-7\/assets\/banner-772x250.png?rev=3531102","banner_2x":"https:\/\/ps.w.org\/rt-webhook-for-contact-form-7\/assets\/banner-1544x500.png?rev=3531102","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/rt-webhook-for-contact-form-7_3e699d.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/rt-webhook-for-contact-form-7\/assets\/screenshot-1.png?rev=3531102","caption":"<strong>Webhook List<\/strong> \u2014 Overview of all webhooks with name, connected form, endpoint URL, and status controls."},{"src":"https:\/\/ps.w.org\/rt-webhook-for-contact-form-7\/assets\/screenshot-2.png?rev=3531102","caption":"<strong>General Settings<\/strong> \u2014 Set the webhook name, CF7 form, endpoint URL, HTTP method, and publish status."},{"src":"https:\/\/ps.w.org\/rt-webhook-for-contact-form-7\/assets\/screenshot-3.png?rev=3531102","caption":"<strong>Field Mapping<\/strong> \u2014 Map CF7 form tags to custom JSON keys using dropdown selectors. Add and remove rows as needed."},{"src":"https:\/\/ps.w.org\/rt-webhook-for-contact-form-7\/assets\/screenshot-4.png?rev=3531102","caption":"<strong>Conditional Logic<\/strong> \u2014 Enable a rule with field, operator (Equals \/ Does Not Equal \/ Contains), and value inputs."},{"src":"https:\/\/ps.w.org\/rt-webhook-for-contact-form-7\/assets\/screenshot-5.png?rev=3531102","caption":"<strong>Custom Headers<\/strong> \u2014 Add multiple name-value HTTP header pairs for authentication and API access."}],"raw_content":"<!--section=description-->\n<p><strong>RT Webhook for Contact Form 7<\/strong> is the most flexible webhook integration plugin for CF7. Connect your WordPress contact forms to hundreds of external services and automate your entire lead and notification workflow \u2014 without writing a single line of code.<\/p>\n\n<p>Whether you want to push new leads to your CRM, trigger Zapier automations, fire Make.com (formerly Integromat) scenarios, post to a Slack channel, or send data directly to your own REST API endpoint \u2014 this plugin gives you complete control over what data is sent, when it is sent, and how it is formatted.<\/p>\n\n<h4>Why Choose RT Webhook for Contact Form 7?<\/h4>\n\n<p>Most CF7 webhook plugins send a fixed payload with no customisation. RT Webhook for Contact Form 7 is built differently:<\/p>\n\n<ul>\n<li><strong>You choose exactly which fields<\/strong> go into the JSON payload using a visual dropdown interface \u2014 no shortcodes to memorise, no manual tag copying.<\/li>\n<li><strong>You control when the webhook fires<\/strong> using per-webhook conditional logic rules based on field values \u2014 send only the submissions that matter.<\/li>\n<li><strong>You inspect every request<\/strong> with a built-in logging panel that shows the full URL, HTTP method, request headers, JSON payload, status code, and raw server response body for the last 10 submissions.<\/li>\n<li><strong>You secure your endpoints<\/strong> by adding any custom HTTP header \u2014 Bearer tokens, API keys, or any proprietary header your service requires.<\/li>\n<\/ul>\n\n<h4>Key Features<\/h4>\n\n<p><strong>Multiple Webhooks Per Form<\/strong>\nCreate as many webhooks as you need for a single Contact Form 7 form. Send a new lead to your CRM, notify your team on Slack, and update a Google Sheet \u2014 all triggered by the same form submission, simultaneously.<\/p>\n\n<p><strong>Dynamic Field Mapping<\/strong>\nMap any CF7 form tag (text, email, select, radio, checkbox, textarea, and more) to a custom JSON key using an intuitive row-based interface. The JSON payload your endpoint receives looks exactly the way your API expects it \u2014 no extra sanitisation required on the receiving end.<\/p>\n\n<p><strong>Conditional Logic<\/strong>\nPrevent unnecessary or irrelevant webhook calls with built-in per-webhook conditional rules. Fire a webhook only when a specific field <strong>equals<\/strong>, <strong>does not equal<\/strong>, or <strong>contains<\/strong> a defined value. Perfect for routing leads by service type, country, budget range, or any other field value.<\/p>\n\n<p><strong>Custom HTTP Headers<\/strong>\nAdd any number of custom HTTP headers to each webhook \u2014 <code>Authorization: Bearer your-token<\/code>, <code>x-api-key: your-key<\/code>, <code>Content-Type<\/code> overrides, or any proprietary header required by your endpoint. Stored and managed securely in WordPress post meta.<\/p>\n\n<p><strong>HTTP Method Support<\/strong>\nChoose between <strong>POST<\/strong>, <strong>GET<\/strong>, or <strong>PUT<\/strong> to match your API's specification. GET requests append all mapped fields as query-string parameters; POST and PUT send a JSON body with a 45-second timeout.<\/p>\n\n<p><strong>Built-in Request Logging<\/strong>\nDebug failed webhooks with confidence. The Logs panel records the last 10 requests per webhook: endpoint URL, HTTP method, request headers, JSON payload, HTTP status code, and the raw response body. Logs can be cleared at any time with a single click.<\/p>\n\n<p><strong>React-Powered Admin UI<\/strong>\nThe admin interface is built with React and WordPress UI components for a fast, modern experience. Create, edit, enable, disable, and delete webhooks without page reloads. RTL layout is fully supported.<\/p>\n\n<p><strong>Draft \/ Publish Workflow<\/strong>\nEach webhook can be saved as a draft while you configure it, then published when ready \u2014 preventing accidental webhook fires during setup.<\/p>\n\n<h4>Popular Use Cases<\/h4>\n\n<ul>\n<li>Send CF7 leads directly to <strong>HubSpot, Salesforce, Zoho CRM, or Pipedrive<\/strong><\/li>\n<li>Trigger <strong>Zapier Zaps<\/strong> on form submission \u2014 connect to 6,000+ apps<\/li>\n<li>Fire <strong>Make.com (Integromat) scenarios<\/strong> to run complex multi-step automations<\/li>\n<li>Post new contact form submissions to a <strong>Slack or Microsoft Teams<\/strong> channel<\/li>\n<li>Sync form entries with <strong>Airtable, Notion, or Google Sheets<\/strong> via their REST APIs<\/li>\n<li>Send form data to <strong>n8n or Pipedream<\/strong> self-hosted automation workflows<\/li>\n<li>Route leads to <strong>different CRM pipelines<\/strong> based on the service or product selected<\/li>\n<li>Hit your own <strong>custom backend REST API<\/strong> or internal webhook receiver<\/li>\n<li>Trigger email sequences in <strong>ActiveCampaign, Mailchimp, or ConvertKit<\/strong><\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>Install and activate this plugin. Contact Form 7 must be installed and active.<\/li>\n<li>Go to <strong>RTWC Webhooks<\/strong> in your WordPress admin sidebar.<\/li>\n<li>Click <strong>Add Webhook<\/strong>, give it a name, and select the CF7 form to connect.<\/li>\n<li>Enter your webhook endpoint URL and choose the HTTP method (POST \/ GET \/ PUT).<\/li>\n<li>Open the <strong>Field Mapping<\/strong> tab and map CF7 form tags to your desired JSON keys.<\/li>\n<li>Optionally configure <strong>Conditional Logic<\/strong> to control when the webhook fires.<\/li>\n<li>Optionally add <strong>Custom Headers<\/strong> such as <code>Authorization: Bearer your-token<\/code>.<\/li>\n<li>Set the status to <strong>Published<\/strong> and save.<\/li>\n<li>Submit your form \u2014 then check the <strong>Logs<\/strong> tab to see the full request and response.<\/li>\n<\/ol>\n\n<h4>Technical Details<\/h4>\n\n<ul>\n<li>Hooks into <code>wpcf7_before_send_mail<\/code> \u2014 the standard CF7 action, ensuring webhooks fire reliably after form validation.<\/li>\n<li>Webhooks are stored as the custom post type <code>rtwc_webhook<\/code> with all settings in post meta.<\/li>\n<li>The admin UI communicates via a fully RESTful internal API at <code>\/wp-json\/rtwc\/v1\/<\/code> \u2014 endpoints for listing, creating, updating, and deleting webhooks, as well as fetching CF7 forms and their field tags.<\/li>\n<li>All REST endpoints require the <code>manage_options<\/code> capability \u2014 administrator access only.<\/li>\n<li>REST routes are loaded on both admin and frontend requests, ensuring reliability in all server request contexts.<\/li>\n<li>Outbound HTTP requests use WordPress's native <code>wp_remote_request()<\/code> with a 45-second timeout.<\/li>\n<li>All input is sanitised with WordPress core functions before saving or transmitting.<\/li>\n<\/ul>\n\n<h4>Compatibility<\/h4>\n\n<ul>\n<li>Works with <strong>Contact Form 7<\/strong> \u2014 the most widely used WordPress form plugin (5M+ active installs).<\/li>\n<li>Compatible with any HTTP webhook receiver: Zapier, Make.com, n8n, Pipedream, Slack, Discord, HubSpot, Salesforce, Airtable, Notion, ActiveCampaign, and more.<\/li>\n<li>Tested with WordPress 5.0 through 6.9.<\/li>\n<li>PHP 7.4 or higher required.<\/li>\n<li>RTL (right-to-left) layout supported.<\/li>\n<li>Compatible with all major WordPress themes and page builders including Elementor, Divi, and Gutenberg.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel.<\/li>\n<li>Navigate to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>RT Webhook for Contact Form 7<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin .zip file.<\/li>\n<li>Go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Upload the .zip file and click <strong>Install Now<\/strong>.<\/li>\n<li>After installation, click <strong>Activate Plugin<\/strong>.<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<ol>\n<li>Make sure <strong>Contact Form 7<\/strong> is installed and active. The plugin will not function without it.<\/li>\n<li>Navigate to <strong>RTWC Webhooks<\/strong> in your WordPress admin sidebar.<\/li>\n<li>Create your first webhook, connect it to a CF7 form, and configure your settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20contact%20form%207%3F\"><h3>Does this plugin require Contact Form 7?<\/h3><\/dt>\n<dd><p>Yes. RT Webhook for Contact Form 7 is an add-on that requires the free Contact Form 7 plugin to be installed and activated. It hooks into CF7's submission process to capture and forward form data.<\/p><\/dd>\n<dt id=\"which%20webhook%20services%20does%20this%20plugin%20support%3F\"><h3>Which webhook services does this plugin support?<\/h3><\/dt>\n<dd><p>It works with any service that can receive an HTTP POST, GET, or PUT request \u2014 including Zapier, Make.com (Integromat), n8n, Pipedream, Slack incoming webhooks, Discord webhooks, HubSpot, Salesforce, Zoho CRM, Airtable, Notion, Google Sheets (via Apps Script), ActiveCampaign, Mailchimp, ConvertKit, and any custom REST API endpoint.<\/p><\/dd>\n<dt id=\"can%20i%20send%20data%20to%20more%20than%20one%20url%20from%20a%20single%20form%3F\"><h3>Can I send data to more than one URL from a single form?<\/h3><\/dt>\n<dd><p>Yes. There is no limit on the number of webhooks you can attach to a single form. Each webhook has its own URL, HTTP method, field mapping, conditional logic, and custom headers \u2014 completely independent of each other.<\/p><\/dd>\n<dt id=\"can%20i%20control%20which%20submissions%20trigger%20the%20webhook%3F\"><h3>Can I control which submissions trigger the webhook?<\/h3><\/dt>\n<dd><p>Yes. The Conditional Logic feature lets you set a rule per webhook so it only fires when a specific field value matches your condition. Available operators are <strong>Equals<\/strong>, <strong>Does Not Equal<\/strong>, and <strong>Contains<\/strong>.<\/p><\/dd>\n<dt id=\"what%20http%20methods%20are%20supported%3F\"><h3>What HTTP methods are supported?<\/h3><\/dt>\n<dd><p>POST, GET, and PUT are supported. When GET is selected, all mapped field values are appended to the URL as query-string parameters. POST and PUT send the data as a JSON body.<\/p><\/dd>\n<dt id=\"how%20do%20i%20send%20a%20bearer%20token%20or%20api%20key%20with%20the%20request%3F\"><h3>How do I send a Bearer token or API key with the request?<\/h3><\/dt>\n<dd><p>Use the <strong>Custom Headers<\/strong> tab. Add a header with the name <code>Authorization<\/code> and the value <code>Bearer your-token-here<\/code>, or add <code>x-api-key<\/code> with your key. Multiple custom headers are supported per webhook.<\/p><\/dd>\n<dt id=\"how%20can%20i%20debug%20a%20webhook%20that%20is%20not%20firing%20or%20returning%20an%20error%3F\"><h3>How can I debug a webhook that is not firing or returning an error?<\/h3><\/dt>\n<dd><p>Open the <strong>Logs<\/strong> tab for that webhook. It records the last 10 webhook requests: full endpoint URL, HTTP method, all request headers, the exact JSON payload, the HTTP response status code, and the raw response body. You can also clear the log history at any time.<\/p><\/dd>\n<dt id=\"what%20does%20the%20json%20payload%20look%20like%3F\"><h3>What does the JSON payload look like?<\/h3><\/dt>\n<dd><p>When Field Mapping is configured, the payload contains only the fields you mapped, using the custom key names you defined. For example, mapping CF7 tag <code>your-email<\/code> to the key <code>email<\/code> produces <code>{\"email\": \"user@example.com\"}<\/code>. If no mapping is set, the full raw CF7 posted data array is sent.<\/p><\/dd>\n<dt id=\"can%20i%20save%20a%20webhook%20without%20it%20going%20live%20immediately%3F\"><h3>Can I save a webhook without it going live immediately?<\/h3><\/dt>\n<dd><p>Yes. Each webhook supports a <strong>Draft<\/strong> status. Configure your URL, field mapping, headers, and conditional logic while in draft, then switch to <strong>Published<\/strong> when it is ready to fire.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20affect%20cf7%27s%20built-in%20email%20sending%3F\"><h3>Does the plugin affect CF7's built-in email sending?<\/h3><\/dt>\n<dd><p>No. The webhook fires via <code>wpcf7_before_send_mail<\/code>, which does not interrupt or abort normal CF7 mail delivery. Your existing CF7 email notifications remain completely unaffected.<\/p><\/dd>\n<dt id=\"are%20the%20internal%20rest%20api%20endpoints%20secure%3F\"><h3>Are the internal REST API endpoints secure?<\/h3><\/dt>\n<dd><p>Yes. All endpoints under <code>\/wp-json\/rtwc\/v1\/<\/code> require the <code>manage_options<\/code> capability and are accessible only to WordPress administrators. Unauthenticated or lower-privilege requests are rejected.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20compatible%20with%20wordpress%20multisite%3F\"><h3>Is this plugin compatible with WordPress Multisite?<\/h3><\/dt>\n<dd><p>Yes. The plugin works on standard WordPress Multisite installations when activated per-site or network-activated.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Major architecture refactor \u2014 <code>RTWC_CF7<\/code>, <code>RTWC_Admin<\/code>, and <code>RTWC_Handler<\/code> now use the singleton pattern for safe, predictable instantiation.<\/li>\n<li>Admin class and REST routes now load on both admin and frontend requests, resolving failures in certain hosting environments.<\/li>\n<li>Added dedicated REST endpoint to clear webhook logs (<code>DELETE \/wp-json\/rtwc\/v1\/webhooks\/{id}\/clear-logs<\/code>).<\/li>\n<li>Improved CF7 field-tag scanner reliability for complex form layouts.<\/li>\n<li>General stability and performance improvements.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added support for multiple webhooks per form \u2014 unlimited webhooks per CF7 form.<\/li>\n<li>Introduced visual Field Mapping with CF7 tag dropdown selectors.<\/li>\n<li>Added Conditional Logic with Equals, Does Not Equal, and Contains operators.<\/li>\n<li>Added Custom HTTP Headers \u2014 unlimited name-value pairs per webhook.<\/li>\n<li>Added Request Logging \u2014 last 10 requests per webhook with full request and response detail.<\/li>\n<li>Added GET and PUT HTTP method support in addition to POST.<\/li>\n<li>React-based admin UI with WordPress component styling.<\/li>\n<li>RTL stylesheet included.<\/li>\n<li>Draft \/ Publish workflow for webhooks.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release \u2014 single webhook per form, POST method, basic JSON payload.<\/li>\n<\/ul>","raw_excerpt":"Send Contact Form 7 submissions to any webhook URL \u2014 Zapier, Make.com, HubSpot, Slack, or your own API \u2014 with field mapping, conditional logic, and re &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/274197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=274197"}],"author":[{"embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/raintech357"}],"wp:attachment":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=274197"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=274197"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=274197"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=274197"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=274197"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=274197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}