Action
Action
{
"id": "<string>",
"next_id": "<string>",
"type": "<string>",
"option": {
...
},
"tm_execute": "<string>"
}
id(UUID): The action’s unique identifier within the flow. Auto-generated by the server if omitted on creation viaPOST /flows. Only set this explicitly when other actions need to reference it (e.g.,goto,branch,condition_*target IDs).next_id(UUID): Override for the next action to execute after this one. If empty or00000000-0000-0000-0000-000000000000, the cursor moves to the next action in the array sequentially.type(enum string): The action type. Determines what this action does and whichoptionfields are valid. See Type.option(Object): Action-specific configuration. Structure depends on thetypefield. See individual action type sections below.tm_execute(String, timestamp): Timestamp when this action was last executed. Read-only, populated at runtime in activeflow responses.
Note
AI Implementation Hint
When building a flow’s actions array, you can omit id for most actions. Only set id on actions that are targets of goto, branch, or condition_* actions. The next_id field is rarely needed – it overrides the default sequential execution. Use goto actions instead for clearer flow control.
Type
type |
Description |
|---|---|
agent_call |
Deprecated. Use |
amd |
Answering machine detection. Detects whether the call was answered by a human or machine. |
answer |
Answer an incoming call. Required before media actions ( |
beep |
Play a beep sound. Commonly used before recording to signal the caller. |
branch |
Read a variable value and jump to a matching target action ID. Use for IVR menu routing. |
call |
Start a new independent outgoing call with its own flow. Does not block the current flow. |
chatbot_talk |
Start an interactive chatbot conversation using STT/TTS. |
condition_call_digits |
Deprecated. Use |
condition_call_status |
Deprecated. Use |
condition_datetime |
Condition check on current UTC time. Useful for business hours routing. |
condition_variable |
Condition check on any variable value. Supports |
confbridge_join |
Join the call to a confbridge (conference bridge). |
conference_join |
Join the call to a conference. Nested action – flow forks into the conference. |
connect |
Create outbound call(s) to destination(s) and bridge them with the current call. |
conversation_send |
Send a text message to an existing conversation. |
digits_receive |
Wait for DTMF digit input from the caller. Sets |
digits_send |
Send DTMF tones to the call. |
echo |
Echo the call’s audio stream back to the caller. Useful for testing. |
external_media_start |
Start an external media stream (RTP) to/from an external host. |
external_media_stop |
Stop the external media stream. |
fetch |
Fetch actions from a remote URL endpoint. Forks the flow with the fetched actions. |
fetch_flow |
Fetch actions from an existing VoIPBIN flow by ID. Forks the flow. |
goto |
Jump to another action by ID. Use |
hangup |
Hang up the current call. |
hangup_relay |
Hang up the call and relay the hangup cause to the referenced call. |
message_send |
Send an SMS/message to one or more destinations. Fire-and-forget. |
play |
Play audio file(s) from the given URL(s). Waits for playback to complete. |
queue_join |
Join the caller to a queue. Nested action – flow forks into the queue’s wait flow. |
recording_start |
Start recording the call audio. Sets |
recording_stop |
Stop the current call recording. |
sleep |
Pause flow execution for a specified duration (milliseconds). |
stop |
Stop the flow execution immediately. |
stream_echo |
Echo the RTP stream including DTMF digit reception. |
talk |
Generate audio via TTS from text or SSML and play it. Waits for playback to complete. |
transcribe_start |
Start real-time speech-to-text transcription of the call. |
transcribe_stop |
Stop real-time transcription. |
transcribe_recording |
Transcribe call recordings (post-call) and send results to webhook. |
variable_set |
Set a custom variable value for use in subsequent actions. |
webhook_send |
Send an HTTP request to an external URL. Can be sync (wait for response) or async. |
Agent Call
Calling the agent. The agent may have various types of addresses or phone numbers, such as a desk phone, mobile phone, or softphone application.
Parameters
{
"type": "agent_call",
"option": {
"agent_id": "<string>"
}
}
agent_id(UUID): Target agent ID. Obtained fromGET /agents.
Example
{
"type": "agent_call",
"option": {
"agent_id": "eb1ac5c0-ff63-47e2-bcdb-5da9c336eb4b"
}
}
AMD
Answering machine detection.
Parameters
{
"type": "amd",
"option": {
"machine_handle": "<string>",
"async": <boolean>
}
}
machine_handle(enum string): Action to take if a machine answered the call. See Machine handle.async(Boolean): Iffalse, the flow will block until AMD detection completes. Iftrue, detection runs in the background. Default:false.
Machine handle
Type |
Description |
|---|---|
hangup |
Hang up the call immediately if an answering machine is detected. |
continue |
Continue the flow execution regardless of whether a machine or human answered. |
Example
{
"type": "amd",
"option": {
"machine_handle": "hangup",
"async": true
}
}
Answer
Answer the call
Parameters
{
"type": "answer"
}
Example
{
"type": "answer"
}
Beep
Make a beep sound.
Parameters
{
"type": "beep"
}
Example
{
"type": "beep"
}
Branch
Branch the flow. It gets the variable from the activeflow and move the activeflow cursor to the selected target id.
Parameters
{
"type": "branch",
"option": {
"variable": "<string>",
"default_target_id": "<string>",
"target_ids": {
"<string>": <string>,
}
}
}
variable(String): The variable name to read for branching. Available variables are listed here. Default:voipbin.call.digits. If empty, the default variable is used.default_target_id(UUID): Action ID to jump to when notarget_idskey matches the variable value. Must reference anidof another action in the same flow.target_ids(Object): Map of variable value (String) to action ID (UUID). Each key is a possible variable value, and the corresponding value is the actionidto jump to.
Example
{
"type": "branch",
"option": {
"default_target_id": "ed9705ca-c524-11ec-a3fb-8feb7731ad45",
"target_ids": {
"1": "c3eb8e62-c524-11ec-94c5-abafec8af561",
"2": "dc87123e-c524-11ec-89c6-5fb18da14034",
"3": "e70fb030-c524-11ec-b657-ebec72f097ef"
}
}
}
Call
Make a new outbound call in a new context.
Parameters
{
"type": "call",
"option": {
"source": {
...
},
"destinations": [
{
...
},
...
],
"flow_id": "<string>"
"actions": [
{
...
}
],
"chained": <boolean>,
"early_execution": <boolean>
}
}
source(Object): Source address. See Address.destinations(Array of Object): Array of destination addresses. See Address.flow_id(UUID): Flow ID to attach to the new call. Obtained fromGET /flows. If not set, theactionsarray is used instead.actions(Array of Object): Inline array of actions for the new call’s flow. Used only ifflow_idis not set.chained(Boolean): Iftrue, the new call will be hung up when the master call hangs up. Default:false.early_execution(Boolean): Iftrue, VoIPBIN will execute the flow when the call starts ringing (before answer). Default:false.
Example
{
"id": "e34ab97a-c53a-4eb4-aebf-36767a528f00",
"next_id": "00000000-0000-0000-0000-000000000000",
"type": "call",
"option": {
"source": {
"type": "tel",
"target": "+821100000001"
},
"destinations": [
{
"type": "tel",
"target": "+821100000002"
}
],
"actions": [
{
"type": "talk",
"option": {
"text": "hello, this is test message.",
"language": "en-US"
}
}
],
"chained": false
}
}
Chatbot Talk
Start the chatbot talk.
Parameters
{
"type": "chatbot_talk",
"option": {
"chatbot_id": "<string>",
"gender": "<string>",
"language": "<string>",
"duration": <number>
}
}
chatbot_id(UUID): Chatbot ID. Obtained from the chatbot management API.gender(enum string): Voice gender for TTS output. Values:male,female,neutral.language(String): Language in BCP47 format (e.g.,en-US).duration(Integer): Maximum duration for the chatbot session, in seconds.
Confbridge Join
Join to the confbridge.
Parameters
{
"type": "confbridge_join",
"option": {
"confbridge_id": "<string>"
}
}
confbridge_id(UUID): Target confbridge ID to join.
Condition Call Digits
Deprecated. Use the condition_variable instead. Check the condition of received digits. If the conditions are met, the system proceeds to the next action. If the conditions are not met, the voipbin directs the call to a false_target_id for further processing.
Parameters
{
"type": "condition_call_digits",
"option": {
"length": <number>,
"key": "<string>",
"false_target_id": "<string>"
}
}
length(Integer): Expected length of received digits to match.key(String): Digit string to match against received digits.false_target_id(UUID): Action ID to jump to when the condition is not met. Must reference anidof another action in the same flow.
Example
{
"type": "condition_call_digits",
"option": {
"length": 10,
"false_target_id": "e3e50e6c-9c8b-11ec-8031-0384a8fcd1e2"
}
}
Condition Call Status
Deprecated. Use the condition_variable instead. Check the condition of call’s status. It checks the call’s status and if it matched with condition then move to the next action. If not, move to the false_target_id.
Parameters
{
"type": "condition_call_status",
"option": {
"status": <number>,
"false_target_id": "<string>"
}
}
status(enum string): Call status to match against. See Status.false_target_id(UUID): Action ID to jump to when the condition is not met. Must reference anidof another action in the same flow.
Example
{
"type": "condition_call_status",
"option": {
"status": "progressing",
"false_target_id": "e3e50e6c-9c8b-11ec-8031-0384a8fcd1e2"
}
}
Condition Datetime
Check the condition of the time. It checks the current time(UTC) and if it matched with condition then move to the next action. If not, move to the false_target_id.
Parameters
{
"type": "condition_datetime",
"option": {
"condition": <number>,
"minute": <number>,
"hour": <number>,
"day": <number>,
"month": <number>,
"weekdays": [
<number>,
...
],
"false_target_id": "<string>"
}
}
condition(enum string): Comparison operator. One of==,!=,>,>=,<,<=.minute(Integer): Minute to match (0-59). Set to-1to match all minutes (wildcard).hour(Integer): Hour to match (0-23, UTC). Set to-1to match all hours (wildcard).day(Integer): Day of month to match (1-31). Set to-1to match all days (wildcard).month(Integer): Month to match (1-12). Set to0to match all months (wildcard).weekdays(Array of Integer): List of weekday numbers. Sunday:0, Monday:1, Tuesday:2, Wednesday:3, Thursday:4, Friday:5, Saturday:6. Empty array matches all days.false_target_id(UUID): Action ID to jump to when the condition is not met. Must reference anidof another action in the same flow.
Example
{
"type": "condition_datetime",
"option": {
"condition": ">=",
"minute": 0,
"hour": 8,
"day": -1,
"month": 0,
"weekdays": [],
"false_target_id": "d08582ee-1b3d-11ed-a43e-9379f27c3f7f"
}
}
Condition Variable
Check the condition of the given variable. It checks the call’s status and if it matched with condition then move to the next action. If not, move to the false_target_id.
Parameters
{
"type": "condition_variable",
"option": {
"condition": "<string>",
"variable": "<string>",
"value_type": "<string>",
"value_string": "<string>",
"value_number": <number>,
"value_length": <number>,
"false_target_id": "<string>"
}
}
condition(enum string): Comparison operator. One of==,!=,>,>=,<,<=.variable(String): Variable name to check. Available variables are listed here.value_type(enum string): Type of comparison value. One ofstring,number,length.value_string(String): Comparison value whenvalue_typeisstring.value_number(Integer): Comparison value whenvalue_typeisnumber.value_length(Integer): Comparison value whenvalue_typeislength. Compares the character length of the variable’s value.false_target_id(UUID): Action ID to jump to when the condition is not met. Must reference anidof another action in the same flow.
Example
{
"type": "condition_variable",
"option": {
"condition": "==",
"variable": "voipbin.call.source.target",
"value_type": "string",
"value_string": "+821100000001",
"false_target_id": "fb2f4e2a-b030-11ed-bddb-976af892f5a3"
}
}
Conference Join
Join to the conference
Parameters
{
"type": "conference_join",
"option": {
"conference_id": "<string>"
}
}
conference_id(UUID): Conference ID to join. Obtained fromGET /conferencesor the response ofPOST /conferences.
Example
{
"type": "conference_join",
"option": {
"conference_id": "367e0e7a-3a8c-11eb-bb08-f3c3f059cfbe"
}
}
Connect
Originate to the other destination(s) and connect to them each other.
Parameters
{
"type": "connect",
"option": {
"source": {...},
"destinations": [
...
],
"early_media": <boolean>,
"relay_reason": <boolean>
}
}
source(Object): Source address for the outbound call leg. See Address.destinations(Array of Object): Array of destination addresses to ring. If multiple destinations are provided, all ring simultaneously (ring-all). See Address.early_media(Boolean): Iftrue, allows early media (audio before answer, e.g., ringback tone). Default:false.relay_reason(Boolean): Iftrue, relays the hangup reason from the connected call back to the master call. Default:false.
Example
{
"type": "connect",
"option": {
"source": {
"type": "tel",
"target": "+11111111111111"
},
"destinations": [
{
"type": "tel",
"target": "+222222222222222"
}
]
}
}
Conversation send
Send the message to the conversation.
Parameters
{
"type": "conversation_send",
"option": {
"conversation_id": "<string>",
"text": "<string>",
"sync": <boolean>
}
}
conversation_id(UUID): Target conversation ID. Obtained fromGET /conversations.text(String): Text message content to send. Supports${variable}substitution.sync(Boolean): Iftrue, the flow waits until the message is delivered. Iffalse, the message is sent asynchronously and the flow continues immediately. Default:false.
Example
{
"type": "conversation_send",
"option": {
"conversation_id": "b5ef5e64-f7ca-11ec-bbe9-9f74186a2a72",
"text": "hello world, this is test message.",
"sync": false
}
}
Digits Receive
Receives the digits for given duration or numbers.
Parameters
{
"type": "digits_receive",
"option": {
"duration": <number>,
"length": <number>,
"key": "<string>"
}
}
duration(Integer): Maximum wait time in milliseconds for DTMF input. The flow continues to the next action after this duration expires. Example:5000for 5 seconds.length(Integer): Maximum number of DTMF digits to collect before continuing. Default:1. The flow continues as soon as this many digits are received.key(String): Termination key. If set, this DTMF key (e.g.,#) ends digit collection immediately. The termination key is included in the resultingvoipbin.call.digitsvariable value.
Example
{
"type": "digits_receive",
"option": {
"duration": 10000,
"length": 3,
"key": "#"
}
}
Digits Send
Sends the digits with given duration and interval.
Parameters
{
"type": "digits_send",
"option": {
"digits": "<string>",
"duration": <number>,
"interval": <number>
}
}
digits(String): The digit string to send. Allowed characters:0-9,A-D,#,*. Maximum 100 characters.duration(Integer): Duration of each DTMF tone in milliseconds. Allowed range: 100-1000.interval(Integer): Interval between sending consecutive keys in milliseconds. Allowed range: 0-5000.
Example
{
"type": "digits_send",
"option": {
"digits": "1234567890",
"duration": 500,
"interval": 500
}
},
Echo
Echoing the call.
Parameters
{
"type": "echo",
"option": {
"duration": <number>,
}
}
duration(Integer): Echo duration in milliseconds.
Example
{
"type": "echo",
"option": {
"duration": 30000
}
}
External Media Start
Start the external media.
Parameters
{
"type": "external_media_start",
"option": {
"external_host": "<string>",
"encapsulation": "<string>",
"transport": "<string>",
"connection_type": "<string>",
"format": "<string>",
"direction": "<string>",
"data": "<string>"
}
}
external_host(String): External media target host address (e.g.,192.168.1.100:8000).encapsulation(String): Media encapsulation protocol. Default:rtp.transport(String): Network transport protocol. Default:udp.connection_type(String): Connection type. Default:client.format(String): Audio codec format. Default:ulaw.direction(enum string): Media direction. Default:both. Values:both,send,receive.data(String): Reserved for future use.
External Media Stop
Stop the external media.
Parameters
{
"type": "external_media_stop",
}
Fetch
Fetch the next flow from the remote.
Parameters
{
"type": "fetch",
"option": {
"event_url": "<string>",
"event_method": "<string>"
}
}
event_url(String): The URL to fetch flow actions from. Must be a publicly accessible HTTPS endpoint.event_method(enum string): HTTP method to use for the fetch request. Values:GET,POST.
Example
{
"type": "fetch",
"option": {
"event_method": "POST",
"event_url": "https://webhook.site/e47c9b40-662c-4d20-a288-6777360fa211"
}
}
Fetch Flow
Fetch the next flow from the existing flow.
Parameters
{
"type": "fetch_flow",
"option": {
"flow_id": "<string>"
}
}
flow_id(UUID): The ID of the flow to fetch actions from. Obtained fromGET /flowsor the response ofPOST /flows.
Example
{
"type": "fetch_flow",
"option": {
"flow_id": "212a32a8-9529-11ec-8bf0-8b89df407b6e"
}
}
Goto
Move the action execution.
Parameters
{
"type": "goto",
"option": {
"target_id": "<string>",
"loop_count": <integer>
}
}
target_id(UUID): Action ID to jump to. Must reference anidof another action in the same flow.loop_count(Integer): Maximum number of times this goto will execute. After exceeding the count, the goto is skipped and execution continues to the next action. Always set this to prevent infinite loops.
Example
{
"type": "goto",
"option": {
"target_id": "ca4ddd74-9c8d-11ec-818d-d7cf1487e8df",
"loop_count": 2
}
}
Hangup
Hangup the call.
Parameters
{
"type": "hangup"
}
Example
{
"type": "hangup"
}
Hangup Relay
Hangup the call and relay the hangup cause to the reference id.
Parameters
{
"type": "hangup_relay",
"option": {
"reference_id": "<string>"
}
}
reference_id(UUID): The call ID whose hangup reason should be relayed. Obtained fromGET /callsor a call-related variable (e.g.,${voipbin.call.id}).
Example
{
"type": "hangup_relay",
"option": {
"reference_id": "b8573f30-b031-11ed-ac05-3bc9a62e64c3"
}
}
Message send
Send a message.
Parameters
{
"type": "message_send",
"option": {
"source": {
...
},
"destinations": [
{
...
},
...
],
"text": "<string>"
}
}
Play
Plays the linked file.
Parameters
{
"type": "play",
"option": {
"stream_urls": [
"<string>",
...
]
}
}
stream_urls(Array of String): Array of audio file URLs to play sequentially. Supported formats include WAV, MP3. URLs must be publicly accessible.
Example
{
"type": "play",
"option": {
"stream_urls": [
"https://github.com/pchero/asterisk-medias/raw/master/samples_codec/pcm_samples/example-mono_16bit_8khz_pcm.wav"
]
}
}
Queue Join
Join to the queue.
Parameters
{
"type": "queue_join",
"option": {
"queue_id": "<string>"
}
}
queue_id(UUID): Target queue ID to join. Obtained fromGET /queuesor the response ofPOST /queues.
Example
{
"type": "queue_join",
"option": {
"queue_id": "99bf739a-932f-433c-b1bf-103d33d7e9bb"
}
}
Recording Start
Starts the call recording.
Parameters
{
"type": "recording_start",
"option": {
"format": "<string>",
"end_of_silence": <integer>,
"end_of_key": "<string>",
"duration": <integer>,
"beep_start": <boolean>
}
}
format(enum string): Audio encoding format. Values:wav,mp3,ogg.end_of_silence(Integer): Maximum duration of silence in seconds before recording stops automatically. Set to0for no limit.end_of_key(enum string): DTMF key that stops the recording. Values:none,any,*,#.duration(Integer): Maximum recording duration in seconds. Set to0for no limit.beep_start(Boolean): Iftrue, play a beep tone when recording begins.
Example
{
"type": "recording_start",
"option": {
"format": "wav"
}
}
Recording Stop
Stops the call recording.
Parameters
{
"type": "recording_stop"
}
Example
{
"type": "recording_stop"
}
Sleep
Sleep the call.
Parameters
{
"type": "sleep",
"option": {
"duration": <number>
}
}
duration(Integer): Sleep duration in milliseconds. Example:10000for 10 seconds.
Stream Echo
Echoing the RTP stream including the digits receive.
Parameters
{
"type": "stream_echo",
"option": {
"duration": <number>
}
}
duration(Integer): Echo duration in milliseconds.
Example
{
"type": "stream_echo",
"option": {
"duration": 10000
}
}
Talk
Text to speech. SSML(https://www.w3.org/TR/speech-synthesis/) supported.
Parameters
{
"type": "talk",
"option": {
"text": "<string>",
"language": "<string>",
"provider": "<string>",
"voice_id": "<string>",
"digits_handle": "<string>"
}
}
text(String): Text to convert to speech. Supports plain text and SSML (https://cloud.google.com/text-to-speech/docs/ssml). Supports${variable}substitution.language(String): Language in BCP47 format. Examples:en-US,ko-KR,ja-JP. The value may be a two-letter language code (e.g.,en) or language code with country/region (e.g.,en-US).provider(enum string): TTS provider. Optional. Values:gcp(Google Cloud TTS),aws(AWS Polly). Default:gcp. If the selected provider fails, the system automatically falls back to the alternative provider with the default voice for the language.voice_id(String): Provider-specific voice identifier. Optional. Examples:en-US-Wavenet-D(GCP),Joanna(AWS). On fallback, the voice_id is reset to the alternative provider’s default voice.digits_handle(enum string): How to handle DTMF input received during playback. See Digits handle. Optional.
Digits handle
Type |
Description |
|---|---|
next |
If any DTMF digit is received during TTS playback, stop playback immediately and move to the next action. Useful for “press any key to skip” patterns. |
Example
{
"type": "talk",
"option": {
"text": "Hello. Welcome to voipbin. This is test message. Please enjoy the voipbin service. Thank you. Bye",
"language": "en-US"
}
}
Transcribe recording
Transcribe the call’s recordings.
Parameters
{
"type": "transcribe_recording",
"option": {
"language": "<string>",
"provider": "<string>",
"direction": "<string>"
}
}
language(String): Language in BCP47 format (e.g.,en-US).provider(String, optional): STT provider to use:gcporaws. If omitted, VoIPBIN selects the best available provider automatically.direction(String, optional): Audio direction to transcribe:in,out, orboth. Defaults toboth.
Example
{
"type": "transcribe_recording",
"option": {
"language": "en-US",
"provider": "gcp",
"direction": "both"
}
}
Transcribe start
Start the STT(Speech to text) transcribe in realtime.
Parameters
{
"type": "transcribe_start",
"option": {
"language": "<string>",
"provider": "<string>",
"direction": "<string>"
}
}
language(String): Language in BCP47 format. Examples:en-US,ko-KR. The value may be a two-letter language code (e.g.,en) or language code with country/region (e.g.,en-US).provider(String, optional): STT provider to use:gcporaws. If omitted, VoIPBIN selects the best available provider automatically.direction(String, optional): Audio direction to transcribe:in,out, orboth. Defaults toboth.
Example
{
"type": "transcribe_start",
"option": {
"language": "en-US",
"provider": "gcp",
"direction": "both"
}
}
Transcribe stop
Stop the transcribe talk in realtime.
Parameters
{
"type": "transcribe_stop"
}
Example
{
"type": "transcribe_stop"
}
Variable Set
Set a variable value for use in the flow.
Parameters
{
"type": "variable_set",
"option": {
"key": "<string>",
"value": "<string>"
}
}
key(String): Variable name to set. Use dot notation for namespacing (e.g.,customer.language). This variable can then be referenced in subsequent actions using${key}syntax.value(String): Variable value to set. Supports${variable}substitution from existing variables.
Example
{
"type": "variable_set",
"option": {
"key": "Provider name",
"value": "voipbin"
}
}
Webhook send
Send a webhook.
Parameters
{
"type": "webhook_send",
"option": {
"sync": boolean,
"uri": "<string>",
"method": "<string>",
"data_type": "<string>",
"data": "<string>"
}
}
sync(Boolean): Iftrue, the flow waits for the webhook response before continuing. Iffalse, the request is sent asynchronously and the flow continues immediately. Usetruewhen you need response data for branching.uri(String): Destination URL. Must be a publicly accessible HTTPS endpoint.method(enum string): HTTP method. Values:POST,GET,PUT,DELETE.data_type(String): Content-Type header value. Example:application/json.data(String): Request body as a string. Supports${variable}substitution. For JSON payloads, escape inner quotes (e.g.,"{\"key\": \"${variable}\"}").
Note
AI Implementation Hint
When using sync: true, the webhook response can set flow variables. The response body is parsed and variables are set from the response fields. When using sync: false, no response data is available – use this for logging and fire-and-forget notifications.
Example
{
"type": "webhook_send",
"option": {
"sync": true,
"uri": "https://test.com",
"method": "POST",
"data_type": "application/json",
"data": "{\"destination_number\": \"${voipbin.call.destination.target}\", \"source_number\": \"${voipbin.call.source.target}\"}"
}
}