LogoLogo
Get support
  • Home
  • Make API
  • Make Bridge
  • White Label
  • MCP Server
  • Custom Apps Documentation
  • How to read the documentation
  • Make Apps Editor
    • Develop apps in Make UI
    • Develop apps in VS Code
      • Generate your API key
      • Configure VS Code
      • Create an app in VS Code
      • Set the app's icon in VS Code
      • Use general controls
      • Manage testing and production app versions
      • Develop apps collaboratively
      • Write IML tests
      • Local development for Apps
        • Clone Make app to local workspace
        • Develop app in a local workspace (offline)
        • Commit the changes in Git repository
        • Deploy changes from local app to Make app
        • Pull changes from Make app
        • Create a new app origin
        • Compare changes between local and Make app
  • Create your first app
    • Create your app
    • App's environment
    • Base
    • Module
    • Connection
    • Error handling
  • Debugging your app
    • Debugging of pagination in list/search modules
    • Debugging RPC
    • Debugging of Custom IML Functions
      • Debug IML in Web Browser
      • Debug IML in VS Code
  • Make DevTool
    • Live Stream
    • Scenario Debugger
    • Tools
  • Best practices
    • Names, labels & descriptions
    • Base
    • Connections
    • Modules
    • Action and search modules
    • Action modules
    • Search modules
    • Update modules
    • Trigger modules
    • Remote Procedure Calls
    • Static parameters
    • Mappable parameters
    • Processing of input parameters
    • Processing of output parameters
    • Groups
  • Useful resources
  • App logo
  • App visibility
  • App review
    • App review prerequisites
    • Request app review
    • Review status
    • Approved app
  • Terms of approved app maintenance
  • Updating your app
    • Private/Public apps
    • Approved apps
      • Tracking code changes
      • Approval of changes in approved app
      • Managing breaking changes
  • App structure
    • Base
      • Base URL
      • Authorization
      • Error handling
      • Sanitization
      • Advanced inheritance
    • Connections
      • Basic connection
      • JWT
      • OAuth 1.0
      • OAuth 2.0
    • Webhooks
      • Shared
      • Dedicated
        • Attached
        • Not attached
    • Modules
      • Action
        • Module Actions
        • Components
      • Search
      • Trigger (polling)
      • Instant Trigger (webhook)
      • Universal Module
        • REST
        • GraphQL
      • Responder
    • Remote Procedure Calls
      • Components
      • Types of RPCs
        • Dynamic Options RPC
        • Dynamic Fields RPC
        • Dynamic Sample RPC
      • Available IML Variables
    • Custom IML functions
      • Dynamic mappable parameters
      • Handling of full update approach in update modules
      • Removal of empty collections and nulls
    • Groups
  • App blocks
    • Communication
      • Making Requests
      • Multiple Requests
      • Handling Responses
        • Type
        • Valid
        • Error
        • Limit
        • Iterate
        • Temp
        • Output
      • Pagination
      • IML Variables
      • Request-less Communication
      • Multipart/form-data
      • Buffer
    • Static parameters
    • Mappable parameters
    • Interface
    • Epoch
    • Samples
    • Scope
    • Scope List
  • App components
    • Data Types
    • Parameters
      • Array
      • Boolean
      • Buffer
      • Cert
      • Collection
      • Color
      • Date
      • Email
      • Filename
      • Folder, File
      • Filter
      • Hidden
      • Integer, Uinteger
      • Number
      • Password
      • Path
      • Pkey
      • Port
      • Select
      • Text
      • Time
      • Timestamp
      • Timezone
      • URL
      • UUID
    • JavaScript in Make
  • Other
    • Processing of 'empty' Values
    • Processing of JSON strings inside a JSON object
  • Apps Marketplace Beta
    • About
    • How does it work
    • Terms and conditions
    • Tips and tricks
      • Control of access in apps using basic connection
Powered by GitBook

Resources

  • Academy
  • Community
  • Help Center

Useful links

  • Support
  • Privacy Notice
  • Status Page
  • make.com

Follow us

  • LinkedIn
  • X (Twitter)
  • Facebook
  • Instagram

© 2025 make.com

On this page
  • Responsiveness approaches
  • Comparison of synchronous and asynchronous approaches
  • Handling of asynchronous approach
  • Example
Export as PDF
  1. Best practices

Action modules

Responsiveness approaches

Bear in mind that there are two approaches to responsiveness in a service.

  • Synchronous - The service upon an action request returns a result, which can then be processed in the following modules in a scenario.

  • Asynchronous - The service doesn't return anything at all, or doesn't return useful output, e. g. a processed file.

Comparison of synchronous and asynchronous approaches

Attribute/ Approach
Synchronous
Asynchronous

Advantage

The result is returned right away. Ability to proceed the result to the following modules.

Comes in handy when we need to process a large amount of data, e. g. file conversion.

Disadvantage

Regarding the type of job and its severity, the job can take too long. This might cause a timeout (default 40 sec). E. g. file conversion. The default timeout can be prolonged depending on the valid cases.

The scenario is not fluent. It is needed to create at least 2 scenarios - one for triggering the job, and another one for proceeding with the result from the first scenario. The second scenario, if possible, should start with an instant trigger that triggers once the job finishes.

Module Example

Example Scenarios

Handling of asynchronous approach

When a web service doesn't support a synchronous approach and the common use case of the module requires support, it should be added on the app's side. Basically, there should be two (or more calls) executed instead of only one:

  • create a job call - a call that requests for the job, e. g. conversion of a file, file upload,

  • periodically check the status of the job - execute repeated calls to obtain the job's status**,**

  • ask for the result of the job - once the status call returns the awaited status, request the result, e. g. result file.

Example

After importing a JSON file to a web service, it requires a certain period of time to process the file. In this case, we have to keep checking if the status of the entity changed from processing to completed. In this case, when the status is completed, the result is already part of the response.

[
	{
		"url": "/v3/activities/contacts_json_import",
		"method": "POST",
		"body": "{{encodeParameters(parameters)}}",
		"response": {
			"temp": "{{parseResponse(body)}}"
		}
	},
	{
		"url": "{{temp._links.self.href}}",
		"method": "GET",
		"repeat": {
			"condition": "{{body.state != 'completed'}}",
			"delay": 1000,
			"limit": 300
		},
		"response": {
			"temp": "{{body}}"
		}
	},
	{
		"response": {
			"valid": "{{length(temp.activity_errors) = 0}}",
			"error": {
				"message": "{{join(temp.activity_errors, '\n')}}"
			},
			"output": "{{parseResponse(temp)}}"
		}
	}
]
PreviousAction and search modulesNextSearch modules

Last updated 4 months ago

The scenario contains module, which has the synchronous logic implemented on app's side.

The first scenario contains module which has asynchronous approach by default. The only result is the job's ID.

When the repeat directive is used, the condition and limit should always be provided to prevent infinite loops. Learn more about the directive.

CloudConvert > Convert a File
CloudConvert > Create a Job (advanced)
Convert files from Google Drive in CloudConvert
Convert a File
Create an archive job in CloudConvert
Download files from the job in CloudConvert
Create a Job (advanced)
repeat