Извиняюсь, если уже было, но даже не могу придумать, как поисковый запрос составить...
Есть Астериск, в который воткнута древняя АТС-ка (наследие девяностых) "исходящими" портами через такой же древний четырёхпортовый шлюз (может и не из девяностых, но не сильно новее). То есть, юзеры с АТСки звонят в город через Астериск. Работает это всё отлично, как ни странно. А вот если кто-нибудь с Астериска (например, я со своим софтфоном) захочет позвонить какому-нибудь юзеру на АТСке, то тут придётся:
- Выбрать свободный порт;
- Позвонить на него, дождаться, когда АТСка "снимет трубку";
- Донабрать нужный номер расширения.
Сейчас мне приходится методом тыка звонить на одну из четырёх линий, ждать ответа и после этого вручную набирать номер расширения, но я хотел бы автоматизировать это дело.
Вопрос первый: как сделать Dial "на первый свободный эндпойнт"? Если я сделаю на все четыре сразу - типа, один из них ответит первым - это будет не очень элегантным решением (достаточно того что АТСка начнёт отвечать сразу на все линии, и потребуется довольно много времени, чтобы они со шлюзом разобрались в ситуации).
Вопрос второй - как сделать "позвонить на такой-то эндпойнт, а потом донабрать такой-то номер через DTMF"? Я пробовал сделать Dial(SIP/line1/${EXTEN}), но шлюз на такое сразу отвечает "Busy here". Я вообще сомневаюсь, что шлюзы предполагают ситуацию, в которой в них втыкают не телефоны, а АТС - так что неудивительно, что ему непонятна идея "звонить" куда-то после того как ожидамый пользователь снял трубку. Так что надо именно дождаться, когда АТС снимет трубку, и набрать нужный номер через DTMF.