{"id":1005,"date":"2025-04-09T07:58:55","date_gmt":"2025-04-09T07:58:55","guid":{"rendered":"https:\/\/portfolio.paoloronco.it\/?p=1005"},"modified":"2025-11-18T10:08:38","modified_gmt":"2025-11-18T10:08:38","slug":"automatizzare-wordpress-con-make-com-dal-post-al-voiceover-in-cloud","status":"publish","type":"post","link":"https:\/\/paoloronco.it\/en\/automatizzare-wordpress-con-make-com-dal-post-al-voiceover-in-cloud\/","title":{"rendered":"Automating WordPress with Make.com: From Post to Cloud Voiceover"},"content":{"rendered":"<p class=\"wp-block-paragraph\">? <strong>GitHub<\/strong>: <a href=\"https:\/\/github.com\/paoloronco\/makecom-wordpress-ttsvoiceover-notiondb\">paoloronco\/makecom-wordpress-ttsvoiceover-notiondb<\/a><br>? <strong>Publishing on ReadyTensor<\/strong>: <a href=\"https:\/\/app.readytensor.ai\/publications\/gcp-tts-on-wordpress-wordpress-to-voice-J5nH5EoHs9Lx\">GCP TTS on WordPress | WordPress to Voice<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the world of technology and cybersecurity, <strong>automate<\/strong> it&#039;s not just a question of efficiency, but also of <strong>precision and safety<\/strong>.<br>As <strong>Cyber Security Analyst<\/strong> with a strong passion for the <strong>tech automation<\/strong>, I developed an advanced workflow on <strong>Make.com<\/strong> which allows me to intelligently manage the entire life cycle of the content published on <strong>WordPress<\/strong>, transforming them into <strong>Multi-format resources<\/strong> and stored neatly across multiple platforms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this article I will show you <strong>How does my workflow work?<\/strong>, what makes it effective and how it could be adapted to other contexts, always in a key <strong>scalable and secure<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"493\" src=\"https:\/\/portfolio.paoloronco.it\/wp-content\/uploads\/2025\/04\/image-1024x493.png\" alt=\"\" class=\"wp-image-1006\" srcset=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/04\/image-1024x493.png 1024w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/04\/image-300x144.png 300w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/04\/image-768x370.png 768w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/04\/image-1536x740.png 1536w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/04\/image-2048x986.png 2048w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">? Workflow Goal<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Automate WordPress post management in two directions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Structured storage and notification<\/strong> (via Notion and Email),<\/li>\n\n\n\n<li><strong>Automatic generation of audio voiceovers<\/strong> and dynamically update the post on the site.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">? Process Overview<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1 \u2013 Watch Post from WordPress<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The flow is activated every time a new post is published (or updated) on WordPress, thanks to the \u201cWatch Post via API\u201d module.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h3 class=\"wp-block-heading\">Step 2 \u2013 Router<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The router splits the flow into <strong>two independent branches<\/strong>, which perform parallel operations on the same content.<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Branch 1 \u2013 Storage in Notion Database<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The content of the post is <strong>added to a Notion table<\/strong>, useful for tracking, future consultation and content management in knowledge base format.<\/li>\n\n\n\n<li>At the end, a <strong>Email notification<\/strong> which confirms that the post has been inserted correctly.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u2705 <strong>Useful for:<\/strong> structured backup, content history, internal documentation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Branch 2 \u2013 VoiceOver Audio Generation<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>Text Parsing and Optimization<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The post content is converted from HTML to clean text.<\/li>\n\n\n\n<li>The text is then <strong>Optimized and reformatted<\/strong> using a model of <strong>OpenAI GPT<\/strong>, to improve its readability and prepare it for speech synthesis.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Upload to Google Cloud Storage<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The text is loaded in format <code>.txt<\/code> on a private bucket on GCP.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. <strong>Control with Custom JS<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A script in <strong>Custom JavaScript<\/strong> check the <strong>size of the generated file<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If it is <strong>less than 5000 bytes<\/strong>, the text is short \u2192 a standard TTS synthesis is used.<\/li>\n\n\n\n<li>If it is <strong>greater<\/strong>, an alternative path is activated for long files.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The JS code returns a boolean value which is handled by a second router.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Router: Choosing between Short TTS and Long TTS<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">   If text is &lt; 5000 bytes:<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The file is sent to the form <strong>Google Cloud Text-to-Speech<\/strong> to generate audio <code>.wav<\/code>.<\/li>\n\n\n\n<li>The audio is uploaded to <strong>Google Drive<\/strong>.<\/li>\n\n\n\n<li>It is downloaded via an HTTP module and then <strong>re-uploaded to a public GCP bucket<\/strong>.<\/li>\n\n\n\n<li>The updated content of the post on WordPress is retrieved.<\/li>\n\n\n\n<li>The new audio comes <strong>integrated within the post<\/strong> with a <strong>custom HTML block<\/strong> (see example below).<\/li>\n\n\n\n<li>Final confirmation email.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">    If text is &gt; 5000 bytes:<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A applies <strong>Advanced Text Parser<\/strong> which removes special characters and further cleans up the content.<\/li>\n\n\n\n<li>An HTTP module activates a <strong>Cloud Run Function on GCP<\/strong> which generates a <strong>long voiceover<\/strong>.<\/li>\n\n\n\n<li>Again, the post content is retrieved, updated with the new audio, and a final email notification is sent.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Audio Integration on WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Audio is automatically added to the post with this HTML snippet:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">htmlCopyEdit<code><hr><br><h3>? VoiceOver: {{1.title}}<\/h3><br><h5>Date: {{66.date}}<\/h5><br><h5>Article link: {{1.link}}<\/h5><br><p>Post ID:{{1.id}}<\/p><br><audio controls><br>  &lt;source src=\"https:\/\/storage.googleapis.com\/wp-voiceovers\/{{1.id}}.wav\" type=\"audio\/mpeg\"&gt;<br><\/audio><br><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This allows users to <strong>listen to the content directly on the page<\/strong>, making the blog <strong>accessible, usable and modern<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Security &amp; Best Practices<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Being an articulated flow, I have placed <strong>maximum attention to safety<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using API keys, OAuth and tokenized access,<\/li>\n\n\n\n<li>Cloud Storage Bucket with <strong>strictly controlled permissions<\/strong>,<\/li>\n\n\n\n<li>Logging via JS for internal controls and fallback,<\/li>\n\n\n\n<li>Modularity and complete traceability of each step.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Each step is <strong>verifiable<\/strong>, idempotent and can be isolated during debugging.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705Conclusions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This workflow is the result of months of optimization and real-world testing.<br>It allows me to <strong>publish content on WordPress<\/strong> and, without any manual intervention:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>archive it<\/strong>,<\/li>\n\n\n\n<li><strong>improve it<\/strong>,<\/li>\n\n\n\n<li><strong>turn it into audio<\/strong>,<\/li>\n\n\n\n<li><strong>and make it publicly available.<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">It is a solution that unites <strong>intelligent automation<\/strong> And <strong>attention to cybersecurity<\/strong>, designed for those who work with content and want to save time without giving up control.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to implement something similar, or discuss automations for your stack, <strong>write to me!<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>? GitHub: paoloronco\/makecom-wordpress-ttsvoiceover-notiondb? Pubblicazione su ReadyTensor: GCP TTS on WordPress | WordPress to Voice Nel mondo della tecnologia e della cybersecurity, automatizzare non \u00e8 solo una questione di efficienza, ma anche di precisione e sicurezza.Come CyberSecurity Analyst con una forte passione per la tech automation, ho sviluppato un workflow avanzato su Make.com che mi consente &hellip; <a href=\"https:\/\/paoloronco.it\/en\/automatizzare-wordpress-con-make-com-dal-post-al-voiceover-in-cloud\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Automatizzare WordPress con Make.com: dal Post al VoiceOver in Cloud&#8221;<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[23],"class_list":["post-1005","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-portfolio"],"_links":{"self":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/comments?post=1005"}],"version-history":[{"count":1,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1005\/revisions"}],"predecessor-version":[{"id":1316,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1005\/revisions\/1316"}],"wp:attachment":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/media?parent=1005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/categories?post=1005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/tags?post=1005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}