Инструменты пользователя

Инструменты сайта


astpanel:ats:asterisk:environments_v6

10000111. Настройка передачи общих параметров системы из Asterisk

Описание

В этой статье описан алгоритм работы. Пример реализации описан в статье

В плане набора должен быть описан контекст miko_ajam.
В контексте miko_ajam определяется extension с номером 10000111.

[miko_ajam]
exten => 10000111,1,NoOP(Settings Asterisk)

При начале работы, “Панель телефонии Asterisk” выполняет AMI команду 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
<?php
// Получение переменной AGI канала
//	
function GetVarChannnel($agi, $_varName){
  $v = $agi->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)
    -- <SIP/104-00000000>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: <unknown>
CallerIDName: <unknown>
ConnectedLineNum: <unknown>
ConnectedLineName: <unknown>
AccountCode: 
Cause: 16
Cause-txt: Normal Clearing

Обратно к основной инструкции...

astpanel/ats/asterisk/environments_v6.txt · Последние изменения: 2018/06/08 09:14 — apor