diff --git a/ask/analyze_help_scout_conversations/ask_help_scout_conversations/mesa.json b/ask/analyze_help_scout_conversations/ask_help_scout_conversations/mesa.json index d8162be0..004a4f2d 100644 --- a/ask/analyze_help_scout_conversations/ask_help_scout_conversations/mesa.json +++ b/ask/analyze_help_scout_conversations/ask_help_scout_conversations/mesa.json @@ -32,41 +32,45 @@ { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", - "action": "ask", + "type": "ai", + "entity": "agent", + "action": "create", "name": "Ask", "key": "ask", - "operation_id": "post-ask", + "operation_id": "post-agent", "metadata": { - "api_endpoint": "post \/ask", + "api_endpoint": "post /agent", "body": { - "automations": ["mcp/helpscout/retrieve_conversations"], + "automations": [ + "mcp/helpscout/retrieve_conversations" + ], "content": "Find interesting trends in my support tickets over the last week. Cite the link from each ticket that matches the trends." } }, "local_fields": [], "selected_fields": [], "on_error": "default", - "weight": 0 + "weight": 0, + "version": "v3" }, { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", + "type": "ai", + "entity": "agent", "action": "skill", "name": "Skill", "key": "ask_3", - "operation_id": "post-ask-skill", + "operation_id": "post-agent-skill", "metadata": { - "api_endpoint": "post \/ask\/skill", + "api_endpoint": "post /agent/skill", "trigger_manager_key": "ask", "trigger_parent_key": "ask" }, "selected_fields": [], "on_error": "default", - "weight": 1 + "weight": 1, + "version": "v3" }, { "schema": 5, @@ -75,9 +79,9 @@ "name": "Send Email", "version": "v2", "key": "email", - "operation_id": "\/send-email", + "operation_id": "/send-email", "metadata": { - "api_endpoint": "post \/send-email", + "api_endpoint": "post /send-email", "body": { "to": "{{ template | label: 'Email address', description: 'Where should we send the weekly report?' }}", "subject": "Last Week's Help Scout Conversations", diff --git a/ask/analyze_shopify_orders/ask_shopify_orders/mesa.json b/ask/analyze_shopify_orders/ask_shopify_orders/mesa.json index 46e792cc..8e5ad152 100644 --- a/ask/analyze_shopify_orders/ask_shopify_orders/mesa.json +++ b/ask/analyze_shopify_orders/ask_shopify_orders/mesa.json @@ -30,41 +30,45 @@ { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", - "action": "ask", + "type": "ai", + "entity": "agent", + "action": "create", "name": "Ask", "key": "ask", - "operation_id": "post-ask", + "operation_id": "post-agent", "metadata": { - "api_endpoint": "post \/ask", + "api_endpoint": "post /agent", "body": { - "automations": ["mcp/shopify/retrieve_orders"], + "automations": [ + "mcp/shopify/retrieve_orders" + ], "content": "Get all of my Shopify orders placed in the last 2 years and generate a summary of the sales formatted as HTML to use in an email. Include:\n\n- Table of top sales including links to orders and customers\n- Table of top selling products\n- Number and gross total of sales\n" } }, "local_fields": [], "selected_fields": [], "on_error": "default", - "weight": 0 + "weight": 0, + "version": "v3" }, { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", + "type": "ai", + "entity": "agent", "action": "skill", "name": "Skill", "key": "ask_1", - "operation_id": "post-ask-skill", + "operation_id": "post-agent-skill", "metadata": { - "api_endpoint": "post \/ask\/skill", + "api_endpoint": "post /agent/skill", "trigger_manager_key": "ask", "trigger_parent_key": "ask" }, "selected_fields": [], "on_error": "default", - "weight": 1 + "weight": 1, + "version": "v3" }, { "schema": 5, @@ -73,9 +77,9 @@ "name": "Send Email", "version": "v2", "key": "email", - "operation_id": "\/send-email", + "operation_id": "/send-email", "metadata": { - "api_endpoint": "post \/send-email", + "api_endpoint": "post /send-email", "body": { "to": "{{ template | label: 'Email address', description: 'Where should we send the weekly report?' }}", "subject": "Summary of Shopify orders last week", diff --git a/ask/analyze_zendesk_tickets_and_email_summary/ask_zendesk_tickets_and_email_summary/mesa.json b/ask/analyze_zendesk_tickets_and_email_summary/ask_zendesk_tickets_and_email_summary/mesa.json index c59b6c6c..f60bbdba 100644 --- a/ask/analyze_zendesk_tickets_and_email_summary/ask_zendesk_tickets_and_email_summary/mesa.json +++ b/ask/analyze_zendesk_tickets_and_email_summary/ask_zendesk_tickets_and_email_summary/mesa.json @@ -32,16 +32,18 @@ { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", - "action": "ask", + "type": "ai", + "entity": "agent", + "action": "create", "name": "Ask", "key": "ask", - "operation_id": "post-ask", + "operation_id": "post-agent", "metadata": { - "api_endpoint": "post /ask", + "api_endpoint": "post /agent", "body": { - "automations": ["mcp/zendesk/get_support_tickets"], + "automations": [ + "mcp/zendesk/get_support_tickets" + ], "content": "Each week, review all Zendesk support conversations from the past 7 days. \nAt the top of your summary, list the date range of the tickets you are reviewing.\n\nSummarize the top 2-3 issues customers faced or notable trends based on the actual content of customer messages — what users are trying to do, where they are confused, or what they are asking for help with. \n\nFor each trend: \n- Describe the specific issue or user request in plain, customer-friendly terms. \n- Estimate how many tickets show this trend. \n- Be specific (e.g., \"confusion about adding a delay step after order fulfillment\"), not general (e.g., \"workflow questions\"). \n- Skip ticket metadata like submission method or timestamps — focus only on user intent and the problem content. \n\nIMPORTANT: \n- Provide **Zendesk conversation links** that work for internal review. These should look like: \n `https://[YOUR_SUBDOMAIN].zendesk.com/agent/tickets/[TICKET_NUMBER]` \n- Avoid API or JSON export links that require tokens or extra steps to access. \n\nFinally, include 2-3 **practical recommendations** for the product team based on the trends you observed. These should be actionable ideas that could help reduce support volume or improve the user experience.", "instructions": "You do not have the ability to ask the user more questions. Make assumptions where possible. If you can not determine a value, throw an error and include the missing parameter(s) in the message. Prefix any message with an error with `ERROR`. For emails return HTML with no wrapping." } @@ -54,26 +56,28 @@ "body.instructions" ], "on_error": "default", - "weight": 0 + "weight": 0, + "version": "v3" }, { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", + "type": "ai", + "entity": "agent", "action": "skill", "name": "Skill", "key": "ask_1", - "operation_id": "post-ask-skill", + "operation_id": "post-agent-skill", "metadata": { - "api_endpoint": "post /ask/skill", + "api_endpoint": "post /agent/skill", "trigger_manager_key": "ask", "trigger_parent_key": "ask" }, "local_fields": [], "selected_fields": [], "on_error": "default", - "weight": 1 + "weight": 1, + "version": "v3" }, { "schema": 5, @@ -92,10 +96,14 @@ } }, "local_fields": [], - "selected_fields": ["body", "body.subject", "body.message"], + "selected_fields": [ + "body", + "body.subject", + "body.message" + ], "on_error": "default", "weight": 2 } ] } -} +} \ No newline at end of file diff --git a/bin/migrations/05-ask-v3.js b/bin/migrations/05-ask-v3.js new file mode 100644 index 00000000..5f3d96da --- /dev/null +++ b/bin/migrations/05-ask-v3.js @@ -0,0 +1,53 @@ +import fs from 'fs'; + +export default (res, json) => { + // --- + // @todo: In this future this should be split out into its own file in migrations/ + ['inputs', 'outputs'].forEach(async (key) => { + if (!json.config[key]) { + return; + } + + json.config[key].forEach(async (trigger, i) => { + let update = false; + + if (trigger.type === 'ask') { + if (trigger.operation_id === 'post-ask') { + trigger.type = 'ai'; + trigger.entity = 'agent'; + trigger.action = 'create'; + trigger.operation_id = 'post-agent'; + trigger.metadata.api_endpoint = 'post /agent'; + trigger.version = 'v3'; + } + if (trigger.operation_id === 'post-ask-skill') { + trigger.type = 'ai'; + trigger.entity = 'agent'; + trigger.action = 'skill'; + trigger.operation_id = 'post-agent-skill'; + trigger.metadata.api_endpoint = 'post /agent/skill'; + trigger.version = 'v3'; + } + update = true; + } + + if (trigger.type === 'skill') { + trigger.type = 'ai'; + trigger.entity = 'skill'; + trigger.action = 'skill'; + trigger.operation_id = 'post-skill'; + trigger.metadata.api_endpoint = 'post /skill'; + trigger.version = 'v3'; + update = true; + } + + if (update) { + fs.writeFileSync(res, JSON.stringify(json, null, ' ')); + console.log(`SAVING: ${res}`); + } + }); + }); + // --- +}; + +let connectors = {}; diff --git a/data/record/receive_slack_alert_if_coupon_code_abuse_is_detected/mesa.json b/data/record/receive_slack_alert_if_coupon_code_abuse_is_detected/mesa.json index 0a65474e..f942ffee 100644 --- a/data/record/receive_slack_alert_if_coupon_code_abuse_is_detected/mesa.json +++ b/data/record/receive_slack_alert_if_coupon_code_abuse_is_detected/mesa.json @@ -1,140 +1,136 @@ { - "key": "data/record/receive_slack_alert_if_coupon_code_abuse_is_detected", - "name": "Detect Coupon Code Abuse and Receive Slack Alerts", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ + "key": "data/record/receive_slack_alert_if_coupon_code_abuse_is_detected", + "name": "Detect Coupon Code Abuse and Receive Slack Alerts", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 4, + "trigger_type": "input", + "type": "data", + "entity": "record", + "action": "created", + "name": "Record Created", + "version": "v2", + "key": "data", + "operation_id": "record_created", + "metadata": { + "api_endpoint": "get /{database}/{table}/created", + "poll": "@hourly:0 * * * *", + "table": "Shopify Orders" + }, + "local_fields": [], + "selected_fields": ["poll"], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "data", + "entity": "record", + "action": "custom_query", + "name": "Custom SQL Query", + "version": "v2", + "key": "data_1", + "operation_id": "get_database_custom_query", + "metadata": { + "api_endpoint": "get /{database}/{table}", + "query": "SELECT\n TO_CHAR(\"Created At\", 'yyyy-mm-dd'),\n SUM(\"Total Price\") AS total,\n SUM(\"Total Discount\") AS total_discounts,\n ROUND(SUM(\"Total Discount\") / SUM(\"Total Price\"), 2) AS percentage\nFROM \"Shopify Orders\"\nGROUP BY TO_CHAR(\"Created At\", 'yyyy-mm-dd')\nORDER BY TO_CHAR(\"Created At\", 'yyyy-mm-dd');" + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + }, + { + "schema": 2, + "trigger_type": "output", + "type": "custom", + "name": "Format order total by day including discounts", + "key": "custom", + "operation_id": "custom", + "metadata": { + "description": "Format order totals by day including their discount amounts that can be understood by other systems or components", + "script": "custom.js" + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 1 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Compare discount rates to identify coupon abuse", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "temperature": "1", + "body": { + "role": "user", + "content": "Included is a JSON result showing order totals by day including the discount amounts. Compare the discount rate against the usual average discount rate (assume 10% if unspecified). Is the discount rate higher than usual? Reply only Yes or No: \n{{ custom.json_results }}" + } + }, + "local_fields": [], + "selected_fields": ["temperature"], + "on_error": "default", + "weight": 2 + }, + { + "schema": 4.1, + "trigger_type": "output", + "type": "filter", + "name": "Was coupon abuse detected?", + "key": "filter", + "operation_id": "filter", + "metadata": { + "a": "{{ai.response}}", + "comparison": "equals", + "b": "Yes", + "additional": [ { - "schema": 4, - "trigger_type": "input", - "type": "data", - "entity": "record", - "action": "created", - "name": "Record Created", - "version": "v2", - "key": "data", - "operation_id": "record_created", - "metadata": { - "api_endpoint": "get \/{database}\/{table}\/created", - "poll": "@hourly:0 * * * *", - "table": "Shopify Orders" - }, - "local_fields": [], - "selected_fields": [ - "poll" - ], - "on_error": "default", - "weight": 0 + "operator": "and", + "comparison": "equals" } - ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "data", - "entity": "record", - "action": "custom_query", - "name": "Custom SQL Query", - "version": "v2", - "key": "data_1", - "operation_id": "get_database_custom_query", - "metadata": { - "api_endpoint": "get \/{database}\/{table}", - "query": "SELECT\n TO_CHAR(\"Created At\", 'yyyy-mm-dd'),\n SUM(\"Total Price\") AS total,\n SUM(\"Total Discount\") AS total_discounts,\n ROUND(SUM(\"Total Discount\") \/ SUM(\"Total Price\"), 2) AS percentage\nFROM \"Shopify Orders\"\nGROUP BY TO_CHAR(\"Created At\", 'yyyy-mm-dd')\nORDER BY TO_CHAR(\"Created At\", 'yyyy-mm-dd');" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - }, - { - "schema": 2, - "trigger_type": "output", - "type": "custom", - "name": "Format order total by day including discounts", - "key": "custom", - "operation_id": "custom", - "metadata": { - "description": "Format order totals by day including their discount amounts that can be understood by other systems or components", - "script": "custom.js" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 1 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Compare discount rates to identify coupon abuse", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "temperature": "1", - "body": { - "role": "user", - "content": "Included is a JSON result showing order totals by day including the discount amounts. Compare the discount rate against the usual average discount rate (assume 10% if unspecified). Is the discount rate higher than usual? Reply only Yes or No: \n{{ custom.json_results }}" - } - }, - "local_fields": [], - "selected_fields": [ - "temperature" - ], - "on_error": "default", - "weight": 2 - }, - { - "schema": 4.1, - "trigger_type": "output", - "type": "filter", - "name": "Was coupon abuse detected?", - "key": "filter", - "operation_id": "filter", - "metadata": { - "a": "{{ai.response}}", - "comparison": "equals", - "b": "Yes", - "additional": [ - { - "operator": "and", - "comparison": "equals" - } - ] - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 3 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "slack", - "entity": "message", - "action": "create", - "name": "Send Message", - "version": "v3", - "key": "slack", - "operation_id": "slack", - "metadata": { - "api_endpoint": "post \/api\/chat.postMessage", - "body": { - "channel": "{{ template | label: 'What Slack channel would you like the message to send to?', description: 'Invite the MESA Slack app by typing @MESA and clicking the Invite button before selecting your channel. Private channels may not appear until you invite the MESA Slack app.', tokens: false }}", - "markdown_text": "{{ template | label: 'What are the contents of the Slack message?', description: '', default: 'Coupon code abuse detected', tokens: false }}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 4 - } - ] - } -} \ No newline at end of file + ] + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 3 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "slack", + "entity": "message", + "action": "create", + "name": "Send Message", + "version": "v3", + "key": "slack", + "operation_id": "slack", + "metadata": { + "api_endpoint": "post /api/chat.postMessage", + "body": { + "channel": "{{ template | label: 'What Slack channel would you like the message to send to?', description: 'Invite the MESA Slack app by typing @MESA and clicking the Invite button before selecting your channel. Private channels may not appear until you invite the MESA Slack app.', tokens: false }}", + "markdown_text": "{{ template | label: 'What are the contents of the Slack message?', description: '', default: 'Coupon code abuse detected', tokens: false }}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 4 + } + ] + } +} diff --git a/etsy/listing/create_pinterest_pin/mesa.json b/etsy/listing/create_pinterest_pin/mesa.json index 0ff94c25..ff1aca48 100644 --- a/etsy/listing/create_pinterest_pin/mesa.json +++ b/etsy/listing/create_pinterest_pin/mesa.json @@ -1,138 +1,133 @@ { - "key": "etsy/listing/create_pinterest_pin", - "name": "Create a Pinterest Pin from a New Etsy Listing", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 5, - "trigger_type": "input", - "type": "etsy", - "entity": "shoplisting", - "action": "list-created", - "name": "Active Listing Created", - "version": "v3", - "key": "etsy", - "operation_id": "findAllListingsActiveCreated", - "metadata": { - "api_endpoint": "get \/v3\/application\/listings\/create", - "poll": "@hourly:0 * * * *", - "path": { - "shop_id": "{{ template | label: 'What is your Etsy store?' }}" - } - }, - "local_fields": [], - "selected_fields": [ - "poll" - ], - "on_error": "default", - "weight": 0 + "key": "etsy/listing/create_pinterest_pin", + "name": "Create a Pinterest Pin from a New Etsy Listing", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 5, + "trigger_type": "input", + "type": "etsy", + "entity": "shoplisting", + "action": "list-created", + "name": "Active Listing Created", + "version": "v3", + "key": "etsy", + "operation_id": "findAllListingsActiveCreated", + "metadata": { + "api_endpoint": "get /v3/application/listings/create", + "poll": "@hourly:0 * * * *", + "path": { + "shop_id": "{{ template | label: 'What is your Etsy store?' }}" + } + }, + "local_fields": [], + "selected_fields": ["poll"], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "etsy", + "entity": "shoplisting_image", + "action": "list", + "name": "Get List of Listing Images", + "version": "v3", + "key": "etsy_1", + "operation_id": "getListingImages", + "metadata": { + "api_endpoint": "get /v3/application/listings/{listing_id}/images", + "path": { + "listing_id": "{{etsy.listing_id}}" + } + }, + "local_fields": [], + "selected_fields": ["path", "path.listing_id"], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Shorten Etsy Title for Pinterest Requirements", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "Shorten the Etsy listing title to under 100 characters while preserving its original meaning and key terms: {{etsy.title}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 1 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Shorten Etsy Description for Pinterest Requirements", + "version": "v3", + "key": "ai_1", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "Shorten the Etsy listing description to under 500 characters while preserving its original meaning and key terms: {{etsy.description}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 2 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "pinterest", + "entity": "pin", + "action": "create", + "name": "Create Pin", + "key": "pinterest", + "operation_id": "pins/create", + "metadata": { + "api_endpoint": "post /pins", + "body": { + "link": "{{etsy.url}}", + "title": "{{ai.response}}", + "description": "{{ai_1.response}}", + "board_id": "{{ template | label: 'Which board should the pin be created on?', tokens: false }}", + "media_source": { + "source_type": "image_url", + "url": "{{etsy_1.results[0].url_fullxfull}}", + "is_standard": true } + } + }, + "local_fields": [], + "selected_fields": [ + "body.media_source.is_standard", + "body.title", + "body.description", + "body.link" ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "etsy", - "entity": "shoplisting_image", - "action": "list", - "name": "Get List of Listing Images", - "version": "v3", - "key": "etsy_1", - "operation_id": "getListingImages", - "metadata": { - "api_endpoint": "get \/v3\/application\/listings\/{listing_id}\/images", - "path": { - "listing_id": "{{etsy.listing_id}}" - } - }, - "local_fields": [], - "selected_fields": [ - "path", - "path.listing_id" - ], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Shorten Etsy Title for Pinterest Requirements", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "body": { - "role": "user", - "content": "Shorten the Etsy listing title to under 100 characters while preserving its original meaning and key terms: {{etsy.title}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 1 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Shorten Etsy Description for Pinterest Requirements", - "version": "v2", - "key": "ai_1", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "body": { - "role": "user", - "content": "Shorten the Etsy listing description to under 500 characters while preserving its original meaning and key terms: {{etsy.description}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 2 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "pinterest", - "entity": "pin", - "action": "create", - "name": "Create Pin", - "key": "pinterest", - "operation_id": "pins\/create", - "metadata": { - "api_endpoint": "post \/pins", - "body": { - "link": "{{etsy.url}}", - "title": "{{ai.response}}", - "description": "{{ai_1.response}}", - "board_id": "{{ template | label: 'Which board should the pin be created on?', tokens: false }}", - "media_source": { - "source_type": "image_url", - "url": "{{etsy_1.results[0].url_fullxfull}}", - "is_standard": true - } - } - }, - "local_fields": [], - "selected_fields": [ - "body.media_source.is_standard", - "body.title", - "body.description", - "body.link" - ], - "on_error": "default", - "weight": 3 - } - ] - } -} \ No newline at end of file + "on_error": "default", + "weight": 3 + } + ] + } +} diff --git a/etsy/listing/create_smart_tags_using_ai_from_product_details/mesa.json b/etsy/listing/create_smart_tags_using_ai_from_product_details/mesa.json index eba17eb9..cfd8fbb9 100644 --- a/etsy/listing/create_smart_tags_using_ai_from_product_details/mesa.json +++ b/etsy/listing/create_smart_tags_using_ai_from_product_details/mesa.json @@ -1,82 +1,82 @@ { - "key": "etsy/listing/create_smart_tags_using_ai_from_product_details", - "name": "Create Smart Etsy Tags Using AI from Your Listing Details", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 5, - "trigger_type": "input", - "type": "etsy", - "entity": "shoplisting", - "action": "list-created", - "name": "Active Listing Created", - "version": "v3", - "key": "etsy", - "operation_id": "findAllListingsActiveCreated", - "metadata": { - "api_endpoint": "get /v3/application/listings/create", - "poll": "@hourly:0 * * * *", - "path": { - "shop_id": "{{ template | label: 'Select your Etsy shop.', description: 'Alternatively, you can add an Etsy Shop ID (a unique number assigned to your store) if you can''t locate your shop in the dropdown.' }}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - } - ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Prompt", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post /prompt", - "body": { - "role": "user", - "content": "You are an Etsy SEO expert. Based on the following Etsy listing title and description, generate 13 highly relevant tags. Each tag must:\n\nBe under 20 characters.\n\nUse exact or close variations of customer search phrases.\n\nReflect product type, materials, style, occasion, use cases, and giftability.\n\nInclude a mix of long-tail keywords (up to 20 characters) and shorter keywords.\n\nAvoid duplicates, plurals, or words already covered in the title unless they improve search intent.\n\nBe written in lowercase, separated by commas.\n\nHere is the listing:\nTitle: {{etsy.title}}\nDescription: {{etsy.description}}\n\nProvide only the 13 optimized tags." - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "etsy", - "entity": "shoplisting", - "action": "update", - "name": "Update Listing", - "version": "v3", - "key": "etsy_1", - "operation_id": "updateListing", - "metadata": { - "api_endpoint": "patch /v3/application/shops/{shop_id}/listings/{listing_id}", - "path": { - "shop_id": "{{ template | label: 'Select your Etsy shop.', description: 'Alternatively, you can add an Etsy Shop ID (a unique number assigned to your store) if you can''t locate your shop in the dropdown.' }}", - "listing_id": "{{etsy.listing_id}}" - }, - "body": { - "tags": "{{ai.response}}" - } - }, - "local_fields": [], - "selected_fields": ["body.tags"], - "on_error": "default", - "weight": 1 - } - ] - } + "key": "etsy/listing/create_smart_tags_using_ai_from_product_details", + "name": "Create Smart Etsy Tags Using AI from Your Listing Details", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 5, + "trigger_type": "input", + "type": "etsy", + "entity": "shoplisting", + "action": "list-created", + "name": "Active Listing Created", + "version": "v3", + "key": "etsy", + "operation_id": "findAllListingsActiveCreated", + "metadata": { + "api_endpoint": "get /v3/application/listings/create", + "poll": "@hourly:0 * * * *", + "path": { + "shop_id": "{{ template | label: 'Select your Etsy shop.', description: 'Alternatively, you can add an Etsy Shop ID (a unique number assigned to your store) if you can''t locate your shop in the dropdown.' }}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Prompt", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "You are an Etsy SEO expert. Based on the following Etsy listing title and description, generate 13 highly relevant tags. Each tag must:\n\nBe under 20 characters.\n\nUse exact or close variations of customer search phrases.\n\nReflect product type, materials, style, occasion, use cases, and giftability.\n\nInclude a mix of long-tail keywords (up to 20 characters) and shorter keywords.\n\nAvoid duplicates, plurals, or words already covered in the title unless they improve search intent.\n\nBe written in lowercase, separated by commas.\n\nHere is the listing:\nTitle: {{etsy.title}}\nDescription: {{etsy.description}}\n\nProvide only the 13 optimized tags." + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "etsy", + "entity": "shoplisting", + "action": "update", + "name": "Update Listing", + "version": "v3", + "key": "etsy_1", + "operation_id": "updateListing", + "metadata": { + "api_endpoint": "patch /v3/application/shops/{shop_id}/listings/{listing_id}", + "path": { + "shop_id": "{{ template | label: 'Select your Etsy shop.', description: 'Alternatively, you can add an Etsy Shop ID (a unique number assigned to your store) if you can''t locate your shop in the dropdown.' }}", + "listing_id": "{{etsy.listing_id}}" + }, + "body": { + "tags": "{{ai.response}}" + } + }, + "local_fields": [], + "selected_fields": ["body.tags"], + "on_error": "default", + "weight": 1 + } + ] + } } diff --git a/etsy/listing/generate_titles_with_ai/mesa.json b/etsy/listing/generate_titles_with_ai/mesa.json index 9040f32a..f0c610aa 100644 --- a/etsy/listing/generate_titles_with_ai/mesa.json +++ b/etsy/listing/generate_titles_with_ai/mesa.json @@ -1,112 +1,101 @@ { - "key": "etsy/listing/generate_titles_with_ai", - "name": "Create Optimized Etsy Listing Titles with AI", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 5, - "trigger_type": "input", - "type": "etsy", - "entity": "shoplisting", - "action": "list-created", - "name": "Active Listing Created", - "version": "v3", - "key": "etsy", - "operation_id": "findAllListingsActiveCreated", - "metadata": { - "api_endpoint": "get \/v3\/application\/listings\/create", - "poll": "@hourly:0 * * * *", - "path": { - "shop_id": "{{ template | label: 'What is your Etsy store?' }}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - } - ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Generate Product Title", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt-product-title", - "metadata": { - "api_endpoint": "post \/prompt\/product-title", - "temperature": "1", - "body": { - "role": "user", - "content": "{{ template | label: 'Who is your target audience?', description: 'Replace [target audience, e.g. home decor enthusiasts, fitness buffs] with your target audience.', default: 'Behave like an eCommerce merchandising specialist and draft a product title for {{etsy.description}}. The title should be concise, include relevant keywords, and appeal to [target audience, e.g. home decor enthusiasts, fitness buffs]. Aim for 8-12 words. Format the title without quotation marks.' }}" - } - }, - "local_fields": [], - "selected_fields": [ - "temperature", - "body", - "body.role", - "body.content" - ], - "on_error": "default", - "weight": 0 - }, - { - "schema": 2, - "trigger_type": "output", - "type": "approval", - "name": "Approve or Decline the AI Response", - "key": "approval", - "operation_id": "approval", - "metadata": { - "message": "Response is ready: {{ai.response}}", - "label_accept": "Accept", - "label_reject": "Reject", - "alert_emails": "{{ template | label: 'Which email should we notify when a product title is ready for review?', description: 'You can remove your email address or the optional approval step in the workflow builder once you''ve completed the template setup.' }}" - }, - "local_fields": [], - "selected_fields": [ - "message", - "label_accept", - "label_reject" - ], - "on_error": "default", - "weight": 1 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "etsy", - "entity": "shoplisting", - "action": "update", - "name": "Update Listing", - "version": "v3", - "key": "etsy_1", - "operation_id": "updateListing", - "metadata": { - "api_endpoint": "patch \/v3\/application\/shops\/{shop_id}\/listings\/{listing_id}", - "path": { - "shop_id": "{{ template | label: 'What is your Etsy store?' }}", - "listing_id": "{{etsy.listing_id}}" - }, - "body": { - "title": "{{ai.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "body.title" - ], - "on_error": "default", - "weight": 2 - } - ] - } -} \ No newline at end of file + "key": "etsy/listing/generate_titles_with_ai", + "name": "Create Optimized Etsy Listing Titles with AI", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 5, + "trigger_type": "input", + "type": "etsy", + "entity": "shoplisting", + "action": "list-created", + "name": "Active Listing Created", + "version": "v3", + "key": "etsy", + "operation_id": "findAllListingsActiveCreated", + "metadata": { + "api_endpoint": "get /v3/application/listings/create", + "poll": "@hourly:0 * * * *", + "path": { + "shop_id": "{{ template | label: 'What is your Etsy store?' }}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Generate Product Title", + "version": "v2", + "key": "ai", + "operation_id": "post-prompt-product-title", + "metadata": { + "api_endpoint": "post /prompt/product-title", + "temperature": "1", + "body": { + "role": "user", + "content": "{{ template | label: 'Who is your target audience?', description: 'Replace [target audience, e.g. home decor enthusiasts, fitness buffs] with your target audience.', default: 'Behave like an eCommerce merchandising specialist and draft a product title for {{etsy.description}}. The title should be concise, include relevant keywords, and appeal to [target audience, e.g. home decor enthusiasts, fitness buffs]. Aim for 8-12 words. Format the title without quotation marks.' }}" + } + }, + "local_fields": [], + "selected_fields": ["temperature", "body", "body.role", "body.content"], + "on_error": "default", + "weight": 0 + }, + { + "schema": 2, + "trigger_type": "output", + "type": "approval", + "name": "Approve or Decline the AI Response", + "key": "approval", + "operation_id": "approval", + "metadata": { + "message": "Response is ready: {{ai.response}}", + "label_accept": "Accept", + "label_reject": "Reject", + "alert_emails": "{{ template | label: 'Which email should we notify when a product title is ready for review?', description: 'You can remove your email address or the optional approval step in the workflow builder once you''ve completed the template setup.' }}" + }, + "local_fields": [], + "selected_fields": ["message", "label_accept", "label_reject"], + "on_error": "default", + "weight": 1 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "etsy", + "entity": "shoplisting", + "action": "update", + "name": "Update Listing", + "version": "v3", + "key": "etsy_1", + "operation_id": "updateListing", + "metadata": { + "api_endpoint": "patch /v3/application/shops/{shop_id}/listings/{listing_id}", + "path": { + "shop_id": "{{ template | label: 'What is your Etsy store?' }}", + "listing_id": "{{etsy.listing_id}}" + }, + "body": { + "title": "{{ai.response}}" + } + }, + "local_fields": [], + "selected_fields": ["body.title"], + "on_error": "default", + "weight": 2 + } + ] + } +} diff --git a/etsy/listing/write_descriptions_with_ai/mesa.json b/etsy/listing/write_descriptions_with_ai/mesa.json index 69fa595f..77819d9c 100644 --- a/etsy/listing/write_descriptions_with_ai/mesa.json +++ b/etsy/listing/write_descriptions_with_ai/mesa.json @@ -1,108 +1,101 @@ { - "key": "etsy/listing/write_descriptions_with_ai", - "name": "Generate AI-Powered Etsy Listing Descriptions Automatically", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 5, - "trigger_type": "input", - "type": "etsy", - "entity": "shoplisting", - "action": "list-created", - "name": "Active Listing Created", - "version": "v3", - "key": "etsy", - "operation_id": "findAllListingsActiveCreated", - "metadata": { - "api_endpoint": "get \/v3\/application\/listings\/create", - "poll": "@hourly:0 * * * *", - "path": { - "shop_id": "{{ template | label: 'What is your Etsy store?' }}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - } - ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Write a Product Description", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "temperature": "1", - "body": { - "role": "user", - "content": "Write a brief product description for a product called {{etsy.title}}" - } - }, - "local_fields": [], - "selected_fields": [ - "temperature", - "body", - "body.role", - "body.content" - ], - "on_error": "default", - "weight": 0 - }, - { - "schema": 2, - "trigger_type": "output", - "type": "approval", - "name": "Approve or Decline the AI Response", - "key": "approval", - "operation_id": "approval", - "metadata": { - "message": "Response ready for review: {{ai.response}}", - "label_accept": "Accept", - "label_reject": "Reject", - "alert_emails": "{{ template | label: 'Which email should we notify when a product title is ready for review?', description: 'You can remove your email address or the optional approval step in the workflow builder once you''ve completed the template setup.' }}" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 1 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "etsy", - "entity": "shoplisting", - "action": "update", - "name": "Update Listing", - "version": "v3", - "key": "etsy_1", - "operation_id": "updateListing", - "metadata": { - "api_endpoint": "patch \/v3\/application\/shops\/{shop_id}\/listings\/{listing_id}", - "path": { - "shop_id": "{{ template | label: 'What is your Etsy store?' }}", - "listing_id": "{{etsy.listing_id}}" - }, - "body": { - "description": "{{ai.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "body.description" - ], - "on_error": "default", - "weight": 2 - } - ] - } -} \ No newline at end of file + "key": "etsy/listing/write_descriptions_with_ai", + "name": "Generate AI-Powered Etsy Listing Descriptions Automatically", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 5, + "trigger_type": "input", + "type": "etsy", + "entity": "shoplisting", + "action": "list-created", + "name": "Active Listing Created", + "version": "v3", + "key": "etsy", + "operation_id": "findAllListingsActiveCreated", + "metadata": { + "api_endpoint": "get /v3/application/listings/create", + "poll": "@hourly:0 * * * *", + "path": { + "shop_id": "{{ template | label: 'What is your Etsy store?' }}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Write a Product Description", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "temperature": "1", + "body": { + "role": "user", + "content": "Write a brief product description for a product called {{etsy.title}}" + } + }, + "local_fields": [], + "selected_fields": ["temperature", "body", "body.role", "body.content"], + "on_error": "default", + "weight": 0 + }, + { + "schema": 2, + "trigger_type": "output", + "type": "approval", + "name": "Approve or Decline the AI Response", + "key": "approval", + "operation_id": "approval", + "metadata": { + "message": "Response ready for review: {{ai.response}}", + "label_accept": "Accept", + "label_reject": "Reject", + "alert_emails": "{{ template | label: 'Which email should we notify when a product title is ready for review?', description: 'You can remove your email address or the optional approval step in the workflow builder once you''ve completed the template setup.' }}" + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 1 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "etsy", + "entity": "shoplisting", + "action": "update", + "name": "Update Listing", + "version": "v3", + "key": "etsy_1", + "operation_id": "updateListing", + "metadata": { + "api_endpoint": "patch /v3/application/shops/{shop_id}/listings/{listing_id}", + "path": { + "shop_id": "{{ template | label: 'What is your Etsy store?' }}", + "listing_id": "{{etsy.listing_id}}" + }, + "body": { + "description": "{{ai.response}}" + } + }, + "local_fields": [], + "selected_fields": ["body.description"], + "on_error": "default", + "weight": 2 + } + ] + } +} diff --git a/form/high_priority_feedback_summarizer/mesa.json b/form/high_priority_feedback_summarizer/mesa.json index 4e0467ac..66dca560 100644 --- a/form/high_priority_feedback_summarizer/mesa.json +++ b/form/high_priority_feedback_summarizer/mesa.json @@ -1,154 +1,154 @@ { - "key": "form/high_priority_feedback_summarizer", - "name": "High-Priority Feedback Summarizer", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ + "key": "form/high_priority_feedback_summarizer", + "name": "High-Priority Feedback Summarizer", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 2, + "trigger_type": "input", + "type": "form", + "name": "Form Submitted", + "key": "form", + "operation_id": "form", + "metadata": { + "form_data": [ { - "schema": 2, - "trigger_type": "input", - "type": "form", - "name": "Form Submitted", - "key": "form", - "operation_id": "form", - "metadata": { - "form_data": [ - { - "type": "header", - "subtype": "h1", - "label": "General Feedback Form" - }, - { - "type": "text", - "required": false, - "label": "Name", - "description": "Enter your first and last name", - "className": "form-control", - "name": "Name", - "subtype": "text" - }, - { - "type": "text", - "required": false, - "label": "Email", - "description": "Enter the best email to reach you at", - "className": "form-control", - "name": "Email", - "subtype": "text" - }, - { - "type": "text", - "required": false, - "label": "Feedback", - "description": "Share any thoughts with us!", - "className": "form-control", - "name": "Feedback", - "subtype": "text" - }, - { - "type": "select", - "required": false, - "label": "Priority", - "description": "How should we prioritize your feedback?", - "className": "form-control", - "name": "Priority", - "multiple": false, - "values": [ - { - "label": "High", - "value": "option-1", - "selected": true - }, - { - "label": "Medium", - "value": "option-2", - "selected": false - }, - { - "label": "Low", - "value": "option-3", - "selected": false - } - ] - } - ], - "embed_code": "{{ template | label: 'Add the form to your website.', description: 'Copy the form embed code and paste it into the page where you want the form to appear. Use your website editor''s option for embedded content or custom code. Once the page is publicly accessible, the form will be visible to visitors.' }}" - }, - "local_fields": [], - "selected_fields": ["form_data", "embed_code", "url"], - "on_error": "default", - "weight": 0 - } - ], - "outputs": [ + "type": "header", + "subtype": "h1", + "label": "General Feedback Form" + }, { - "schema": 4.1, - "trigger_type": "output", - "type": "filter", - "name": "Check if the Form Response is High Priority", - "key": "filter", - "operation_id": "filter", - "metadata": { - "comparison": "equals", - "additional": [ - { - "operator": "and", - "comparison": "equals" - } - ], - "a": "{{form.Priority}}", - "b": "option-1" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 + "type": "text", + "required": false, + "label": "Name", + "description": "Enter your first and last name", + "className": "form-control", + "name": "Name", + "subtype": "text" }, { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Summarize the Feedback", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "body": { - "role": "user", - "content": "Review the feedback below and synthesize it into a clear summary with specific action items our team can follow up on to ensure we address the feedback effectively.\n\nFeedback: {{form.Feedback}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 1 + "type": "text", + "required": false, + "label": "Email", + "description": "Enter the best email to reach you at", + "className": "form-control", + "name": "Email", + "subtype": "text" }, { - "schema": 5, - "trigger_type": "output", - "type": "email", - "name": "Send Summary by Email", - "version": "v2", - "key": "email", - "operation_id": "\/send-email", - "metadata": { - "api_endpoint": "post \/send-email", - "body": { - "to": "{{ template | label: 'Enter the email address that should receive high-priority feedback summaries.', description: 'This email will receive a summary only when feedback is marked as high priority.' }}", - "subject": "Thank you for your feedback!", - "message": "

You received a form response!<\/p>

<\/p>

\ud83d\udccb Feedback response:<\/p>

{{ai.response}}<\/p>" - } + "type": "text", + "required": false, + "label": "Feedback", + "description": "Share any thoughts with us!", + "className": "form-control", + "name": "Feedback", + "subtype": "text" + }, + { + "type": "select", + "required": false, + "label": "Priority", + "description": "How should we prioritize your feedback?", + "className": "form-control", + "name": "Priority", + "multiple": false, + "values": [ + { + "label": "High", + "value": "option-1", + "selected": true + }, + { + "label": "Medium", + "value": "option-2", + "selected": false }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 2 + { + "label": "Low", + "value": "option-3", + "selected": false + } + ] + } + ], + "embed_code": "{{ template | label: 'Add the form to your website.', description: 'Copy the form embed code and paste it into the page where you want the form to appear. Use your website editor''s option for embedded content or custom code. Once the page is publicly accessible, the form will be visible to visitors.' }}" + }, + "local_fields": [], + "selected_fields": ["form_data", "embed_code", "url"], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4.1, + "trigger_type": "output", + "type": "filter", + "name": "Check if the Form Response is High Priority", + "key": "filter", + "operation_id": "filter", + "metadata": { + "comparison": "equals", + "additional": [ + { + "operator": "and", + "comparison": "equals" } - ] - } + ], + "a": "{{form.Priority}}", + "b": "option-1" + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Summarize the Feedback", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "Review the feedback below and synthesize it into a clear summary with specific action items our team can follow up on to ensure we address the feedback effectively.\n\nFeedback: {{form.Feedback}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 1 + }, + { + "schema": 5, + "trigger_type": "output", + "type": "email", + "name": "Send Summary by Email", + "version": "v2", + "key": "email", + "operation_id": "/send-email", + "metadata": { + "api_endpoint": "post /send-email", + "body": { + "to": "{{ template | label: 'Enter the email address that should receive high-priority feedback summaries.', description: 'This email will receive a summary only when feedback is marked as high priority.' }}", + "subject": "Thank you for your feedback!", + "message": "

You received a form response!

\ud83d\udccb Feedback response:

{{ai.response}}

" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 2 + } + ] + } } diff --git a/google_sheets/row/automated_wordpress_drafts/mesa.json b/google_sheets/row/automated_wordpress_drafts/mesa.json index 0e207422..763a6ec7 100644 --- a/google_sheets/row/automated_wordpress_drafts/mesa.json +++ b/google_sheets/row/automated_wordpress_drafts/mesa.json @@ -1,163 +1,163 @@ { - "key": "google_sheets/row/automated_wordpress_drafts", - "name": "Generate WordPress Content Drafts Using Perplexity Research", - "version": "1.0.0", - "enabled": false, - "setup": { - "mode": "custom", - "fields": [ - { - "key": "create_spreadsheet_name", - "target": "googlesheets.path.create_spreadsheet_name", - "label": "What do you want to name your spreadsheet?", - "tokens": false, - "description": "Give your new Google Spreadsheet a name." - }, - { - "key": "fields", - "target": "googlesheets.setup_fields", - "label": "What are your spreadsheet columns?", - "description": "This template will automatically create a new spreadsheet with the following columns.", - "options": [ - { - "label": "Topic", - "value": "Topic", - "description": "The topic of the blog post." - }, - { - "label": "Primary Keywords", - "value": "Primary Keywords", - "description": "The primary keywords for the blog post." - }, - { - "label": "Secondary Keywords", - "value": "Secondary Keywords", - "description": "The secondary keywords for the blog post." - }, - { - "label": "Audience", - "value": "Audience", - "description": "The audience for the blog post." - }, - { - "label": "Content Angle", - "value": "Content Angle", - "description": "The content angle for the blog post." - }, - { - "label": "Desired Length / Format", - "value": "Desired Length / Format", - "description": "The desired length and format for the blog post." - } - ], - "check_all": true, - "type": "checkboxes" - } - ] - }, - "config": { - "inputs": [ - { - "schema": 4, - "trigger_type": "input", - "type": "googlesheets", - "entity": "row", - "action": "created", - "name": "Row Created", - "version": "v2", - "key": "googlesheets", - "operation_id": "record_created", - "metadata": { - "api_endpoint": "get /{spreadsheet_id}/{sheet}", - "poll": "@hourly:0 * * * *", - "path": { - "spreadsheet_id": "", - "sheet": "Sheet1", - "query_type": "all", - "comparison": "=" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - } + "key": "google_sheets/row/automated_wordpress_drafts", + "name": "Generate WordPress Content Drafts Using Perplexity Research", + "version": "1.0.0", + "enabled": false, + "setup": { + "mode": "custom", + "fields": [ + { + "key": "create_spreadsheet_name", + "target": "googlesheets.path.create_spreadsheet_name", + "label": "What do you want to name your spreadsheet?", + "tokens": false, + "description": "Give your new Google Spreadsheet a name." + }, + { + "key": "fields", + "target": "googlesheets.setup_fields", + "label": "What are your spreadsheet columns?", + "description": "This template will automatically create a new spreadsheet with the following columns.", + "options": [ + { + "label": "Topic", + "value": "Topic", + "description": "The topic of the blog post." + }, + { + "label": "Primary Keywords", + "value": "Primary Keywords", + "description": "The primary keywords for the blog post." + }, + { + "label": "Secondary Keywords", + "value": "Secondary Keywords", + "description": "The secondary keywords for the blog post." + }, + { + "label": "Audience", + "value": "Audience", + "description": "The audience for the blog post." + }, + { + "label": "Content Angle", + "value": "Content Angle", + "description": "The content angle for the blog post." + }, + { + "label": "Desired Length / Format", + "value": "Desired Length / Format", + "description": "The desired length and format for the blog post." + } ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "perplexity", - "entity": "chat_completion", - "action": "create", - "name": "Create Chat Completion", - "key": "perplexity", - "operation_id": "chat-completion", - "metadata": { - "api_endpoint": "post /chat/completions", - "body": { - "model": "sonar-pro", - "role": "user", - "content": "You are an SEO expert and brand copywriter connected to a Google Sheet that contains content planning inputs. For each row, pull the following columns:\n\n-Topic: {{googlesheets.data.Topic}}\n-Primary Keyword(s): {{googlesheets.data[\"Primary Keywords\"]}}\n-Secondary Keyword(s): {{googlesheets.data[\"Secondary Keywords\"]}}\n-Audience (target reader segment): {{googlesheets.data.Audience}}\n-Content Angle (perspective, theme, or positioning): {{googlesheets.data[\"Content Angle\"]}}\n-Desired Length / Format (word count range, format type such as blog post, listicle, guide, tone, etc.): {{googlesheets.data[\"Desired Length / Format\"]}}\n\nUsing this information, create a cohesive, SEO-optimized blog draft that also reflects the brand\u2019s personality.\n\nWriting Instructions\n1. SEO Layer: Include a keyword-friendly title, meta description, and structured headings (

,

). Naturally weave in keywords.\n2. On-Brand Voice: Use the chosen tone, phrasing, and CTA style consistently.\n3. Content Structure:\n-Engaging introduction that hooks the audience and reflects the brand.\n-Clear, scannable sections expanding on the idea from the chosen angle.\n-Branded touches (examples, language, or personality markers).\n-Conclusion with a call-to-action that matches the brand voice.\n4. Formatting: Provide output in clean HTML (

,

,

,