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

Как получить номер 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.

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

спросил 2017-01-16 18:25:51 +0400

symon Gravatar symon
11 2 3

обновил 2017-01-17 14:43:25 +0400

Comments

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

symon ( 2017-01-17 14:42:06 +0400 )редактировать

2 Ответа

0

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

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

ответил 2017-01-17 10:50:33 +0400

komrad123 Gravatar komrad123
3810 5 3 44

Comments

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

meral ( 2017-01-20 02:25:16 +0400 )редактировать

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

komrad123 ( 2017-01-20 09:08:59 +0400 )редактировать

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

meral ( 2017-01-20 09:54:33 +0400 )редактировать
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.
ссылка удалить спам редактировать

ответил 2017-01-16 19:56:30 +0400

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 ленту новостей

Статистика

Задан: 2017-01-16 18:25:51 +0400

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

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

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

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