You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -198,15 +199,17 @@ RustPBX plays the prompt → on audio complete → automatically executes the dt
198
199
199
200
| type | Purpose | Required | Optional | Notes |
200
201
|------|---------|----------|----------|-------|
201
-
|`transfer`| Blind‑transfer the call to a SIP URIor extension |`target: string`|— | The call leaves the IVR permanently|
202
+
|`transfer`| Blind‑transfer the call to a SIP URI, extension, or another IVR |`target: string`|`params: Map<string,string>`| When `target` is an `ivr:` URI (e.g. `ivr:other_ivr`), `params` are encoded as query string and passed to the target IVR as session variables|
202
203
|`queue`| Send the caller into an ACD queue |`target: string`|`return_to_ivr: bool`| When `return_to_ivr=true`, the call returns to IVR if no agent answers |
203
204
|`voicemail`| Forward the caller to a user's voicemail |`target: string`| — | The call leaves the IVR |
204
205
|`hangup`| Terminate the call | — |`prompt: string or null`| If `prompt` is set, plays audio before hanging up |
205
206
|`play_and_hangup`| Play an announcement then hang up with a SIP status code | — |`prompt: string or null`, `code: u16 or null`|`code` is the SIP response code (e.g. 486 busy, 404 not found) |
206
-
|`jump_ivr`| Jump to another named IVR route point |`route_point: string`|`params: Map<string,string>`|The new IVR receives `params` as session variables |
207
+
|`jump_ivr`| Jump to another named IVR route point |`route_point: string`|`params: Map<string,string>`|Equivalent to `transfer` with `target="ivr:{route_point}"`. `params`are passed as session variables to the target IVR|
207
208
|`route_to_agent`| Route the call to a human agent via skill‑based routing |`target: string`|`skill_group_id: string`, `key_id: string`, `channel_code: string`| Uses the contact‑center routing engine |
208
209
|`voip_bridge`| Bridge call audio to an external WebSocket endpoint as raw PCM16 |`create_room_uri: string`|`headers: Map<string,string>`, `timeout_ms: u64`| See [voip_bridge_en.md](voip_bridge_en.md)|
209
210
211
+
> **Passing data between IVRs**: Both `transfer` (with `target="ivr:other_ivr"`) and `jump_ivr` support a `params` field. These params are URL-encoded as a query string on the target URI (e.g. `ivr:other_ivr?order_id=123`) and parsed on the receiving end. The target IVR merges them into session variables, making them available for `$var$` substitution and included in `ProviderContext.variables` sent to the external step provider. This enables seamless IVR-to-IVR context propagation without external state management.
212
+
210
213
### Non-terminal actions
211
214
212
215
| type | Purpose | Required | Optional | Notes |
@@ -424,6 +427,8 @@ Any `$var_name$` in string fields is replaced from session variables:
424
427
425
428
Any variables returned in `ProviderContext.variables` by the provider are also available.
426
429
430
+
When an IVR is entered via `transfer` (with `target="ivr:other_ivr"`) or `jump_ivr`, any `params` from the source action are merged into session variables before the first `ProviderEvent::SessionStart` is sent. This means the target IVR's provider immediately sees these values in `ProviderContext.variables` and can use `$param_name$` substitution in its responses.
0 commit comments