Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
faq:disa [2021/05/17 10:03] Портнов Алексей создано |
faq:disa [2021/05/17 10:52] (текущий) Портнов Алексей |
||
---|---|---|---|
Строка 5: | Строка 5: | ||
[[faq:|Обратно к инструкциям]] | [[faq:|Обратно к инструкциям]] | ||
+ | ===== Реализация ===== | ||
+ | - Добавьте новое приложение dialplan (см. **[[:dialplan-applications|Приложения диалпланов]]**) | ||
+ | - Назначьте внутренний номер, к примеру **2200109** | ||
+ | - Скопируйте код приолжения <code><?php | ||
+ | namespace MikoPBX\Core\System; | ||
+ | |||
+ | require_once('Globals.php'); | ||
+ | |||
+ | use MikoPBX\Common\Models\ExternalPhones; | ||
+ | use MikoPBX\Core\Asterisk\AGI; | ||
+ | use Phalcon\Mvc\Model\Resultset; | ||
+ | |||
+ | $agi = new AGI(); | ||
+ | |||
+ | $number = substr($agi->request['agi_callerid'],-10); | ||
+ | if(strlen($number) < 7){ | ||
+ | $agi->noop('Count < 7'); | ||
+ | // Проверка на длину номера. | ||
+ | exit(0); | ||
+ | } | ||
+ | $outPhone = ExternalPhones::findFirst([ | ||
+ | 'conditions' => 'dialstring LIKE :number:', | ||
+ | 'bind' => [ | ||
+ | 'number' => "%$number", | ||
+ | ], | ||
+ | 'hydration' => Resultset::HYDRATE_ARRAYS, | ||
+ | ]); | ||
+ | |||
+ | if(count($outPhone) !== 1){ | ||
+ | $agi->noop('ExternalPhones not found '.$number); | ||
+ | // Проверка на принадлежность номера телефона сотруднику компании. | ||
+ | exit(0); | ||
+ | } | ||
+ | |||
+ | $agi->set_variable('AGIEXITONHANGUP', 'yes'); | ||
+ | $agi->set_variable('AGISIGHUP', 'yes'); | ||
+ | $agi->set_variable('__ENDCALLONANSWER', 'yes'); | ||
+ | $agi->exec('Ringing', ''); | ||
+ | $agi->Answer(); | ||
+ | |||
+ | $result = $agi->getData('vm-enter-num-to-call', 3000, 11); | ||
+ | $selectednum = $result['result']??''; | ||
+ | if(!empty($selectednum)){ | ||
+ | // Все ок. Завершаем вызов. | ||
+ | $agi->set_variable('__pt1c_UNIQUEID', ''); | ||
+ | $agi->exec( | ||
+ | 'Dial', | ||
+ | "Local/{$selectednum}@all_peers/n,300," . 'TtekKHhU(dial_answer)b(dial_create_chan,s,1)' | ||
+ | ); | ||
+ | }else{ | ||
+ | $agi->noop('selectednum is empty'); | ||
+ | }</code> | ||
+ | - В адресной строке браузера скопируйте ID приложения. Он будет иметь вид "**DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20**" | ||
+ | - - В разделе "[[:custom-files|Кастомизация системных файлов]]" добавьте к файлу **extensions.conf** <code>[add-trim-prefix-clid-custom] | ||
+ | exten => _.!,1,ExecIf($[ "${EXTEN}" == "h" ]?Hangup() | ||
+ | same => n,AGI(DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20.php) | ||
+ | same => n,Return()</code>, тут "DIALPLAN-APP-FEA889C8EDD8F2F18213E473E8236C20" - это ID приложения. | ||
+ | |||
+ | ===== Важные моменты ===== | ||
+ | - Приложение будет выполнено для **всех** входящих вызовов | ||
+ | - Ввести добавочный будет возможно лишь в том случае, если номер телефона звонящего заполнен в карточке сотрудника, то есть номер должен принадлежать сотруднику. Это сделано для безопасности | ||
+ | - **Скрипт не является завершенным продуктом**, но открыт для кастомизации | ||
+ | |||
+ | | ||
[[faq:|Обратно к инструкциям]] | [[faq:|Обратно к инструкциям]] |