{
  "$schema": "https://schema.spbx.tel/v1/structs.realm.lib",
  "description": "Ring the dialed extension; on no answer, take a voicemail for it.",
  "params": {
    "ring_timeout": {
      "type": "number",
      "description": "Seconds to ring the dialed extension before falling back to voicemail.",
      "default": 25
    }
  },
  "exports": {
    "enter": {
      "description": "Answer with ringback, dial %dialed%, fall back to voicemail on no answer.",
      "flow": "flows/sub_flow/enter"
    }
  },
  "uses": {
    "std": {
      "preset": "stdlib"
    },
    "vm": {
      "preset": "voicemail"
    }
  },
  "flows": {
    "dial": {
      "try": {
        "internal_target": [
          "extensions/%dialed%"
        ],
        "timeout_seconds": "${ring_timeout}",
        "dial_plan": [
          "presets/std/connect"
        ]
      }
    },
    "if": {
      "check": {
        "condition": "conditions/variable_equals/answered",
        "then": [
          "presets/std/stop_silence",
          "presets/std/wait_for_listener_start",
          "presets/std/wait_for_listener_stop",
          "presets/std/hangup"
        ],
        "else": [
          "presets/std/stop_silence",
          "presets/vm/take_message(mailbox='%dialed%')"
        ]
      }
    },
    "sub_flow": {
      "enter": {
        "dial_plan": [
          "presets/std/answer",
          "presets/std/beep_player",
          "flows/dial/try",
          "flows/if/check"
        ]
      }
    }
  },
  "conditions": {
    "variable_equals": {
      "answered": {
        "variable": "dial_answered",
        "value": "true"
      }
    }
  }
}
