LINUX.ORG.RU
решено ФорумAdmin

Asterisk. Запуск скрипта при подъеме трубки

 , ,


0

1

Всем привет.

Есть asterisk 1.8.11.0
Настроена очередь.
Необходимо, что бы исполнялся скрипт в тот момент, когда трубку поднимает кто-либо из этой очереди. Плюс передача скрипту в параметре номера звонившего, чтоб можно было взять из @ARGV.

Подскажите хотя бы документацию по этой теме или схему, как это можно реализовать.

★★★★

Тебе нужно отслеживать event Bridge. Я делал это через AMI. Номера запихивай в Callerid1 и Callerid2. Собсно, Callerid1 - это звонящий, а 2 — тот, кто взял трубку. Однако, при конференции из нескольких человек там может быть особая магия.

Chaser_Andrey ★★★★★
()

Что-то вроде такого?

exten => s,n,System(/var/lib/agi-bin/script_to_run.sh)

riki ★★★★
()

Подскажите хотя бы документацию по этой теме или схему, как это можно реализовать.

asterisk*CLI> core show application Queue
kernelpanic ★★★★★
()

Всем спасибо :)

Chaser_Andrey

Тебе нужно отслеживать event Bridge.

Не мог бы по-подробнее подсказать? Набросал скриптик, который смотрит за событиями, все(как мне показалось) есть в event Hangup, но там много лишнего. Или я что-то не так понял?

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

Как это делать в диалплане — я хз, я не занимался настройкой Asterisk, а лишь работал с ним через AMI.

Hangup - это событие, когда связь между каналами разрывается, примерно тогда же и идет запись в cdr. Если тебя это устраивает - то используй hangup.

Но если тебе нужен именно момент поднятия трубки - то тут без bridge не обойтись.

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

Хотя могут быть другие эвенты/хуки, про которые я не знаю.

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

если тебе нужен именно момент поднятия трубки - то тут без bridge не обойтись.

При поднятии трубки агентом возникает event AgentConnect.
А еще стоит подумать, а оно надо через AMI делать, если скрипт можно дергать средствами диалплана.

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

Да я тоже не настраивал Астериск.

Но если тебе нужен именно момент поднятия трубки - то тут без bridge не обойтись.

Я просто не могу понять как его ловить этот event Bridge

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

скрипт можно дергать средствами диалплана

если у него в диалплане Dial() то дернуть получится только свой болт. Dial() синхронный и выполняется полка трубки не положат.

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

Ага, именно так.

Код завтра посмотрю, спасибо.

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

Все получилось. Всем спасибо :)

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

Dial умеет макрос и много чего еще

G(context^exten^pri): If the call is answered, transfer both parties to the specified context and extension.
M(x): Executes the macro (x) upon connect of the call (i.e. when the called party answers).

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

Это сфигали? Что Dial, что Queue умеет gosub и macro. Но про это написано в документации, которую никто не читает.

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

Да без разницы, Asterisk::AMI оказалось как раз то, что надо

Difrex ★★★★
() автор топика
3 августа 2014 г.

В файле queues.conf в разделе описания очереди добавьте строку membermacro=имя-макроса.

В диалплане создаем/добавляем макрос (пример для ael):

context macro-nav-имя-макроса {

s => {

AGEN=${CHANNEL:4:4}; // у меня агенты имеют 4-х значные номера

System(/var/www/scripts/checkdir.sh ${AGEN}); //путь к вашему скрипту

}

}

netmask
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.