Skip to main content

IVR Menus

IVR menus and their options.

IvrMenu​

An IVR menu: a prompt and the digits a caller can press.

Table: ivr_menus
Model: App\Models\IvrMenu
Tenant scoped: yes (OrganizationScope)
Traits: HasUnprovisionedState

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
organization_idbigint unsignedNo-Tenant
namevarchar(255)No-Menu name
descriptiontextYesnullDescription
audio_file_pathvarchar(500)YesnullPrompt audio path or URL
recording_idbigint unsignedYesnullPrompt recording. Foreign key to recordings, on delete set null
tts_texttextYesnullText-to-speech prompt
tts_voicevarchar(50)YesnullText-to-speech voice
max_timeouttinyint unsignedNo3Seconds to wait for the first digit
inter_digit_timeouttinyint unsignedNo2Seconds to wait between digits
max_turnstinyint unsignedNo3Times the prompt repeats before the failover
failover_destination_typeenumNohangupWhere the call goes after max_turns without a valid choice. Values: extension, ring_group, conference_room, ivr_menu, ai_assistant, ai_load_balancer, hangup, call_queue, unavailable (cast to IvrDestinationType)
failover_destination_idbigint unsignedYesnullFailover target ID (no foreign key)
statusenumNoactiveActive or inactive. Values: active, inactive (cast to IvrMenuStatus)
created_attimestampYesnull
updated_attimestampYesnull

Indexes

  • idx_ivr_menus_org_name: organization_id, name
  • idx_ivr_menus_org_status: organization_id, status
  • ivr_menus_recording_id_foreign: recording_id

Relationships

$ivrMenu->organization() → Organization (organization_id) [BelongsTo]
$ivrMenu->options() → IvrMenuOption (ivr_menu_id) [HasMany]

Scopes: active(), withStatus(), forOrganization(), search(), unprovisioned()
Methods: getFallbackDestination(), isActive(), isInactive(), getActiveOptions(), findOptionByDigits()

unprovisioned() and is_unprovisioned are true when failover_destination_type is unavailable or any option's destination_type is unavailable. getFallbackDestination() loads the failover target; findOptionByDigits() and getActiveOptions() read the options.

IvrMenuOption​

A digit choice in an IVR menu.

Table: ivr_menu_options
Model: App\Models\IvrMenuOption
Tenant scoped: no

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
ivr_menu_idbigint unsignedNo-Menu. Foreign key to ivr_menus, on delete cascade
input_digitsvarchar(10)No-Digits the caller presses
descriptionvarchar(255)YesnullLabel
destination_typeenumNo-Destination kind. Values: extension, ring_group, conference_room, ivr_menu, business_hours, ai_assistant, ai_load_balancer, call_queue, unavailable (cast to IvrDestinationType)
destination_idbigint unsignedNo-Destination ID (no foreign key)
prioritytinyint unsignedNo1Sort order
created_attimestampYesnull
updated_attimestampYesnull

Indexes

  • idx_ivr_menu_options_menu_priority: ivr_menu_id, priority
  • unique_menu_digits (unique): ivr_menu_id, input_digits

Relationships

$ivrMenuOption->ivrMenu() → IvrMenu (ivr_menu_id) [BelongsTo]

Methods: destination(), getDestinationWithFallback(), getDestinationName(), isValidDestination(), getValidatedDestination()

destination() loads the target by destination_type. The IVR request validates a business_hours destination against the business_hours_schedules table.