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 (,
,
order_number property, which is the ID used by the shop owner and customer.",
- "type": "string",
- "required": true
- }
- ]
- }
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 0
- }
- ],
- "outputs": [
- {
- "schema": 3.1,
- "trigger_type": "output",
- "type": "shopify",
- "entity": "order",
- "action": "retrieve",
- "name": "Retrieve Order",
- "key": "shopify",
- "operation_id": "get_orders_order_id",
- "metadata": {
- "api_endpoint": "get admin/orders/{{order_id}}.json",
- "order_id": "{{skill.order_id}}"
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 0
- },
- {
- "schema": 3,
- "trigger_type": "output",
- "type": "shopify",
- "entity": "order",
- "action": "note_update",
- "name": "Order Note Update",
- "key": "shopify_1",
- "operation_id": "put_mesa_orders_order_id_note",
- "metadata": {
- "api_endpoint": "put mesa/orders/{{order_id}}/note.json",
- "body": {
- "note": "{% for line_item in shopify.line_items %}Product Name: {{ line_item.title }}: {{ line_item.sku }}\n {% for property in line_item.properties %} - {{property.name}}: {{property.value}}\n{% endfor %}\n{% endfor %}",
- "append": true
- },
- "order_id": "{{shopify.id}}"
- },
- "local_fields": [],
- "selected_fields": ["order_id", "body", "body.note", "body.append"],
- "on_error": "default",
- "weight": 1
- }
- ]
- }
-}
+ "key": "mcp/infiniteoptions/add_line_item_properties_to_notes",
+ "name": "Add Line Item Properties from Infinite Options to Shopify Order Notes",
+ "version": "2.0.0",
+ "description": "Add product options to the order notes field in Shopify. This Yedric skill copies customizations or selections directly into order notes, ensuring third-party services and team members can quickly access important details. Streamline order tracking and fulfillment by consolidating essential information in one central location.",
+ "seconds": 180,
+ "enabled": true,
+ "setup": true,
+ "config": {
+ "inputs": [
+ {
+ "schema": 4,
+ "trigger_type": "input",
+ "type": "ai",
+ "entity": "skill",
+ "action": "skill",
+ "name": "Skill",
+ "key": "skill",
+ "operation_id": "post-skill",
+ "metadata": {
+ "api_endpoint": "post /skill",
+ "body": {
+ "parameters": [
+ {
+ "key": "order_id",
+ "description": "The ID of the order. This is different from the order_number property, which is the ID used by the shop owner and customer.",
+ "type": "string",
+ "required": true
+ }
+ ]
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0,
+ "version": "v3"
+ }
+ ],
+ "outputs": [
+ {
+ "schema": 3.1,
+ "trigger_type": "output",
+ "type": "shopify",
+ "entity": "order",
+ "action": "retrieve",
+ "name": "Retrieve Order",
+ "key": "shopify",
+ "operation_id": "get_orders_order_id",
+ "metadata": {
+ "api_endpoint": "get admin/orders/{{order_id}}.json",
+ "order_id": "{{skill.order_id}}"
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "schema": 3,
+ "trigger_type": "output",
+ "type": "shopify",
+ "entity": "order",
+ "action": "note_update",
+ "name": "Order Note Update",
+ "key": "shopify_1",
+ "operation_id": "put_mesa_orders_order_id_note",
+ "metadata": {
+ "api_endpoint": "put mesa/orders/{{order_id}}/note.json",
+ "body": {
+ "note": "{% for line_item in shopify.line_items %}Product Name: {{ line_item.title }}: {{ line_item.sku }}\n {% for property in line_item.properties %} - {{property.name}}: {{property.value}}\n{% endfor %}\n{% endfor %}",
+ "append": true
+ },
+ "order_id": "{{shopify.id}}"
+ },
+ "local_fields": [],
+ "selected_fields": [
+ "order_id",
+ "body",
+ "body.note",
+ "body.append"
+ ],
+ "on_error": "default",
+ "weight": 1
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/mcp/infiniteoptions/export_infinite_options_order_lines/mesa.json b/mcp/infiniteoptions/export_infinite_options_order_lines/mesa.json
index 7f711249..f76b8925 100644
--- a/mcp/infiniteoptions/export_infinite_options_order_lines/mesa.json
+++ b/mcp/infiniteoptions/export_infinite_options_order_lines/mesa.json
@@ -1,177 +1,180 @@
{
- "key": "mcp/infiniteoptions/export_infinite_options_order_lines",
- "name": "Retrieve Shopify Order Line Items with Infinite Options Properties",
- "version": "1.0.0",
- "description": "Searches Shopify for Order line items that match a user's \"Infinite options\" fields properties (line item properties), and creates a digestible output for each order line and its properties.",
- "seconds": 135,
- "enabled": true,
- "setup": true,
- "config": {
- "inputs": [
- {
- "schema": 4,
- "trigger_type": "input",
- "type": "skill",
- "entity": "skill",
- "action": "skill",
- "name": "Skill",
- "key": "skill",
- "operation_id": "post-skill",
- "metadata": {
- "api_endpoint": "post /skill",
- "body": {
- "parameters": [
- {
- "key": "infiniteoptions_field",
- "description": "Single Infinite Options field from the `_Get_Fields` tool call. Use `all_infinite_options_options` to get all fields.",
- "type": "string",
- "required": true
- },
- {
- "key": "created_at_min",
- "description": "Show orders created at or after date. Format: YYYY-MM-DDTHH:mm:ssZ in the user's timezone.",
- "type": "string",
- "required": true
- },
- {
- "key": "created_at_max",
- "description": "Show orders created at or before date. Format: YYYY-MM-DDTHH:mm:ssZ in the user's timezone.",
- "type": "string",
- "required": true
- },
- {
- "key": "status",
- "description": "Filter orders by their status. Defaults to \"Any\"",
- "type": "string",
- "required": false
- }
- ]
- }
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 0
- }
- ],
- "outputs": [
- {
- "schema": 3.1,
- "trigger_type": "output",
- "type": "shopify",
- "entity": "shop",
- "action": "list",
- "name": "Retrieve Shop",
- "key": "shopify",
- "operation_id": "get_shop",
- "metadata": {
- "api_endpoint": "get admin/shop.json"
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 0
- },
- {
- "schema": 4.1,
- "trigger_type": "output",
- "type": "infiniteoptions",
- "entity": "order",
- "action": "list",
- "name": "Order List",
- "key": "infiniteoptions",
- "operation_id": "get_infiniteoptions_orders",
- "metadata": {
- "api_endpoint": "get infiniteoptions/orders.json",
- "field_name": "{{skill.infiniteoptions_field | default: 'all_infinite_options_options' }}",
- "query": {
- "status": "{{skill.status | default: 'any'}}",
- "created_at_min": "{{skill.created_at_min | date: \"%Y-%m-%dT%H:%M:%S%z\"}}",
- "created_at_max": "{{skill.created_at_max | date: \"%Y-%m-%dT%H:%M:%S%z\"}}"
- }
- },
- "local_fields": [],
- "selected_fields": [
- "query.status",
- "query.created_at_min",
- "query.created_at_max"
- ],
- "on_error": "default",
- "weight": 1
- },
- {
- "schema": 3,
- "trigger_type": "output",
- "type": "transform",
- "entity": "mapping",
- "name": "Map order lines with matching properties",
- "key": "transform",
- "operation_id": "mapping",
- "metadata": {
- "mapping": [
- {
- "destination": "Order URL",
- "source": "{{SEE_CODE}}"
- },
- {
- "destination": "Order Name",
- "source": "{{SEE_CODE}}"
- },
- {
- "destination": "Email",
- "source": "{{SEE_CODE}}"
- },
- {
- "destination": "Shipping Name",
- "source": "{{SEE_CODE}}"
- },
- {
- "destination": "Address",
- "source": "{{SEE_CODE}}"
- },
+ "key": "mcp/infiniteoptions/export_infinite_options_order_lines",
+ "name": "Retrieve Shopify Order Line Items with Infinite Options Properties",
+ "version": "1.0.0",
+ "description": "Searches Shopify for Order line items that match a user's \"Infinite options\" fields properties (line item properties), and creates a digestible output for each order line and its properties.",
+ "seconds": 135,
+ "enabled": true,
+ "setup": true,
+ "config": {
+ "inputs": [
{
- "destination": "City",
- "source": "{{SEE_CODE}}"
- },
- {
- "destination": "Province",
- "source": "{{SEE_CODE}}"
- },
- {
- "destination": "Zip",
- "source": "{{SEE_CODE}}"
- },
- {
- "destination": "Country",
- "source": "{{SEE_CODE}}"
- },
+ "schema": 4,
+ "trigger_type": "input",
+ "type": "ai",
+ "entity": "skill",
+ "action": "skill",
+ "name": "Skill",
+ "key": "skill",
+ "operation_id": "post-skill",
+ "metadata": {
+ "api_endpoint": "post /skill",
+ "body": {
+ "parameters": [
+ {
+ "key": "infiniteoptions_field",
+ "description": "Single Infinite Options field from the `_Get_Fields` tool call. Use `all_infinite_options_options` to get all fields.",
+ "type": "string",
+ "required": true
+ },
+ {
+ "key": "created_at_min",
+ "description": "Show orders created at or after date. Format: YYYY-MM-DDTHH:mm:ssZ in the user's timezone.",
+ "type": "string",
+ "required": true
+ },
+ {
+ "key": "created_at_max",
+ "description": "Show orders created at or before date. Format: YYYY-MM-DDTHH:mm:ssZ in the user's timezone.",
+ "type": "string",
+ "required": true
+ },
+ {
+ "key": "status",
+ "description": "Filter orders by their status. Defaults to \"Any\"",
+ "type": "string",
+ "required": false
+ }
+ ]
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0,
+ "version": "v3"
+ }
+ ],
+ "outputs": [
{
- "destination": "Product Name",
- "source": "{{SEE_CODE}}"
+ "schema": 3.1,
+ "trigger_type": "output",
+ "type": "shopify",
+ "entity": "shop",
+ "action": "list",
+ "name": "Retrieve Shop",
+ "key": "shopify",
+ "operation_id": "get_shop",
+ "metadata": {
+ "api_endpoint": "get admin/shop.json"
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0
},
{
- "destination": "Product SKU",
- "source": "{{SEE_CODE}}"
+ "schema": 4.1,
+ "trigger_type": "output",
+ "type": "infiniteoptions",
+ "entity": "order",
+ "action": "list",
+ "name": "Order List",
+ "key": "infiniteoptions",
+ "operation_id": "get_infiniteoptions_orders",
+ "metadata": {
+ "api_endpoint": "get infiniteoptions/orders.json",
+ "field_name": "{{skill.infiniteoptions_field | default: 'all_infinite_options_options' }}",
+ "query": {
+ "status": "{{skill.status | default: 'any'}}",
+ "created_at_min": "{{skill.created_at_min | date: \"%Y-%m-%dT%H:%M:%S%z\"}}",
+ "created_at_max": "{{skill.created_at_max | date: \"%Y-%m-%dT%H:%M:%S%z\"}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [
+ "query.status",
+ "query.created_at_min",
+ "query.created_at_max"
+ ],
+ "on_error": "default",
+ "weight": 1
},
{
- "destination": "Product Price",
- "source": "{{SEE_CODE}}"
+ "schema": 3,
+ "trigger_type": "output",
+ "type": "transform",
+ "entity": "mapping",
+ "name": "Map order lines with matching properties",
+ "key": "transform",
+ "operation_id": "mapping",
+ "metadata": {
+ "mapping": [
+ {
+ "destination": "Order URL",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Order Name",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Email",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Shipping Name",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Address",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "City",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Province",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Zip",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Country",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Product Name",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Product SKU",
+ "source": "{{SEE_CODE}}"
+ },
+ {
+ "destination": "Product Price",
+ "source": "{{SEE_CODE}}"
+ }
+ ],
+ "script": "transform.js"
+ },
+ "local_fields": [
+ {
+ "key": "mapping",
+ "type": "mapping",
+ "tokens": "brackets",
+ "location": "required"
+ }
+ ],
+ "selected_fields": [
+ "script"
+ ],
+ "on_error": "default",
+ "weight": 2
}
- ],
- "script": "transform.js"
- },
- "local_fields": [
- {
- "key": "mapping",
- "type": "mapping",
- "tokens": "brackets",
- "location": "required"
- }
- ],
- "selected_fields": ["script"],
- "on_error": "default",
- "weight": 2
- }
- ]
- }
-}
+ ]
+ }
+}
\ No newline at end of file
diff --git a/mcp/mantle/retrieve_customers/mesa.json b/mcp/mantle/retrieve_customers/mesa.json
index 425f5417..ba5f6453 100644
--- a/mcp/mantle/retrieve_customers/mesa.json
+++ b/mcp/mantle/retrieve_customers/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -33,7 +33,8 @@
"local_fields": [],
"selected_fields": [],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -47,7 +48,7 @@
"key": "mantle",
"operation_id": "get__customers",
"metadata": {
- "api_endpoint": "get \/customers",
+ "api_endpoint": "get /customers",
"query": {
"take": "250",
"sort": "createdAt",
diff --git a/mcp/mantle/tag_customer/mesa.json b/mcp/mantle/tag_customer/mesa.json
index 50064948..3aef835a 100644
--- a/mcp/mantle/tag_customer/mesa.json
+++ b/mcp/mantle/tag_customer/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -46,7 +46,8 @@
"body.parameters[].type"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -60,7 +61,7 @@
"key": "mantle",
"operation_id": "post__customers__id__addtags",
"metadata": {
- "api_endpoint": "post \/customers\/{id}\/addTags",
+ "api_endpoint": "post /customers/{id}/addTags",
"path": {
"id": "{{skill.customer_id}}"
},
diff --git a/mcp/send_google_calendar_invite/mesa.json b/mcp/send_google_calendar_invite/mesa.json
index 452ef8f2..0e4a1277 100644
--- a/mcp/send_google_calendar_invite/mesa.json
+++ b/mcp/send_google_calendar_invite/mesa.json
@@ -9,14 +9,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -49,7 +49,8 @@
"local_fields": [],
"selected_fields": [],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -92,7 +93,7 @@
"key": "googlecalendar",
"operation_id": "calendar.events.insert",
"metadata": {
- "api_endpoint": "post \/calendars\/{calendarId}\/events",
+ "api_endpoint": "post /calendars/{calendarId}/events",
"event_default_duration": "{{ template | label: 'What''s the default time set for an event?', description: 'How long the event should last (in minutes). This is only used if no end time is provided.', default: 30, type: 'number', tokens: false }}",
"body": {
"summary": "{{skill.Title}}",
diff --git a/mcp/send_slack_message/mesa.json b/mcp/send_slack_message/mesa.json
index 162c3aa2..dda3577f 100644
--- a/mcp/send_slack_message/mesa.json
+++ b/mcp/send_slack_message/mesa.json
@@ -9,14 +9,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -37,7 +37,8 @@
"body.parameters[].required"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
diff --git a/mcp/send_three_day_weather_forecast/mesa.json b/mcp/send_three_day_weather_forecast/mesa.json
index dc434a9d..a22927cc 100644
--- a/mcp/send_three_day_weather_forecast/mesa.json
+++ b/mcp/send_three_day_weather_forecast/mesa.json
@@ -9,19 +9,19 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
"key": "Location",
- "description": "A US Zipcode, UK Postal Code, Canada Postal Code, IP Address, Latitude\/Longitude (decimal degree) or a city name.",
+ "description": "A US Zipcode, UK Postal Code, Canada Postal Code, IP Address, Latitude/Longitude (decimal degree) or a city name.",
"type": "string",
"required": true
}
@@ -31,7 +31,8 @@
"local_fields": [],
"selected_fields": [],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -45,7 +46,7 @@
"key": "weather",
"operation_id": "forecast-weather",
"metadata": {
- "api_endpoint": "get \/forecast.json",
+ "api_endpoint": "get /forecast.json",
"query": {
"q": "{{skill.Location}}",
"days": "3"
diff --git a/mcp/shopify/create_product/mesa.json b/mcp/shopify/create_product/mesa.json
index 80c0c366..fdd6d6ea 100644
--- a/mcp/shopify/create_product/mesa.json
+++ b/mcp/shopify/create_product/mesa.json
@@ -9,7 +9,7 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
@@ -57,7 +57,8 @@
"body.parameters[].required"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -125,4 +126,4 @@
}
]
}
-}
+}
\ No newline at end of file
diff --git a/mcp/shopify/retrieve_customers/mesa.json b/mcp/shopify/retrieve_customers/mesa.json
index 183aaa3a..9a3b555a 100644
--- a/mcp/shopify/retrieve_customers/mesa.json
+++ b/mcp/shopify/retrieve_customers/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -45,7 +45,8 @@
"body.parameters[].type"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -59,7 +60,7 @@
"key": "shopify",
"operation_id": "get_customers",
"metadata": {
- "api_endpoint": "get admin\/customers.json",
+ "api_endpoint": "get admin/customers.json",
"query": {
"limit": "250",
"created_at_min": "{{skill.start_date}}",
diff --git a/mcp/shopify/retrieve_orders/mesa.json b/mcp/shopify/retrieve_orders/mesa.json
index 267e94c3..20ffa400 100644
--- a/mcp/shopify/retrieve_orders/mesa.json
+++ b/mcp/shopify/retrieve_orders/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -45,7 +45,8 @@
"body.parameters[].type"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -59,7 +60,7 @@
"key": "shopify",
"operation_id": "get_orders",
"metadata": {
- "api_endpoint": "get admin\/orders.json",
+ "api_endpoint": "get admin/orders.json",
"query": {
"limit": "250",
"status": "any",
diff --git a/mcp/shopify_order_tagging_with_approval/mesa.json b/mcp/shopify_order_tagging_with_approval/mesa.json
index e5fb3d8f..242fe811 100644
--- a/mcp/shopify_order_tagging_with_approval/mesa.json
+++ b/mcp/shopify_order_tagging_with_approval/mesa.json
@@ -9,14 +9,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "MCP Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -37,7 +37,8 @@
"local_fields": [],
"selected_fields": [],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -51,7 +52,7 @@
"key": "shopify",
"operation_id": "get_orders_order_id",
"metadata": {
- "api_endpoint": "get admin\/orders\/{{order_id}}.json",
+ "api_endpoint": "get admin/orders/{{order_id}}.json",
"order_id": "{{skill.order_id}}"
},
"local_fields": [],
@@ -87,7 +88,7 @@
"key": "shopify_1",
"operation_id": "post_mesa_orders_order_id_tag",
"metadata": {
- "api_endpoint": "post mesa\/orders\/{{order_id}}\/tag.json",
+ "api_endpoint": "post mesa/orders/{{order_id}}/tag.json",
"order_id": "{{shopify.id}}",
"body": {
"tag": "{{skill.tag}}"
diff --git a/mcp/shopifypartners/retrieve_installs/mesa.json b/mcp/shopifypartners/retrieve_installs/mesa.json
index f192e725..263d20bb 100644
--- a/mcp/shopifypartners/retrieve_installs/mesa.json
+++ b/mcp/shopifypartners/retrieve_installs/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -46,7 +46,8 @@
"body.parameters[].type"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -60,7 +61,7 @@
"key": "shopify-partner",
"operation_id": "list_relationship_installed",
"metadata": {
- "api_endpoint": "get \/mesa\/app_events\/{appId}\/RELATIONSHIP_INSTALLED",
+ "api_endpoint": "get /mesa/app_events/{appId}/RELATIONSHIP_INSTALLED",
"query": {
"appId": "{{template | title: 'Enter your app ID'}}",
"first": "100",
diff --git a/mcp/shopifypartners/retrieve_subscription_activations/mesa.json b/mcp/shopifypartners/retrieve_subscription_activations/mesa.json
index 42d7cabb..72e70b94 100644
--- a/mcp/shopifypartners/retrieve_subscription_activations/mesa.json
+++ b/mcp/shopifypartners/retrieve_subscription_activations/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -46,7 +46,8 @@
"body.parameters[].type"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -60,7 +61,7 @@
"key": "shopify-partner_1",
"operation_id": "list_subscription_charge_activated",
"metadata": {
- "api_endpoint": "get \/mesa\/app_events\/{appId}\/SUBSCRIPTION_CHARGE_ACTIVATED",
+ "api_endpoint": "get /mesa/app_events/{appId}/SUBSCRIPTION_CHARGE_ACTIVATED",
"query": {
"appId": "{{template | title: 'Enter your app ID'}}",
"occurredAtMin": "{{skill.start_date}}",
diff --git a/mcp/shopifypartners/retrieve_uninstalls/mesa.json b/mcp/shopifypartners/retrieve_uninstalls/mesa.json
index 8df8b0f4..53946860 100644
--- a/mcp/shopifypartners/retrieve_uninstalls/mesa.json
+++ b/mcp/shopifypartners/retrieve_uninstalls/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -46,7 +46,8 @@
"body.parameters[].type"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -60,7 +61,7 @@
"key": "shopify-partner_1",
"operation_id": "list_relationship_uninstalled",
"metadata": {
- "api_endpoint": "get \/mesa\/app_events\/{appId}\/RELATIONSHIP_UNINSTALLED",
+ "api_endpoint": "get /mesa/app_events/{appId}/RELATIONSHIP_UNINSTALLED",
"query": {
"appId": "{{template | title: 'Enter your app ID'}}",
"first": "100",
diff --git a/mcp/shopifypartners/retrieve_usage_charges/mesa.json b/mcp/shopifypartners/retrieve_usage_charges/mesa.json
index 4c25e38d..5b78cbeb 100644
--- a/mcp/shopifypartners/retrieve_usage_charges/mesa.json
+++ b/mcp/shopifypartners/retrieve_usage_charges/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -52,7 +52,8 @@
"body.parameters[].type"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -66,7 +67,7 @@
"key": "shopify-partner",
"operation_id": "get_app_usage_sale",
"metadata": {
- "api_endpoint": "get \/mesa\/transactions\/app_usage_sale",
+ "api_endpoint": "get /mesa/transactions/app_usage_sale",
"query": {
"createdAtMin": "{{skill.start_date}}",
"createdAtMax": "{{skill.end_date}}",
diff --git a/mcp/slack/send/mesa.json b/mcp/slack/send/mesa.json
index 1067cbc1..fa038ec9 100644
--- a/mcp/slack/send/mesa.json
+++ b/mcp/slack/send/mesa.json
@@ -11,14 +11,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -39,7 +39,8 @@
"body.parameters[].required"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
diff --git a/mcp/tag_shopify_orders/mesa.json b/mcp/tag_shopify_orders/mesa.json
index 2778289c..33d48b8a 100644
--- a/mcp/tag_shopify_orders/mesa.json
+++ b/mcp/tag_shopify_orders/mesa.json
@@ -9,14 +9,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "MCP Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -45,7 +45,8 @@
"body.parameters[].required"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -59,7 +60,7 @@
"key": "shopify",
"operation_id": "get_orders_order_id",
"metadata": {
- "api_endpoint": "get admin\/orders\/{{order_id}}.json",
+ "api_endpoint": "get admin/orders/{{order_id}}.json",
"order_id": "{{skill.order_id}}"
},
"local_fields": [],
@@ -79,7 +80,7 @@
"key": "shopify_1",
"operation_id": "post_mesa_orders_order_id_tag",
"metadata": {
- "api_endpoint": "post mesa\/orders\/{{order_id}}\/tag.json",
+ "api_endpoint": "post mesa/orders/{{order_id}}/tag.json",
"order_id": "{{shopify.id}}",
"body": {
"tag": "{{skill.tag}}"
diff --git a/mcp/track_package/mesa.json b/mcp/track_package/mesa.json
index 89ed41e1..6d4a8051 100644
--- a/mcp/track_package/mesa.json
+++ b/mcp/track_package/mesa.json
@@ -9,14 +9,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -31,7 +31,8 @@
"local_fields": [],
"selected_fields": [],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -45,7 +46,7 @@
"key": "package_tracking",
"operation_id": "createTracking",
"metadata": {
- "api_endpoint": "post \/v4\/trackings\/create",
+ "api_endpoint": "post /v4/trackings/create",
"body": {
"tracking_number": "{{skill[\"Tracking number\"]}}"
}
diff --git a/mcp/wordpress/get_blog_posts/mesa.json b/mcp/wordpress/get_blog_posts/mesa.json
index 6d15b7ac..bfbf5a6e 100644
--- a/mcp/wordpress/get_blog_posts/mesa.json
+++ b/mcp/wordpress/get_blog_posts/mesa.json
@@ -9,14 +9,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -68,7 +68,8 @@
"body.parameters[].required"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -82,7 +83,7 @@
"key": "wordpress",
"operation_id": "posts-list",
"metadata": {
- "api_endpoint": "get \/wp\/v2\/posts",
+ "api_endpoint": "get /wp/v2/posts",
"query": {
"limit": "1000",
"search": "{{skill.search}}",
diff --git a/mcp/zendesk/get_support_tickets/mesa.json b/mcp/zendesk/get_support_tickets/mesa.json
index 83e0ab86..cc0a224f 100644
--- a/mcp/zendesk/get_support_tickets/mesa.json
+++ b/mcp/zendesk/get_support_tickets/mesa.json
@@ -9,14 +9,14 @@
{
"schema": 4,
"trigger_type": "input",
- "type": "skill",
+ "type": "ai",
"entity": "skill",
"action": "skill",
"name": "Skill",
"key": "skill",
"operation_id": "post-skill",
"metadata": {
- "api_endpoint": "post \/skill",
+ "api_endpoint": "post /skill",
"body": {
"parameters": [
{
@@ -60,7 +60,8 @@
"body.parameters[].required"
],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
}
],
"outputs": [
@@ -74,7 +75,7 @@
"key": "zendesk",
"operation_id": "ListTickets",
"metadata": {
- "api_endpoint": "get \/api\/v2\/tickets",
+ "api_endpoint": "get /api/v2/tickets",
"query": {
"created_at_min": "{{skill.start_date}}",
"created_at_max": "{{skill.end_date}}",
@@ -130,7 +131,7 @@
"key": "zendesk_1",
"operation_id": "ListTicketComments",
"metadata": {
- "api_endpoint": "get \/api\/v2\/tickets\/{ticket_id}\/comments",
+ "api_endpoint": "get /api/v2/tickets/{ticket_id}/comments",
"trigger_parent_key": "loop",
"path": {
"ticket_id": "{{loop.id}}"
diff --git a/recall/transcript/meeting_notes_to_google_doc/mesa.json b/recall/transcript/meeting_notes_to_google_doc/mesa.json
index 8a3936c8..bfb7cfb0 100644
--- a/recall/transcript/meeting_notes_to_google_doc/mesa.json
+++ b/recall/transcript/meeting_notes_to_google_doc/mesa.json
@@ -1,96 +1,96 @@
{
- "key": "recall/transcript/meeting_notes_to_google_doc",
- "name": "Convert Meeting Audio to Text and Deliver Notes to Google Docs",
- "version": "1.0.0",
- "enabled": false,
- "setup": true,
- "config": {
- "inputs": [
- {
- "schema": 4,
- "trigger_type": "input",
- "type": "recall",
- "entity": "webhook",
- "action": "transcript_ready",
- "name": "Transcript Ready",
- "key": "recall",
- "operation_id": "recall-webhook-transcript-done",
- "metadata": {
- "api_endpoint": "post transcript.done",
- "host": "{{ template | label: 'Install the webhook URL', description: '' }}"
- },
- "local_fields": [],
- "selected_fields": ["host"],
- "on_error": "default",
- "weight": 0
- }
- ],
- "outputs": [
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "ai",
- "entity": "prompt",
- "action": "create",
- "name": "Create Descriptive Document Title",
- "version": "v2",
- "key": "ai_2",
- "operation_id": "post-prompt",
- "metadata": {
- "api_endpoint": "post /prompt",
- "body": {
- "role": "user",
- "content": "Review the meeting transcript and generate a concise, descriptive title for the summary document. The title should capture the main topic, decision, or outcome of the meeting so it\u2019s easy to understand and locate later in Google Drive: {{recall.transcript}}"
- }
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 0
- },
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "ai",
- "entity": "prompt",
- "action": "create",
- "name": "Summarize Meeting Transcription",
- "version": "v2",
- "key": "ai",
- "operation_id": "post-prompt",
- "metadata": {
- "api_endpoint": "post /prompt",
- "body": {
- "role": "user",
- "content": "You are given a transcript in this format:\n[hh:mm:ss] Speaker Name: text\nPlease provide the following:\n1. A concise summary of the conversation (2\u20133 paragraphs). \n2. A clear list of any action items, decisions, or follow-ups mentioned. \n3. If there are no action items, state \u201cNo action items found.\u201d\nTranscript: {{recall.transcript}}"
- }
- },
- "local_fields": [],
- "selected_fields": ["body", "body.role", "body.content"],
- "on_error": "default",
- "weight": 1
- },
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "googledocs",
- "entity": "document",
- "action": "create",
- "name": "Create Document",
- "key": "googledocs",
- "operation_id": "documents-create",
- "metadata": {
- "api_endpoint": "post /drive/v3/files",
- "body": {
- "name": "{{ai_2.response}}",
- "text": "{{ai.response}}"
- }
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 2
- }
- ]
- }
+ "key": "recall/transcript/meeting_notes_to_google_doc",
+ "name": "Convert Meeting Audio to Text and Deliver Notes to Google Docs",
+ "version": "1.0.0",
+ "enabled": false,
+ "setup": true,
+ "config": {
+ "inputs": [
+ {
+ "schema": 4,
+ "trigger_type": "input",
+ "type": "recall",
+ "entity": "webhook",
+ "action": "transcript_ready",
+ "name": "Transcript Ready",
+ "key": "recall",
+ "operation_id": "recall-webhook-transcript-done",
+ "metadata": {
+ "api_endpoint": "post transcript.done",
+ "host": "{{ template | label: 'Install the webhook URL', description: '' }}"
+ },
+ "local_fields": [],
+ "selected_fields": ["host"],
+ "on_error": "default",
+ "weight": 0
+ }
+ ],
+ "outputs": [
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "ai",
+ "entity": "prompt",
+ "action": "create",
+ "name": "Create Descriptive Document Title",
+ "version": "v3",
+ "key": "ai_2",
+ "operation_id": "post-prompt",
+ "metadata": {
+ "api_endpoint": "post /prompt",
+ "body": {
+ "role": "user",
+ "content": "Review the meeting transcript and generate a concise, descriptive title for the summary document. The title should capture the main topic, decision, or outcome of the meeting so it\u2019s easy to understand and locate later in Google Drive: {{recall.transcript}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "ai",
+ "entity": "prompt",
+ "action": "create",
+ "name": "Summarize Meeting Transcription",
+ "version": "v3",
+ "key": "ai",
+ "operation_id": "post-prompt",
+ "metadata": {
+ "api_endpoint": "post /prompt",
+ "body": {
+ "role": "user",
+ "content": "You are given a transcript in this format:\n[hh:mm:ss] Speaker Name: text\nPlease provide the following:\n1. A concise summary of the conversation (2\u20133 paragraphs). \n2. A clear list of any action items, decisions, or follow-ups mentioned. \n3. If there are no action items, state \u201cNo action items found.\u201d\nTranscript: {{recall.transcript}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["body", "body.role", "body.content"],
+ "on_error": "default",
+ "weight": 1
+ },
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "googledocs",
+ "entity": "document",
+ "action": "create",
+ "name": "Create Document",
+ "key": "googledocs",
+ "operation_id": "documents-create",
+ "metadata": {
+ "api_endpoint": "post /drive/v3/files",
+ "body": {
+ "name": "{{ai_2.response}}",
+ "text": "{{ai.response}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 2
+ }
+ ]
+ }
}
diff --git a/recall/transcript/send_meeting_notes_to_slack/mesa.json b/recall/transcript/send_meeting_notes_to_slack/mesa.json
index 3a65b77e..c3760fb8 100644
--- a/recall/transcript/send_meeting_notes_to_slack/mesa.json
+++ b/recall/transcript/send_meeting_notes_to_slack/mesa.json
@@ -1,74 +1,74 @@
{
- "key": "recall/transcript/send_meeting_notes_to_slack",
- "name": "Transcribe Meeting and Send the Notes to Slack",
- "version": "1.0.0",
- "enabled": false,
- "setup": true,
- "config": {
- "inputs": [
- {
- "schema": 4,
- "trigger_type": "input",
- "type": "recall",
- "entity": "webhook",
- "action": "transcript_ready",
- "name": "Transcript Ready",
- "key": "recall",
- "operation_id": "recall-webhook-transcript-done",
- "metadata": {
- "api_endpoint": "post transcript.done"
- },
- "local_fields": [],
- "selected_fields": ["host"],
- "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 given a transcript in this format:\n[hh:mm:ss] Speaker Name: text\nPlease provide the following:\n1. A concise summary of the conversation (2\u20133 paragraphs). \n2. A clear list of any action items, decisions, or follow-ups mentioned. \n3. If there are no action items, state \u201cNo action items found.\u201d\nTranscript: {{recall.transcript}}"
- }
- },
- "local_fields": [],
- "selected_fields": ["body", "body.role", "body.content"],
- "on_error": "default",
- "weight": 0
- },
- {
- "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": "{{ai.response}}"
- }
- },
- "local_fields": [],
- "selected_fields": ["body", "body.markdown_text"],
- "on_error": "default",
- "weight": 1
- }
- ]
- }
+ "key": "recall/transcript/send_meeting_notes_to_slack",
+ "name": "Transcribe Meeting and Send the Notes to Slack",
+ "version": "1.0.0",
+ "enabled": false,
+ "setup": true,
+ "config": {
+ "inputs": [
+ {
+ "schema": 4,
+ "trigger_type": "input",
+ "type": "recall",
+ "entity": "webhook",
+ "action": "transcript_ready",
+ "name": "Transcript Ready",
+ "key": "recall",
+ "operation_id": "recall-webhook-transcript-done",
+ "metadata": {
+ "api_endpoint": "post transcript.done"
+ },
+ "local_fields": [],
+ "selected_fields": ["host"],
+ "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 given a transcript in this format:\n[hh:mm:ss] Speaker Name: text\nPlease provide the following:\n1. A concise summary of the conversation (2\u20133 paragraphs). \n2. A clear list of any action items, decisions, or follow-ups mentioned. \n3. If there are no action items, state \u201cNo action items found.\u201d\nTranscript: {{recall.transcript}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["body", "body.role", "body.content"],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "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": "{{ai.response}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["body", "body.markdown_text"],
+ "on_error": "default",
+ "weight": 1
+ }
+ ]
+ }
}
diff --git a/rss/feed/new_rss_items_to_slack/mesa.json b/rss/feed/new_rss_items_to_slack/mesa.json
index fa4b282a..57d28d43 100644
--- a/rss/feed/new_rss_items_to_slack/mesa.json
+++ b/rss/feed/new_rss_items_to_slack/mesa.json
@@ -33,14 +33,14 @@
{
"schema": 4,
"trigger_type": "output",
- "type": "ask",
- "entity": "ask",
- "action": "ask",
+ "type": "ai",
+ "entity": "agent",
+ "action": "create",
"name": "Clean Up Feed Text",
"key": "ask",
- "operation_id": "post-ask",
+ "operation_id": "post-agent",
"metadata": {
- "api_endpoint": "post /ask",
+ "api_endpoint": "post /agent",
"body": {
"content": "Remove the HTML and ASCII codes: {{rss.description}}",
"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."
@@ -49,7 +49,8 @@
"local_fields": [],
"selected_fields": [],
"on_error": "default",
- "weight": 0
+ "weight": 0,
+ "version": "v3"
},
{
"schema": 4,
@@ -75,4 +76,4 @@
}
]
}
-}
+}
\ No newline at end of file
diff --git a/schedule/daily_reddit_scraper/mesa.json b/schedule/daily_reddit_scraper/mesa.json
index 6edc6498..2a4e2f33 100644
--- a/schedule/daily_reddit_scraper/mesa.json
+++ b/schedule/daily_reddit_scraper/mesa.json
@@ -1,189 +1,185 @@
{
- "key": "schedule/daily_reddit_scraper",
- "name": "Daily Reddit Scraper",
- "version": "1.0.0",
- "enabled": false,
- "setup": false,
- "config": {
- "inputs": [
- {
- "schema": 2,
- "trigger_type": "input",
- "type": "schedule",
- "name": "Schedule",
- "key": "schedule",
- "operation_id": "schedule",
- "metadata": {
- "enqueue_type": "schedule",
- "schedule": "@daily:0 0 * * *",
- "datetime": null
- },
- "local_fields": [],
- "selected_fields": [
- "enqueue_type",
- "schedule",
- "next_sync_date_time"
- ],
- "on_error": "default",
- "weight": 0
- }
+ "key": "schedule/daily_reddit_scraper",
+ "name": "Daily Reddit Scraper",
+ "version": "1.0.0",
+ "enabled": false,
+ "setup": false,
+ "config": {
+ "inputs": [
+ {
+ "schema": 2,
+ "trigger_type": "input",
+ "type": "schedule",
+ "name": "Schedule",
+ "key": "schedule",
+ "operation_id": "schedule",
+ "metadata": {
+ "enqueue_type": "schedule",
+ "schedule": "@daily:0 0 * * *",
+ "datetime": null
+ },
+ "local_fields": [],
+ "selected_fields": ["enqueue_type", "schedule", "next_sync_date_time"],
+ "on_error": "default",
+ "weight": 0
+ }
+ ],
+ "outputs": [
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "reddit",
+ "entity": "post",
+ "action": "retrieve",
+ "name": "Get List of Subreddit's Posts",
+ "key": "reddit",
+ "operation_id": "discoverPostsBySubreddit",
+ "metadata": {
+ "api_endpoint": "post /posts/by-subreddit",
+ "body": {
+ "sort_by": "New"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["body", "body.url", "body.sort_by"],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "schema": 5.1,
+ "trigger_type": "output",
+ "type": "loop",
+ "entity": "loop",
+ "name": "Loop",
+ "version": "v3",
+ "key": "loop",
+ "operation_id": "loop_loop",
+ "metadata": {
+ "key": "{{reddit}}",
+ "filter": {
+ "comparison": "equals",
+ "additional": [
+ {
+ "operator": "and",
+ "comparison": "equals"
+ }
+ ]
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [
+ "key",
+ "filter",
+ "filter.a",
+ "filter.comparison",
+ "filter.b",
+ "filter.additional"
],
- "outputs": [
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "reddit",
- "entity": "post",
- "action": "retrieve",
- "name": "Get List of Subreddit's Posts",
- "key": "reddit",
- "operation_id": "discoverPostsBySubreddit",
- "metadata": {
- "api_endpoint": "post /posts/by-subreddit",
- "body": {
- "sort_by": "New"
- }
- },
- "local_fields": [],
- "selected_fields": ["body", "body.url", "body.sort_by"],
- "on_error": "default",
- "weight": 0
- },
- {
- "schema": 5.1,
- "trigger_type": "output",
- "type": "loop",
- "entity": "loop",
- "name": "Loop",
- "version": "v3",
- "key": "loop",
- "operation_id": "loop_loop",
- "metadata": {
- "key": "{{reddit}}",
- "filter": {
- "comparison": "equals",
- "additional": [
- {
- "operator": "and",
- "comparison": "equals"
- }
- ]
- }
- },
- "local_fields": [],
- "selected_fields": [
- "key",
- "filter",
- "filter.a",
- "filter.comparison",
- "filter.b",
- "filter.additional"
- ],
- "on_error": "default",
- "weight": 1
- },
- {
- "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",
- "trigger_parent_key": "loop",
- "body": {
- "role": "user",
- "content": "You are a strict JSON-only classifier that evaluates whether a Reddit post is relevant to [INSERT YOUR DOMAIN / PRODUCT / AREA] and how it might be relevant.\n\nSTATIC_KEYWORDS (do not modify):\n[\"{{insert keywords here}}\"]\n\nINPUT_POST:\n- title: \"{{loop.title}}\"\n- description: \"{{loop.description}}\"\n- url: \"{{loop.url}}\"\n\nTASKS:\n1. Decide if the post is relevant to [YOUR DOMAIN / PRODUCT / AREA] by checking semantic meaning and overlap with STATIC_KEYWORDS.\n2. Decide if it \u201cmakes sense\u201d for [YOUR COMPANY / TEAM] to engage (i.e., there is a plausible value prop or conversation fit).\n3. Explain briefly why (1\u20132 sentences).\n4. Suggest concrete integration or use-case ideas, if relevant (e.g., \u201ctrigger on X \u2192 do Y\u201d, \u201csync data between A and B\u201d).\n5. Return ONLY the JSON object below\u2014no extra text.\n\nOUTPUT JSON SCHEMA (return EXACTLY this shape and key order):\n{\n \"url\": string,\n \"relevant\": boolean,\n \"makes_sense\": boolean,\n \"explanation\": string,\n \"matched_keywords\": string[], \n \"integration_ideas\": string[],\n \"confidence\": number\n}\n\nRULES:\n-\"matched_keywords\" must be a subset of STATIC_KEYWORDS actually supported by the post\u2019s content (title/description).\n-\"confidence\" is a float between 0 and 1 reflecting certainty in \"relevant\".\n-Keep \"explanation\" to <= 300 characters.\n-If not relevant, return [] for \"integration_ideas\".\n-ABSOLUTELY DO NOT return markdown, code fences, or any prose. The output must be ONLY a raw JSON object."
- }
- },
- "local_fields": [],
- "selected_fields": ["body", "body.role", "body.content"],
- "on_error": "default",
- "weight": 2
- },
- {
- "schema": 2,
- "trigger_type": "output",
- "type": "custom",
- "name": "Remove Markdown From the AI Payload",
- "key": "custom",
- "operation_id": "custom",
- "metadata": {
- "trigger_parent_key": "loop",
- "script": "custom.js"
- },
- "local_fields": [],
- "selected_fields": ["script"],
- "on_error": "default",
- "weight": 3
- },
- {
- "schema": 4.1,
- "trigger_type": "output",
- "type": "filter",
- "name": "Filter",
- "key": "filter",
- "operation_id": "filter",
- "metadata": {
- "trigger_parent_key": "loop",
- "a": "{{custom.relevant}}",
- "comparison": "equals",
- "b": "true",
- "additional": [
- {
- "operator": "and",
- "comparison": "equals"
- }
- ]
- },
- "local_fields": [],
- "selected_fields": ["a", "comparison", "b", "additional"],
- "on_error": "default",
- "weight": 4
- },
- {
- "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",
- "trigger_parent_key": "loop",
- "body": {
- "markdown_text": "\ud83d\udce3 **Reddit Post Found!**\n\n**URL:** {{loop.url}}\n\n**Explanation:** {{custom.explanation}}\n\n**Description:** {{ loop.description }}\n{% if custom.matched_keywords and custom.matched_keywords.size > 0 %}\n\n**Keywords:** \n{% for keyword in custom.matched_keywords %}\n- {{ keyword }}\n{% endfor %}\n{% endif %}\n\n{% if custom.integration_ideas and custom.integration_ideas.size > 0 %}\n**Integration Ideas:** \n{% for idea in custom.integration_ideas %}\n- {{ idea }}\n{% endfor %}\n{% endif %}\n"
- }
- },
- "local_fields": [],
- "selected_fields": ["body", "body.markdown_text"],
- "on_error": "default",
- "weight": 5
- },
+ "on_error": "default",
+ "weight": 1
+ },
+ {
+ "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",
+ "trigger_parent_key": "loop",
+ "body": {
+ "role": "user",
+ "content": "You are a strict JSON-only classifier that evaluates whether a Reddit post is relevant to [INSERT YOUR DOMAIN / PRODUCT / AREA] and how it might be relevant.\n\nSTATIC_KEYWORDS (do not modify):\n[\"{{insert keywords here}}\"]\n\nINPUT_POST:\n- title: \"{{loop.title}}\"\n- description: \"{{loop.description}}\"\n- url: \"{{loop.url}}\"\n\nTASKS:\n1. Decide if the post is relevant to [YOUR DOMAIN / PRODUCT / AREA] by checking semantic meaning and overlap with STATIC_KEYWORDS.\n2. Decide if it \u201cmakes sense\u201d for [YOUR COMPANY / TEAM] to engage (i.e., there is a plausible value prop or conversation fit).\n3. Explain briefly why (1\u20132 sentences).\n4. Suggest concrete integration or use-case ideas, if relevant (e.g., \u201ctrigger on X \u2192 do Y\u201d, \u201csync data between A and B\u201d).\n5. Return ONLY the JSON object below\u2014no extra text.\n\nOUTPUT JSON SCHEMA (return EXACTLY this shape and key order):\n{\n \"url\": string,\n \"relevant\": boolean,\n \"makes_sense\": boolean,\n \"explanation\": string,\n \"matched_keywords\": string[], \n \"integration_ideas\": string[],\n \"confidence\": number\n}\n\nRULES:\n-\"matched_keywords\" must be a subset of STATIC_KEYWORDS actually supported by the post\u2019s content (title/description).\n-\"confidence\" is a float between 0 and 1 reflecting certainty in \"relevant\".\n-Keep \"explanation\" to <= 300 characters.\n-If not relevant, return [] for \"integration_ideas\".\n-ABSOLUTELY DO NOT return markdown, code fences, or any prose. The output must be ONLY a raw JSON object."
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["body", "body.role", "body.content"],
+ "on_error": "default",
+ "weight": 2
+ },
+ {
+ "schema": 2,
+ "trigger_type": "output",
+ "type": "custom",
+ "name": "Remove Markdown From the AI Payload",
+ "key": "custom",
+ "operation_id": "custom",
+ "metadata": {
+ "trigger_parent_key": "loop",
+ "script": "custom.js"
+ },
+ "local_fields": [],
+ "selected_fields": ["script"],
+ "on_error": "default",
+ "weight": 3
+ },
+ {
+ "schema": 4.1,
+ "trigger_type": "output",
+ "type": "filter",
+ "name": "Filter",
+ "key": "filter",
+ "operation_id": "filter",
+ "metadata": {
+ "trigger_parent_key": "loop",
+ "a": "{{custom.relevant}}",
+ "comparison": "equals",
+ "b": "true",
+ "additional": [
{
- "schema": 5.1,
- "trigger_type": "output",
- "type": "loop",
- "entity": "end",
- "name": "Loop End",
- "version": "v3",
- "key": "loop_1",
- "operation_id": "loop_end",
- "metadata": {
- "trigger_manager_key": "loop",
- "trigger_parent_key": "loop"
- },
- "local_fields": [],
- "on_error": "default",
- "weight": 6
+ "operator": "and",
+ "comparison": "equals"
}
- ]
- }
+ ]
+ },
+ "local_fields": [],
+ "selected_fields": ["a", "comparison", "b", "additional"],
+ "on_error": "default",
+ "weight": 4
+ },
+ {
+ "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",
+ "trigger_parent_key": "loop",
+ "body": {
+ "markdown_text": "\ud83d\udce3 **Reddit Post Found!**\n\n**URL:** {{loop.url}}\n\n**Explanation:** {{custom.explanation}}\n\n**Description:** {{ loop.description }}\n{% if custom.matched_keywords and custom.matched_keywords.size > 0 %}\n\n**Keywords:** \n{% for keyword in custom.matched_keywords %}\n- {{ keyword }}\n{% endfor %}\n{% endif %}\n\n{% if custom.integration_ideas and custom.integration_ideas.size > 0 %}\n**Integration Ideas:** \n{% for idea in custom.integration_ideas %}\n- {{ idea }}\n{% endfor %}\n{% endif %}\n"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["body", "body.markdown_text"],
+ "on_error": "default",
+ "weight": 5
+ },
+ {
+ "schema": 5.1,
+ "trigger_type": "output",
+ "type": "loop",
+ "entity": "end",
+ "name": "Loop End",
+ "version": "v3",
+ "key": "loop_1",
+ "operation_id": "loop_end",
+ "metadata": {
+ "trigger_manager_key": "loop",
+ "trigger_parent_key": "loop"
+ },
+ "local_fields": [],
+ "on_error": "default",
+ "weight": 6
+ }
+ ]
+ }
}
diff --git a/schedule/daily_shopify_order_analysis/mesa.json b/schedule/daily_shopify_order_analysis/mesa.json
index 4f9f9f6c..6faa33ac 100644
--- a/schedule/daily_shopify_order_analysis/mesa.json
+++ b/schedule/daily_shopify_order_analysis/mesa.json
@@ -35,7 +35,7 @@
"key": "shopify_order",
"operation_id": "get_orders",
"metadata": {
- "api_endpoint": "get admin\/orders.json",
+ "api_endpoint": "get admin/orders.json",
"query": {
"status": "any",
"created_at_min": "{{\"now\" | date: \"%Y-%m-%dT%H:%M:%S%z\" | subtract_time: 24, \"hours\" | date: \"%Y-%m-%dT%H:%M:%S%z\"}}",
@@ -58,14 +58,14 @@
"entity": "prompt",
"action": "create",
"name": "Analyze Orders & Generate Daily Store Pulse",
- "version": "v2",
+ "version": "v3",
"key": "ai",
"operation_id": "post-prompt",
"metadata": {
- "api_endpoint": "post \/prompt",
+ "api_endpoint": "post /prompt",
"body": {
"role": "user",
- "content": "You are a senior ecommerce analyst reviewing the last 24 hours of Shopify orders.\n\nYour job is to produce a concise but insightful \u201cDaily Store Pulse\u201d summary for the merchant.\n\nYou will be given raw Shopify orders data. First, compute the same rollup metrics that an analyst would normally calculate in code, then write the summary.\n\nRaw Shopify orders payload:\n{{shopify_order}}\n\nCompute these metrics from the orders:\n\n- orders_total: total number of orders\n- estimated_gross_revenue: sum of current_total_price across all orders (convert to a number; treat missing\/invalid as 0)\n- average_order_value: estimated_gross_revenue \/ orders_total (0 if no orders)\n- orders_over_100: count of orders where current_total_price > 100\n- orders_paid: count where financial_status indicates paid (include \"paid\" and \"partially_paid\")\n- orders_pending: count where financial_status indicates not-yet-paid (include \"pending\" and \"authorized\")\n- orders_fulfilled: count where fulfillment_status is \"fulfilled\" (or fulfillments indicate fulfilled)\n- most_popular_product: determine best-selling product by total quantity across all line_items\n (sum quantities by product title; break ties by revenue if possible)\n\nRules \/ guardrails:\n\n- Ignore cancelled\/voided orders ONLY if a clear cancellation indicator exists.\n- Do not output raw JSON.\n- Do not say \u201cbased on the data provided.\u201d\n- Write like a real ecommerce operator, not an AI assistant.\n- Keep total output under 250 words.\n- Output must be plain text only.\n\n------------------------------------------------------------\nFORMATTING REQUIREMENTS (VERY IMPORTANT)\n------------------------------------------------------------\n\n- Do NOT use markdown symbols like #, ##, ###, or ####\n- Do NOT use bold text or asterisks (**)\n- Do NOT format anything as markdown\n- Use clean spacing and email-friendly plain text\n\nReturn the report EXACTLY in this structure:\n\nDaily Store Pulse\n\nSummary\n[3\u20135 sentence paragraph summarizing performance]\n\nIF orders_total > 0, include:\n\nKey Metrics\n- Total orders: X\n- Estimated gross revenue: $X\n- Average order value: $X\n- High-value orders (>$100): X\n- Fulfillment breakdown:\n - Paid: X\n - Pending: X\n - Fulfilled: X\n\nBest-Selling Product(s)\n- Product Name (X units)\n\nNoteworthy Insights\n[1\u20132 short sentences highlighting patterns or concerns]\n\nPractical Recommendation\n[1 clear, practical action the merchant should take today]\n\n------------------------------------------------------------\n\nIF orders_total = 0, DO NOT analyze performance.\n\nInstead return EXACTLY this structure:\n\nDaily Store Pulse\n\nSummary\nThere were no orders placed in the last 24 hours. This can occur occasionally and should be seen as an opportunity to analyze and adapt strategies.\n\nPossible Reasons\n1. Traffic drop or fewer visitors\n2. Seasonal or day-to-day variation\n3. Marketing or ad activity slowed or paused\n\nActions to Generate Sales\n1. Re-engage past customers with an email or SMS offer\n2. Increase visibility through social or influencer activity\n3. Audit and relaunch high-performing ad campaigns\n\nClose with a short motivating sentence.\nKeep output under 200 words.\n\n"
+ "content": "You are a senior ecommerce analyst reviewing the last 24 hours of Shopify orders.\n\nYour job is to produce a concise but insightful \u201cDaily Store Pulse\u201d summary for the merchant.\n\nYou will be given raw Shopify orders data. First, compute the same rollup metrics that an analyst would normally calculate in code, then write the summary.\n\nRaw Shopify orders payload:\n{{shopify_order}}\n\nCompute these metrics from the orders:\n\n- orders_total: total number of orders\n- estimated_gross_revenue: sum of current_total_price across all orders (convert to a number; treat missing/invalid as 0)\n- average_order_value: estimated_gross_revenue / orders_total (0 if no orders)\n- orders_over_100: count of orders where current_total_price > 100\n- orders_paid: count where financial_status indicates paid (include \"paid\" and \"partially_paid\")\n- orders_pending: count where financial_status indicates not-yet-paid (include \"pending\" and \"authorized\")\n- orders_fulfilled: count where fulfillment_status is \"fulfilled\" (or fulfillments indicate fulfilled)\n- most_popular_product: determine best-selling product by total quantity across all line_items\n (sum quantities by product title; break ties by revenue if possible)\n\nRules / guardrails:\n\n- Ignore cancelled/voided orders ONLY if a clear cancellation indicator exists.\n- Do not output raw JSON.\n- Do not say \u201cbased on the data provided.\u201d\n- Write like a real ecommerce operator, not an AI assistant.\n- Keep total output under 250 words.\n- Output must be plain text only.\n\n------------------------------------------------------------\nFORMATTING REQUIREMENTS (VERY IMPORTANT)\n------------------------------------------------------------\n\n- Do NOT use markdown symbols like #, ##, ###, or ####\n- Do NOT use bold text or asterisks (**)\n- Do NOT format anything as markdown\n- Use clean spacing and email-friendly plain text\n\nReturn the report EXACTLY in this structure:\n\nDaily Store Pulse\n\nSummary\n[3\u20135 sentence paragraph summarizing performance]\n\nIF orders_total > 0, include:\n\nKey Metrics\n- Total orders: X\n- Estimated gross revenue: $X\n- Average order value: $X\n- High-value orders (>$100): X\n- Fulfillment breakdown:\n - Paid: X\n - Pending: X\n - Fulfilled: X\n\nBest-Selling Product(s)\n- Product Name (X units)\n\nNoteworthy Insights\n[1\u20132 short sentences highlighting patterns or concerns]\n\nPractical Recommendation\n[1 clear, practical action the merchant should take today]\n\n------------------------------------------------------------\n\nIF orders_total = 0, DO NOT analyze performance.\n\nInstead return EXACTLY this structure:\n\nDaily Store Pulse\n\nSummary\nThere were no orders placed in the last 24 hours. This can occur occasionally and should be seen as an opportunity to analyze and adapt strategies.\n\nPossible Reasons\n1. Traffic drop or fewer visitors\n2. Seasonal or day-to-day variation\n3. Marketing or ad activity slowed or paused\n\nActions to Generate Sales\n1. Re-engage past customers with an email or SMS offer\n2. Increase visibility through social or influencer activity\n3. Audit and relaunch high-performing ad campaigns\n\nClose with a short motivating sentence.\nKeep output under 200 words.\n\n"
}
},
"local_fields": [],
@@ -80,9 +80,9 @@
"name": "Email Daily Order Analysis",
"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: 'Which email address should receive the daily order analysis?', description: 'You can enter multiple recipients by separating their addresses with commas.' }}",
"subject": "Order Report Card for {{\"now\" | date: \"%Y-%m-%dT%H:%M:%S%z\" | date: \"%B %e, %Y\"}}",
diff --git a/schedule/summarize_closed_gorgias_support_tickets/mesa.json b/schedule/summarize_closed_gorgias_support_tickets/mesa.json
index 6a9cea00..52c68fbf 100644
--- a/schedule/summarize_closed_gorgias_support_tickets/mesa.json
+++ b/schedule/summarize_closed_gorgias_support_tickets/mesa.json
@@ -1,114 +1,112 @@
{
- "key": "schedule/summarize_closed_gorgias_support_tickets",
- "name": "Receive a Weekly Summary of Closed Gorgias Support Tickets",
- "version": "1.0.0",
- "enabled": false,
- "setup": true,
- "config": {
- "inputs": [
- {
- "schema": 2,
- "trigger_type": "input",
- "type": "schedule",
- "name": "Schedule",
- "key": "schedule",
- "operation_id": "schedule",
- "metadata": {
- "schedule": "@weekly:0 0 * * 0",
- "enqueue_type": "schedule"
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 0
- }
- ],
- "outputs": [
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "data",
- "version": "v1",
- "entity": "record",
- "action": "query",
- "name": "Query",
- "key": "data_1",
- "operation_id": "get_database_table",
- "metadata": {
- "api_endpoint": "get \/{database}\/{table}",
- "query": "SELECT * FROM \"Closed Gorgias Support Tickets\" WHERE \"Closed Date\" >= '{{ \"now -1 week\" | date: \"%Y-%m-%d %H:%M\" }}' AND \"Closed Date\" <= '{{ \"now\" | date: \"%Y-%m-%d %H:%M\" }}';",
- "table": "Closed Gorgias Support Tickets",
- "where_clause": {
- "comparison": "equals"
- }
- },
- "local_fields": [],
- "selected_fields": [
- "query"
- ],
- "on_error": "default",
- "weight": 0
- },
- {
- "schema": 2,
- "trigger_type": "output",
- "type": "custom",
- "name": "Custom Code",
- "key": "custom",
- "operation_id": "custom",
- "metadata": {
- "script": "custom.js",
- "description": "Format the messages from support tickets so an external system like AI can understand."
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 1
- },
- {
- "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",
- "temperature": "1",
- "body": {
- "role": "user",
- "content": "Your task is analyze the text from support tickets and identify key trends, customer insights or concerns:\n{{custom.support_ticket_messages_string}}"
- }
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 2
- },
- {
- "schema": 5,
- "trigger_type": "output",
- "type": "email",
- "name": "Send Email",
- "version": "v2",
- "key": "email",
- "operation_id": "\/send-email",
- "metadata": {
- "api_endpoint": "post \/send-email",
- "body": {
- "to": "{{ template | label: 'What is your email address?', tokens: false }}",
- "subject": "Weekly Summary",
- "message": "AI Insights:\n{{ai.response}}"
- }
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 3
- }
- ]
- }
-}
\ No newline at end of file
+ "key": "schedule/summarize_closed_gorgias_support_tickets",
+ "name": "Receive a Weekly Summary of Closed Gorgias Support Tickets",
+ "version": "1.0.0",
+ "enabled": false,
+ "setup": true,
+ "config": {
+ "inputs": [
+ {
+ "schema": 2,
+ "trigger_type": "input",
+ "type": "schedule",
+ "name": "Schedule",
+ "key": "schedule",
+ "operation_id": "schedule",
+ "metadata": {
+ "schedule": "@weekly:0 0 * * 0",
+ "enqueue_type": "schedule"
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0
+ }
+ ],
+ "outputs": [
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "data",
+ "version": "v1",
+ "entity": "record",
+ "action": "query",
+ "name": "Query",
+ "key": "data_1",
+ "operation_id": "get_database_table",
+ "metadata": {
+ "api_endpoint": "get /{database}/{table}",
+ "query": "SELECT * FROM \"Closed Gorgias Support Tickets\" WHERE \"Closed Date\" >= '{{ \"now -1 week\" | date: \"%Y-%m-%d %H:%M\" }}' AND \"Closed Date\" <= '{{ \"now\" | date: \"%Y-%m-%d %H:%M\" }}';",
+ "table": "Closed Gorgias Support Tickets",
+ "where_clause": {
+ "comparison": "equals"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["query"],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "schema": 2,
+ "trigger_type": "output",
+ "type": "custom",
+ "name": "Custom Code",
+ "key": "custom",
+ "operation_id": "custom",
+ "metadata": {
+ "script": "custom.js",
+ "description": "Format the messages from support tickets so an external system like AI can understand."
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 1
+ },
+ {
+ "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",
+ "temperature": "1",
+ "body": {
+ "role": "user",
+ "content": "Your task is analyze the text from support tickets and identify key trends, customer insights or concerns:\n{{custom.support_ticket_messages_string}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 2
+ },
+ {
+ "schema": 5,
+ "trigger_type": "output",
+ "type": "email",
+ "name": "Send Email",
+ "version": "v2",
+ "key": "email",
+ "operation_id": "/send-email",
+ "metadata": {
+ "api_endpoint": "post /send-email",
+ "body": {
+ "to": "{{ template | label: 'What is your email address?', tokens: false }}",
+ "subject": "Weekly Summary",
+ "message": "AI Insights:\n{{ai.response}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 3
+ }
+ ]
+ }
+}
diff --git a/schedule/update_product_price_if_competition_price_is_lower/mesa.json b/schedule/update_product_price_if_competition_price_is_lower/mesa.json
index 65cfe1c4..6a2a2030 100644
--- a/schedule/update_product_price_if_competition_price_is_lower/mesa.json
+++ b/schedule/update_product_price_if_competition_price_is_lower/mesa.json
@@ -1,209 +1,176 @@
{
- "key": "schedule/update_product_price_if_competition_price_is_lower",
- "name": "Update the Product Price when a Competitor's Price Drops Below Yours",
- "version": "1.0.0",
- "enabled": false,
- "setup": true,
- "config": {
- "inputs": [
+ "key": "schedule/update_product_price_if_competition_price_is_lower",
+ "name": "Update the Product Price when a Competitor's Price Drops Below Yours",
+ "version": "1.0.0",
+ "enabled": false,
+ "setup": true,
+ "config": {
+ "inputs": [
+ {
+ "schema": 2,
+ "trigger_type": "input",
+ "type": "schedule",
+ "name": "Schedule",
+ "key": "schedule",
+ "operation_id": "schedule",
+ "metadata": {
+ "schedule": "@hourly:0 * * * *",
+ "enqueue_type": "schedule"
+ },
+ "local_fields": [],
+ "selected_fields": ["enqueue_type", "schedule", "next_sync_date_time"],
+ "on_error": "default",
+ "weight": 0
+ }
+ ],
+ "outputs": [
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "scraper",
+ "entity": "scrape",
+ "action": "create",
+ "name": "Scrape Webpage",
+ "key": "scraper",
+ "operation_id": "scrape",
+ "metadata": {
+ "api_endpoint": "get /markdown",
+ "query": {
+ "url": "{{ template | label: 'Enter the product page URL that MESA will be comparing your product price against.', description: 'Copy and paste the URL exactly.', placeholder: 'https://www.competitor.com/product/example-product-name' }}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["query", "query.url"],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "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",
+ "temperature": "1",
+ "body": {
+ "role": "user",
+ "content": "{{ template | label: 'This AI prompt will check if your competitor''s price is currently on sale.', description: 'While changes aren''t required, you can update the prompt if you''d like.', default: 'Determine if the product is on sale from this markdown: {{scraper.markdown}}. Respond with \"yes\" or \"no\". Do not use a period.' }}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["temperature", "body", "body.role", "body.content"],
+ "on_error": "default",
+ "weight": 1
+ },
+ {
+ "schema": 4.1,
+ "trigger_type": "output",
+ "type": "filter",
+ "name": "Filter",
+ "key": "filter",
+ "operation_id": "filter",
+ "metadata": {
+ "a": "{{ai.response}}",
+ "comparison": "equals",
+ "b": "yes",
+ "additional": [
{
- "schema": 2,
- "trigger_type": "input",
- "type": "schedule",
- "name": "Schedule",
- "key": "schedule",
- "operation_id": "schedule",
- "metadata": {
- "schedule": "@hourly:0 * * * *",
- "enqueue_type": "schedule"
- },
- "local_fields": [],
- "selected_fields": [
- "enqueue_type",
- "schedule",
- "next_sync_date_time"
- ],
- "on_error": "default",
- "weight": 0
+ "operator": "and",
+ "comparison": "equals"
}
- ],
- "outputs": [
+ ]
+ },
+ "local_fields": [],
+ "selected_fields": ["a", "comparison", "b", "additional"],
+ "on_error": "default",
+ "weight": 2
+ },
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "ai",
+ "entity": "prompt",
+ "action": "create",
+ "name": "Prompt",
+ "version": "v3",
+ "key": "ai_1",
+ "operation_id": "post-prompt",
+ "metadata": {
+ "api_endpoint": "post /prompt",
+ "temperature": "1",
+ "body": {
+ "role": "user",
+ "content": "{{ template | label: 'This AI prompt will extract the sale price.', description: 'While changes aren''t required, you can update the prompt if you''d like.', default: 'What is the first of two prices listed before \"Sale _\u2022_\" in the markdown: {{scraper.markdown}}. Respond with only a number with number type.' }}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["temperature", "body", "body.role", "body.content"],
+ "on_error": "default",
+ "weight": 3
+ },
+ {
+ "schema": 3.1,
+ "trigger_type": "output",
+ "type": "shopify",
+ "entity": "product",
+ "action": "retrieve",
+ "name": "Retrieve Product",
+ "key": "shopify_1",
+ "operation_id": "get_products_product_id",
+ "metadata": {
+ "api_endpoint": "get admin/products/{{product_id}}.json",
+ "product_id": "{{ template | label: 'Which of your products would you like to compare prices with?' }}"
+ },
+ "local_fields": [],
+ "selected_fields": ["product_id"],
+ "on_error": "default",
+ "weight": 4
+ },
+ {
+ "schema": 4.1,
+ "trigger_type": "output",
+ "type": "filter",
+ "name": "Filter",
+ "key": "filter_1",
+ "operation_id": "filter",
+ "metadata": {
+ "a": "{{ai_1.response}}",
+ "comparison": "less than",
+ "b": "{{shopify_1.variants[0].price}}",
+ "additional": [
{
- "schema": 4,
- "trigger_type": "output",
- "type": "scraper",
- "entity": "scrape",
- "action": "create",
- "name": "Scrape Webpage",
- "key": "scraper",
- "operation_id": "scrape",
- "metadata": {
- "api_endpoint": "get \/markdown",
- "query": {
- "url": "{{ template | label: 'Enter the product page URL that MESA will be comparing your product price against.', description: 'Copy and paste the URL exactly.', placeholder: 'https:\/\/www.competitor.com\/product\/example-product-name' }}"
-
- }
- },
- "local_fields": [],
- "selected_fields": [
- "query",
- "query.url"
- ],
- "on_error": "default",
- "weight": 0
- },
- {
- "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",
- "temperature": "1",
- "body": {
- "role": "user",
- "content": "{{ template | label: 'This AI prompt will check if your competitor''s price is currently on sale.', description: 'While changes aren''t required, you can update the prompt if you''d like.', default: 'Determine if the product is on sale from this markdown: {{scraper.markdown}}. Respond with \"yes\" or \"no\". Do not use a period.' }}"
- }
- },
- "local_fields": [],
- "selected_fields": [
- "temperature",
- "body",
- "body.role",
- "body.content"
- ],
- "on_error": "default",
- "weight": 1
- },
- {
- "schema": 4.1,
- "trigger_type": "output",
- "type": "filter",
- "name": "Filter",
- "key": "filter",
- "operation_id": "filter",
- "metadata": {
- "a": "{{ai.response}}",
- "comparison": "equals",
- "b": "yes",
- "additional": [
- {
- "operator": "and",
- "comparison": "equals"
- }
- ]
- },
- "local_fields": [],
- "selected_fields": [
- "a",
- "comparison",
- "b",
- "additional"
- ],
- "on_error": "default",
- "weight": 2
- },
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "ai",
- "entity": "prompt",
- "action": "create",
- "name": "Prompt",
- "version": "v2",
- "key": "ai_1",
- "operation_id": "post-prompt",
- "metadata": {
- "api_endpoint": "post \/prompt",
- "temperature": "1",
- "body": {
- "role": "user",
- "content": "{{ template | label: 'This AI prompt will extract the sale price.', description: 'While changes aren''t required, you can update the prompt if you''d like.', default: 'What is the first of two prices listed before \"Sale _\u2022_\" in the markdown: {{scraper.markdown}}. Respond with only a number with number type.' }}"
- }
- },
- "local_fields": [],
- "selected_fields": [
- "temperature",
- "body",
- "body.role",
- "body.content"
- ],
- "on_error": "default",
- "weight": 3
- },
- {
- "schema": 3.1,
- "trigger_type": "output",
- "type": "shopify",
- "entity": "product",
- "action": "retrieve",
- "name": "Retrieve Product",
- "key": "shopify_1",
- "operation_id": "get_products_product_id",
- "metadata": {
- "api_endpoint": "get admin\/products\/{{product_id}}.json",
- "product_id": "{{ template | label: 'Which of your products would you like to compare prices with?' }}"
- },
- "local_fields": [],
- "selected_fields": [
- "product_id"
- ],
- "on_error": "default",
- "weight": 4
- },
- {
- "schema": 4.1,
- "trigger_type": "output",
- "type": "filter",
- "name": "Filter",
- "key": "filter_1",
- "operation_id": "filter",
- "metadata": {
- "a": "{{ai_1.response}}",
- "comparison": "less than",
- "b": "{{shopify_1.variants[0].price}}",
- "additional": [
- {
- "operator": "and",
- "comparison": "equals"
- }
- ]
- },
- "local_fields": [],
- "selected_fields": [
- "a",
- "comparison",
- "b",
- "additional"
- ],
- "on_error": "default",
- "weight": 5
- },
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "slack",
- "name": "Send Message",
- "version": "v2",
- "key": "slack",
- "operation_id": "slack",
- "metadata": {
- "channel": "{{ template | label: 'Which Slack channel should the message be sent 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 }}",
- "message": "A lower price has been found for {{shopify_1.title}}\n\nSale price: {{ai_1.response}}\n\nCompetitor's Website: {{scraper.url}}"
- },
- "local_fields": [],
- "selected_fields": [
- "channel",
- "message"
- ],
- "on_error": "default",
- "weight": 6
+ "operator": "and",
+ "comparison": "equals"
}
- ]
- }
-}
\ No newline at end of file
+ ]
+ },
+ "local_fields": [],
+ "selected_fields": ["a", "comparison", "b", "additional"],
+ "on_error": "default",
+ "weight": 5
+ },
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "slack",
+ "name": "Send Message",
+ "version": "v2",
+ "key": "slack",
+ "operation_id": "slack",
+ "metadata": {
+ "channel": "{{ template | label: 'Which Slack channel should the message be sent 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 }}",
+ "message": "A lower price has been found for {{shopify_1.title}}\n\nSale price: {{ai_1.response}}\n\nCompetitor's Website: {{scraper.url}}"
+ },
+ "local_fields": [],
+ "selected_fields": ["channel", "message"],
+ "on_error": "default",
+ "weight": 6
+ }
+ ]
+ }
+}
diff --git a/scraper/send_slack_message_for_shopify_status_page_issues/mesa.json b/scraper/send_slack_message_for_shopify_status_page_issues/mesa.json
index 30be5561..3b3cf3c3 100644
--- a/scraper/send_slack_message_for_shopify_status_page_issues/mesa.json
+++ b/scraper/send_slack_message_for_shopify_status_page_issues/mesa.json
@@ -1,160 +1,135 @@
{
- "key": "scraper/send_slack_message_for_shopify_status_page_issues",
- "name": "Send Slack alerts for Shopify server status issues",
- "version": "1.0.0",
- "enabled": false,
- "setup": true,
- "config": {
- "inputs": [
+ "key": "scraper/send_slack_message_for_shopify_status_page_issues",
+ "name": "Send Slack alerts for Shopify server status issues",
+ "version": "1.0.0",
+ "enabled": false,
+ "setup": true,
+ "config": {
+ "inputs": [
+ {
+ "schema": 2,
+ "trigger_type": "input",
+ "type": "schedule",
+ "name": "Schedule",
+ "key": "schedule",
+ "operation_id": "schedule",
+ "metadata": {
+ "schedule": "*/15 * * * *",
+ "enqueue_type": "schedule"
+ },
+ "local_fields": [],
+ "selected_fields": ["enqueue_type", "schedule", "next_sync_date_time"],
+ "on_error": "default",
+ "weight": 0
+ }
+ ],
+ "outputs": [
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "scraper",
+ "entity": "scrape",
+ "action": "create",
+ "name": "Scrape a webpage",
+ "key": "scraper",
+ "operation_id": "scrape",
+ "metadata": {
+ "api_endpoint": "get /markdown",
+ "query": {
+ "url": "www.shopifystatus.com"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["query", "query.url"],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "ai",
+ "entity": "prompt",
+ "action": "create",
+ "name": "Look for service errors",
+ "version": "v3",
+ "key": "ai",
+ "operation_id": "post-prompt",
+ "metadata": {
+ "api_endpoint": "post /prompt",
+ "temperature": "1",
+ "body": {
+ "role": "user",
+ "content": "If there are known issues respond with \"true\" otherwise respond \"false\" : \n\n{{scraper.markdown}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["temperature", "body", "body.role", "body.content"],
+ "on_error": "default",
+ "weight": 1
+ },
+ {
+ "schema": 4.1,
+ "trigger_type": "output",
+ "type": "filter",
+ "name": "Filter",
+ "key": "filter",
+ "operation_id": "filter",
+ "metadata": {
+ "a": "{{ai.response}}",
+ "comparison": "equals",
+ "b": "true",
+ "additional": [
{
- "schema": 2,
- "trigger_type": "input",
- "type": "schedule",
- "name": "Schedule",
- "key": "schedule",
- "operation_id": "schedule",
- "metadata": {
- "schedule": "*\/15 * * * *",
- "enqueue_type": "schedule"
- },
- "local_fields": [],
- "selected_fields": [
- "enqueue_type",
- "schedule",
- "next_sync_date_time"
- ],
- "on_error": "default",
- "weight": 0
+ "operator": "and",
+ "comparison": "equals"
}
- ],
- "outputs": [
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "scraper",
- "entity": "scrape",
- "action": "create",
- "name": "Scrape a webpage",
- "key": "scraper",
- "operation_id": "scrape",
- "metadata": {
- "api_endpoint": "get \/markdown",
- "query": {
- "url": "www.shopifystatus.com"
- }
- },
- "local_fields": [],
- "selected_fields": [
- "query",
- "query.url"
- ],
- "on_error": "default",
- "weight": 0
- },
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "ai",
- "entity": "prompt",
- "action": "create",
- "name": "Look for service errors",
- "version": "v2",
- "key": "ai",
- "operation_id": "post-prompt",
- "metadata": {
- "api_endpoint": "post \/prompt",
- "temperature": "1",
- "body": {
- "role": "user",
- "content": "If there are known issues respond with \"true\" otherwise respond \"false\" : \n\n{{scraper.markdown}}"
- }
- },
- "local_fields": [],
- "selected_fields": [
- "temperature",
- "body",
- "body.role",
- "body.content"
- ],
- "on_error": "default",
- "weight": 1
- },
- {
- "schema": 4.1,
- "trigger_type": "output",
- "type": "filter",
- "name": "Filter",
- "key": "filter",
- "operation_id": "filter",
- "metadata": {
- "a": "{{ai.response}}",
- "comparison": "equals",
- "b": "true",
- "additional": [
- {
- "operator": "and",
- "comparison": "equals"
- }
- ]
- },
- "local_fields": [],
- "selected_fields": [
- "a",
- "comparison",
- "b",
- "additional"
- ],
- "on_error": "default",
- "weight": 2
- },
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "ai",
- "entity": "prompt",
- "action": "create",
- "name": "Extract services with issues",
- "version": "v2",
- "key": "ai_1",
- "operation_id": "post-prompt",
- "metadata": {
- "api_endpoint": "post \/prompt",
- "temperature": "1",
- "body": {
- "role": "user",
- "content": "Tell me which services are experiencing an issue: {{scraper.markdown}}"
- }
- },
- "local_fields": [],
- "selected_fields": [
- "temperature",
- "body",
- "body.role",
- "body.content"
- ],
- "on_error": "default",
- "weight": 3
- },
- {
- "schema": 4,
- "trigger_type": "output",
- "type": "slack",
- "name": "Send Message",
- "version": "v2",
- "key": "slack",
- "operation_id": "slack",
- "metadata": {
- "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 }}",
- "message": "An issue was found on https:\/\/www.shopifystatus.com\/\n\nServices: {{ai_1.response}}"
- },
- "local_fields": [],
- "selected_fields": [
- "channel",
- "message"
- ],
- "on_error": "default",
- "weight": 4
- }
- ]
- }
-}
\ No newline at end of file
+ ]
+ },
+ "local_fields": [],
+ "selected_fields": ["a", "comparison", "b", "additional"],
+ "on_error": "default",
+ "weight": 2
+ },
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "ai",
+ "entity": "prompt",
+ "action": "create",
+ "name": "Extract services with issues",
+ "version": "v2",
+ "key": "ai_1",
+ "operation_id": "post-prompt",
+ "metadata": {
+ "api_endpoint": "post /prompt",
+ "temperature": "1",
+ "body": {
+ "role": "user",
+ "content": "Tell me which services are experiencing an issue: {{scraper.markdown}}"
+ }
+ },
+ "local_fields": [],
+ "selected_fields": ["temperature", "body", "body.role", "body.content"],
+ "on_error": "default",
+ "weight": 3
+ },
+ {
+ "schema": 4,
+ "trigger_type": "output",
+ "type": "slack",
+ "name": "Send Message",
+ "version": "v2",
+ "key": "slack",
+ "operation_id": "slack",
+ "metadata": {
+ "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 }}",
+ "message": "An issue was found on https://www.shopifystatus.com/\n\nServices: {{ai_1.response}}"
+ },
+ "local_fields": [],
+ "selected_fields": ["channel", "message"],
+ "on_error": "default",
+ "weight": 4
+ }
+ ]
+ }
+}
diff --git a/shopify/collection/write_descriptions_using_ai/mesa.json b/shopify/collection/write_descriptions_using_ai/mesa.json
index 2363958e..07344b9f 100644
--- a/shopify/collection/write_descriptions_using_ai/mesa.json
+++ b/shopify/collection/write_descriptions_using_ai/mesa.json
@@ -5,209 +5,201 @@
"enabled": false,
"setup": true,
"config": {
- "inputs": [
- {
- "schema": 3,
- "trigger_type": "input",
- "type": "shopify",
- "entity": "collection",
- "action": "created",
- "name": "Collection Created",
- "key": "shopify",
- "operation_id": "collections_create",
- "metadata": {
- "frequency": "every",
- "includeFields": []
- },
- "local_fields": [],
- "selected_fields": [],
- "on_error": "default",
- "weight": 0
+ "inputs": [
+ {
+ "schema": 3,
+ "trigger_type": "input",
+ "type": "shopify",
+ "entity": "collection",
+ "action": "created",
+ "name": "Collection Created",
+ "key": "shopify",
+ "operation_id": "collections_create",
+ "metadata": {
+ "frequency": "every",
+ "includeFields": []
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0
+ }
+ ],
+ "outputs": [
+ {
+ "schema": 3.1,
+ "trigger_type": "output",
+ "type": "shopify",
+ "entity": "collection",
+ "action": "retrieve",
+ "name": "Retrieve Collection",
+ "key": "shopify_1",
+ "operation_id": "get_collection",
+ "metadata": {
+ "api_endpoint": "get admin/collections/{{collection_id}}.json",
+ "collection_id": "{{shopify.id}}"
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 0
+ },
+ {
+ "schema": 5,
+ "trigger_type": "output",
+ "type": "paths",
+ "entity": "paths",
+ "name": "Paths",
+ "key": "paths",
+ "operation_id": "paths_paths",
+ "metadata": [],
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 1
+ },
+ {
+ "schema": 5,
+ "trigger_type": "output",
+ "type": "paths",
+ "entity": "path",
+ "name": "Path 1 Rule",
+ "key": "paths_1",
+ "operation_id": "paths_path",
+ "metadata": {
+ "trigger_manager_key": "paths",
+ "a": "{{shopify_1.collection_type}}",
+ "comparison": "equals",
+ "additional": [
+ {
+ "operator": "and",
+ "comparison": "equals"
+ }
+ ],
+ "b": "smart"
+ },
+ "local_fields": [],
+ "selected_fields": [],
+ "on_error": "default",
+ "weight": 2
+ },
+ {
+ "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",
+ "trigger_parent_key": "paths_1",
+ "temperature": "0.5",
+ "body": {
+ "role": "user",
+ "content": "Your task is to write a long collection description for a collection called {{shopify.title}} in HTML elements. Do not include bold text, highlighted text, and \"```html\". Keep under 2 paragraphs." } - ], - "outputs": [ - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "collection", - "action": "retrieve", - "name": "Retrieve Collection", - "key": "shopify_1", - "operation_id": "get_collection", - "metadata": { - "api_endpoint": "get admin\/collections\/{{collection_id}}.json", - "collection_id": "{{shopify.id}}" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - }, - { - "schema": 5, - "trigger_type": "output", - "type": "paths", - "entity": "paths", - "name": "Paths", - "key": "paths", - "operation_id": "paths_paths", - "metadata": [], - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 1 - }, - { - "schema": 5, - "trigger_type": "output", - "type": "paths", - "entity": "path", - "name": "Path 1 Rule", - "key": "paths_1", - "operation_id": "paths_path", - "metadata": { - "trigger_manager_key": "paths", - "a": "{{shopify_1.collection_type}}", - "comparison": "equals", - "additional": [ - { - "operator": "and", - "comparison": "equals" - } - ], - "b": "smart" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 2 - }, - { - "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", - "trigger_parent_key": "paths_1", - "temperature": "0.5", - "body": { - "role": "user", - "content": "Your task is to write a long collection description for a collection called {{shopify.title}} in HTML
elements. Do not include bold text, highlighted text, and \"```html\". Keep under 2 paragraphs." - } - }, - "local_fields": [], - "selected_fields": [ - "temperature" - ], - "on_error": "default", - "weight": 3 - }, - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "smart_collection", - "action": "update", - "name": "Update Smart Collection", - "key": "shopify_3", - "operation_id": "put_smart_collections_smart_collection_id", - "metadata": { - "api_endpoint": "put admin\/smart_collections\/{{smart_collection_id}}.json", - "trigger_parent_key": "paths_1", - "smart_collection_id": "{{shopify.id}}", - "body": { - "body_html": "{{ai.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "body.body_html" - ], - "on_error": "default", - "weight": 4 - }, - { - "schema": 5, - "trigger_type": "output", - "type": "paths", - "entity": "path", - "name": "Path 2 Rule", - "key": "paths_2", - "operation_id": "paths_path", - "metadata": { - "trigger_manager_key": "paths", - "comparison": "equals", - "additional": [ - { - "operator": "and", - "comparison": "equals" - } - ], - "a": "{{shopify_1.collection_type}}", - "b": "custom" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 5 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Prompt", - "version": "v2", - "key": "ai_1", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "trigger_parent_key": "paths_2", - "temperature": "0.5", - "body": { - "role": "user", - "content": "Your task is to write a long collection description for a collection called {{shopify.title}} in HTML
elements. Do not include bold text, highlighted text, and \"```html\". Keep under 2 paragraphs." - } - }, - "local_fields": [], - "selected_fields": [ - "temperature" - ], - "on_error": "default", - "weight": 6 - }, - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "custom_collection", - "action": "update", - "name": "Update Custom Collection", - "key": "shopify_2", - "operation_id": "put_custom_collections_custom_collection_id", - "metadata": { - "api_endpoint": "put admin\/custom_collections\/{{custom_collection_id}}.json", - "trigger_parent_key": "paths_2", - "custom_collection_id": "{{shopify.id}}", - "body": { - "body_html": "{{ai_1.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "body.body_html" - ], - "on_error": "default", - "weight": 7 + }, + "local_fields": [], + "selected_fields": ["temperature"], + "on_error": "default", + "weight": 3 + }, + { + "schema": 3.1, + "trigger_type": "output", + "type": "shopify", + "entity": "smart_collection", + "action": "update", + "name": "Update Smart Collection", + "key": "shopify_3", + "operation_id": "put_smart_collections_smart_collection_id", + "metadata": { + "api_endpoint": "put admin/smart_collections/{{smart_collection_id}}.json", + "trigger_parent_key": "paths_1", + "smart_collection_id": "{{shopify.id}}", + "body": { + "body_html": "{{ai.response}}" } - ] + }, + "local_fields": [], + "selected_fields": ["body.body_html"], + "on_error": "default", + "weight": 4 + }, + { + "schema": 5, + "trigger_type": "output", + "type": "paths", + "entity": "path", + "name": "Path 2 Rule", + "key": "paths_2", + "operation_id": "paths_path", + "metadata": { + "trigger_manager_key": "paths", + "comparison": "equals", + "additional": [ + { + "operator": "and", + "comparison": "equals" + } + ], + "a": "{{shopify_1.collection_type}}", + "b": "custom" + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 5 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Prompt", + "version": "v3", + "key": "ai_1", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "trigger_parent_key": "paths_2", + "temperature": "0.5", + "body": { + "role": "user", + "content": "Your task is to write a long collection description for a collection called {{shopify.title}} in HTML
elements. Do not include bold text, highlighted text, and \"```html\". Keep under 2 paragraphs." + } + }, + "local_fields": [], + "selected_fields": ["temperature"], + "on_error": "default", + "weight": 6 + }, + { + "schema": 3.1, + "trigger_type": "output", + "type": "shopify", + "entity": "custom_collection", + "action": "update", + "name": "Update Custom Collection", + "key": "shopify_2", + "operation_id": "put_custom_collections_custom_collection_id", + "metadata": { + "api_endpoint": "put admin/custom_collections/{{custom_collection_id}}.json", + "trigger_parent_key": "paths_2", + "custom_collection_id": "{{shopify.id}}", + "body": { + "body_html": "{{ai_1.response}}" + } + }, + "local_fields": [], + "selected_fields": ["body.body_html"], + "on_error": "default", + "weight": 7 + } + ] } -} \ No newline at end of file +} diff --git a/shopify/order/incomplete_shipping_address_to_google_sheets/mesa.json b/shopify/order/incomplete_shipping_address_to_google_sheets/mesa.json index f3639272..38fe118a 100644 --- a/shopify/order/incomplete_shipping_address_to_google_sheets/mesa.json +++ b/shopify/order/incomplete_shipping_address_to_google_sheets/mesa.json @@ -117,23 +117,24 @@ { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", - "action": "ask", + "type": "ai", + "entity": "agent", + "action": "create", "name": "Review the Shipping Address to Confirm if it's Complete", "key": "ask", - "operation_id": "post-ask", + "operation_id": "post-agent", "metadata": { - "api_endpoint": "post /ask", + "api_endpoint": "post /agent", "body": { - "content": "Check if the shipping address is incomplete for the following order:\n\nOrder Created\n\nShipping Address:\n{{shopify.shipping_address}}\n\nRules:\nAn address is complete if it includes all of the following:\n-Street address (e.g., \"123 Main St\" or \"45 Market Road\")\n-City\n-State or province\n-ZIP or postal code\nApartment, suite, or unit numbers are optional and not required for completeness.\n\nResponse Format:\n-Reply with \u201cYes\u201d if the address is incomplete\n-Reply with \u201cNo\u201d if the address is complete\n-Do not include any explanation or additional text.", + "content": "Check if the shipping address is incomplete for the following order:\n\nOrder Created\n\nShipping Address:\n{{shopify.shipping_address}}\n\nRules:\nAn address is complete if it includes all of the following:\n-Street address (e.g., \"123 Main St\" or \"45 Market Road\")\n-City\n-State or province\n-ZIP or postal code\nApartment, suite, or unit numbers are optional and not required for completeness.\n\nResponse Format:\n-Reply with āYesā if the address is incomplete\n-Reply with āNoā if the address is complete\n-Do not include any explanation or additional text.", "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." } }, "local_fields": [], "selected_fields": [], "on_error": "default", - "weight": 1 + "weight": 1, + "version": "v3" }, { "schema": 4.1, @@ -185,4 +186,4 @@ } ] } -} +} \ No newline at end of file diff --git a/shopify/order/tag_customers_based_on_proximity_to_your_store/mesa.json b/shopify/order/tag_customers_based_on_proximity_to_your_store/mesa.json index 370ac815..f1c975fd 100644 --- a/shopify/order/tag_customers_based_on_proximity_to_your_store/mesa.json +++ b/shopify/order/tag_customers_based_on_proximity_to_your_store/mesa.json @@ -1,114 +1,98 @@ { - "key": "shopify/order/tag_customers_based_on_proximity_to_your_store", - "name": "Tag Local Customers Based on Proximity to Your Store", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ + "key": "shopify/order/tag_customers_based_on_proximity_to_your_store", + "name": "Tag Local Customers Based on Proximity to Your Store", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 3, + "trigger_type": "input", + "type": "shopify", + "entity": "order", + "action": "created", + "name": "Order Created", + "key": "shopify", + "operation_id": "orders_create", + "metadata": { + "frequency": "every", + "includeFields": [] + }, + "local_fields": [], + "selected_fields": ["frequency"], + "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", + "temperature": "1", + "body": { + "role": "user", + "content": "{{ template | label: 'What is your store''s zip / province code?', description: 'Replace [Your store''s zip code] with your store''s zip code. The prompt defaults to finding customers within 25 miles, but you can adjust this distance as needed.', default: 'Is the {{shopify.shipping_address.zip}} within 25 miles of my physical store at [Your store''s zip code]? Respond only with yes or no. Do not add a period after the response.' }}" + } + }, + "local_fields": [], + "selected_fields": ["temperature", "body", "body.role", "body.content"], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4.1, + "trigger_type": "output", + "type": "filter", + "name": "Filter", + "key": "filter", + "operation_id": "filter", + "metadata": { + "a": "{{ai.response}}", + "comparison": "equals", + "b": "Yes", + "additional": [ { - "schema": 3, - "trigger_type": "input", - "type": "shopify", - "entity": "order", - "action": "created", - "name": "Order Created", - "key": "shopify", - "operation_id": "orders_create", - "metadata": { - "frequency": "every", - "includeFields": [] - }, - "local_fields": [], - "selected_fields": [ - "frequency" - ], - "on_error": "default", - "weight": 0 + "operator": "and", + "comparison": "equals" } - ], - "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", - "temperature": "1", - "body": { - "role": "user", - "content": "{{ template | label: 'What is your store''s zip / province code?', description: 'Replace [Your store''s zip code] with your store''s zip code. The prompt defaults to finding customers within 25 miles, but you can adjust this distance as needed.', default: 'Is the {{shopify.shipping_address.zip}} within 25 miles of my physical store at [Your store''s zip code]? Respond only with yes or no. Do not add a period after the response.' }}" - } - }, - "local_fields": [], - "selected_fields": [ - "temperature", - "body", - "body.role", - "body.content" - ], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4.1, - "trigger_type": "output", - "type": "filter", - "name": "Filter", - "key": "filter", - "operation_id": "filter", - "metadata": { - "a": "{{ai.response}}", - "comparison": "equals", - "b": "Yes", - "additional": [ - { - "operator": "and", - "comparison": "equals" - } - ] - }, - "local_fields": [], - "selected_fields": [ - "a", - "comparison", - "b", - "additional" - ], - "on_error": "default", - "weight": 1 - }, - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "customer", - "action": "tag_add", - "name": "Customer Add Tag", - "key": "shopify_1", - "operation_id": "post_mesa_customers_customer_id_tag", - "metadata": { - "api_endpoint": "post mesa\/customers\/{{customer_id}}\/tag.json", - "customer_id": "{{shopify.customer.id}}", - "body": { - "tag": "{{ template | label: 'What tag will be added to the customer?', description: 'The default tag is \"Local Customer,\" but you can change it here if you''d like a different one.', default: 'Local Customer', tokens: false }}" - } - }, - "local_fields": [], - "selected_fields": [ - "customer_id", - "body", - "body.tag" - ], - "on_error": "default", - "weight": 2 - } - ] - } -} \ No newline at end of file + ] + }, + "local_fields": [], + "selected_fields": ["a", "comparison", "b", "additional"], + "on_error": "default", + "weight": 1 + }, + { + "schema": 3.1, + "trigger_type": "output", + "type": "shopify", + "entity": "customer", + "action": "tag_add", + "name": "Customer Add Tag", + "key": "shopify_1", + "operation_id": "post_mesa_customers_customer_id_tag", + "metadata": { + "api_endpoint": "post mesa/customers/{{customer_id}}/tag.json", + "customer_id": "{{shopify.customer.id}}", + "body": { + "tag": "{{ template | label: 'What tag will be added to the customer?', description: 'The default tag is \"Local Customer,\" but you can change it here if you''d like a different one.', default: 'Local Customer', tokens: false }}" + } + }, + "local_fields": [], + "selected_fields": ["customer_id", "body", "body.tag"], + "on_error": "default", + "weight": 2 + } + ] + } +} diff --git a/shopify/product/create_a_blog_post_in_wordpress/mesa.json b/shopify/product/create_a_blog_post_in_wordpress/mesa.json index f37a33de..6c3e33bc 100644 --- a/shopify/product/create_a_blog_post_in_wordpress/mesa.json +++ b/shopify/product/create_a_blog_post_in_wordpress/mesa.json @@ -1,132 +1,120 @@ { - "key": "shopify/product/create_a_blog_post_in_wordpress", - "name": "Generate a WordPress Blog for New Products in Shopify", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 3, - "trigger_type": "input", - "type": "shopify", - "entity": "product", - "action": "created", - "name": "Product Created", - "key": "shopify", - "operation_id": "products_create", - "metadata": { - "frequency": "every", - "includeFields": [] - }, - "local_fields": [], - "selected_fields": [ - "frequency" - ], - "on_error": "default", - "weight": 0 - } + "key": "shopify/product/create_a_blog_post_in_wordpress", + "name": "Generate a WordPress Blog for New Products in Shopify", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 3, + "trigger_type": "input", + "type": "shopify", + "entity": "product", + "action": "created", + "name": "Product Created", + "key": "shopify", + "operation_id": "products_create", + "metadata": { + "frequency": "every", + "includeFields": [] + }, + "local_fields": [], + "selected_fields": ["frequency"], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 3.1, + "trigger_type": "output", + "type": "shopify", + "entity": "product", + "action": "retrieve", + "name": "Retrieve Product", + "key": "shopify_1", + "operation_id": "get_products_product_id", + "metadata": { + "api_endpoint": "get admin/products/{{product_id}}.json", + "product_id": "{{shopify.id}}" + }, + "local_fields": [], + "selected_fields": ["product_id"], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Blog Title", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "{{ template | label: 'What is the brand name, positioning, tone, and primary audience of your brand?', description: 'Replace [BRAND_NAME], [BRAND_POSITIONING], [BRAND_TONE], [PRIMARY_AUDIENCE] with the brand name, positioning, tone, and primary audience of your brand.', default: 'You are a marketing copywriter for **[BRAND_NAME]**, a **[BRAND_POSITIONING]** brand. \nWrite in a **[BRAND_TONE]** voice for **[PRIMARY_AUDIENCE]**. \n\nFrom the product title and description, create **1 blog title option** under 60 characters. \nTitle should be compelling, SEO-friendly, and encourage clicks without being clickbait. \n\nProduct Title: {{shopify_1.title}}\nProduct Description: {{shopify_1.body_html}}\n\nRules: \n- Use strong, active language. \n- Avoid generic phrases like \u201camazing\u201d or \u201cmust-have.\u201d \n- Where natural, weave in the product type or benefit. \n- Keep each title unique and distinct in style.' }}" + } + }, + "local_fields": [], + "selected_fields": ["body", "body.role", "body.content"], + "on_error": "default", + "weight": 1 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Blog Body", + "version": "v3", + "key": "ai_1", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "{{ template | label: 'What is the brand name, positioning, tone, and primary audience of your brand?', description: 'Replace [BRAND_NAME], [BRAND_POSITIONING], [BRAND_TONE], [PRIMARY_AUDIENCE] with the brand name, positioning, tone, and primary audience of your brand.', default: 'You are a marketing copywriter for **[BRAND_NAME]**, a **[BRAND_POSITIONING]** brand. \nWrite in a **[BRAND_TONE]** voice for **[PRIMARY_AUDIENCE]**. \n\nTask: From the product title and description, create a **publication-ready blog body** that explains what it is, why it matters, and how to use it. Keep it crisp, concrete, and helpful.\n\nProduct Title: {{shopify_1.title}} \nProduct Description: \n{{shopify_1.body_html}}\n\nOutput exactly in this structure (Markdown):\n1. **Hero intro** (60\u201390 words) \n2. **Main article** with 5\u20137 scannable subheads \n3. **3 Feature \u2192 Benefit bullets** (one line each) \n4. **Simple FAQ (3 Q&As)** addressing likely objections \n\nStyle rules: short paragraphs, active verbs, no clich\u00e9s, no invented specs, use numbers where possible.' }}" + } + }, + "local_fields": [], + "selected_fields": ["body", "body.role", "body.content"], + "on_error": "default", + "weight": 2 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "wordpress", + "entity": "post", + "action": "create", + "name": "Create Post", + "key": "wordpress", + "operation_id": "posts-create", + "metadata": { + "api_endpoint": "post /wp/v2/posts", + "body": { + "status": "draft", + "title": "{{ai.response}}", + "content": "{{ai_1.response}}" + } + }, + "local_fields": [], + "selected_fields": [ + "body", + "body.title", + "body.content", + "body.status" ], - "outputs": [ - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "product", - "action": "retrieve", - "name": "Retrieve Product", - "key": "shopify_1", - "operation_id": "get_products_product_id", - "metadata": { - "api_endpoint": "get admin\/products\/{{product_id}}.json", - "product_id": "{{shopify.id}}" - }, - "local_fields": [], - "selected_fields": [ - "product_id" - ], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Blog Title", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "body": { - "role": "user", - "content": "{{ template | label: 'What is the brand name, positioning, tone, and primary audience of your brand?', description: 'Replace [BRAND_NAME], [BRAND_POSITIONING], [BRAND_TONE], [PRIMARY_AUDIENCE] with the brand name, positioning, tone, and primary audience of your brand.', default: 'You are a marketing copywriter for **[BRAND_NAME]**, a **[BRAND_POSITIONING]** brand. \nWrite in a **[BRAND_TONE]** voice for **[PRIMARY_AUDIENCE]**. \n\nFrom the product title and description, create **1 blog title option** under 60 characters. \nTitle should be compelling, SEO-friendly, and encourage clicks without being clickbait. \n\nProduct Title: {{shopify_1.title}}\nProduct Description: {{shopify_1.body_html}}\n\nRules: \n- Use strong, active language. \n- Avoid generic phrases like \u201camazing\u201d or \u201cmust-have.\u201d \n- Where natural, weave in the product type or benefit. \n- Keep each title unique and distinct in style.' }}" - } - }, - "local_fields": [], - "selected_fields": [ - "body", - "body.role", - "body.content" - ], - "on_error": "default", - "weight": 1 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Blog Body", - "version": "v2", - "key": "ai_1", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "body": { - "role": "user", - "content": "{{ template | label: 'What is the brand name, positioning, tone, and primary audience of your brand?', description: 'Replace [BRAND_NAME], [BRAND_POSITIONING], [BRAND_TONE], [PRIMARY_AUDIENCE] with the brand name, positioning, tone, and primary audience of your brand.', default: 'You are a marketing copywriter for **[BRAND_NAME]**, a **[BRAND_POSITIONING]** brand. \nWrite in a **[BRAND_TONE]** voice for **[PRIMARY_AUDIENCE]**. \n\nTask: From the product title and description, create a **publication-ready blog body** that explains what it is, why it matters, and how to use it. Keep it crisp, concrete, and helpful.\n\nProduct Title: {{shopify_1.title}} \nProduct Description: \n{{shopify_1.body_html}}\n\nOutput exactly in this structure (Markdown):\n1. **Hero intro** (60\u201390 words) \n2. **Main article** with 5\u20137 scannable subheads \n3. **3 Feature \u2192 Benefit bullets** (one line each) \n4. **Simple FAQ (3 Q&As)** addressing likely objections \n\nStyle rules: short paragraphs, active verbs, no clich\u00e9s, no invented specs, use numbers where possible.' }}" - } - }, - "local_fields": [], - "selected_fields": [ - "body", - "body.role", - "body.content" - ], - "on_error": "default", - "weight": 2 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "wordpress", - "entity": "post", - "action": "create", - "name": "Create Post", - "key": "wordpress", - "operation_id": "posts-create", - "metadata": { - "api_endpoint": "post \/wp\/v2\/posts", - "body": { - "status": "draft", - "title": "{{ai.response}}", - "content": "{{ai_1.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "body", - "body.title", - "body.content", - "body.status" - ], - "on_error": "default", - "weight": 3 - } - ] - } -} \ No newline at end of file + "on_error": "default", + "weight": 3 + } + ] + } +} diff --git a/shopify/product/create_product_descriptions_with_aibymesa/mesa.json b/shopify/product/create_product_descriptions_with_aibymesa/mesa.json index f23a5f64..112bc6d0 100644 --- a/shopify/product/create_product_descriptions_with_aibymesa/mesa.json +++ b/shopify/product/create_product_descriptions_with_aibymesa/mesa.json @@ -1,82 +1,82 @@ { - "key": "shopify/product/create_product_descriptions_with_aibymesa", - "name": "Use AI by MESA to write Shopify product descriptions", - "version": "1.0.0", - "description": "Crafting compelling product descriptions can quickly become daunting if you're not in a creative mindset or if you just have a lot of other tasks on your plate. Use the power of AI to turn your writer's block into a seller's gain. This template will generate a product description using AI by MESA when a product is created in Shopify.", - "video": "", - "tags": [], - "source": "shopify", - "destination": "shopify", - "seconds": 135, - "enabled": false, - "logging": true, - "debug": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 3, - "trigger_type": "input", - "type": "shopify", - "entity": "product", - "action": "created", - "name": "Product Created", - "key": "shopify", - "operation_id": "products_create", - "metadata": { - "frequency": "every", - "includeFields": [] - }, - "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", - "temperature": "1", - "body": { - "role": "user", - "content": "Write a brief product description for a product called {{shopify.title}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - }, - { - "schema": 3, - "trigger_type": "output", - "type": "shopify", - "entity": "product", - "action": "update", - "name": "Update Product", - "key": "shopify_1", - "operation_id": "put_products_product_id", - "metadata": { - "product_id": "{{shopify.id}}", - "body": { - "body_html": "{{ai.response}}" - } - }, - "local_fields": [], - "on_error": "default", - "weight": 1 - } - ], - "storage": [] - } -} \ No newline at end of file + "key": "shopify/product/create_product_descriptions_with_aibymesa", + "name": "Use AI by MESA to write Shopify product descriptions", + "version": "1.0.0", + "description": "Crafting compelling product descriptions can quickly become daunting if you're not in a creative mindset or if you just have a lot of other tasks on your plate. Use the power of AI to turn your writer's block into a seller's gain. This template will generate a product description using AI by MESA when a product is created in Shopify.", + "video": "", + "tags": [], + "source": "shopify", + "destination": "shopify", + "seconds": 135, + "enabled": false, + "logging": true, + "debug": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 3, + "trigger_type": "input", + "type": "shopify", + "entity": "product", + "action": "created", + "name": "Product Created", + "key": "shopify", + "operation_id": "products_create", + "metadata": { + "frequency": "every", + "includeFields": [] + }, + "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", + "temperature": "1", + "body": { + "role": "user", + "content": "Write a brief product description for a product called {{shopify.title}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + }, + { + "schema": 3, + "trigger_type": "output", + "type": "shopify", + "entity": "product", + "action": "update", + "name": "Update Product", + "key": "shopify_1", + "operation_id": "put_products_product_id", + "metadata": { + "product_id": "{{shopify.id}}", + "body": { + "body_html": "{{ai.response}}" + } + }, + "local_fields": [], + "on_error": "default", + "weight": 1 + } + ], + "storage": [] + } +} diff --git a/shopify/product/create_title_using_ai/mesa.json b/shopify/product/create_title_using_ai/mesa.json index 5a994b46..49453eab 100644 --- a/shopify/product/create_title_using_ai/mesa.json +++ b/shopify/product/create_title_using_ai/mesa.json @@ -1,95 +1,93 @@ { - "key": "shopify/product/create_title_using_ai", - "name": "Generate AI-Powered Shopify Product Titles Automatically", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 3, - "trigger_type": "input", - "type": "shopify", - "entity": "product", - "action": "created", - "name": "Product Created", - "key": "shopify", - "operation_id": "products_create", - "metadata": { - "frequency": "every", - "includeFields": [] - }, - "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: 'What is your target audience?', description: 'Swap out the variable if you don''t want to create the title from the 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 {{shopify.body_html}}. 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": [], - "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": [], - "on_error": "default", - "weight": 1 - }, - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "product", - "action": "update", - "name": "Update Product", - "key": "shopify_1", - "operation_id": "put_products_product_id", - "metadata": { - "api_endpoint": "put admin\/products\/{{product_id}}.json", - "product_id": "{{shopify.id}}", - "body": { - "title": "{{ai.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "body.title" - ], - "on_error": "default", - "weight": 2 - } - ] - } -} \ No newline at end of file + "key": "shopify/product/create_title_using_ai", + "name": "Generate AI-Powered Shopify Product Titles Automatically", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 3, + "trigger_type": "input", + "type": "shopify", + "entity": "product", + "action": "created", + "name": "Product Created", + "key": "shopify", + "operation_id": "products_create", + "metadata": { + "frequency": "every", + "includeFields": [] + }, + "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": "v3", + "key": "ai", + "operation_id": "post-prompt-product-title", + "metadata": { + "api_endpoint": "post /prompt/product-title", + "temperature": "1", + "body": { + "role": "user", + "content": "{{ template | label: 'What is your target audience?', description: 'Swap out the variable if you don''t want to create the title from the 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 {{shopify.body_html}}. 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": [], + "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": [], + "on_error": "default", + "weight": 1 + }, + { + "schema": 3.1, + "trigger_type": "output", + "type": "shopify", + "entity": "product", + "action": "update", + "name": "Update Product", + "key": "shopify_1", + "operation_id": "put_products_product_id", + "metadata": { + "api_endpoint": "put admin/products/{{product_id}}.json", + "product_id": "{{shopify.id}}", + "body": { + "title": "{{ai.response}}" + } + }, + "local_fields": [], + "selected_fields": ["body.title"], + "on_error": "default", + "weight": 2 + } + ] + } +} diff --git a/shopify/product/generate_shopify_product_tags_with_ai_by_mesa/mesa.json b/shopify/product/generate_shopify_product_tags_with_ai_by_mesa/mesa.json index cc303653..e58f6640 100644 --- a/shopify/product/generate_shopify_product_tags_with_ai_by_mesa/mesa.json +++ b/shopify/product/generate_shopify_product_tags_with_ai_by_mesa/mesa.json @@ -1,74 +1,74 @@ { - "key": "shopify/product/generate_shopify_product_tags_with_ai_by_mesa", - "name": "Use AI by MESA to generate Shopify product tags", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 3, - "trigger_type": "input", - "type": "shopify", - "entity": "product", - "action": "created", - "name": "Product Created", - "key": "shopify", - "operation_id": "products_create", - "metadata": { - "frequency": "every", - "includeFields": [] - }, - "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", - "temperature": "1", - "body": { - "role": "user", - "content": "Write 2 to 3 comma-separated tags using no more than 2 words for each based on the following product information:\nTitle: {{shopify.title}}\nDescription: {{shopify.body_html}} \nFormat the tags so they are comma separated, not numerically separated." - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - }, - { - "schema": 3, - "trigger_type": "output", - "type": "shopify", - "entity": "product", - "action": "tag_add", - "name": "Product Add Tag", - "key": "shopify_1", - "operation_id": "post_mesa_products_product_id_tag", - "metadata": { - "api_endpoint": "post mesa/products/{{product_id}}/tag.json", - "product_id": "{{shopify.id}}", - "body": { - "tag": "{{ai.response}}" - } - }, - "local_fields": [], - "on_error": "default", - "weight": 1 - } - ] - } + "key": "shopify/product/generate_shopify_product_tags_with_ai_by_mesa", + "name": "Use AI by MESA to generate Shopify product tags", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 3, + "trigger_type": "input", + "type": "shopify", + "entity": "product", + "action": "created", + "name": "Product Created", + "key": "shopify", + "operation_id": "products_create", + "metadata": { + "frequency": "every", + "includeFields": [] + }, + "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", + "temperature": "1", + "body": { + "role": "user", + "content": "Write 2 to 3 comma-separated tags using no more than 2 words for each based on the following product information:\nTitle: {{shopify.title}}\nDescription: {{shopify.body_html}} \nFormat the tags so they are comma separated, not numerically separated." + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + }, + { + "schema": 3, + "trigger_type": "output", + "type": "shopify", + "entity": "product", + "action": "tag_add", + "name": "Product Add Tag", + "key": "shopify_1", + "operation_id": "post_mesa_products_product_id_tag", + "metadata": { + "api_endpoint": "post mesa/products/{{product_id}}/tag.json", + "product_id": "{{shopify.id}}", + "body": { + "tag": "{{ai.response}}" + } + }, + "local_fields": [], + "on_error": "default", + "weight": 1 + } + ] + } } diff --git a/shopify/product/set_meta_title_and_description_when_product_created/mesa.json b/shopify/product/set_meta_title_and_description_when_product_created/mesa.json index da1d0f68..aafd361d 100644 --- a/shopify/product/set_meta_title_and_description_when_product_created/mesa.json +++ b/shopify/product/set_meta_title_and_description_when_product_created/mesa.json @@ -1,155 +1,143 @@ { - "key": "shopify/product/set_meta_title_and_description_when_product_created", - "name": "Auto-Generate SEO Meta Titles & Descriptions for New Shopify Products", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 3, - "trigger_type": "input", - "type": "shopify", - "entity": "product", - "action": "created", - "name": "Product Created", - "key": "shopify", - "operation_id": "products_create", - "metadata": { - "frequency": "every", - "includeFields": [] - }, - "local_fields": [], - "selected_fields": [ - "frequency" - ], - "on_error": "default", - "weight": 0 - } + "key": "shopify/product/set_meta_title_and_description_when_product_created", + "name": "Auto-Generate SEO Meta Titles & Descriptions for New Shopify Products", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 3, + "trigger_type": "input", + "type": "shopify", + "entity": "product", + "action": "created", + "name": "Product Created", + "key": "shopify", + "operation_id": "products_create", + "metadata": { + "frequency": "every", + "includeFields": [] + }, + "local_fields": [], + "selected_fields": ["frequency"], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Generate Product Meta Title", + "version": "v2", + "key": "ai", + "operation_id": "post-prompt-product-meta-title", + "metadata": { + "api_endpoint": "post /prompt/product-meta-title", + "temperature": "1", + "body": { + "role": "user", + "content": "{{ template | label: 'What is your brand and industry?', description: 'Replace [brand] and [industry] with your business''s name and industry details.', default: 'Think like an eCommerce SEO expert and generate a product page meta title for from the brand [brand] from the [industry] industry for this product: {{shopify.title}}. Format the title without quotation marks.' }}" + } + }, + "local_fields": [], + "selected_fields": ["temperature", "body", "body.role", "body.content"], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Generate Product Meta Description", + "version": "v2", + "key": "ai_1", + "operation_id": "post-prompt-product-meta-description", + "metadata": { + "api_endpoint": "post /prompt/product-meta-description", + "temperature": "1", + "body": { + "role": "user", + "content": "{{ template | label: 'Please add your brand and industry once more.', description: 'Replace [brand] and [industry] with your business''s name and industry details.', default: 'Think like an eCommerce SEO expert and generate a product page meta description for {{shopify.body_html}} from brand [brand] from the [industry] industry. Limit the description to 300 characters or less.' }}" + } + }, + "local_fields": [], + "selected_fields": ["temperature", "body", "body.role", "body.content"], + "on_error": "default", + "weight": 1 + }, + { + "schema": 3.1, + "trigger_type": "output", + "type": "shopify", + "entity": "product", + "action": "metafield_set", + "name": "Set Product Meta Title Metafield", + "key": "shopify_1", + "operation_id": "put_mesa_products_product_id_metafield", + "metadata": { + "api_endpoint": "put mesa/products/{{product_id}}/metafield.json", + "product_id": "{{shopify.id}}", + "body": { + "namespace": "global", + "key": "title_tag", + "type": "single_line_text_field", + "listType": "single_line_text_field", + "value": "{{ai.response}}" + } + }, + "local_fields": [], + "selected_fields": [ + "product_id", + "body", + "body.namespace", + "body.key", + "body.type", + "body.listType", + "body.value" ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Generate Product Meta Title", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt-product-meta-title", - "metadata": { - "api_endpoint": "post \/prompt\/product-meta-title", - "temperature": "1", - "body": { - "role": "user", - "content": "{{ template | label: 'What is your brand and industry?', description: 'Replace [brand] and [industry] with your business''s name and industry details.', default: 'Think like an eCommerce SEO expert and generate a product page meta title for from the brand [brand] from the [industry] industry for this product: {{shopify.title}}. Format the title without quotation marks.' }}" - } - }, - "local_fields": [], - "selected_fields": [ - "temperature", - "body", - "body.role", - "body.content" - ], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Generate Product Meta Description", - "version": "v2", - "key": "ai_1", - "operation_id": "post-prompt-product-meta-description", - "metadata": { - "api_endpoint": "post \/prompt\/product-meta-description", - "temperature": "1", - "body": { - "role": "user", - "content": "{{ template | label: 'Please add your brand and industry once more.', description: 'Replace [brand] and [industry] with your business''s name and industry details.', default: 'Think like an eCommerce SEO expert and generate a product page meta description for {{shopify.body_html}} from brand [brand] from the [industry] industry. Limit the description to 300 characters or less.' }}" - } - }, - "local_fields": [], - "selected_fields": [ - "temperature", - "body", - "body.role", - "body.content" - ], - "on_error": "default", - "weight": 1 - }, - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "product", - "action": "metafield_set", - "name": "Set Product Meta Title Metafield", - "key": "shopify_1", - "operation_id": "put_mesa_products_product_id_metafield", - "metadata": { - "api_endpoint": "put mesa\/products\/{{product_id}}\/metafield.json", - "product_id": "{{shopify.id}}", - "body": { - "namespace": "global", - "key": "title_tag", - "type": "single_line_text_field", - "listType": "single_line_text_field", - "value": "{{ai.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "product_id", - "body", - "body.namespace", - "body.key", - "body.type", - "body.listType", - "body.value" - ], - "on_error": "default", - "weight": 2 - }, - { - "schema": 3.1, - "trigger_type": "output", - "type": "shopify", - "entity": "product", - "action": "metafield_set", - "name": "Set Product Meta Description Metafield", - "key": "shopify_2", - "operation_id": "put_mesa_products_product_id_metafield", - "metadata": { - "api_endpoint": "put mesa\/products\/{{product_id}}\/metafield.json", - "product_id": "{{shopify.id}}", - "body": { - "namespace": "global", - "key": "description_tag", - "type": "single_line_text_field", - "listType": "single_line_text_field", - "value": "{{ai_1.response}}" - } - }, - "local_fields": [], - "selected_fields": [ - "product_id", - "body", - "body.namespace", - "body.key", - "body.type", - "body.listType", - "body.value" - ], - "on_error": "default", - "weight": 3 - } - ] - } -} \ No newline at end of file + "on_error": "default", + "weight": 2 + }, + { + "schema": 3.1, + "trigger_type": "output", + "type": "shopify", + "entity": "product", + "action": "metafield_set", + "name": "Set Product Meta Description Metafield", + "key": "shopify_2", + "operation_id": "put_mesa_products_product_id_metafield", + "metadata": { + "api_endpoint": "put mesa/products/{{product_id}}/metafield.json", + "product_id": "{{shopify.id}}", + "body": { + "namespace": "global", + "key": "description_tag", + "type": "single_line_text_field", + "listType": "single_line_text_field", + "value": "{{ai_1.response}}" + } + }, + "local_fields": [], + "selected_fields": [ + "product_id", + "body", + "body.namespace", + "body.key", + "body.type", + "body.listType", + "body.value" + ], + "on_error": "default", + "weight": 3 + } + ] + } +} diff --git a/unsearchable/shopify/order/detect-po-box/mesa.json b/unsearchable/shopify/order/detect-po-box/mesa.json index 86f6a789..7a0baeba 100644 --- a/unsearchable/shopify/order/detect-po-box/mesa.json +++ b/unsearchable/shopify/order/detect-po-box/mesa.json @@ -1,108 +1,108 @@ { - "key": "new_workflow_69", - "name": "Detect PO Boxes Before Shipping", - "version": "1.0.0", - "description": "", - "seconds": 135, - "enabled": false, - "setup": false, - "config": { - "inputs": [ + "key": "new_workflow_69", + "name": "Detect PO Boxes Before Shipping", + "version": "1.0.0", + "description": "", + "seconds": 135, + "enabled": false, + "setup": false, + "config": { + "inputs": [ + { + "schema": 3, + "trigger_type": "input", + "type": "shopify", + "entity": "order", + "action": "created", + "name": "Order Created", + "key": "shopify", + "operation_id": "orders_create", + "metadata": [], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 2, + "trigger_type": "output", + "type": "transform", + "entity": "mapping", + "name": "Transform Mapping", + "key": "transform", + "operation_id": "mapping", + "metadata": { + "mapping": [ { - "schema": 3, - "trigger_type": "input", - "type": "shopify", - "entity": "order", - "action": "created", - "name": "Order Created", - "key": "shopify", - "operation_id": "orders_create", - "metadata": [], - "on_error": "default", - "weight": 0 + "destination": "prompt", + "source": "Here is a shipping address:\n{{shopify.billing_address.address1}}\n\nIs it a PO box?\n\nJust respond Yes or No with nothing else" } + ] + }, + "local_fields": [ + { + "key": "mapping", + "type": "mapping", + "tokens": "brackets", + "location": "mapping" + } ], - "outputs": [ - { - "schema": 2, - "trigger_type": "output", - "type": "transform", - "entity": "mapping", - "name": "Transform Mapping", - "key": "transform", - "operation_id": "mapping", - "metadata": { - "mapping": [ - { - "destination": "prompt", - "source": "Here is a shipping address:\n{{shopify.billing_address.address1}}\n\nIs it a PO box?\n\nJust respond Yes or No with nothing else" - } - ] - }, - "local_fields": [ - { - "key": "mapping", - "type": "mapping", - "tokens": "brackets", - "location": "mapping" - } - ], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Prompt", - "key": "ai", - "version": "v1", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "json": false, - "temperature": "0.7", - "body": { - "prompt": "{{ transform.prompt }}" - } - }, - "local_fields": [], - "on_error": "default", - "weight": 1 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "filter", - "name": "Filter", - "key": "filter", - "metadata": { - "a": "{{ai.response}}", - "comparison": "equals", - "b": "Yes" - }, - "local_fields": [], - "on_error": "default", - "weight": 2 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "email", - "version": "v1", - "name": "Send Email", - "key": "email", - "metadata": { - "to": "kalen@getmesa.com", - "subject": "PO box detected", - "message": "Order:\n{{shopify.id}}\n\nShipping Address:\n{{shopify.shipping_address.address1}}\n{{shopify.billing_address.address2}}\n{{shopify.shipping_address.city}}\n{{shopify.shipping_address.country}}" - }, - "local_fields": [], - "on_error": "default", - "weight": 3 - } - ] - } -} \ No newline at end of file + "on_error": "default", + "weight": 0 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Prompt", + "key": "ai", + "version": "v3", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "json": false, + "temperature": "0.7", + "body": { + "prompt": "{{ transform.prompt }}" + } + }, + "local_fields": [], + "on_error": "default", + "weight": 1 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "filter", + "name": "Filter", + "key": "filter", + "metadata": { + "a": "{{ai.response}}", + "comparison": "equals", + "b": "Yes" + }, + "local_fields": [], + "on_error": "default", + "weight": 2 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "email", + "version": "v1", + "name": "Send Email", + "key": "email", + "metadata": { + "to": "kalen@getmesa.com", + "subject": "PO box detected", + "message": "Order:\n{{shopify.id}}\n\nShipping Address:\n{{shopify.shipping_address.address1}}\n{{shopify.billing_address.address2}}\n{{shopify.shipping_address.city}}\n{{shopify.shipping_address.country}}" + }, + "local_fields": [], + "on_error": "default", + "weight": 3 + } + ] + } +} diff --git a/wordpress/comment/send_comments_to_slack_channel/mesa.json b/wordpress/comment/send_comments_to_slack_channel/mesa.json index 262da023..760ab4c7 100644 --- a/wordpress/comment/send_comments_to_slack_channel/mesa.json +++ b/wordpress/comment/send_comments_to_slack_channel/mesa.json @@ -54,16 +54,16 @@ { "schema": 4, "trigger_type": "output", - "type": "ask", - "entity": "ask", - "action": "ask", + "type": "ai", + "entity": "agent", + "action": "create", "name": "Clean and Format Comment Data", "key": "ask", - "operation_id": "post-ask", + "operation_id": "post-agent", "metadata": { - "api_endpoint": "post \/ask", + "api_endpoint": "post /agent", "body": { - "content": "Step 1: Clean Text Inputs:\nRemove ASCII codes from {{wordpress_1.title.rendered}}\nRemove HTML tags from {{wordpress.content.rendered}}\nRemove HTML tags from {{wordpress.link}}\n\nStep 2: Apply Output Format:\nFormat the message below clearly for Slack. \nUse line breaks between each section and keep it readable.\nApply this format:\n\n\ud83d\udcac **New Comment Published for:** {{wordpress_1.title.rendered}}\n**Comment:** {{wordpress.content.rendered}}\n**Comment Link:** <{{wordpress.link}}>\n**Author:** {{wordpress.author_name}}\n**Email:** {{wordpress.author_email}}", + "content": "Step 1: Clean Text Inputs:\nRemove ASCII codes from {{wordpress_1.title.rendered}}\nRemove HTML tags from {{wordpress.content.rendered}}\nRemove HTML tags from {{wordpress.link}}\n\nStep 2: Apply Output Format:\nFormat the message below clearly for Slack. \nUse line breaks between each section and keep it readable.\nApply this format:\n\nš¬ **New Comment Published for:** {{wordpress_1.title.rendered}}\n**Comment:** {{wordpress.content.rendered}}\n**Comment Link:** <{{wordpress.link}}>\n**Author:** {{wordpress.author_name}}\n**Email:** {{wordpress.author_email}}", "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. " } }, @@ -74,7 +74,8 @@ "body.instructions" ], "on_error": "default", - "weight": 1 + "weight": 1, + "version": "v3" }, { "schema": 4, @@ -103,4 +104,4 @@ } ] } -} +} \ No newline at end of file diff --git a/wordpress/post/pinterest_pin_creation/mesa.json b/wordpress/post/pinterest_pin_creation/mesa.json index 1dc9ee6f..3d97bf20 100644 --- a/wordpress/post/pinterest_pin_creation/mesa.json +++ b/wordpress/post/pinterest_pin_creation/mesa.json @@ -1,105 +1,101 @@ { - "key": "wordpress/post/pinterest_pin_creation", - "name": "Create Pinterest Pins from WordPress Blog Posts", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ - { - "schema": 4, - "trigger_type": "input", - "type": "wordpress", - "entity": "post", - "action": "list-created", - "name": "Post Published", - "key": "wordpress", - "operation_id": "post_published", - "metadata": { - "api_endpoint": "get /posts", - "poll": "@hourly:0 * * * *" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 + "key": "wordpress/post/pinterest_pin_creation", + "name": "Create Pinterest Pins from WordPress Blog Posts", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 4, + "trigger_type": "input", + "type": "wordpress", + "entity": "post", + "action": "list-created", + "name": "Post Published", + "key": "wordpress", + "operation_id": "post_published", + "metadata": { + "api_endpoint": "get /posts", + "poll": "@hourly:0 * * * *" + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "wordpress", + "entity": "media", + "action": "retrieve", + "name": "Retrieve Media", + "key": "wordpress_1", + "operation_id": "media-retrieve", + "metadata": { + "api_endpoint": "get /wp/v2/media/{id}", + "path": { + "id": "{{wordpress.featured_media}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Use AI to Reduce the Pinterest Pin Title", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "Shorten the title to max length = 100 characters and remove any ASCHII codes {{wordpress.title.rendered}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 1 + }, + { + "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": "{{wordpress.link}}", + "title": "{{ai.response}}", + "description": "{{wordpress.excerpt.rendered | strip_html}}", + "board_id": "{{ template | label: 'Which board should the pin be created on?', tokens: false }}", + "media_source": { + "source_type": "image_url", + "url": "{{wordpress_1.source_url}}", + "is_standard": true } - ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "wordpress", - "entity": "media", - "action": "retrieve", - "name": "Retrieve Media", - "key": "wordpress_1", - "operation_id": "media-retrieve", - "metadata": { - "api_endpoint": "get /wp/v2/media/{id}", - "path": { - "id": "{{wordpress.featured_media}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Use AI to Reduce the Pinterest Pin Title", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post /prompt", - "body": { - "role": "user", - "content": "Shorten the title to max length = 100 characters and remove any ASCHII codes {{wordpress.title.rendered}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 1 - }, - { - "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": "{{wordpress.link}}", - "title": "{{ai.response}}", - "description": "{{wordpress.excerpt.rendered | strip_html}}", - "board_id": "{{ template | label: 'Which board should the pin be created on?', tokens: false }}", - "media_source": { - "source_type": "image_url", - "url": "{{wordpress_1.source_url}}", - "is_standard": true - } - } - }, - "local_fields": [], - "selected_fields": [ - "body.title", - "body.description", - "body.link" - ], - "on_error": "default", - "weight": 2 - } - ] - } + } + }, + "local_fields": [], + "selected_fields": ["body.title", "body.description", "body.link"], + "on_error": "default", + "weight": 2 + } + ] + } } diff --git a/zendesk/ticket/summarize_closed_tickets_and_send_to_asana/mesa.json b/zendesk/ticket/summarize_closed_tickets_and_send_to_asana/mesa.json index ae078350..ce53337c 100644 --- a/zendesk/ticket/summarize_closed_tickets_and_send_to_asana/mesa.json +++ b/zendesk/ticket/summarize_closed_tickets_and_send_to_asana/mesa.json @@ -1,178 +1,176 @@ { - "key": "zendesk/ticket/summarize_closed_tickets_and_send_to_asana", - "name": "Send Closed Zendesk Ticket Summaries to Asana", - "version": "1.0.0", - "enabled": false, - "setup": true, - "config": { - "inputs": [ + "key": "zendesk/ticket/summarize_closed_tickets_and_send_to_asana", + "name": "Send Closed Zendesk Ticket Summaries to Asana", + "version": "1.0.0", + "enabled": false, + "setup": true, + "config": { + "inputs": [ + { + "schema": 4, + "trigger_type": "input", + "type": "zendesk", + "entity": "status", + "action": "changed", + "name": "Ticket Status Updated", + "key": "zendesk", + "operation_id": "status_changed", + "metadata": [], + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + } + ], + "outputs": [ + { + "schema": 4, + "trigger_type": "output", + "type": "zendesk", + "entity": "ticket", + "action": "get", + "name": "Retrieve Ticket", + "key": "zendesk_1", + "operation_id": "ShowTicket", + "metadata": { + "api_endpoint": "get /api/v2/tickets/{ticket_id}", + "path": { + "ticket_id": "{{zendesk.id}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 0 + }, + { + "schema": 4.1, + "trigger_type": "output", + "type": "filter", + "name": "Check if Ticket Status is Closed", + "key": "filter", + "operation_id": "filter", + "metadata": { + "a": "{{zendesk_1.status}}", + "comparison": "equals", + "b": "closed", + "additional": [ { - "schema": 4, - "trigger_type": "input", - "type": "zendesk", - "entity": "status", - "action": "changed", - "name": "Ticket Status Updated", - "key": "zendesk", - "operation_id": "status_changed", - "metadata": [], - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 + "operator": "and", + "comparison": "equals" } - ], - "outputs": [ - { - "schema": 4, - "trigger_type": "output", - "type": "zendesk", - "entity": "ticket", - "action": "get", - "name": "Retrieve Ticket", - "key": "zendesk_1", - "operation_id": "ShowTicket", - "metadata": { - "api_endpoint": "get \/api\/v2\/tickets\/{ticket_id}", - "path": { - "ticket_id": "{{zendesk.id}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 0 - }, - { - "schema": 4.1, - "trigger_type": "output", - "type": "filter", - "name": "Check if Ticket Status is Closed", - "key": "filter", - "operation_id": "filter", - "metadata": { - "a": "{{zendesk_1.status}}", - "comparison": "equals", - "b": "closed", - "additional": [ - { - "operator": "and", - "comparison": "equals" - } - ] - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 1 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "zendesk", - "entity": "ticket_comment", - "action": "list", - "name": "Get List of Comments", - "key": "zendesk_2", - "operation_id": "ListTicketComments", - "metadata": { - "api_endpoint": "get \/api\/v2\/tickets\/{ticket_id}\/comments", - "path": { - "ticket_id": "{{zendesk_1.id}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 2 - }, - { - "schema": 5.1, - "trigger_type": "output", - "type": "loop", - "entity": "map", - "name": "Loop Through Comments", - "version": "v3", - "key": "loop_2", - "operation_id": "loop_map", - "metadata": { - "key": "{{zendesk_2.comments[]}}", - "map_field": "{{zendesk_2.comments[].body}}" - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 3 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Generate Title", - "version": "v2", - "key": "ai_1", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "body": { - "role": "user", - "content": "Based on the customer support thread provided {{loop_2.comma_separated}}, generate a short, descriptive title that captures the essence of the customer\u2019s concern or situation. Avoid technical jargon.\n\nExample Input:\n\u201cCustomer: I can't access my dashboard, Support: Can you try clearing your cache?, Customer: That worked, thanks!\u201d\n\nExample Output:\nLogin Issue Resolved After Basic Troubleshooting " - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 4 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "ai", - "entity": "prompt", - "action": "create", - "name": "Generate Summary", - "version": "v2", - "key": "ai", - "operation_id": "post-prompt", - "metadata": { - "api_endpoint": "post \/prompt", - "body": { - "role": "user", - "content": "Summary Writing Instructions for Support Threads:\nWhen reviewing a customer support thread (messages separated by commas), write a short, clear summary that includes only:\n\n-General nature of the customer\u2019s problem (no technical detail)\n-Their experience or sentiment (e.g., frustration, confusion, satisfaction)\n-Resolution status (resolved, pending, unclear)\n-The solution provided\n\nExample\nInput:\nCustomer: I can't access my dashboard, Support: Can you try clearing your cache?, Customer: That worked, thanks!\n\nOutput:\nThe customer was unable to access their dashboard but regained access after clearing the cache. They appeared satisfied with the outcome. {{loop_2.comma_separated}}" - } - }, - "local_fields": [], - "selected_fields": [], - "on_error": "default", - "weight": 5 - }, - { - "schema": 4, - "trigger_type": "output", - "type": "asana", - "entity": "task", - "action": "create", - "name": "Create Task", - "key": "asana", - "operation_id": "createTaskMesa", - "metadata": { - "api_endpoint": "post \/mesa\/tasks", - "body": { - "workspace": "{{ template | label: 'What is the workspace?', description: '', tokens: false, placeholder: '' }}", - "projects": "{{ template | label: 'What is the project?', description: '', tokens: false, placeholder: '' }}", - "name": "{{ai_1.response}}", - "notes": "Zendesk Summary: {{ai.response}}\nTicket #: {{zendesk_1.id}}\nCustomer Email: {{zendesk_1.recipient}}\nTicket Updated At: {{zendesk_1.updated_at}}" - } - }, - "local_fields": [], - "selected_fields": [ - "body.notes" - ], - "on_error": "default", - "weight": 6 + ] + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 1 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "zendesk", + "entity": "ticket_comment", + "action": "list", + "name": "Get List of Comments", + "key": "zendesk_2", + "operation_id": "ListTicketComments", + "metadata": { + "api_endpoint": "get /api/v2/tickets/{ticket_id}/comments", + "path": { + "ticket_id": "{{zendesk_1.id}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 2 + }, + { + "schema": 5.1, + "trigger_type": "output", + "type": "loop", + "entity": "map", + "name": "Loop Through Comments", + "version": "v3", + "key": "loop_2", + "operation_id": "loop_map", + "metadata": { + "key": "{{zendesk_2.comments[]}}", + "map_field": "{{zendesk_2.comments[].body}}" + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 3 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Generate Title", + "version": "v3", + "key": "ai_1", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "Based on the customer support thread provided {{loop_2.comma_separated}}, generate a short, descriptive title that captures the essence of the customer\u2019s concern or situation. Avoid technical jargon.\n\nExample Input:\n\u201cCustomer: I can't access my dashboard, Support: Can you try clearing your cache?, Customer: That worked, thanks!\u201d\n\nExample Output:\nLogin Issue Resolved After Basic Troubleshooting " + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 4 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "ai", + "entity": "prompt", + "action": "create", + "name": "Generate Summary", + "version": "v3", + "key": "ai", + "operation_id": "post-prompt", + "metadata": { + "api_endpoint": "post /prompt", + "body": { + "role": "user", + "content": "Summary Writing Instructions for Support Threads:\nWhen reviewing a customer support thread (messages separated by commas), write a short, clear summary that includes only:\n\n-General nature of the customer\u2019s problem (no technical detail)\n-Their experience or sentiment (e.g., frustration, confusion, satisfaction)\n-Resolution status (resolved, pending, unclear)\n-The solution provided\n\nExample\nInput:\nCustomer: I can't access my dashboard, Support: Can you try clearing your cache?, Customer: That worked, thanks!\n\nOutput:\nThe customer was unable to access their dashboard but regained access after clearing the cache. They appeared satisfied with the outcome. {{loop_2.comma_separated}}" + } + }, + "local_fields": [], + "selected_fields": [], + "on_error": "default", + "weight": 5 + }, + { + "schema": 4, + "trigger_type": "output", + "type": "asana", + "entity": "task", + "action": "create", + "name": "Create Task", + "key": "asana", + "operation_id": "createTaskMesa", + "metadata": { + "api_endpoint": "post /mesa/tasks", + "body": { + "workspace": "{{ template | label: 'What is the workspace?', description: '', tokens: false, placeholder: '' }}", + "projects": "{{ template | label: 'What is the project?', description: '', tokens: false, placeholder: '' }}", + "name": "{{ai_1.response}}", + "notes": "Zendesk Summary: {{ai.response}}\nTicket #: {{zendesk_1.id}}\nCustomer Email: {{zendesk_1.recipient}}\nTicket Updated At: {{zendesk_1.updated_at}}" } - ] - } -} \ No newline at end of file + }, + "local_fields": [], + "selected_fields": ["body.notes"], + "on_error": "default", + "weight": 6 + } + ] + } +}