LINUX.ORG.RU
ФорумAdmin

Завершить AMI скрипт с Originate выводом состояния DialStatus

 , ,


0

1

Опускаю скрипт, потому, что сам он не важен, только части для понимания задачи.
Устанавливаю соединение с AMI

# Переменные для соединения
AMI_HOST=192.168.200.6
AMI_PORT=5038
AMI_USER=user
AMI_PASS=123

# Переменные для Вызова
CALLERID='199'
CALL_CONTEXT=phones
TARGET_CONTEXT=informer2

Посылаю LOGIN

LOGIN=$(cat <<EOFAction: Login
Username: ${AMI_USER}
Secret: ${AMI_PASS}
Events: off
EOF
)
Жду успех и посылаю ORIGINATE
ORIGINATE=$(cat <<EOFAction: Originate
Channel: Local/${num}@${CALL_CONTEXT}/n
CallerID: ${CALLERID}
Context: ${TARGET_CONTEXT}
Priority: 1
Async: false
Variable: File=/home/petav/test
Account: informer
EOF
)
В цикле читаю Event

Задача по какому критерию прервать цикл с выводом DialStatus?
Цикл логирует Event

05/18/15 23:32:37 - DEBUG - Event: Dial Privilege: call,all SubEvent: End Channel: Local/89301234567@phones-9521;2 UniqueID: 1431981137.5057 DialStatus: ANSWER
но это событие может принадлежать и другому вызову. Рассуждая, может показаться, что выходом будет сначала поймать событие «Event:Newchannel»
05/18/15 23:32:17 - DEBUG - Event: Newchannel Privilege: call,all Channel: Local/89301234567@phones-9521;1 ChannelState: 0 ChannelStateDesc: Down CallerIDNum: CallerIDName: AccountCode: Exten: 89301234567 Context: phones Uniqueid: 1431981137.5056
Вычленить Uniqueid и ждать совпадения Uniqueid для «Event: Dial», но и «Event:Newchannel» может принадлежать другому вызову.

★★★★★

Variable: File=/home/petav/test

Variable: MyUID=<уникальное-значение>

Потом поймать соответствующее событие в канале установки значения переменной и связать его с каналом.

Как-то так.

FeyFre ★★★★
()
Ответ на: комментарий от FeyFre

Как-то так.

Это сработает, но верна ли концепция?

petav ★★★★★
() автор топика

На сколько помню надо выставить async=true и уникальный ActionID И тогда по завершение вызова астериск создаст Event с этим же actionid

Yur4eg ★★
()
Ответ на: комментарий от Yur4eg

На сколько помню надо выставить async=true и уникальный ActionID И тогда по завершение вызова астериск создаст Event с этим же actionid

Послал «ActionID: 123456» и «Async: true». Увидел cat /tmp/log|grep 123456
В случае успеха это

05/19/15 16:00:22 - DEBUG - Response: Success ActionID: 123456 Message: Originate successfully queued
В случае не успеха это
05/19/15 16:13:41 - DEBUG - Event: OriginateResponse Privilege: call,all ActionID: 123456 Response: Failure Channel: Lo_cal/06107@phones Context: informer2 Exten: Reason: 0 Uniqueid: <null> CallerIDNum: 199 CallerIDName: <unknown>

Не от чего оттолкнуться, что бы вести звонок. Допускаю, что я не прав, в желании возвращать приложению UNIQUEID, оно же меняет свое значение при маршрутизации звонка. Буду заврашть скрипт с сообщениями:

Response: Success ActionID: 123456

Response: Failure ActionID: 123456

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

значение при маршрутизации звонка

При переадресации разве что.

Если происходит бриджинг то uniqued остаётся у одного из каналов(?) Прикручивал примерно такую фишку на Asterisk, уже слабо помню детали, так как перелез на FreeSwitch.

invokercd ★★★★
()
Ответ на: комментарий от invokercd

Вы правы, могу увязать ActionID c Uniqueid, не понимаю почему вчера не уведел это

Response: Success ActionID: 123456 Message: Originate successfully queued
Event: OriginateResponse Privilege: call,all ActionID: 123456 Response: Success Channel: Local/06107@phones-8b4a;1 Context: informer2 Exten: Reason: 4 Uniqueid: 1432117490.10587 CallerIDNum: 199 CallerIDName: <unknown>
народная мудрость «Утро вечера медренее» в работе, наверное

upd: Событие OriginateResponse появялется после завершениея звонка

petav ★★★★★
() автор топика
Последнее исправление: petav (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.