Replace the Read dialplan stub with a real async adapter and media loop. It must play the optional prompt, collect receiver-side DTMF end events, enforce max digits, stop on #, and enforce both an overall input deadline and an inter-digit timeout. Extend the existing Read syntax with an optional seventh digit-timeout argument while preserving Asterisk-compatible arguments.
Regression tests must prove fixed-length completion, # termination, overall timeout, inter-digit timeout, and that Read is registered as the real adapter.
Asterisk Read semantics: https://docs.asterisk.org/Asterisk_23_Documentation/API_Documentation/Dialplan_Applications/Read/
FreeSWITCH play_and_get_digits timeout/digit-timeout syntax: https://developer.signalwire.com/freeswitch/dialplan/dptools/
Replace the Read dialplan stub with a real async adapter and media loop. It must play the optional prompt, collect receiver-side DTMF end events, enforce max digits, stop on #, and enforce both an overall input deadline and an inter-digit timeout. Extend the existing Read syntax with an optional seventh digit-timeout argument while preserving Asterisk-compatible arguments.
Regression tests must prove fixed-length completion, # termination, overall timeout, inter-digit timeout, and that Read is registered as the real adapter.
Asterisk Read semantics: https://docs.asterisk.org/Asterisk_23_Documentation/API_Documentation/Dialplan_Applications/Read/
FreeSWITCH play_and_get_digits timeout/digit-timeout syntax: https://developer.signalwire.com/freeswitch/dialplan/dptools/