====== 10000111. Настройка передачи общих параметров системы из Asterisk ====== [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]] ===== Описание ===== **В этой статье описан алгоритм работы**. Пример реализации описан в [[http://wiki.miko.ru/astpanel:dialplan_miko_ajam | статье]] В плане набора должен быть описан контекст **miko_ajam**.\\ В контексте miko_ajam определяется extension с номером **10000111**.\\ [miko_ajam] exten => 10000111,1,NoOP(Settings Asterisk) При начале работы, **“Панель телефонии Asterisk”** выполняет AMI команду [[:kb:asterisk:ami:originate|originate]].\\ **Параметры originate**\\ * channel - Local/10000111@miko_ajam * Application - NoCDR **Переменные канала** \\ * v1 - канал пользователя, который инициировал originate ===== Действие ===== Приложение должно выполнить команду плана набора **UserEvent** и передать настройки: exten => 10000111,n,UserEvent(AsteriskSettings,chan1c: ${v1},FaxSendUrl: ${FaxSendUrl},GhostScriptVer: ${GSVER},DefaultContext: ${DefaultContext},SkypeContext: ${SkypeContext},DialplanVer: ${DialplanVer}) Далее приложение должно оповестить о завершении работы: exten => 10000111,n,UserEvent(HintsEnd,chan1c: ${v1}) ===== Описание параметров ===== * **${Channel}** - имя канала, запросившего настройки **${v1}** * **autoanswernumber** - номер для пикапа вызова * **Statistic** - имя пользователя и пароль для загрузки файла (если используется basic аутентификация на web сервере) * **${DialplanVer}** - версия плана набора. В рамках данного опиписания “**1.0.0.6**” * **${SkypeContext}** - контекст для набора скайп номеров. Если не существует, следует указать пустое значение. * **${DefaultContext}** - контекст набора “по умолчанию”. Для инициации звонков обычно используется контекст, указанный для sip учетной записи пользователя. Если контекст для sip учетной записи не указан, то используется DefaultContext. * **${GSVER}** - версия GhostScript. Если GhostScript не установлен на АТС, то следует передать пустую строку. * **${FaxSendUrl}** - URL для загрузки файла на АТС. При использовании **res_http_post.so** следует оставить пустым. Пример “**56080/1c/upload.php**” * **56080** - номер порта * **/1c/upload.php** - опубликованный на web сервере скрипт для загрузки файла на АТС. После выполнения **UserEvent** приложение должно ответить на звонок и отбить его.\\ exten => 10000111,n,Answer() exten => 10000111,n,Hangup() ===== Примеры: ===== ==== Dialplan Вариант 1 ==== [miko_ajam] exten => 10000111,1,NoOP(Settings Asterisk) ; ; FaxSendUrl - ресурс скрипта загрузки файла факса, 80 - порт, "/admin/1c/upload/index.php" - ресурс exten => 10000111,n,Set(FaxSendUrl=80/admin/1c/upload/index.php) ; ; DefaultContext - контекст для звонков "по умолчанию" ; этот контекст будет использован, если для SIP учетки пользователя контекст не указан. exten => 10000111,n,Set(DefaultContext=from-internal) ; ; SkypeContext - диалплан для исходящих звонков на скайп exten => 10000111,n,Set(SkypeContext=from-skype) ;GhostScriptVer - оставить пустым, если работа с ним не возможна. в этом случае конвертация pdf в tiff должна быть реализована со стороны 1С. exten => 10000111,n,Set(GhostScriptVer=8.70) ; ; ; DialplanVer - не менять! exten => 10000111,n,Set(DialplanVer=1.0.0.6) ; exten => 10000111,n,UserEvent(AsteriskSettings,chan1c: ${v1},FaxSendUrl: ${FaxSendUrl},GhostScriptVer: ${GSVER},DefaultContext: ${DefaultContext},SkypeContext: ${SkypeContext},DialplanVer: ${DialplanVer}) ; exten => 10000111,n,UserEvent(HintsEnd,chan1c:${v1}) exten => 10000111,n,Answer() exten => 10000111,n,Hangup() ==== Dialplan Вариант 2 ==== [miko_ajam] exten => 10000111,1,NoCDR() exten => 10000111,n,Noop(internal calling application: 10000111 1С_SetupEnv) exten => 10000111,n,AGI(1C_SetupEnv.php) exten => 10000111,n,Hangup === PHP AGI скрипт === #!/usr/bin/php -q get_variable($_varName); if(!$v['result'] == 0){ return $v['data']; } else{ return ""; } } // GetVarChannnel($_agi, $_varName) require_once('phpagi.php'); $agi = new AGI(); $Chan = GetVarChannnel($agi, "v1");; $DialplanVer = "1.0.0.6"; $GSVER = "8.70"; $FaxSendUrl = "80/admin/1c/upload/index.php"; $Statistic = "user:pass"; $SkypeContext = "context_for_skype_call"; $DefaultContext = ""; $agi->exec("UserEvent", "AsteriskSettings" .",chan1c:$Chan" .",FaxSendUrl:$FaxSendUrl" .",DefaultContext:$DefaultContext" .",SkypeContext:$SkypeContext" .",DialplanVer:$DialplanVer" .",autoanswernumber:**" .",Statistic:$Statistic" .",GhostScriptVer:$GSVER"); // $agi->exec("UserEvent", "HintsEnd,"."Channel:$Chan"); // отклюаем запись CDR для приложения $agi->exec("NoCDR", ""); // ответить должны лишь после выполнения всех действий $agi->answer(); ?>​ ==== Проверка ==== Выполните в консоли Asterisk:\\ CLI> dialplan reload CLI> dialplan show 10000111@miko_ajam [ Context 'miko_ajam' created by 'pbx_config' ] '10000111' => 1. NoCDR() [pbx_config] 2. Noop(internal calling application: 10000111 1С_SetupEnv) [pbx_config] 3. AGI(1C_SetupEnv.php) [pbx_config] 4. Hangup() [pbx_config] -= 1 extension (4 priorities) in 1 context. =- === Для проверки можно использовать следующий скрипт: === * Звонок с **SIP/104** (Телефон должен быть подключен) на **10000111** #!/bin/sh dir_script='/tmp/'; # каталог из asterisk.conf astspooldir='/var/spool/asterisk'; # call_text="Channel: SIP/104 Context: miko_ajam Extension: 10000111 Set: v1=SIP/104"; echo "$call_text" > /tmp/file.call; mv '/tmp/file.call' "$astspooldir/outgoing/"; asterisk -rvvv; Скрипт формирует call файл. === Вывод в консоли Asterisk === -- Executing [10000111@miko_ajam:1] NoCDR("SIP/104-00000000", "") in new stack -- Executing [10000111@miko_ajam:2] NoOp("SIP/104-00000000", "internal calling application: 10000111 1С_SetupEnv") in new stack -- Executing [10000111@miko_ajam:3] AGI("SIP/104-00000000", "1C_SetupEnv.php") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/1C_SetupEnv.php -- AGI Script Executing Application: (UserEvent) Options: (AsteriskSettings,Channel:SIP/104,FaxSendUrl:80/admin/1c/upload/index.php,DefaultContext:,SkypeContext:,DialplanVer:1.0.0.6,autoanswernumber:**,Statistic:user:pass,GhostScriptVer:8.70) -- AGI Script Executing Application: (UserEvent) Options: (HintsEnd,Channel:SIP/104) -- AGI Script 1C_SetupEnv.php completed, returning 0 -- Executing [10000111@miko_ajam:4] Hangup("SIP/104-00000000", "") in new stack == Spawn extension (miko_ajam, 10000111, 4) exited non-zero on 'SIP/104-00000000' === Вывод в AMI === Обязательно наличие событий "UserEvent: **AsteriskSettings**" и "UserEvent: **HintsEnd**"! Event: UserEvent Privilege: user,all UserEvent: AsteriskSettings Uniqueid: 1412018840.1 Channel:SIP/1001 FaxSendUrl:80/admin/1c/upload/index.php DefaultContext: SkypeContext: DialplanVer:1.0.0.6 autoanswernumber:** Statistic:user:pass GhostScriptVer:8.70 Event: UserEvent Privilege: user,all UserEvent: HintsEnd Uniqueid: 1412018840.1 Channel:SIP/1001 Event: Hangup Privilege: call,all Channel: SIP/1001-00000001 Uniqueid: 1412018840.1 CallerIDNum: CallerIDName: ConnectedLineNum: ConnectedLineName: AccountCode: Cause: 16 Cause-txt: Normal Clearing [[astpanel:ats:asterisk_v6|Обратно к основной инструкции...]]