Страница 1 из 3

Re: originate, каналы и CDR - полный бардак

Добавлено: 12 июл 2011, 23:04
Aven

Код: Выделить всё

Action: Originate
Channel: LOCAL/101@orig
Context: office
Priority: 1
Exten: 8495XXXXXXX

Код: Выделить всё

[orig]
exten => _X.,1,Goto(office,${EXTEN},1)
office - контекст прописан на телефонах.
Переход в h экстеншн идет на исходном LOCAL/101@orig канале и на SIP/101.
А убрать переход с LOCAL/101@orig как я понимаю нельзя?

Re: originate, каналы и CDR - полный бардак

Добавлено: 13 июл 2011, 12:43
Aven
Я знаю где он происходит, факт, что он происходит для двух каналов.
Выкрутился, условием в h, если канал локальный - не выполняем действия в h

Приложения для досрочного прерывания диалплана как я понимаю нет, пришлось делать Goto на последнюю строчку.

Re: originate, каналы и CDR - полный бардак

Добавлено: 16 ноя 2011, 13:14
Vslav1
Мне понравилась идея делать Dial-ы через интерфейс AMI вместо Originate
Решил попробовать, вот код:

Код: Выделить всё

Query=Action: AGI
Channel: local/2709@from-probe
Command: Dial SIP/2709@from-probe|30|rtThHkK
В ответ получаю сообщение, что нет такого канала:

Код: Выделить всё

Asterisk Call Manager/1.1
Response: Success
Message: Authentication accepted

Response: Error
Message: Channel local/2709@from-probe does not exists or cannot get its lock

Response: Goodbye
Message: Thanks for all the fish.
Почему не создаётся канал?
Из этого же контекста команда Originate у меня выполняется без проблем.
Кто пробовал из AMI делать Dial, подскажите пожалуйста, что не так. :?:

Re: originate, каналы и CDR - полный бардак

Добавлено: 16 ноя 2011, 13:18
zzuz

Код: Выделить всё

Channel: local/2709@from-probe
Command: Dial SIP/2709@from-probe|30|rtThHkK
Что это? Что Вы этим хотите сделать?

Re: originate, каналы и CDR - полный бардак

Добавлено: 17 ноя 2011, 10:54
Vslav1
Эта комбинация нужна чтобы сделать делать Dial :arrow: через интерфейс AMI.
В отличие от Originate команды Dial в AMI нет :( , но есть возможность асинхронного выполнения AGI команд:

Код: Выделить всё

CLI> manager show commands
. . .
AGI              agi,all          Add an AGI command to execute by Async AGI
Если опустить строку с параметром Channel в надежде что он создастся сам, то возникает такая ошибка :idea: :

Код: Выделить всё

Response: Error
Message: Both, Channel and Command are *required*
Значит указывать канал нужно.
Осталось понять как :?:


P.S. Уважаемый zzuz, большая просьба не предлагать создать call файл, и не рассказывать что Вы в своём коллцентре так делаете и это даёт очень хорошее быстродействие. ;)

Re: originate, каналы и CDR - полный бардак

Добавлено: 17 ноя 2011, 12:03
ded
Уважаемый Vslav1!
Коллега zzuz указал Вам на
Command: Dial SIP/2709@from-probe|30|rtThHkK
Это неверный синтаксис, неужели нужно специально указывать что и как неправильно?

Re: originate, каналы и CDR - полный бардак

Добавлено: 17 ноя 2011, 19:19
Vslav1
Уважаемый ded!
Поясните, а синтаксисе ли дело?

Вот как я обычно делаю Dial через AGI:

Код: Выделить всё

$ret=$agi->exec_dial('SIP', $dnis.OUT_CONTEXT, TIMEOUT, 'rtThHkK');
Но AGI то вызывается когда канал УЖЕ ЕСТЬ!

Если это же делать через AMI то наверное правильнее с EXEC вот так:
Query=Action: AGI
Channel:
nonexistent_сhannel
Command: EXEC Dial SIP/2709@from-probe|30|rtThHkK

А проблема в том, что нельзя сделать Dial для несуществуюшего канала.
Сможете ответить:
Как в Asterisk создать канал (Через AMI)? :?:

Re: originate, каналы и CDR - полный бардак

Добавлено: 17 ноя 2011, 19:33
Vslav1
Поясню зачем это нужно - для проверки работоспособности городского номера,
на котором есть IVR меню.
Скрипт запускаем с некоторой периодичностью
и делает попытку дозвона на проверяемый номер.
Анализируем статус канала
Если дозвонились и попали в IVR, то сразу делаем отбой.
Если не дозвонились за некоторое время, то тоже делаем отбой
и оповещаем персонал. :shock:

Итак вот один из путей сделать изходящий звонок, подключившись серез интерфейс AMI.
Инициируем звонок так:
AMI запрос:

Код: Выделить всё

Action: Command
Command: console dial 4991234567@from-probe
AMI ответ:

Код: Выделить всё

Asterisk Call Manager/1.1
Response: Success
Message: Authentication accepted

Response: Follows
Privilege: Command
--END COMMAND--

Event: Newchannel
Privilege: call,all
SequenceNumber: 1608638
File: channel.c
Line: 972
Func: __ast_channel_alloc_ap
Channel: Console/dsp
ChannelState: 5
ChannelStateDesc: Ringing
CallerIDNum:
CallerIDName:
AccountCode:
Exten: 4991234567
Context: from-probe
Uniqueid: 1321540734.77643
Потом через некоторое время узнаём статус канала так:
AMI Запрос:

Код: Выделить всё

Action: Status
Channel: SIP/4991234567-0001278b
AMI Ответ:

Код: Выделить всё

Asterisk Call Manager/1.1
Response: Success
Message: Authentication accepted

Response: Success
Message: Channel status will follow

Event: Status
Privilege: Call
Channel: SIP/4991234567-0001278b
CallerIDNum: 4991234567
CallerIDName: <unknown>
Account:
State: Up
BridgedChannel: Console/dsp
BridgedUniqueid: 1321540859.77660
Uniqueid: 1321540859.77661

Event: StatusComplete
Items: 1
И когда узнали отбиваемся:
AMI Запрос:

Код: Выделить всё

Action: Hangup
Channel: SIP/4991234567-0001278b
AMI Ответ:

Код: Выделить всё

Asterisk Call Manager/1.1
Response: Success
Message: Authentication accepted

Response: Success
Message: Channel Hungup
Можно ли как-то сделать Dial, чтобы сразу узнать ИМЯ_КАНАЛА или руками задать его ?
Сейчас, когда я всё это проделываю, то подсматриваю его в консоли через
core show channels

Очень не хочется использовать ловлю событий (Events) на интерфейсе AMI.
Общеизвестно, что при большой нагрузке некоторые события просто теряются. :(

Re: originate, каналы и CDR - полный бардак

Добавлено: 17 ноя 2011, 19:48
ded
Если дозвонились и попали в IVR, то сразу делаем отбой.
Если не дозвонились за некоторое время, то тоже делаем отбой
Могу предположить зачем Вы это делаете.
Пишете ЕЩЁ_ОДИН_АВТООБЗВОН?
Думаю да, поэтому ответов не будет, по принципиальным соображениям.

Re: originate, каналы и CDR - полный бардак

Добавлено: 18 ноя 2011, 01:30
zzuz
Я вот тоже не понимаю , как вести диалог с автором , если он занимается ерундой.
Для php - AGI настолько примитивен , что не разобраться в методах класса ... промолчу.
http://phpagi.sourceforge.net/phpagi2/d ... dexec_dial