Workflow: develop a modular n8n workflow that supports Strapi Webhook Automate Webhook
Integrations: googleCloudNaturalLanguage, if, interval, merge, set, strapi, twitter, webhook

{"nodes": [{"name": "Simplify Result", "type": "n8n-nodes-base.set", "position": [680, 100], "parameters": {"values": {"string": [{"name": "Content", "value": "={{$json[\"full_text\"].replace(/(?:https?|ftp):\\/\\/[\\n\\S]+/g, '')}}"}, {"name": "Author", "value": "={{$json[\"user\"][\"name\"]}} (@{{$json[\"user\"][\"screen_name\"]}})"}, {"name": "Created", "value": "={{new Date($json[\"created_at\"]).toISOString()}}"}, {"name": "URL", "value": "=https://twitter.com/{{$json[\"user\"][\"screen_name\"]}}/status/{{$json[\"id_str\"]}}"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Store in Strapi", "type": "n8n-nodes-base.strapi", "position": [1780, 100], "parameters": {"columns": "Content,Author,Created,URL", "operation": "create", "contentType": "posts"}, "credentials": {"strapiApi": {"id": "136", "name": "Strapi Demo"}}, "typeVersion": 1}, {"name": "Every 30 Minutes", "type": "n8n-nodes-base.interval", "position": [240, 100], "parameters": {"unit": "minutes", "interval": 30}, "typeVersion": 1}, {"name": "Is Retweet or Old?", "type": "n8n-nodes-base.if", "position": [900, 100], "parameters": {"conditions": {"string": [{"value1": "={{$json[\"Content\"]}}", "value2": "RT @", "operation": "startsWith"}], "dateTime": [{"value1": "={{$json[\"Created\"]}}", "value2": "={{new Date(new Date().getTime() - 30 * 60 * 1000)}}", "operation": "before"}]}, "combineOperation": "any"}, "typeVersion": 1}, {"name": "Search Tweets", "type": "n8n-nodes-base.twitter", "position": [460, 100], "parameters": {"operation": "search", "searchText": "(strapi OR n8n.io) AND lang:en", "additionalFields": {"tweetMode": "extended", "resultType": "recent"}}, "credentials": {"twitterOAuth1Api": {"id": "15", "name": "@MutedJam"}}, "typeVersion": 1}, {"name": "Webhook", "type": "n8n-nodes-base.webhook", "position": [240, -120], "webhookId": "6f833370-9068-44ef-8e56-4ceb563a851e", "parameters": {"path": "6f833370-9068-44ef-8e56-4ceb563a851e", "options": {}, "httpMethod": "POST"}, "typeVersion": 1}, {"name": "Simplify Webhook Result", "type": "n8n-nodes-base.set", "position": [460, -120], "parameters": {"values": {"string": [{"name": "Content", "value": "={{$json[\"body\"][\"data\"][\"fields\"][1][\"value\"]}}"}, {"name": "Author", "value": "={{$json[\"body\"][\"data\"][\"fields\"][0][\"value\"]}}"}, {"name": "Created", "value": "={{new Date().toISOString()}}"}, {"name": "URL"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Analyze Form Submission", "type": "n8n-nodes-base.googleCloudNaturalLanguage", "position": [680, -220], "parameters": {"content": "={{$json[\"Content\"]}}", "options": {}}, "credentials": {"googleCloudNaturalLanguageOAuth2Api": {"id": "138", "name": "Google Cloud Natural Language account"}}, "typeVersion": 1}, {"name": "Analyze Tweet", "type": "n8n-nodes-base.googleCloudNaturalLanguage", "position": [1120, 200], "parameters": {"content": "={{$json[\"Content\"]}}", "options": {}}, "credentials": {"googleCloudNaturalLanguageOAuth2Api": {"id": "138", "name": "Google Cloud Natural Language account"}}, "typeVersion": 1}, {"name": "Merge Form Sentiment with Source", "type": "n8n-nodes-base.merge", "position": [900, -120], "parameters": {"mode": "mergeByIndex"}, "typeVersion": 1}, {"name": "Merge Tweet Sentiment with Source", "type": "n8n-nodes-base.merge", "position": [1340, 100], "parameters": {"mode": "mergeByIndex"}, "typeVersion": 1}, {"name": "Positive Form Sentiment?", "type": "n8n-nodes-base.if", "position": [1120, -120], "parameters": {"conditions": {"number": [{"value1": "={{$json[\"documentSentiment\"][\"score\"]}}", "value2": 0.4, "operation": "larger"}]}}, "typeVersion": 1}, {"name": "Store Form Submission in Strapi", "type": "n8n-nodes-base.strapi", "position": [1340, -120], "parameters": {"columns": "Content,Author,Created,URL", "operation": "create", "contentType": "posts"}, "credentials": {"strapiApi": {"id": "136", "name": "Strapi Demo"}}, "typeVersion": 1}, {"name": "Positive Tweet Sentiment?", "type": "n8n-nodes-base.if", "position": [1560, 100], "parameters": {"conditions": {"number": [{"value1": "={{$json[\"documentSentiment\"][\"score\"]}}", "value2": 0.3, "operation": "larger"}]}}, "typeVersion": 1}], "connections": {"Webhook": {"main": [[{"node": "Simplify Webhook Result", "type": "main", "index": 0}]]}, "Analyze Tweet": {"main": [[{"node": "Merge Tweet Sentiment with Source", "type": "main", "index": 1}]]}, "Search Tweets": {"main": [[{"node": "Simplify Result", "type": "main", "index": 0}]]}, "Simplify Result": {"main": [[{"node": "Is Retweet or Old?", "type": "main", "index": 0}]]}, "Every 30 Minutes": {"main": [[{"node": "Search Tweets", "type": "main", "index": 0}]]}, "Is Retweet or Old?": {"main": [null, [{"node": "Analyze Tweet", "type": "main", "index": 0}, {"node": "Merge Tweet Sentiment with Source", "type": "main", "index": 0}]]}, "Analyze Form Submission": {"main": [[{"node": "Merge Form Sentiment with Source", "type": "main", "index": 0}]]}, "Simplify Webhook Result": {"main": [[{"node": "Analyze Form Submission", "type": "main", "index": 0}, {"node": "Merge Form Sentiment with Source", "type": "main", "index": 1}]]}, "Positive Form Sentiment?": {"main": [[{"node": "Store Form Submission in Strapi", "type": "main", "index": 0}]]}, "Positive Tweet Sentiment?": {"main": [[{"node": "Store in Strapi", "type": "main", "index": 0}]]}, "Merge Form Sentiment with Source": {"main": [[{"node": "Positive Form Sentiment?", "type": "main", "index": 0}]]}, "Merge Tweet Sentiment with Source": {"main": [[{"node": "Positive Tweet Sentiment?", "type": "main", "index": 0}]]}}}