ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

asterisk -> curl -> 1c передача exten поднявшего разговор.

Проблемы и их решения Asterisk как такового

Модераторы: april22, Zavr2008

asterisk -> curl -> 1c передача exten поднявшего разговор.

Сообщение Volosko » 25 фев 2020, 15:58

Добрый день!

Есть задача передать в 1с номер того кто поднял трубку в режиме здесь и сейчас.
То есть когда внешний вызов прилетает в контекст и в нем используется DIAL на несколько номеров, и неизвестно заранее кто возьмет трубку, то появилась задача при снятии трубки фиксировать это и передавать в 1с.
На стороне 1с поднят самописный вэбсервис который будет ловить эту информацию, и затем уже обрабатывать там.

Логичнее всего для меня показалось использовать CURL для этого, так как это убирает необходимость в использовании промежуточных решений.

Для прикидки что-то такое:

Код: выделить все
[sample-context]
exten => t,1,NoOp
exten => t,n,Macro(recording,${CALLERID(num)},${EXTEN})
exten => t,n,Dial(SIP/1111&SIP/2222&SIP/3333,90,tTgmM(myscript1))
####СЛОЖНОСТИ### :(
exten => t,n,Macro(1c-post,${CALLERID(number)},${EXTEN})

[macro-1c-post]
exten => s,1,NoOp(***postdata***)
same => n,set(date=${STRFTIME(,,%Y-%m-%d %H:%M:%s)})
same => n,set(in-number=${ARG1})
same => n,set(op-number=${ARG2})
same => n,curl(http://blabla.domain/1c-data.php,queuedatatoken=1234&date=${date}&${in-number}&${op-number})



Подскажите пожалуйста как ловить EXTEN поднявшего корректно ? То есть именно тот который взял разговор.
Полагаю что последующим возникнет сложность как передать дальше при переводе или при перехвате, но думаю что пока это вопрос будущего.
Извините если вопрос очень глупый, я не претендую на звание опытного :(
Volosko
 
Сообщений: 26
Зарегистрирован: 03 апр 2018, 15:46

Re: asterisk -> curl -> 1c передача exten поднявшего разгово

Сообщение ded » 25 фев 2020, 16:11

В вашем контексте на шаге исполнения
exten => t,n,Macro(1c-post,${CALLERID(number)},${EXTEN})
состояние переменной ${EXTEN}) будет равно t
ded
 
Сообщений: 15801
Зарегистрирован: 26 авг 2010, 19:00

Re: asterisk -> curl -> 1c передача exten поднявшего разгово

Сообщение Volosko » 26 фев 2020, 16:05

Вот на этом месте я и туплю.
Как сообразить такую строку которая бы при ответе передавала в $EXTEN или хоть в $PARAM значение того кто поднял.
Чтобы потом crul отправил это "наружу"
Volosko
 
Сообщений: 26
Зарегистрирован: 03 апр 2018, 15:46

Re: asterisk -> curl -> 1c передача exten поднявшего разгово

Сообщение Volosko » 26 фев 2020, 16:48

Кажется дошло :) медленно...
И не факт что верно.
Но вырисовывается что-то вроде такой конструкции.
Если правильно понимаю то ${DIALEDPEERNUMBER}: Number of the called party - то есть искомое.

Но почему-то встречается упоминание в сети что это не работает.

Код: выделить все
[some-exten]
exten => t,1,NoOp
exten => t,n,Macro(recording,${CALLERID(num)},${EXTEN})
exten => t,n,Dial(SIP/1111&SIP/2222&SIP/3333,90,tTgmM(MyScript))


[macro-MyScript]
exten => s,1,noop(***postdata***)
same => n,set(date=${STRFTIME(,,%Y-%m-%d %H:%M:%s)})
same => n,set(in-number=${CALLERID(num)})
same => n,set(op-number=${DIALEDPEERNUMBER})
same => n,curl(http://blabla.domain/1c-data.php,queuedatatoken=1234&date=${date}&${in-number}&${op-number})
Volosko
 
Сообщений: 26
Зарегистрирован: 03 апр 2018, 15:46

Re: asterisk -> curl -> 1c передача exten поднявшего разгово

Сообщение Volosko » 26 фев 2020, 18:44

То что выше неверно.
Оказалось верным следующее:

Код: выделить все
[some-context]
exten => t,1,NoOp
exten => t,n,Macro(recording,${CALLERID(num)},${EXTEN})


Далее использую избыточное присвоение, так как не уверен полностью, что передача прямо в парамертах макроса функции CALLERID(all) будет корректным.
Код: выделить все
exten => t,n,Set(WHOCALL=${CALLERID(all)})


А потом странно для меня, но рабочим оказалось именно так.
Код: выделить все
exten => t,n,Dial(SIP/1111&SIP/2222&SIP/3333,90,tTgmM(myscript1,${WHOCALL}))


Если написать exten => t,n,Dial(SIP/1111&SIP/2222&SIP/3333,90,tTgmM(myscript1,${WHOCALL},${DIALEDPEERNUMBER})) то почему то в макросе переменные in- & op- совпадают.


Код: выделить все
[macro-myscript1]
exten => s,1,CELGenUserEvent("Otvetil")    ;Генерирую событие в CEL для того чтобы потом кое-чего отловить
same => n,Set(date=${STRFTIME(,,%Y-%m-%d %H:%M:%s)})
same => n,Set(in-number=${ARG1})               ; принимаю параметр1 из вызова макроса

same => n,Set(op-number=${DIALEDPEERNUMBER})       ; если принимать это значение из параметр2, то не работает.

same => n,Set(rtn=${CURL(http://test.local/test.php,somefield=astertest&date=${date}&in-number=${in-number}&op-number=${op-number})})
same => n,Answer()



Я просто прям чувствую что ерунда получилась. Оно работает конечно. Но вопрос:
почему если передавать DIALEDPEERNUMBER из вызова макроса и принимать это в ARG2 то на выходе получается
Код: выделить все
-- Executing [s@macro-myscript1:3] Set("SIP/2222-00008bcc", "in-number=2222") in new stack
-- Executing [s@macro-myscript1:4] Set("SIP/2222-00008bcc", "op-number=2222") in new stack
Volosko
 
Сообщений: 26
Зарегистрирован: 03 апр 2018, 15:46

Re: asterisk -> curl -> 1c передача exten поднявшего разгово

Сообщение dimondack » 27 фев 2020, 13:32

Эх, я тут попробовал тоже

[some-context]
exten =>_X.,1,Noop(++++++++++++${CHANNEL}++++++++++++++++)
exten =>_X.,n,Set(_fname=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)}-${CALLERID(number)})
exten => _X.,n,MixMonitor(/var/spool/asterisk/monitor/${fname}.wav)
exten => _X.,n,Set(CDR(recfile)=/var/spool/asterisk/monitor/${fname}.wav)
exten => _X.,n,Dial(SIP/${EXTEN},90,tTgmM(m1))
exten => _X.,n,Hangup()

[macro-m1]
exten => s,1,Noop(====DPN=======${DIALEDPEERNUMBER}==========)
;а если remote_host недоступен, то ..... надо бы обойти чтоб не тормозить процесс
exten => s,n,Set(CURL_REQ=${CURL(http://remote_host/1.php?param=${fname}_${CHANNEL})})
exten => s,n,Answer()



====а в это время======на стороне remote_host=====
1.php
---------------------------------
<?php
$p=($_REQUEST['param']);
echo $p;
.............

https://www.google.com/search?q=asterisk+%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0+CEL&oq=asterisk+%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0+CEL&aqs=chrome..69i57j69i64j69i61l2.9943j0j7&sourceid=chrome&ie=UTF-8

http://asterisk.ru/store/files/Asterisk_-_Definitive_guide_4th.pdf
............
//echo 'hello';
?>
Аватар пользователя
dimondack
 
Сообщений: 61
Зарегистрирован: 16 сен 2019, 03:40

Re: asterisk -> curl -> 1c передача exten поднявшего разгово

Сообщение Vlad1983 » 27 фев 2020, 13:53

example
вызовы Agi заменить на curl
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: asterisk -> curl -> 1c передача exten поднявшего разгово

Сообщение Volosko » 27 фев 2020, 17:49

Спасибо что откликнулись!!!

Наиболее рабочим вариантом оказался:

Код: выделить все
[some-context]
exten => t,1,NoOp
exten => t,n,Set(WHOCALL=${CALLERID(all)})
exten => t,n,Dial(SIP/1111&SIP/2222&SIP/3333,90,tTgmM(myscript1^${WHOCALL}))


На самом деле в DIAL() с вызовом макроса через M(x) аргументы необходимо передавать через ^ то есть DIAL(SIP/1111,,M(macroname^$PARAM1^$PARAM2)
тогда как при просто вызове макроса они передаются через запятую.
Внимательное чтение мануалов упрощает жизнь однако!!! (это я сам себе)

Код: выделить все
[macro-myscript1]
exten => s,1,NoOp
same => n,Set(date=${STRFTIME(,,%Y-%m-%d %H:%M:%S)})
same => n,Set(in-number=${ARG1})
same => n,Set(op-number=${DIALEDPEERNUMBER})
same => n,Set(rtn=${CURL(http://test.local/test.php,queuedatatoken=astertest&date=${date}&in-number=${in-number}&op-number=${op-number})})
same => n,Answer()


и вот здесь все хорошо , а на выходе получаю:

Код: выделить все
{                                                                                                                                                                                                                     
"queuedatatoken": "astertest",
"date": "2020-02-27 16:15:09",
"in-number": "8121234567",
"op-number": "2222"
}


То есть корректно CURL будет отдавать в 1ску искомое.

ПС Правда мне сказали что я дурак и для этого существует AMI, но в целом еще одна вариация велосипеда из чего-то и палок собрана и работает :)
Volosko
 
Сообщений: 26
Зарегистрирован: 03 апр 2018, 15:46


Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH