Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Определение инициатора звонка через колбек в статистике

0

День добрый, Использую Астер через колбек. Пользуюсь не только, я но и родные. Вывод статистики в mysql, но проблема с тем чтобы определить инициатора звонка. Так как фактически это сам *, я подумал что можно по полю "dcontext" сейчас там везде один экстеншн на который попадает звонящий. Каждому абоненту создать свой контекст для обработки звонка. Но думаю может это не правильно, дублировать такие куски кода. Может есть решение более элегантное))?

[from-multifon]
exten => _X.,1,GotoIf($["${CALLERID(num)}" = "мой--номер"]?callback2,s,1) 
exten => _X.,n,Dial(${myphone})
exten => _X.,n,Hangup

[callback2] 
exten => s,1,System(/etc/asterisk/scripts/callback2 ${CALLERID(num)} &)
exten => s,n,Progress() 
exten => s,n,Wait(1)
exten => s,n,Playback(transfer,noanswer)
exten => s,n,Hangup

[mera-callback-out2] 
include => out
exten => s,1,Answer()
exten => s,n,Set(Prohod=0)
exten => s,n,Wait(1)
;Read(variable[|filename][|maxdigits][|option][|attempts][|timeout])
exten => s,n(nach),Background(speed-enternumber)
exten => s,n,Read(EXT,,,,,5)
exten => s,n,Set(Prohod=${MATH(${Prohod}+1)})
exten => s,n,GotoIF($[${Prohod} > 3]?t,1) 
exten => s,n,GotoIf($[${LEN(${EXT})} >= 3]?${EXT},1:i,1) exten => s,1,Dial(SIP/out/${EXTEN},60,HhtT) exten => _s,n,Set(CALLBACKEXTEN=${EXTEN}) exten => s,n,NoOp(DIALSTATUS: ${DIALSTATUS}) exten => _s,n,Goto(s-${DIALSTATUS},1) exten => s-BUSY,1,Goto(busy,1) exten => s-NOANSWER,1,Goto(noanswer,1) exten => _s-.,1,Goto(hz,1) exten => busy,1,PlayBack(callback/busy) exten => busy,n,Goto(mera-callback-menu,s,1) exten => noanswer,1,PlayBack(callback/noanswer) exten => noanswer,n,Goto(mera-callback-menu,s,1) exten => hz,1,PlayBack(callback/chanuval) exten => hz,n,Goto(mera-callback-menu,s,1) exten => i,1,PlayBack(privacy-incorrect) exten => i,n,Goto(mera-callback-out2,s,nach) exten => t,1,PlayBack(callback/timeout) exten => t,n,Hangup()

Call файл

#!/bin/sh
sleep 5

NUMBER=$1

echo "Channel: SIP/multifon/$NUMBER MaxRetries: 1 RetryTime: 30 WaitTime: 30 Context: mera-callback-out2 Extension: s Priority: 1 AlwaysDelete: Yes " > /var/spool/asterisk/tmp/$NUMBER.call

mv /var/spool/asterisk/tmp/$NUMBER.call /var/spool/asterisk/outgoing/

Switch и Komrad спасибо большое, немного потупил, но все сделал благодаря вам

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

спросил 2012-09-21 12:37:58 +0400

fedorchuk Gravatar fedorchuk
283 13 2 11

обновил 2012-09-21 22:23:14 +0400

2 Ответа

1

В контексте заполняйте поле userfield:

exten => _X.,n,Set(CDR(userfield)=${CALLERID(num)})

Потом выводите его в статистику. Так же можете использовать accountcode

ссылка удалить спам редактировать

ответил 2012-09-21 12:57:06 +0400

switch Gravatar switch
8334 11 7 91
http://lynks.ru/

обновил 2012-09-21 12:57:16 +0400

Comments

Не совсем понятно в какой контекст вписывать. В контекст который вызывает исполнение колбэк (входящий), или в тот контекст который исходящий?

fedorchuk ( 2012-09-21 13:21:49 +0400 )редактировать

Ну это уже зависит от того, что вы там понастроили и что в статистике видеть хотите.

switch ( 2012-09-21 13:38:35 +0400 )редактировать

привел свой план

fedorchuk ( 2012-09-21 13:42:56 +0400 )редактировать

Присваиваю насильно переменной значение но она не появляется в mysql/

  • Executing [s@mera-callback-out2:5] Set("SIP/multifon-00000052", "CDR(userfield)=callback") in new stack
fedorchuk ( 2012-09-21 20:29:15 +0400 )редактировать

а поле такое есть в таблице? просто я по опыту с 1.4 говорю - там работает, а в новых версиях там явно нужно указывать поля. Плюс у вас колбэк сразу в SIP канал, там ничего не сделаешь. Перебросте через chan_local с нужной обработкой. Плюс в call файле сделайте переменную, через которую будет передаваться номер того кто колбек делается или что вам надо передавать туда.

switch ( 2012-09-22 12:00:04 +0400 )редактировать

Я сделал так.В call файле присваивается переменная с номером. И потом она выводится через, вызванный call файлом, контекст в поле callerid

fedorchuk ( 2012-09-23 16:32:40 +0400 )редактировать

Ну так тоже можно

switch ( 2012-09-23 16:40:56 +0400 )редактировать
1

в своем скрипте callback2 выставляйте переменную в call-файле Set: ORIGCID=...

в [mera-callback-out2] меняйте callerID на то значение.

Set(CALLERID(num)=${ORIGCID})

ссылка удалить спам редактировать

ответил 2012-09-21 16:28:35 +0400

komrad123 Gravatar komrad123
3780 5 3 42

Comments

не подскажите синтаксис? как в сall файле задать origcid?

fedorchuk ( 2012-09-21 20:07:23 +0400 )редактировать

Set: ORIGCID=${NUMBER}

komrad123 ( 2012-09-21 20:22:29 +0400 )редактировать

Executing [s@mera-callback-out2:2] Set("SIP/multifon-00000056", "CALLERID(num)=") in new stack Не присваивает значение

fedorchuk ( 2012-09-21 20:44:45 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2012-09-21 12:37:58 +0400

Просмотрен: 503 раз

Обновлен: Sep 21 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.