# Table of Contents - [Introduction | Relay.app Docs](#introduction-relay-app-docs) - [Find Steps | Relay.app Docs](#find-steps-relay-app-docs) - [Webhook Trigger | Relay.app Docs](#webhook-trigger-relay-app-docs) - [Actions 101 | Relay.app Docs](#actions-101-relay-app-docs) - [Mailhook Trigger | Relay.app Docs](#mailhook-trigger-relay-app-docs) - [FAQ | Relay.app Docs](#faq-relay-app-docs) - [Triggers 101 | Relay.app Docs](#triggers-101-relay-app-docs) - [Inspecting Run Data | Relay.app Docs](#inspecting-run-data-relay-app-docs) - [Agentic Tool Use | Relay.app Docs](#agentic-tool-use-relay-app-docs) - [Scheduled Trigger | Relay.app Docs](#scheduled-trigger-relay-app-docs) - [Manual Trigger | Relay.app Docs](#manual-trigger-relay-app-docs) - [Batch Triggers | Relay.app Docs](#batch-triggers-relay-app-docs) - [Helpful Resources | Relay.app Docs](#helpful-resources-relay-app-docs) - [AI Steps | Relay.app Docs](#ai-steps-relay-app-docs) - [Step Outputs | Relay.app Docs](#step-outputs-relay-app-docs) - [Custom HTTP Requests | Relay.app Docs](#custom-http-requests-relay-app-docs) - [Audio Transcription | Relay.app Docs](#audio-transcription-relay-app-docs) - [Lists (Arrays) | Relay.app Docs](#lists-arrays-relay-app-docs) - [Iterators | Relay.app Docs](#iterators-relay-app-docs) - [Prompt Tips | Relay.app Docs](#prompt-tips-relay-app-docs) - [Run Custom Code (JS) | Relay.app Docs](#run-custom-code-js-relay-app-docs) - [Scrape Text from Website | Relay.app Docs](#scrape-text-from-website-relay-app-docs) - [Paths | Relay.app Docs](#paths-relay-app-docs) - [Prompt Templates | Relay.app Docs](#prompt-templates-relay-app-docs) - [Wait steps | Relay.app Docs](#wait-steps-relay-app-docs) --- # Introduction | Relay.app Docs Last updated 3 months ago Was this helpful? **Recommended for getting started:** 1. Watch the video below 2. Watch the [Triggers 101](/triggers/triggers-101) video 3. Watch the [Actions 101](/actions-in-apps/actions-101) video 4. Read about [Step Outputs](/data/step-outputs) --- # Find Steps | Relay.app Docs Last updated 4 months ago Was this helpful? --- # Webhook Trigger | Relay.app Docs Last updated 3 months ago Was this helpful? [](#setting-up-a-webhook-trigger) Setting up a Webhook trigger ------------------------------------------------------------------- To get started, watch the video below and [read this tutorial](https://www.relay.app/blog/how-to-set-up-a-webhook-trigger) . Looking for making custom HTTP requests? [Learn more here](/built-in-actions/custom-http-requests) . ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FFKToWTH7rqxgRyPIzCAO%252FCleanShot%25202024-11-21%2520at%252012.41.58.png%3Falt%3Dmedia%26token%3D00d968e4-fedc-459f-8b37-80563096cda4&width=768&dpr=4&quality=100&sign=e1067756&sv=2) --- # Actions 101 | Relay.app Docs Last updated 4 months ago Was this helpful? --- # Mailhook Trigger | Relay.app Docs Last updated 7 days ago Was this helpful? The Mailhook trigger lets you trigger workflow runs when an email is received on a uniquely generated email address just for this workflow. [](#when-to-use-a-mailhook-trigger) When to use a Mailhook trigger ----------------------------------------------------------------------- You should use Mailhooks when you want to instantly trigger a workflow programmatically from another tool, but that tool (a) doesn't offer webhooks, and (b) Relay.app doesn't integrate with it yet. #### [](#mailhooks-vs.-webhooks) Mailhooks vs. Webhooks Mailhooks are very much analogous to webhooks, in that they're typically system-generated. There are some tools that have their own automation features, and can automatically send an email when something happens, but not many of those same tools let you send an arbitrary HTTP request (meaning: you can't use a webhook trigger). If a webhook is available, you should use that, but if it's not available, a mailhook may be your best choice. #### [](#mailhooks-vs.-a-standard-email-received-trigger) Mailhooks vs. a standard "Email Received" trigger For any mailhook trigger, you could also send those emails to your personal inbox and set up an Email Received trigger, but this is a much more deliberate (and less error-prone) way to accomplish that same end result without cluttering up your personal inbox. If your use case is to simply process all emails coming into your personal inbox with some light filtering, then the Gmail trigger is the way to go. But if you're working in a tool that sends emails programmatically, or you want to kick off runs only in very specific circumstances, the mailhook trigger is an easy way to set that up. [](#setting-up-a-mailhook-trigger) Setting up a Mailhook trigger --------------------------------------------------------------------- #### [](#id-1.-select-mailhook-from-the-trigger-menu) 1\. Select 'Mailhook' from the Trigger menu #### [](#id-2.-specify-who-might-send-emails-to-the-unique-email-address) 2\. Specify who might send emails to the unique email address By default, it's set to accept emails from **Any sender**. You can change this when desired. [](#step-output) Step output --------------------------------- The [Step output](/data/step-outputs) of the Mailhook trigger contains * The email's message **Body** * The email's **Subject** * The email address of the sender (**From**) * A List of recipients of the email (**To**) * A List of **CC**'d email addresses [](#size-limitations) Size limitations ------------------------------------------- There is a 10 MB request size limit on mailhook triggers. Because of the way mailhook requests are sent, rejections unfortunately will not come back to you in the form of a bounced message, so please be aware of this limit if you expect to receive messages with large attachments. ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FTemex0OK94ONPLdvz5wF%252FCleanShot%25202024-11-21%2520at%252012.41.58.png%3Falt%3Dmedia%26token%3D8ce18ce2-3aa8-4e4b-8a5d-02112c2d5d84&width=768&dpr=4&quality=100&sign=f20ef0fa&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F6kscg8pgKO1kvB5uuZFE%252FCleanShot%25202024-11-21%2520at%252012.54.37.png%3Falt%3Dmedia%26token%3Df4522165-8e7d-4d29-a42a-6715a4c249c0&width=768&dpr=4&quality=100&sign=aaaeeb55&sv=2) --- # FAQ | Relay.app Docs Last updated 3 months ago Was this helpful? What should I do if Relay.app is missing an integration I need?[](#what-should-i-do-if-relay.app-is-missing-an-integration-i-need) Check out our [integration requests board](https://relay-integration-requests.nolt.io/top) and add your vote! How do I reconnect an app when troubleshooting?[](#how-do-i-reconnect-an-app-when-troubleshooting) Navigate to the '[Manage apps](https://run.relay.app/settings/apps) ' screen and click the **Reconnect** button next to the name of the app you're looking to reconnect. What compliance certifications does Relay.app have?[](#what-compliance-certifications-does-relay.app-have) Relay.app has SOC2 Type 2 Compliance. Visit our security page at [https://www.relay.app/security](https://www.relay.app/security) for detailed information ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FBRyTDGgMWL0TozwDafGJ%252FCleanShot%25202024-09-18%2520at%252019.48.47.png%3Falt%3Dmedia%26token%3D6bc837bb-9e68-4191-a723-903df439948a&width=300&dpr=4&quality=100&sign=36621e33&sv=2) --- # Triggers 101 | Relay.app Docs Last updated 3 months ago Was this helpful? Every workflow in Relay.app starts with a trigger, so setting up your trigger correctly is the most important part of any workflow. To get started, here's a 2-minute tutorial that will give you the basics: ### [](#setting-up-a-trigger) Setting up a trigger At the top of the new workflow creation screen, you'll see a button to add a trigger. ### [](#event-based-triggers-in-connected-apps) Event-based triggers in connected apps The most common type of trigger is based on an event in a connected app. For example: * When an email is received in Gmail * When a record changes state in Salesforce * When a meeting is booked in Calendly Once you've selected the app and the trigger type, you'll see a trigger configuration panel. The panel contains three sections: 1. **Trigger type:** This specifies the event that will activate the workflow. In this example, the event is receiving an email, but within Gmail, you could also choose your triggering event to be a "Label added" or "Email sent." 2. **Filters:** Adding filters is optional, but they help make sure your workflow only triggers when you want it to. For example, use filters on this "Email received" trigger to control which subset of incoming emails should kick off the workflow—like only specific keywords in the subject, or whether there are attachments. 3. **Preview:** The preview table dynamically shows examples of past events that would have kicked off the workflow so you can make sure it's behaving the way you expect. For example, it can show which past emails would have matched the Gmail trigger and applied filters. #### [](#make-sure-youre-catching-the-right-events-with-the-trigger-preview) Make sure you're catching the right events with the trigger preview The trigger preview table is excellent for verifying that your trigger will behave the way you expect it to. As soon as you edit a filter, the preview table will refresh automatically to show how your changes impact which items would have triggered a run of your workflow. Whenever you change a filter, double check the trigger preview table to make sure you see the results you expect. When you're confident you have your trigger configured correctly, you can move on to setting up the remainder of your workflow. ### [](#what-do-i-do-if-my-trigger-isnt-working) What do I do if my trigger isn't working? If you expect a trigger to fire and it hasn't, it's usually for one of these reasons: 1. The trigger is not turned on. 2. The triggering event occurred before the trigger was turned on. 3. A trigger filter is configured in a way that made the trigger miss the event you expected it to catch. (Check the trigger preview table to confirm your filters are set up correctly.) 4. It hasn't yet triggered, but it will. Some triggers can take up to an hour and even "instant" triggers can sometimes take minutes. If you've checked all of those, it could be a bug! Click the question mark icon in the bottom right of the app to get help, or email support@relay.app with a screenshot or video recording of the event you expected to activate the trigger. ### [](#trigger-errors) Trigger errors Occasionally, errors are encountered when a trigger executes. Examples of errors include: * The application or integration used for the trigger is down temporarily * The user no longer has access to the resources being monitored by the trigger in the integration * The resource being monitored doesn't exist anymore * The integration has revoked access to the user's connection * The connection used for the trigger has been removed (or was unshared with you) When Relay.app detects repeated errors, an email notification will be sent to the trigger owner so they can be made aware and fix the problem. Note that Relay.app will only notify the user after a few errors have been detected to avoid over-notifying users about transient errors in the trigger integration. After the trigger error notification is sent, Relay.app will keep trying to successfully trigger the workflow. If the error is persistent, the trigger will be automatically turned off and a second email notification will be sent to the trigger owner. Workflows that have trigger errors or that have been automatically turned off will be highlighted in the navigation menu for the trigger owner and workspace admins. The "Add Trigger" menu includes many trigger types. The trigger configuration panel for an "Email Received" trigger. ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F5mV5zeUEwqYYhqWrNmQc%252FScreenshot%25202024-10-17%2520at%25202.46.34%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D325d22e6-ceac-4290-8ceb-0b7aff6ae96b&width=768&dpr=4&quality=100&sign=495e40fb&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FpNlc8pGf9Ki5mdZKwrjf%252FScreenshot%25202024-10-17%2520at%25202.48.57%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D3b207f4d-72d2-4728-a709-36effcef6f1d&width=768&dpr=4&quality=100&sign=8e1630e5&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FjHxlOzEOUxiSKCvwrPBU%252Fimage.png%3Falt%3Dmedia%26token%3Dd6086e42-b4b5-4206-b0a3-5a4c15fa2b51&width=768&dpr=4&quality=100&sign=195fc53e&sv=2) --- # Inspecting Run Data | Relay.app Docs Last updated 4 months ago Was this helpful? When viewing a particular workflow run, you can see the [Step Output](/data/step-outputs) pills on the right side next to each executed step. When clicking on a Step Output pill, the Data Inspector comes up which lets you understand the data as it was known (or created/updated) since excuting that step. Next to each executed step in the Run View, you can find a Step Output pill Data Inspector with specific run data for a Step Output ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fu00BIfMQt4NcgtOcD7mR%252FCleanShot%25202024-11-18%2520at%252018.58.41.png%3Falt%3Dmedia%26token%3D9acd1003-fcff-47ec-bd30-549aadd32782&width=768&dpr=4&quality=100&sign=bef4c6de&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fe21Jnxkjy0SKwkUjqWaj%252FCleanShot%25202024-11-18%2520at%252019.00.00.png%3Falt%3Dmedia%26token%3D827226ab-0826-419c-b130-3fe1df37665b&width=768&dpr=4&quality=100&sign=60ef12e&sv=2) --- # Agentic Tool Use | Relay.app Docs Last updated 10 days ago Was this helpful? Our agentic tool use step is a complex capability that's designed for our most advanced users. In almost all cases, you should select a regular Custom Prompt AI step, but when you need AI to repeatedly call tools until a higher level abstract goal is achieved, they can be incredibly powerful. Below are two videos that showcases how agentic tool use steps are different from other AI steps and how to set one up. --- # Scheduled Trigger | Relay.app Docs Last updated 3 months ago Was this helpful? Scheduled Triggers let you define a custom schedule/frequency how often runs of a workflow should be triggered. For example: * Every working day at 5pm * Every 1st Monday of the month at 9am * Every 15 minutes * etc [](#setting-up-a-scheduled-trigger) Setting up a Scheduled trigger ----------------------------------------------------------------------- #### [](#id-1.-select-scheduled-from-the-trigger-menu) 1\. Select 'Scheduled' from the Trigger menu #### [](#id-2.-specify-the-schedule-on-which-runs-should-be-triggered) 2\. Specify the schedule on which runs should be triggered #### [](#id-3.-finish-the-workflow-and-turn-the-trigger-on) 3\. Finish the workflow and turn the trigger on ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FB2zuIUEMdur7kE3R6dvo%252FCleanShot%25202024-11-21%2520at%252012.41.58.png%3Falt%3Dmedia%26token%3D70c08e0b-207b-4835-a775-93230929e263&width=768&dpr=4&quality=100&sign=98944796&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FGufDH7ClQMuIvo1wahrV%252FCleanShot%25202024-11-21%2520at%252013.51.32.png%3Falt%3Dmedia%26token%3D5c763829-1a03-423e-8e46-06ea87994d45&width=768&dpr=4&quality=100&sign=8b046baf&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FcGVv6jPKnBHbGTk4sl0L%252FCleanShot%25202024-11-21%2520at%252013.52.38.png%3Falt%3Dmedia%26token%3De8c26d99-0891-40b2-ae38-c1eb96c4103e&width=768&dpr=4&quality=100&sign=c08559b0&sv=2) --- # Manual Trigger | Relay.app Docs Last updated 1 month ago Was this helpful? With a manual trigger, you can run a workflow on demand. You can start one or [multiple](/triggers/batch-triggers) new runs on click, or set up a [custom schedule](/triggers/scheduled-trigger) to run the workflow at a desired frequency. [](#setting-up-a-manual-trigger) Setting up a manual trigger ----------------------------------------------------------------- #### [](#id-1.-select-manual-from-the-trigger-menu) 1\. Select _Manual_ from the trigger menu Choose whether you want to start a single run or [multiple runs](/triggers/batch-triggers) every time the workflow runs. #### [](#id-2.-specify-any-optional-workflow-inputs) 2\. Specify any optional workflow inputs If you want to be able to input custom data each time the manual workflow runs, you can specify what data will be needed to run the workflow in the trigger panel. You'll then be able to use these run inputs as variables in the rest of the workflow. They will be accessible as [step ouputs](/data/step-outputs) of the trigger step. [](#starting-runs-of-a-workflow-with-a-manual-trigger) Starting runs of a workflow with a manual trigger ------------------------------------------------------------------------------------------------------------- #### [](#id-1.-start-a-new-run-manually) 1\. Start a new run manually Click the **Start run** button in the trigger card to start a new run of the workflow. #### [](#id-2.-fill-in-any-required-inputs) 2\. Fill in any required inputs If your workflow requires inputs, when you start it manually you'll be asked to input the requested data. Fill it in and click **Start run**. [](#starting-runs-from-another-workflow) Starting runs from another workflow --------------------------------------------------------------------------------- In most cases, you'll want to [consider using Sequences instead](/flow-control/sequences) . In addition to starting runs manually with a click, you can also call a manual workflow from another workflow and pass data between them. _For clarity, let's call these two workflows your_ _**primary workflow**_ _(the workflow doing the calling) and_ _**secondary workflow**_ _(the manual workflow getting triggered by the primary)._ #### [](#id-1.-specify-any-data-you-want-to-pass-between-workflows) 1\. Specify any data you want to pass between workflows First, you need to create **run inputs** in the secondary workflow for any data you want to receive from the primary workflow. Open the secondary workflow and create a run input for each variable you need to pass into it. #### [](#id-2.-add-a-trigger-workflow-step-to-the-primary-workflow) 2\. Add a _Trigger workflow_ step to the primary workflow Open your primary workflow, add a new step, and under **Flow control** select **Trigger run of a manual workflow**. #### [](#id-2.-select-the-secondary-workflow-to-call) 2\. Select the secondary workflow to call Select your secondary workflow as the manual workflow to call from the primary workflow. #### [](#id-3.-map-data-to-the-required-inputs) 3\. Map data to the required inputs The inputs required by the secondary workflow will be available as fields in the **Trigger run** step. Map data from the primary workflow into these fields in order to make it accessible to the secondary workflow. #### [](#id-4.-test-it) 4\. Test it Start a test run of your primary workflow. When the workflow runs, you should see: 1. The primary workflow will call the secondary workflow when it gets to the trigger step 2. Any data added as run inputs will be passed from the primary to the secondary workflow 3. The secondary workflow will start a new run 4. The data from the primary workflow will be used in the secondary workflow "Manual" trigger options in the trigger panel Optionally, you can add run inputs to a manual trigger Trigger options ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F1GG3pzfjv0eI4h1gqmud%252FCleanShot%25202024-11-21%2520at%252012.41.58.png%3Falt%3Dmedia%26token%3D8a44c682-c82f-409e-b1d3-f0feb16d0485&width=768&dpr=4&quality=100&sign=1188ed5&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F2Urs8sq8Q2u2PUKRvy0q%252FCleanShot%25202024-11-21%2520at%252012.49.40.png%3Falt%3Dmedia%26token%3D93864770-b5bf-4f51-b106-7757be836f9f&width=768&dpr=4&quality=100&sign=7cf859d0&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F5d1XDZjqDSIbZXvltErJ%252FCleanShot%25202024-11-21%2520at%252012.49.40.png%3Falt%3Dmedia%26token%3Dbf7a8b12-3060-4933-b7fd-138e8f795281&width=768&dpr=4&quality=100&sign=ef68418a&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FXTC9a4aKbmZgNY0LVTLe%252FCleanShot%25202024-11-21%2520at%252012.53.40.png%3Falt%3Dmedia%26token%3D47adbd6c-6abe-4f4e-a708-7f2da9e385a4&width=768&dpr=4&quality=100&sign=536dd95a&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fo8IS6ItGRaS21fRA12LY%252Fimage.png%3Falt%3Dmedia%26token%3Da07b3760-27ec-4269-9579-41747d23d154&width=768&dpr=4&quality=100&sign=bd857a7f&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fr6TeH25A5oaeqdKUgvPZ%252FScreenshot%25202025-01-05%2520at%25207.11.24%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D6eb46578-d189-4c4a-8e84-916d02d27f5d&width=768&dpr=4&quality=100&sign=2cb54d30&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F17k8B3we1rbVMCLbxxjr%252FScreenshot%25202025-01-05%2520at%25207.12.15%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D8be8e3d8-77d2-4277-a3ae-04f494620c0d&width=768&dpr=4&quality=100&sign=ec46f710&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fd5bXPMCv0y8cMgvNt4mu%252Fimage.png%3Falt%3Dmedia%26token%3D915ba7e9-5461-48e0-947f-155db59c5268&width=768&dpr=4&quality=100&sign=31284a6a&sv=2) --- # Batch Triggers | Relay.app Docs Last updated 4 months ago Was this helpful? Batch triggers are a special type of trigger that lets you run a workflow for a whole batch of items. For example, if you want to email every contact in a spreadsheet or send a slack reminder for every open task, batch triggers are the best way to do it. To create a batch trigger, select "Start runs in batches" in the trigger menu. #### [](#types-of-batch-triggers) Types of Batch Triggers * **Manual** \- There are for one-time workflows, like a single mail merge that emails every contact in a spreadsheet. * **Recurring schedule** - These are for regular processes that you want to run on a set cadence, like a daily summary of important tasks. #### [](#setting-up-your-batch-trigger) Setting up your Batch Trigger Here are the steps to setting it put. 1. Select an App 1. Set up your filters to specific which items should run a workflow 1. \[Optional\] If it's a recurring schedule batch trigger, set up the schedule 1. Add steps to your workflow 1. Create a test run with a single item 1. Turn it on! Trigger menu to create a batch trigger Example of a batch trigger in Gmail Example trigger for all emails with the "Support" label Batch trigger that runs daily at 8am Example automation to reply to each email ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F8DvywkHSevpjGu1KD1W2%252FScreenshot%25202024-10-25%2520at%25202.23.34%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Ddc8bb90f-616b-438a-b508-1ccc66571bfd&width=768&dpr=4&quality=100&sign=f12dcdb9&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F5SYaw6BhIVPJ6HwBGxQU%252FScreenshot%25202024-10-25%2520at%25202.25.01%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Dca44c06d-674b-4238-ac84-dbb62752d627&width=768&dpr=4&quality=100&sign=c5dc0e8f&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FcMAupFymj272OEbuUlmF%252FScreenshot%25202024-10-25%2520at%25202.25.57%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D19f1ac42-bca5-44f6-b308-aff7e269a9b7&width=768&dpr=4&quality=100&sign=8bf85dba&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F7ZZL1bKYvMAOihTm6uHB%252FScreenshot%25202024-10-25%2520at%25202.27.21%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Dfd120f60-d02c-40d1-98a2-4d4a6f5347d8&width=768&dpr=4&quality=100&sign=e80fe66a&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FaLT3sHmYZdMJk3tFBd9p%252FScreenshot%25202024-10-25%2520at%25202.27.58%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Dd27c0812-66fa-4d43-87ba-3d15cfbe3d8d&width=768&dpr=4&quality=100&sign=ea02383b&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FqZM2kecbfNiAK9anrQ47%252FScreenshot%25202024-10-25%2520at%25202.20.58%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D509f875c-24d6-4424-ab6d-5e947fb549ca&width=768&dpr=4&quality=100&sign=681fc19c&sv=2) --- # Helpful Resources | Relay.app Docs Last updated 7 months ago Was this helpful? [](#app-integrations) App Integrations ------------------------------------------- To view the complete set of app integrations that Relay.app supports, visit [relay.app/apps](https://www.relay.app/apps) . You can filter apps alphabetically or by category. If you select a particular app, you can see a reference of all of the triggers and actions that are supported in that app. Each page also contains links to several detailed how-to pages that will show a step-by-step guide to completing a particular use case. [](#tutorials) Tutorials ----------------------------- To get the most out of Relay.app's features. you can find a collection of tutorials at [https://www.relay.app/blog/topic/tutorials](https://www.relay.app/blog/topic/tutorials) . These include detailed posts on how to use specific Relay.app features (e.g. iterators) as well as guides to particular use cases (e.g. extracting data from images). [](#videos) Videos ----------------------- For many people, the best way to learn is by watching videos, and we have an active [Youtube channel](https://www.youtube.com/channel/UCIENacxDzvxb7mWIXZRZtAQ) with over 50 videos demonstrating how to use Relay.app from basic features to advanced AI use cases. Here's an example of a video of how to use Relay.app to automatically follow a blog and summarize the posts. An example of an app reference page showing the triggers and actions for Gmail. An example link to a how-to guide to connect Gmail and Google Drive. Example tutorials on the Relay.app blog. ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FBZGsY9bbK2WmL6lIbHm3%252FScreen%2520Shot%25202024-08-06%2520at%25208.56.43%2520PM.png%3Falt%3Dmedia%26token%3Dbd0f8070-9b75-4fe8-8748-6fde7d0ae8a5&width=768&dpr=4&quality=100&sign=1ae5580e&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F7Q03z8CJodeM92fhgtv4%252FScreen%2520Shot%25202024-08-06%2520at%25208.58.09%2520PM.png%3Falt%3Dmedia%26token%3D303ccf05-0fd4-4d16-90fa-a60dbe2b528e&width=768&dpr=4&quality=100&sign=88685565&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FKdaznAItdKq1O9pPZ07l%252FScreen%2520Shot%25202024-08-06%2520at%25209.00.07%2520PM.png%3Falt%3Dmedia%26token%3D28c55885-8784-41e9-8cdf-c32ea2501de0&width=768&dpr=4&quality=100&sign=fc6333cc&sv=2) --- # AI Steps | Relay.app Docs Last updated 10 days ago Was this helpful? Relay.app has three kinds of AI actions: * **Built-in actions** — Common tasks like extraction, summarization, translation, and transcription. * **Prompt any model** — Flexible steps that can take any input and produce a desired structured output. * [**Agentic tool use**](/ai/agentic-tool-use) — Let AI decide which actions to perform (and how often) based on a set of actions you give it access to You can learn more about these different types of AI features in Relay.app [here](https://www.relay.app/features/ai) . [](#how-to-connect-a-model) How to connect a model ------------------------------------------------------- There are two main ways to connect a model to an AI step in Relay.app. 1. **Recommended: Use Relay.app's AI credits:** You can use various OpenAI, Google, and Anthropic models via the [AI credits](/ai/ai-steps#ai-credits) that come with your plan in Relay.app. This means that you don't need to connect an account with an underlying model provider, connect any API keys, or purchase credits through that model provider. Simply select one of the AI credit model options and start using AI in your workflows. 2. **Advanced: Use direct connection:** If you already have an account with OpenAI, Anthropic, or another model provider, and you've already purchased credits there, you can choose to call models directly via those accounts by selecting one of the Connected Models in the dialog below. Note that OpenAI platform credits are separate from ChatGPT Plus subscriptions. Read more about purchasing credits [here](https://www.relay.app/blog/how-to-buy-credits-for-the-openai-platform-and-api) . [](#emitting-structured-data) Emitting Structured Data ----------------------------------------------------------- AI steps are capable of emitting structured data rather than just plain text, that can then be passed into other automation steps. When emitting structured data, providing instructions to help the AI know what to extract can be very helpful. When prompting, it can be helpful to know that the date, time and duration formats output by the AI should all be in the ISO 8601 format. [](#dealing-with-errors) Dealing with errors ------------------------------------------------- While AI is getting better by the day, it can still be unpredictable. In most cases, if you have a step that is resulting in an error or not producing the output you want, you'll need to adapt your prompt. We'll be adding prompt tips here in the future, but for now you can email support@relay.app for assistance. ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fc98P7GeO9mJpqm8CxcVQ%252FCleanShot%25202024-09-11%2520at%252012.55.28.png%3Falt%3Dmedia%26token%3D71d4e360-8c3a-42f1-9e9c-3a8767b04846&width=768&dpr=4&quality=100&sign=2c95bae1&sv=2) --- # Step Outputs | Relay.app Docs Last updated 3 months ago Was this helpful? [](#how-data-enters-a-workflow) How data enters a workflow --------------------------------------------------------------- Getting data from one app into another is essential to every workflow. Data enters your workflow via Step Outputs. As its name implies, a Step Output is the output of a step. The most common ways data enters a workflow: 1. The Step Output of a [Trigger](/triggers/triggers-101) 2. The Step Output of a [Find Step](/data/find-steps) 3. The Step Output of another [Action](/actions-in-apps/actions-101) [](#anatomy-of-a-step-output-pill) Anatomy of a Step Output pill --------------------------------------------------------------------- Step Outputs are shown as a "pills", e.g. . Each pill contains: * The **step number** of the step that generated it (step #1 is the Trigger) * The **logo of the app** the data originates from (e.g. Gmail, Google Sheets or HubSpot) * The **type** of the data object in words (e.g. 'Email', 'Row' or 'Contact') When a specific data field within inside a Step Output is referenced, the name of that field is shown as well:. When data is referenced from objects that are nested/linked from within the original Step Output, levels of nesting are indicated with a `>`. For example, this Step Output pill represents the Email address of the Customer that's linked to a Subscription within Paddle: [](#step-outputs-help-you-understand-where-data-is-coming-from) Step Outputs help you understand where data is coming from ------------------------------------------------------------------------------------------------------------------------------- Anywhere dynamic/variable data is referenced, a Step Output pill is shown. Below is an annotated screenshot of a workflow in the Editor, visually connecting Step Output pills with the steps they originated from. ### [](#linked-data-is-always-accessible) Linked data is always accessible Step Outputs give instant access to infinite levels of linked data for all our integrations. **There's no need to add additional complex lookup steps** just to use data that's linked or nested. Whether it's a grabbing a Contact that's associated with a Company that's associated with a Deal in your CRM that triggered the workflow, or simply updating a linked Database Page from Notion. ### [](#data-is-always-up-to-date) Data is always up-to-date Every time data is used in a workflow run, the current and up-to-date value is fetched from the app to use it. * You never need to re-fetch a Step Output (e.g. through a Find Step) to get up-to-date data, even if e.g. you have a "[wait 5 days](/flow-control/wait-steps) " step before using the Step Output (again)! ### [](#data-in-step-outputs-is-typed) Data in Step Outputs is typed Most apps specify the 'type' of a given data field. Example data types are Text, Date, Number, Email or File but they may also be types that are custom to the app, like Contact and Company for a CRM or Subscription and Payment for a payment provider. Relay.app uses data types to make it incredibly easy to connect data across apps, and ensure that the data stays in the correct format. For example, the 'Attachments' input in a Gmail automation will only accept data fields that are of the type File. [](#inspecting-what-linked-data-is-available-through-a-step-output) Inspecting what (linked) data is available through a Step Output ----------------------------------------------------------------------------------------------------------------------------------------- To understand what data is available through a specific Step Output, open the step configuration dialog of the step that generated it, and click on the pill in the 'Output' section on the bottom of the dialog. [](#using-data-from-step-outputs-in-other-steps) **Using data from Step Outputs in other steps** ----------------------------------------------------------------------------------------------------- Step Outputs show up in data pickers in other steps: 1. **Text inputs**: insert data via the \[+\] or \[+ data\] entrypoint 2. **Text inputs:** insert data via the `@` keyboard shortcut while typing 3. **Typed inputs**: pick data through a type-specific picker [](#step-outputs-are-pretty-magical) Step Outputs are pretty magical ------------------------------------------------------------------------- You'll never need to add a 'Find' step to your workflow for a data object that was already pulled in previously in another step or the trigger, even when the underlying data might have changed in the meantime 🪄 🤯 Step Output pills help you understand where data came from Step Ouputs give instant access to infinite levels of linked data for all our integrations Click on a Step Output pill on the bottom of the step configuration dialog it originates from, to inspect its structure Inserting data via the \[+\] menu in Text inputs Inserting data via the '@' keyboard shortcut in Text inputs Picking data through a typed picker ('Date' in the example above) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FIA2BmyS2RI5bvV66DwXk%252FCleanShot%25202024-11-19%2520at%252010.34.43.png%3Falt%3Dmedia%26token%3D38d3b70d-9270-41f7-89d5-10e7c89bbd64&width=116&dpr=4&quality=100&sign=3fb182de&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FhtvumBZ1gufYwmC3BsO2%252FCleanShot%25202024-11-19%2520at%252010.34.02.png%3Falt%3Dmedia%26token%3Db1442399-9bc3-4615-9db2-f4261544c2fa&width=317&dpr=4&quality=100&sign=d0c40826&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FHCr99P4ThYYETjd3hgmH%252FCleanShot%25202024-11-19%2520at%252010.40.39.png%3Falt%3Dmedia%26token%3D3b57d2dc-4189-475d-8b70-409beb8ef744&width=428&dpr=4&quality=100&sign=40435483&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FnOB2wASwNC0FSY8QugWR%252FCleanShot%25202024-11-19%2520at%252011.01.19.png%3Falt%3Dmedia%26token%3D169f9323-1ab5-4f3a-b26a-0001a8fc44ed&width=768&dpr=4&quality=100&sign=28a3b3ac&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FrnUKamd0C4a73UClrOyU%252FCleanShot%25202024-08-16%2520at%252018.09.03.png%3Falt%3Dmedia%26token%3Dc023f541-fef8-47f8-a6c0-c63dd5d659d5&width=768&dpr=4&quality=100&sign=6e5f59f1&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F27NGomBti3sFjwQDnSlT%252FCleanShot%25202024-08-16%2520at%252018.20.12.png%3Falt%3Dmedia%26token%3Dae8aadfa-41ea-495b-8e09-60f1caca6580&width=768&dpr=4&quality=100&sign=707331dd&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FCdhC6dHGMeq3t8KVugic%252FCleanShot%25202024-11-19%2520at%252011.49.16.gif%3Falt%3Dmedia%26token%3D3a7a0575-efe3-48a1-9c5c-bd90ee535fa1&width=768&dpr=4&quality=100&sign=d503aef7&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fv0GEsWDvukuYSJHeAtT2%252FCleanShot%25202024-08-16%2520at%252018.36.01.png%3Falt%3Dmedia%26token%3D5f357bda-556b-44ff-8132-d7f29d2f6a91&width=768&dpr=4&quality=100&sign=92ea5717&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FNSONJ9YQSuXIyix2Iaon%252FCleanShot%25202024-08-16%2520at%252018.39.49.png%3Falt%3Dmedia%26token%3Dd3e96ccd-327a-4255-8a92-f642c8fca15e&width=768&dpr=4&quality=100&sign=c4f33f6e&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F30c9wvC8hJa8KpXjdR3J%252FCleanShot%25202024-08-16%2520at%252018.40.48.png%3Falt%3Dmedia%26token%3Df688d9f7-ac77-4617-9d7c-ed4d69dc375c&width=768&dpr=4&quality=100&sign=a75b4e7e&sv=2) --- # Custom HTTP Requests | Relay.app Docs Last updated 3 months ago Was this helpful? [](#making-a-custom-http-request-and-use-its-response) Making a custom HTTP request and use its response ------------------------------------------------------------------------------------------------------------- To get started, watch the video below and [read this tutorial](https://www.relay.app/blog/how-to-make-http-requests-to-an-external-api) Looking for a Webhook trigger? [Learn more here](/triggers/webhook-trigger) . ### [](#http-request-faqs) HTTP Request FAQs #### [](#is-it-possible-to-configure-the-timeout-limit-for-outbound-custom-http-requests) Is it possible to configure the timeout limit for outbound custom HTTP requests? Currently, it is not possible for users to configure the timeout limit for outbound custom HTTP requests. The standard timeout limit to 3 minutes, which is the same as the timeout setting we use for our other third-party API requests. We do plan to extent the limit in the future, so let us know if you have a use case that requires this. --- # Audio Transcription | Relay.app Docs ### [](#overview) Overview Relay.app leverages **OpenAI Whisper** to provide a simple interface for transcribing audio files into text. Users can upload audio files, and the system processes them using Whisper's state-of-the-art transcription technology, delivering accurate text results. ### [](#supported-file-types) Supported File Types Our transcription steps support the following file types, based on what OpenAI Whisper supports: **MP3, WAV, M4A, OGG, MPEG, MP4, MPGA** > **Note**: Whisper's transcription quality may vary based on the clarity and quality of the input audio. * * * ### [](#file-size-and-duration-guidelines) File Size and Duration Guidelines #### [](#file-size-limit) File Size Limit * Maximum size: **25MB** per audio file. #### [](#approximate-audio-length) Approximate Audio Length The duration of audio that can be processed depends on the format and compression quality: * **High-compression formats (e.g., MP3, OGG)**: Up to **30 minutes** of audio. * **Low-compression formats (e.g., WAV)**: Shorter durations, typically **10–20 minutes**, due to larger file sizes. * * * ### [](#best-practices) Best Practices * Ensure the audio is clear and free from excessive background noise for optimal transcription quality. * Use shorter clips for faster processing. * Prefer MP3 or M4A formats for longer durations within the file size limit. * For longer audio transcription needs, we recommend leveraging [Assembly AI](https://www.relay.app/apps/assemblyai/integrations) for transcription, which is offered as a separate integration in Relay.app * * * ### [](#troubleshooting) Troubleshooting #### [](#common-issues) Common Issues: * **File exceeds 25MB**: Compress or trim the audio file using an audio editing tool before uploading. * **Unsupported format**: Convert the file to one of the supported formats using free tools like Audacity or online converters. Last updated 3 months ago Was this helpful? --- # Lists (Arrays) | Relay.app Docs Last updated 3 months ago Was this helpful? [](#about-lists-in-relay.app) About Lists in Relay.app ----------------------------------------------------------- Relay.app has various tools to perform operations on lists of data in your workflow. There are three common situations in which you might encounter lists. 1. [A Step Output **representing a list of app objects**](/data/lists-arrays#id-1.-a-step-output-representing-a-list-of-app-objects) 2. [A Step Output **containing** a (nested) **field that's a list of items**](/data/lists-arrays#id-2.-a-step-output-containing-a-nested-field-thats-a-list-of-items) 3. [A Step Output **containing** a (nested) **list of app objects**](/data/lists-arrays#id-3.-a-step-output-containing-a-nested-list-of-app-objects) ### [](#id-1.-a-step-output-representing-a-list-of-app-objects) **1\. A Step Output representing a list of app objects** For example, a List of Jira tickets obtained through a [Find Step](/data/find-steps) by configuring it to return **All matching issues in a list**. The Step Output pill will contain a badge with three horizontal lines on top of the app icon, to indicate it's a list of Issues, not just a single Issue ### [](#id-2.-a-step-output-containing-a-nested-field-thats-a-list-of-items) 2\. A Step Output containing a (nested) field that's a list of items For example, a Step Output representing an Email object from Gmail contains a number of Lists: * Lists of recipients (one for the To-line and CC-lines) * A List of File Attachments * A List of Labels Note: while \[the structure of\] every Email object contains these Lists, this doesn't mean that they contain data for every email. e.g. when an Email doesn't have any attachments, the List of Attachments is simply empty. ### [](#id-3.-a-step-output-containing-a-nested-list-of-app-objects) 3\. A Step Output containing a (nested) list of app objects For example, a Deal object from HubSpot contains Lists of associated Compenies, Contacts, Tasks, and many others. [](#list-operations-using-data-from-lists) List Operations: using data from Lists -------------------------------------------------------------------------------------- ### [](#iterators-perform-actions-for-each-item-in-a-list) Iterators: perform actions for each item in a List Iterators let you perform one or multiple actions for each item in a list. [Learn more here](/flow-control/iterators) . ### [](#unroll-or-combine-list-data-as-text) Unroll or Combine list data as Text It's quite common to create (bulleted) lists in e.g. an Email body or a Notion page enumerating properties from items in a list. The 'Unroll' feature lets you do this in multiline text inputs, and the 'Combine' feature for single-line text inputs. #### [](#unroll-list-data-using-a-custom-template-structure) Unroll List data using a custom template structure Unrolling a List lets you **specify a templated structure that will be repeated for each item in the list**. For example, you can use this to create a bulleted list with key information about all currently open Jira issues. #### [](#combine-list-data-into-a-comma-separated-list) Combine List data into a comma-separated list The 'Combine' feature is similar to the 'Unroll' feature, except for that it's hard-coded to concatenate all values in the list separated by commas. You can use this in signle-line text inputs. ### [](#using-the-size-of-a-list) Using the Size of a List All Lists have a **Size** property. You may use this in a workflow to determine the number of items in the List, and define behavior accordingly. For example, by creating [Paths](/flow-control/paths) for cases where the List contains 0, 1 or multiple items. ### [](#explicitly-picking-selecting-the-first-item-from-a-list) Explicitly picking selecting the first item from a List While in the majority of cases you'll want to wrap an [Iterator](/data/lists-arrays#iterators) around a list, there may be cases when you want to explicitly pick the first item from a list to perform an action on. For example, your CRM might let you add multiple 'Associated Companies' to a Deal, even though you're only ever adding one at most. In that case, you can probably just use the 'first result'. This is why Step Outputs for Lists will still show up in data pickers that only accept a single item. You'll see a 'First result' entry that lets you pick the very first result. Example of a Step Output representing a list of objects (Jira issues) Example of a Step Output containing lists of items (an Email containing Attachments, recipients and Labels) Example of a Step Output containing lists of other app objects items (a HubSpot Deal containing associated Companies) Multi-line Text inputs let you "unroll" List data using custom template structures Single-line Text inputs let you combine List data into a comma-separated string Example of a Lis 'Unroll', creating a bullet structure that lists out key details for all currently open Jira issues The 'Size' property of a List may be used to determine how many items are in a list during a Run Uploading the first attachment in an email to Dropbox Adding a comment to the first Jira Issue from a list of Issues ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FzWriJJkjiktlj4Wp9y7Y%252FCleanShot%25202024-11-19%2520at%252012.08.15.png%3Falt%3Dmedia%26token%3Df2caa7b7-a26f-46cb-9d6a-6489f9bbe30b&width=137&dpr=4&quality=100&sign=14f09192&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F5OgYJZd5RCbufPdn4ycX%252FCleanShot%25202024-11-19%2520at%252012.05.51.png%3Falt%3Dmedia%26token%3Df0d9ab96-d83a-4fcf-9595-78391f115593&width=768&dpr=4&quality=100&sign=6a4959fd&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F70vXQ2gMeXhSco1I4CY0%252FCleanShot%25202024-11-19%2520at%252012.11.35.png%3Falt%3Dmedia%26token%3D7e9fb528-b1a5-44da-8733-db1173a58540&width=768&dpr=4&quality=100&sign=9c6ece8f&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FgeuldaENsyyS3COkDFWr%252FCleanShot%25202024-11-19%2520at%252012.18.17.png%3Falt%3Dmedia%26token%3D9cd9fa10-b6fe-4478-9423-492edede1e35&width=768&dpr=4&quality=100&sign=b5c50fe1&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F3Q0Jp98jzoAsq6GV8rrG%252FCleanShot%25202024-11-19%2520at%252012.44.50.png%3Falt%3Dmedia%26token%3D77d3a644-d9b1-4443-b826-eaeed253c47f&width=768&dpr=4&quality=100&sign=b4e6be16&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FEXj2y7BhM9SinKbndrdl%252FCleanShot%25202024-11-19%2520at%252012.24.51.png%3Falt%3Dmedia%26token%3D6acc328b-f59c-4285-bf8c-5f9694a0849a&width=768&dpr=4&quality=100&sign=1591019c&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FytZk4ZDfY5zmfW955yPa%252FCleanShot%25202024-11-19%2520at%252013.04.57.png%3Falt%3Dmedia%26token%3Dc668f122-b041-4cb6-a1fb-2c8e21f50bad&width=768&dpr=4&quality=100&sign=3d1c3216&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FO34t9feUkRolO0EDoxfa%252FCleanShot%25202024-11-19%2520at%252013.11.56.png%3Falt%3Dmedia%26token%3D63d6dae4-574d-471a-a459-fb5c2d2785b8&width=768&dpr=4&quality=100&sign=37805cc5&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FkXSNYyHiiFNJrQaf9NSL%252FCleanShot%25202024-11-19%2520at%252013.12.44.png%3Falt%3Dmedia%26token%3Ddf7b48e4-975f-44e7-b6ba-8a8a6e1d7e57&width=768&dpr=4&quality=100&sign=fa29cb6b&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fm1biUZqW2clU8AEex6bG%252FCleanShot%25202024-11-19%2520at%252012.51.17.png%3Falt%3Dmedia%26token%3D3f52e77b-1043-434a-8637-e44a9ecd5d78&width=768&dpr=4&quality=100&sign=a692638d&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fufvui9bzroepWaT9rV6W%252FCleanShot%25202024-11-19%2520at%252012.22.04.png%3Falt%3Dmedia%26token%3D8ac12af2-7527-4b43-994a-54d712a969d0&width=768&dpr=4&quality=100&sign=f3b2299a&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FfFlvmM0X9e8VgMFzqYwJ%252FCleanShot%25202024-11-19%2520at%252012.29.57.png%3Falt%3Dmedia%26token%3Dcc954249-c224-4a0f-8545-9a2484be5474&width=768&dpr=4&quality=100&sign=5f3649d3&sv=2) --- # Iterators | Relay.app Docs Last updated 4 months ago Was this helpful? If you ever need to work with a [Lists](/data/lists-arrays) of items in a Relay.app workflow (e.g. a list of email attachments or a list of rows that were found in the spreadsheet), an Iterator is a tool that lest you take an action for each item. Here's a very short video demo of how to set one up. --- # Prompt Tips | Relay.app Docs Writing a great custom prompt can take a few tries, especially when you have a complex or nuanced task. Here are some quick tips for crafting and testing a good custom prompt in Relay.app. ### [](#write-like-youre-explaining-a-task-to-a-new-intern) Write like you're explaining a task to a new intern How would you describe what you need from a new hire? You'd use natural language, be polite, and give examples of the kind of results you're looking for. Try the same mindset when writing a custom prompt! ### [](#set-the-stage) Set the stage Start your prompt by providing a little bit of context about what the model's role is and the kind of output you expect. This is especially helpful in content generation prompts when you're looking for a certain tone or perspective. This might sound like "You're a friendly customer service agent…" or "You're a professional HR leader and your job is to…" ### [](#give-concrete-examples) Give concrete examples Examples are _incredibly_ helpful. In your prompt, include concrete examples of what output you'd expect given various scenarios. Think of a few cases that might arise—like the common case and a few edge cases—and describe what you'd expect the model to do in those scenarios. Let's say you're extracting costs from an invoice: You could give examples of what you expect the model to output if the cost is shown in dollars or euros, and when it includes tax or not. ### [](#test-test-test) Test, test, test Obviously, testing your prompt is important. But when the model doesn't produce what you expect, there are so many things that could have gone awry that it's often hard to figure out what to tinker with. Here are some strategies for making testing manageable. #### [](#break-it-up) Break it up Does your prompt ask the model to do multiple tasks? Could the task be broken down into steps? Splitting up a large prompt into a couple smaller ones can make getting each piece right easier. This is also a good strategy if you're running into length limits with a single long prompt. #### [](#create-intermediate-variables) Create intermediate variables Validate that your prompt is making correct assumptions along the way by making intermediate variables. For example, if you're processing customer emails, you could add booleans like "Is bug report" and "Is feature request" to confirm that the model is correctly classifying an email. #### [](#throw-in-some-hard-coded-values) Throw in some hard-coded values While you're building your prompt, try replacing variables (say, a meeting date or invoice value) with hard-coded values as placeholders. This makes it easier to test specific scenarios—like setting the date to a weekday or weekend—and to isolate the parts of the prompt you want to work on. #### [](#try-a-variety-of-use-cases) Try a variety of use cases We recommend validating your prompt on a variety of inputs before setting your workflow live. For a complex prompt, don't be surprised if you need to test it 10 times on different cases to feel satisfied it performs well consistently. Think of the common case, and think of a few edge cases. Use step testing to test them all. ### [](#model-matters) Model matters Today's models vary greatly in terms of strengths, weaknesses, and cost. We've tried to be helpful by noting particular strengths of some models and indicating cost with dollar sign tags. Start with a less expensive model. Then, if you're not getting good results and you've done a few prompt iterations, give another model a whirl. ### [](#show-your-work) "Show your work" We love this tip: Ask the model to show its reasoning. You should get an explanation of the logic used to come up with an output. It's a great way to check that the reasoning checks out. ### [](#ask-for-a-confidence-score) Ask for a confidence score If you're using AI to make an important decision (like classifying an email from a client so you can reply with the right template), you may want to know how confident the model is in its decision. Ask the model its level of confidence in its decision with a score of, say, 1 to 10. You can use this score to create a path and only run automations when the confidence score is high. ### [](#bring-a-human-in-the-loop) Bring a human in the loop If you're asking AI to make a decision, but its confidence score is low, that's a great time to bring in a person to review or make the decision. You can do this by splitting the workflow into two paths based on high and low confidence scores. On the low confidence path, add a "Get data input" step to ask a person for input or a decision based on the output from the AI step. ### [](#check-out-other-prompt-writing-resources) Check out other prompt writing resources We've learned these best practices from our own experience while writing prompts in Relay.app, but we're certainly not the first to write about good prompts! There are many great resources out there. Check out other resources for specific models if you need more help, like these: * [Anthropic prompt engineering](https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview) * [OpenAI prompt engineering](https://platform.openai.com/docs/guides/prompt-engineering) Last updated 4 months ago Was this helpful? --- # Run Custom Code (JS) | Relay.app Docs [](#the-basics) The Basics ------------------------------- The custom code step is an advanced tool for processing data in Relay.app. It can be used to build complex logic that goes beyond the capabilities of Relay.app's _Transform data_ steps. Custom code is written in JavaScript, and some familiarity with programming is required to use it. ### [](#when-to-use) When to use Common scenarios that work well are: * Data from [Step Outputs](/data/step-outputs) need to be converted into another format. * Complex logic is required to decide what the workflow should do. Custom code steps are limited to working with local data. Communicating with external services within a custom code step is not possible. [](#javascript-support) JavaScript support ----------------------------------------------- Code can use all [ES2023](https://tc39.github.io/ecma262/2023) language features. ### [](#built-in-objects) Built in objects * The global `console` object implements `console.log` to record messages during execution. ### [](#date-and-time-data) Date and time data Custom code uses the [luxon](https://moment.github.io/luxon) library to handle date and time data. Input data with the corresponding type is passed to the function as a `DateTime` or `Duration` value. If returning the output of a Luxon call, those values should be typed accordingly in Relay.app (e.g., using Relay.app's Date/DateTime/Duration variable types). The luxon documentation offers a good overview of [formatting](https://moment.github.io/luxon/#/formatting) and math capabilities. The complete API can be viewed in the [API reference](https://moment.github.io/luxon/api-docs/index.html) . [](#working-with-data) Working with data --------------------------------------------- Steps in Relay.app define their interface ahead of time. For custom code this requires configuring both inputs and outputs: * Configure the **Inputs** by selecting data produced by earlier steps of the workflow**.** * Configure the shape of the **Outputs** returned by your code block. Your code must return a value whose structure matches the **Outputs** configuration. Anything configured in **Outputs** is accessible in later steps of the workflow. ### [](#inputs) Inputs The inputs section defines what data from the workflow can be used from the custom code step. Inputs are typed according to the source data. All inputs are passed to the function together as a single object, keyed by their name. In addition to regular fields the custom code step also supports picking whole data objects. These give access to the underlying raw data used throughout Relay.app. Use the _Interface_ section in the _Inputs_ tab of the code editor to see the structure of the raw data objects. ### [](#outputs) Outputs The output schema defines what data the step will produce when executed. This is required to enable later steps to work with the data. There are two main recommended patterns for using the custom code step that allow automatic configuration of the output schema: 1. If the goal is to produce data in a format defined by another step, first build out the full workflow. Next, add the custom code step in the middle. Now the outputs can be configured to match these inputs, which guarantees a perfect fit and full support by the compiler when working on the code. 2. If the step is used to implement custom logic, first configure the inputs, and then build the code. Running the code via the _Test_ tab will produce an inferred output schema that can be automatically applied to your step. Make sure to test with a variety of inputs, to build confidence that your schema covers all potential outputs. Using one of these two approaches enables automatic configuration of output schema for the vast majority of use cases. While possible, it should rarely be necessary to configure schemas manually. [](#debugging) Debugging ----------------------------- The _Test_ tab in the code editor offers the best way to quickly verify that code is working correctly. To provide additional visibility into the execution beyond input and output values, use `console.log`. Anything logged during code execution is displayed in Relay.app alongside your output. Last updated 20 days ago Was this helpful? --- # Scrape Text from Website | Relay.app Docs Last updated 2 months ago Was this helpful? The Scrape Text from Website step allows you to get the raw html data from any site. In order to use this in any subsequent steps it is advised to use an AI step to extract the exact information you need. In this video we demonstrate how this works: #### [](#does-relay.app-web-scraping-include-images) Does Relay.app web scraping include images? No, [Relay.app](https://relay.app) 's website scraping functionality is currently limited to text content only. If you need to capture complete webpage content including images and generate PDFs, we recommend using a third-party Web-to-PDF Service via a [custom HTTP request](https://docs.relay.app/built-in-actions/custom-http-requests) . --- # Paths | Relay.app Docs Last updated 3 months ago Was this helpful? Paths let you create sequences of conditional steps inside a workflow. You might think of a Paths as "_**If**_ _X is true,_ _**then**_ _do A, B & C._ _**Else**__, do D and E._" Here's a quick video tutorial: [](#the-basics) The Basics ------------------------------- ### [](#creating-a-path-group) Creating a Path group To create a Path group, navigate to Paths in the Flow Control menu. Next, specify the rules for which Path A should be activated. By default, Path B is set to be activated for cases where no other Path is matching. ### [](#adding-paths-to-an-existing-group) Adding Paths to an existing group To add one or more Paths to a group, click \[+\]. ### [](#nesting-paths) Nesting Paths It's possible to nest Path groups inside each other, simply by creating a new Path group inside another. ### [](#reordering-paths) Reordering Paths Reorder Paths by right-clicking on its header to change the order of evaluation. [](#merging-paths) Merging paths ------------------------------------- In Relay.app it's possible to continue steps on the "common path" after a Path group. Essentially joining or merging the paths. This is helpful if only certain steps need to be conditionally executed. Data objects of the same type that are created, updated or fetched across all Paths in a group are available as the "output" of the Paths in steps after they join together. [](#good-to-know) Good to know ----------------------------------- The [Step Output](/data/step-outputs) of the merged output is indicated with a Path icon instead of a Step number, e.g.. **Paths are evaluated from left-to-right**, and only one Path within a group will be taken. This means that if the rules of the first Path evaluate to 'true', that Path is taken. Regardless of whether rules of other Paths in the same group match as well The Contact that's used in Step 5 to add a Label to comes out of the Path group above. Which means that it's either the output of Step 3 or Step 4, depending on which Path was taken in a Run. Merged data objects are only available when \*every\* Path in a group has a Step that creates, updates, or fetches an object of the same type ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252F8QSsEWPr0JXKCSFPitpS%252FCleanShot%25202024-11-19%2520at%252015.00.57.png%3Falt%3Dmedia%26token%3D3ac9d648-195f-4a6f-8ba9-43aa05a9c97f&width=152&dpr=4&quality=100&sign=78e50ac5&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FZ6xAHUn3ET693SxjDy1Y%252FCleanShot%25202024-11-19%2520at%252013.41.48.png%3Falt%3Dmedia%26token%3Db0064df2-4a8e-4501-accb-ce5f5ade348f&width=300&dpr=4&quality=100&sign=e6b502c7&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FgC3Ud3yVx09goDVHF2W0%252FCleanShot%25202024-11-19%2520at%252013.54.23.gif%3Falt%3Dmedia%26token%3D3f38c54a-4268-4595-b967-9d31eb9f3314&width=768&dpr=4&quality=100&sign=fd3ffb37&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FiDHAsLdLLVjbzyWzPYuo%252FCleanShot%25202024-11-19%2520at%252014.00.00.gif%3Falt%3Dmedia%26token%3D81d9fa40-0da0-41a4-9eb1-cb112fccf4bf&width=768&dpr=4&quality=100&sign=6d582060&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FOGjRxnCNueRN60dhnNf6%252FCleanShot%25202024-11-19%2520at%252015.04.06.png%3Falt%3Dmedia%26token%3D6e4ba3f6-5997-416d-8a6a-9675cee78d75&width=768&dpr=4&quality=100&sign=d178f19a&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FW2UhBbcjQ9X89J6x87LM%252FCleanShot%25202024-11-19%2520at%252013.44.59.gif%3Falt%3Dmedia%26token%3D4d234742-cc3f-4468-a7d3-8823193a8c84&width=768&dpr=4&quality=100&sign=af9b9c83&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FIZIEf5IxVdICzQ6V4KoT%252FCleanShot%25202024-11-19%2520at%252014.56.37.png%3Falt%3Dmedia%26token%3Dc160ee38-59c1-4202-9ce3-400714dc229c&width=768&dpr=4&quality=100&sign=b20bbdd0&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fm0sD2f7jE344xtO6xmAv%252FCleanShot%25202024-11-19%2520at%252014.52.15.gif%3Falt%3Dmedia%26token%3D215cc857-2b89-4dba-af6e-094ee918dc23&width=768&dpr=4&quality=100&sign=3880a3d0&sv=2) --- # Prompt Templates | Relay.app Docs Last updated 4 months ago Was this helpful? Here are a few example prompts to give you an idea of what a good prompt can look like in Relay.app. * [Extract invoice details from an email](/ai/prompt-templates#id-1.-extract-invoice-details-from-an-email) * [Classify & summarize incoming customer support emails](/ai/prompt-templates#id-2.-classify-and-summarize-incoming-customer-support-emails) * [Extract action items & summarize meeting notes](/ai/prompt-templates#id-3.-extract-action-items-and-summarize-meeting-notes) * [Extract event details from a website with upcoming webinars](/ai/prompt-templates#id-4.-extract-event-details-from-a-website-with-upcoming-webinars) * * * ### [](#id-1.-extract-invoice-details-from-an-email) 1\. Extract invoice details from an email Copy The email we just received contains an invoice. Extract the following information from the invoice: * Name of the vendor * Amount * Due date #### [](#additional-context) Additional context ### [](#id-2.-classify-and-summarize-incoming-customer-support-emails) 2\. Classify & summarize incoming customer support emails Copy You're a customer support agent for a SaaS product. You just received an email from [$ Email::From name]. Please summarize their message in one sentence, and classify the email either as a 'Feature request', 'Bug report' or 'Other' when neither of the first two are a good fit. #### [](#output-and-context) Output & Context ### [](#id-3.-extract-action-items-and-summarize-meeting-notes) 3\. Extract action items & summarize meeting notes Copy You're an executive assistant and are tasked to process meeting notes that arrive in [John's] mailbox. You just received an email with meeting notes. Read the meeting notes in the email. Create a list of all the action items assigned to [John], and summarize the meeting notes. #### [](#output-and-context-1) Output & Context ### [](#id-4.-extract-event-details-from-a-website-with-upcoming-webinars) 4\. Extract event details from a website with upcoming webinars Copy Below you will find a website that lists upcoming webinars for [Product]. Extract a list of all upcoming webinar events from this website. For each of them, extract: * The name of the webinar * The name of the presenter * The date * The start time * A link to sign up Website contents below this line ------ [$ Scraped Website Content] #### [](#output) Output **Note 1**: The AI model doesn't have access to the Internet directly. You'll first need to scrape content from a website via the built-in [Scrape Text from Website](/built-in-actions/scrape-text-from-website) action. Afterwards, you will be able to insert this as a variable in the prompt (`[$ Scraped Content]` in the example above). **Note 2**: if you were to construct this output yourself without the 'Auto-generate' button, you will have to do the following: * Add one top-level output * Variant: **List** * Type: **JSON Array** * Nested type: **JSON Object** * For the definition of the JSON Object inside the list, you will then add individual fields of (of the **Single** variant) for each piece of information that you want to extract, e.g. the date of the webinar The Output is generated via the **Auto-generate from prompt** button The **Choices** as defined for the emailClassification single select output The Output is generated via the **Auto-generate from prompt** button The **actionItemsAssignedToJohn** list is defined as a List of text variables The Output section as generated via **Auto-generate from prompt**. Specifying a "list of objects" as a desired output in AI steps ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FTFGYLlkv4xsaziB6SrqD%252FCleanShot%25202024-11-01%2520at%252017.16.59.png%3Falt%3Dmedia%26token%3Dddeb8245-2f23-46a8-93da-10492382f47f&width=768&dpr=4&quality=100&sign=b763b773&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FML2CuF8GaOFzcQ3yqk9b%252FCleanShot%25202024-11-01%2520at%252017.25.08.png%3Falt%3Dmedia%26token%3Dbb796b75-3ee2-4af2-868f-0d040bf3f027&width=768&dpr=4&quality=100&sign=5d9cfe25&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FKDMeQdlYHPhgeP6CcVmT%252FCleanShot%25202024-11-01%2520at%252017.12.48.png%3Falt%3Dmedia%26token%3D78a7d843-5f3a-4ee2-b945-92a629fcdeb9&width=768&dpr=4&quality=100&sign=cf16b15b&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FTlcSMTgOUUeJXXQaXYtd%252FCleanShot%25202024-11-01%2520at%252017.21.25.png%3Falt%3Dmedia%26token%3D2de8ef43-7fca-465e-9675-b4db8a752dcf&width=768&dpr=4&quality=100&sign=2fb52b0d&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FInAG94D1PdA1kFarhNi6%252FCleanShot%25202024-11-01%2520at%252017.22.31.png%3Falt%3Dmedia%26token%3Daf015104-6353-48f7-a004-1e35472502ae&width=768&dpr=4&quality=100&sign=34d3e9f4&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FzZsr6t2Ap4A9lSa1TISx%252FCleanShot%25202024-10-31%2520at%252017.33.00.png%3Falt%3Dmedia%26token%3D6fb163b6-8362-427d-82cd-54b4e974f0d5&width=768&dpr=4&quality=100&sign=384d61b2&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FxlWFnpcnaabRIh7jSvxB%252FCleanShot%25202024-10-31%2520at%252017.38.53.gif%3Falt%3Dmedia%26token%3Dd868dac0-de17-4212-b7d4-6c5e4e329d7c&width=768&dpr=4&quality=100&sign=7396f81b&sv=2) --- # Wait steps | Relay.app Docs Last updated 4 months ago Was this helpful? In your workflow, you may want to pause your workflow until either a certain amount of time passes or until some condition is reached. To support that, Relay.app offers a flexible and powerful Wait step (also known as a "delay" step in other tools like Zapier and Make.com). Here's how to use it: ### [](#creating-a-wait-step) Creating a Wait step To create a Wait step, navigate to the flow control menu, where you'll see two options: * Wait for time * Wait for object to match rule Depending on the data currently available in your workflow, you may see an additional shortcut to a special type of wait step, for example "Wait for reply" to an email, as pictured below. ### [](#wait-for-time) Wait for time If you want to wait for a defined amount of time, select Wait for time. Within Wait for time, you'll see two options: * Wait for some time - use this if you want to hard code an exact amount of time * Wait until a date - use this if you want to use a reference date from a variable in your workflow #### [](#wait-for-some-time) Wait for some time In this option, you'll specific an exact number of minutes, hours, or days you want the workflow to wait, and it will be exactly the same amount in every workflow run. #### [](#wait-until-a-date) Wait until a date For a more dynamic experience that uses your workflow data, here's what you'll see when you select Wait until a date. You'll first slect a reference date from within your workflow, then you can set an optional offset from that date. For example, you can wait for two days after the send time of an email or the upcoming date of a calendar event. ### [](#wait-for-object-to-match-a-rule) Wait for object to match a rule In addition to waiting for a specific amount of time to pass or until a specific date is reached, Relay.app lets you set more advanced wait steps that watch and object until it reaches a certain state. For example, you can wait until an email is starred in your email client or a deal is closed in your CRM. First, you need to select the object you want to watch. Next, you need to select what Rule you're watching for. Here's an example, in which we're waiting for an email to be starred. Once your wait step is setup, you can create a test run to make sure it behaves as you expect. ### [](#why-is-my-wait-step-not-working) Why is my Wait step not working? If a wait step is not working, it's might be for one of these reasons: 1. Wait steps can take up to one hour to be registered (we're working to improve this!). 2. Your "wait" filter conditions may be set up incorrectly. 3. There may have been another error earlier in your run. If you've checked all of those, it may be a bug! If so, please email support@relay.app with a screenshot or video recording of the event you expected to activate the wait step. The Flow Control menu contains the Wait step options Hard coding an amount of time to wait How to select a date variable as a reference date in a wait step How to select an object for your Wait step An example of waiting for an email to be starred ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fy7CiM5hZlrRHSWBWjAmK%252FScreenshot%25202024-10-07%2520at%25202.00.34%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D0a149052-e3ab-46d4-a77a-02af61748885&width=768&dpr=4&quality=100&sign=a2a25edd&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FVuk4pI5a35OJ1Fy0Nyt9%252FScreenshot%25202024-10-07%2520at%25202.02.54%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Da98455cf-d0fa-4a59-a370-0584e7f9c5e0&width=768&dpr=4&quality=100&sign=4d6ab719&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FkpzKnn58jxc59Sxr9FGX%252FScreenshot%25202024-10-07%2520at%25202.06.07%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D13d3a87e-a7e9-477d-9ce8-430e5b8fd0f2&width=768&dpr=4&quality=100&sign=eefb07d5&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252Fu6IwnTgfrhVKmS3TWUmX%252FScreenshot%25202024-10-07%2520at%25202.09.13%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3D60680a88-20b8-47c4-9b07-64f8e179a694&width=768&dpr=4&quality=100&sign=a72f902&sv=2) ![](https://docs.relay.app/~gitbook/image?url=https%3A%2F%2F647519108-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FXkKoEy3xMIYaIwd4mRAB%252Fuploads%252FaV1so0yNxp2EYdJ8jOQ4%252FScreenshot%25202024-10-07%2520at%25202.11.46%25E2%2580%25AFPM.png%3Falt%3Dmedia%26token%3Dc6a22574-fe32-436d-9e6e-2df638d4c91a&width=768&dpr=4&quality=100&sign=2b3c38fd&sv=2) ---