Есть следующий код:
Код: Выделить всё
[orders_info]
exten => s,1,Answer()
same => n,Playback('greeting') ; Приветствуем клиента (~3сек)
same => n,Set(OUR_CLIENT=${ODBC_OUR_CLIENT(${CALLERID(num)})}) ; Узнаем есть ли номер телефона в БД (~2сек)
Код: Выделить всё
[orders_info]
exten => s,1,Answer()
same => n,Playback('greeting') ; Приветствуем клиента (~3сек)
same => n,Set(OUR_CLIENT=${ODBC_OUR_CLIENT(${CALLERID(num)})}) ; Узнаем есть ли номер телефона в БД (~2сек)
Это совсем не то.ded писал(а):Google >>> Asterisk+cidlookup
Код: Выделить всё
SELECT name FROM phonebook WHERE number LIKE '%[NUMBER]%' AND SLEEP(5)=0
Это разве что-то меняет?Razor2k писал(а):Во-первых у меня чистый asterisk.
Вот как? Вы уже показываете, что не знаете предмет, поэтому непонятно. CID состоит из двух компонентов: CALLERID(name) & CALLERID(num).ded писал(а):А cidlookup переводит CID в имя, что мне не нужно и еще не понятно, как он сработает
..если её ресурсы скромны. Дополню: если база имён содержит over 10 billion records. Вы такую базу пишете?Razor2k писал(а):P.S. В описании модуля нашел, что "Процесс поиска имени входящего абонента (name lookup), который запускает данный модуль, может замедлить работу Вашей IP-АТС.",
Я же привел в первоначальном вопросе специально цифры, что мой запрос выполняется на SQL сервере около 2сек, и не важно насколько оптимизирован запрос, какая ширина канала до SQL сервера и какие мощности у сервера с asterisk и SQL сервера. Важно, что время работы функции 2сек и хочется эти 2 секунды потратить параллельно с приветствием, а не плюсовать их до или после приветствия. Плюс я сделал акцент, что запрос к БД может быть заменен на выполнение какого-либо внешнего shell-скрипта.Razor2k писал(а):..если её ресурсы скромны. Дополню: если база имён содержит over 10 billion records. Вы такую базу пишете?
Код: Выделить всё
exten => cidlookup_5,1,Set(CURLOPT(httptimeout)=7)
exten => cidlookup_5,n,Set(CALLERID(name)=${CURL(http...)})
exten => cidlookup_5,n,NoOp(${CALLERID(name)})
exten => cidlookup_5,n,Return()
К сожалению, это не так.BorisTheBlade писал(а):2.Паралельно играем приветствие, тк System запускает скрипт отдельным потоком.
Код: Выделить всё
exten => s,1,NoOp("test-ivr")
same => n,Verbose(${STRFTIME(%T)})
same => n,System(/bin/sleep 5)
same => n,Verbose(${STRFTIME(%T)})
same => n,Answer
same => n,Playback(greeting)
same => n,Hangup
Код: Выделить всё
Executing [s@test-ivr:1] NoOp("SIP/razor-00002943", ""test-ivr"") in new stack
-- Executing [s@test-ivr:2] Verbose("SIP/razor-00002943", "Mon May 14 18:06:12 2018") in new stack
Mon May 14 18:06:12 2018
-- Executing [s@test-ivr:3] System("SIP/razor-00002943", "/bin/sleep 5") in new stack
-- Executing [s@test-ivr:4] Verbose("SIP/razor-00002943", "Mon May 14 18:06:17 2018") in new stack
Mon May 14 18:06:17 2018
-- Executing [s@test-ivr:5] Answer("SIP/razor-00002943", "") in new stack
-- Executing [s@test-ivr:6] Playback("SIP/razor-00002943", "greeting") in new stack
-- <SIP/razor-00002943> Playing 'greeting.alaw' (language 'ru')
Диалплан:ded писал(а):А почему через System. а не AGI(somescript) ?
Код: Выделить всё
[test-ivr]
exten => s,1,NoOp("test-ivr")
same => n,Verbose(${STRFTIME(%T)})
same => n,AGI(test,5)
same => n,Verbose(${STRFTIME(%T)})
same => n,Answer
same => n,Playback(greeting)
same => n,Verbose(${STRFTIME(%T)})
same => n,Hangup
Код: Выделить всё
/var/lib/asterisk/agi-bin# cat ./test
#!/bin/bash
sleep $1
Код: Выделить всё
-- Executing [s@test-ivr:1] NoOp("SIP/razor-000029bc", ""test-ivr"") in new stack
-- Executing [s@test-ivr:2] Verbose("SIP/razor-000029bc", "Mon May 14 18:19:25 2018") in new stack
Mon May 14 18:19:25 2018
-- Executing [s@test-ivr:3] AGI("SIP/razor-000029bc", "test,5") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/test
-- <SIP/razor-000029bc>AGI Script test completed, returning 0
-- Executing [s@test-ivr:4] Verbose("SIP/razor-000029bc", "Mon May 14 18:19:30 2018") in new stack
Mon May 14 18:19:30 2018
-- Executing [s@test-ivr:5] Answer("SIP/razor-000029bc", "") in new stack
-- Executing [s@test-ivr:6] Playback("SIP/razor-000029bc", "greeting") in new stack
-- <SIP/razor-000029bc> Playing 'greeting.alaw' (language 'ru')
-- Executing [s@test-ivr:7] Verbose("SIP/razor-000029bc", "Mon May 14 18:19:34 2018") in new stack
Mon May 14 18:19:34 2018
-- Executing [s@test-ivr:8] Hangup("SIP/razor-000029bc", "") in new stack