First time here? Check out the FAQ!

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

Как получить номер EXTENSION кто поднял трубку при звонке в группе

0

Есть задача по интеграции CRM и Asteriska. Для реализации этого был выбран путь GET-POST запросов. Логика следующая: 1.Пришел звонок 2.Запрос на сервере с номером звонящего 3.Определение новый или существующий клиент 4.Отправка звонка в соответствующий правилу подпункт.

Вот код Extension_Custom


[20003-incoming]

exten => s,1,Set(CALLERID(name)=${CURL(http://trulala/call?tel={CALLERID(num)})})
exten
=> s,2,Set(managernumber=${CUT(CALLERID(name),>,3)})
exten
=> s,3,Set(managernumber=${CUT(managernumber,\",6)})
exten => s,4,Set(
managerID=${CUT(CALLERID(name),>,3)})
exten => s,5,Set(
managerID=${CUT(managerID,\",4)})
exten => s,6,Set(__Clientnum=${CALLERID(num)})
exten => s,7,Set(CALLERID(name)=${CUT(CALLERID(name),>,3)})
exten => s,8,Set(CALLERID(name)=${CUT(CALLERID(name),\",2)})

exten => s,n,ExecIf($[ "${managernumber}" = "null" ] ?Gosub(new-client,s,1))

exten => s,n,ExecIf($[ "${CALLERID(name)}" = "null" ] ?Gosub(new-client,s,1))

exten => s,n,Dial(Local/${managernumber},,mM(manager-answered,))

exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Gosub(manager-busy,s,1)
exten => s-BUSY,1,Gosub(manager-busy,s,1)
exten => s-UNKNOWN,1,Gosub(manager-busy,s,1)
exten => s-CONGESTION,1,Gosub(manager-busy,s,1)
exten => s-CHANUNAVAIL,1,Gosub(manager-busy,s,1)
exten => h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} exten1=${CDR(dstchannel)}   exten=${CDR(dst)} & cidnum=${CALLERID(num)}&AllCallTime=${CDR(duration)}&CallTime=${CDR(billsec)})})
exten => h,2,Wait(5)
exten => h,3,NoOp(CURL-RESPONSE: ${rtn})

exten => s,n,Hangup()

[new-client]
exten => s,1,Dial(local/603@from-internal,,)
exten => h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} exten1=${CDR(dstchannel)}   exten=${CDR(dst)} & cidnum=${CALLERID(num)}&AllCallTime=${CDR(duration)}&CallTime=${CDR(billsec)})})
exten => h,2,Wait(5)
exten => h,3,NoOp(CURL-RESPONSE: ${rtn})

[manager-busy]
exten => s,1,Dial(local/603@from-internal,,)
exten => h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} exten1=${CDR(dstchannel)}   exten=${CDR(dst)} & cidnum=${CALLERID(num)}&AllCallTime=${CDR(duration)}&CallTime=${CDR(billsec)})})
exten => h,2,Wait(5)
exten => h,3,NoOp(CURL-RESPONSE: ${rtn}))

Код работает. Стала проблема в том что POST запросом нужно передать информацию о завершенном звонке. Длительность, кто поднял трубку, стсатус звонка и тд и тп... У меня не получается получить информацию о том кто поднял трубку... Я ее получаю и пишет мне что трубку взял "s" или группа 603. В CDR информация аналогична. Голова уже квадратная. Не знаю куда копать.

Смог победить немного другим способом, а именно:


[new-call]
exten
=> s,1,Set(DIALGROUP(test,add)=Local/203)
exten
=> s,n,Set(DIALGROUP(test,add)=Local/200)
exten
=> s,n,Set(DIALGROUP(test,add)=Local/201)
exten
=> s,n,Dial(${DIALGROUP(test)})
exten
=> h,1,Set(rtn=${CURL(http://trulala/ecall,Status=${CDR(disposition)} AnswerPeer=${DIALEDPEERNUMBER} CallerNum=${CALLERID(num)} CallTime=${CDR(duration)} TellTime=${CDR(billsec)})})
exten
=> h,2,Wait(1)
exten
=> h,3,NoOp(CURL-RESPONSE: ${rtn})
Сначала я добавил номера в группу, а потом позвонил на группу. С Макросом вопрос и не смотрел, а вот по поводу ${DIALEDPEERNUMBER} я получал всю туже группу 603.

спросил Jan 16 '17

symon Gravatar symon
11 2 3

обновил Jan 17 '17

Comments

..............

symon (Jan 17 '17)edit

2 Ответа

0

${DIALEDPEERNUMBER} в h / после звонка ловите

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

ответил Jan 17 '17

komrad123 Gravatar komrad123
3810 5 3 44

Comments

так он же четко пишет, ему для crm. в момент ответа.

meral (Jan 19 '17)edit

четко он написал лишь что ему надо 'длительность/статус звонка/и тд'. длительности нет в момент ответа как минимум.

komrad123 (Jan 20 '17)edit

хм? стандартная задача срм. надо в момент звонка карточку.

meral (Jan 20 '17)edit
0

Используйте опцию M команды dial

 M(macro[^arg[^...]]): 
        macro
- Name of the macro that should be executed.

        arg
- Macro arguments
Execute the specified <macro> for the *called* channel  before connecting
to the calling channel
. Arguments can be specified to the Macro using '^'
as a delimiter. The macro can set the variable ${MACRO_RESULT} to specify
the following actions after the macro
is finished executing:
        $
{MACRO_RESULT}: If set, this action will be taken after
        the macro finished executing
.
            ABORT
: Hangup both legs of the call
            CONGESTION
: Behave as if line congestion was
            encountered
            BUSY
: Behave as if a busy signal was encountered
            CONTINUE
: Hangup the called party and allow the
            calling party to
continue dialplan execution at the next priority
            GOTO
:[[<context>^]<exten>^]<priority>: Transfer the
            call to the specified destination
.
    NOTE
: You cannot use any additional action post answer options in
    conjunction
with this option. Also, pbx services are run on the peer
   
(called) channel, so you will not be able to set timeouts via the TIMEOUT()
   
function in this macro.
ссылка удалить спам редактировать

ответил Jan 16 '17

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Ваш ответ

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)!
[скрыть предварительный просмотр]

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

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

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

Статистика

Задан: Jan 16 '17

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

Обновлен: Jan 17 '17

Похожие вопросы:

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