Пишем обработку asterisk ami своими руками. часть первая: создаем класс на php для обращения к звездочке или как сделать php socket клиент своими руками

What is Stasis?

Stasis is a dialplan application in Asterisk. It is the mechanism that Asterisk uses to hand control of a channel over from the dialplan — which is the traditional way in which channels are controlled — to ARI and the client. Generally, ARI applications manipulate channels in the Stasis dialplan application, as well as other resources in Asterisk. Channels not in a Stasis dialplan application generally cannot be manipulated by ARI — the purpose of ARI, after all, is to build your own dialplan application, not manipulate an existing one.

Diving Deeper

This space has a number of pages that explore different resources available to you in ARI and examples of what you can build with them. Generally, the examples assume the following:

  • That you have some phone registered to Asterisk, typically using  or 
  • That you have some basic knowledge of configuring Asterisk
  • A basic knowledge of Python, JavaScript, or some other higher level programming language (or a willingness to learn!)

Most of the examples will not directly construct the HTTP REST calls, as a number of very useful libraries have been written to encapsulate those mechanics. These libraries are listed below.

Configuring the SIP Softphone

 Ensure that the Asterisk has been installed properly, with the SIP users defined.

1. SJPhone

 a) Download and run the installation file from the website: http://www.sjphone.org/sjp.html, to install the SJPhone in your machine. 

 b) Open the SJPhone. Go to «Menu -> Options».

c) Select the Profiles tab and click New to create a new profile. Enter the Asterisk server details and the SIP user credentials.

d) Give a Profile name and File name for your reference. Choose a Profile type and that must be Call through SIP Proxy. Click OK.

 

e) The Profile Options dialog box opens up. No changes are required to be done here. 

 

f) Click the Initialization tab and ensure the check boxes are checked as shown in the below image.

g)  Click the SIP Proxy tab. In Domain/Realm text box, enter the IP Address of the machine, where the Asterisk is running. You can also enter the Proxy settings, if required. Click OK.

h) The Service: PBX testing dialog box shows up. Give the SIP username (Account) and Password. This is the account information used to login. Click OK. 

The profile is set now. The Asterisk server details and the SIP user account information have been successfully added. Put the PBX testing profile in use, for the SJPhone to establish a connection to the server. Click OK.

Upon successful connection establishment, the following registered as message will be shown. The SJPhone will be now able to place and receive calls.

Note: To register with another SIP user account, go to the Profiles tab and click Initialize to provide the required account details.

2. X-Lite  

a) Install X-Lite in your machine by downloading and running the relevant installation file from the website: http://www.counterpath.com/x-lite-download.

b) Open the download X_Lite application and go to «Softphone -> Account Settings».

c) Provide the following details:

  • Account nameAn account name for you reference.
  • User ID: The username of the SIP User.
  • DomainThe IP address where Asterisk is running.
  • PasswordThe secret of the respective SIP User.

Provide Proxy details (if required), under the Domain Proxy section. Click OK.

d) You will see the below window, with your account details enabled in X-Lite.

 

Раздел для тех, кто не в теме.

Кто уже читал предыдущие статьи и знает про AMI (Asterisk Manager Interface) и AJAM, может смело пропустить этот раздел.

AMI – это интерфейс управления Asterisk-ом. Но, подключения к AMI, как и девушки, бывают разные. Два основных:

  1. AMI поверх TCP, который часто называют просто AMI.
  2. AMI поверх HTTP, его еще называют AJAM (Asynchronous Javascript Asterisk Manager). Хотя, особой асинхронности я там не увидел.

Если объяснять на пальцах, то разница между 1 и 2, как между толстым и веб-клиентом. Для тех, кто хочет накуриться правильных английских мануалов — ссылка.

Внешняя компонента ROM-Asterisk может использовать оба способа подключения. Внешняя компонента от МИКО использует только AJAM.

Но нам, они пока не нужны – мы будем подключаться без них.

Manager Asterisk

Необходимо перейти в интерфейс модуля

Указать имя / пароль менеджера, указать разрешенные / запрещенные сети:

В примере параметр «Разрешены» (Permit) установлен в значение 0.0.0.0/0.0.0.0 (разрешено подключаться под всеми сетевыми адресами).

Установите значения привилегий:

Не устанавливайте полные права для учетной записи! Больше — не значит лучше!

Современные версии FreePBX используют Asterisk 11+. Для этих версий asterisk необходимы выполнить дополнительные настройки manager AMI.

  1. Подключитесь к ПК c АТС по ssh
  2. Создайте новый файл

    touch /etc/asterisk/manager_custom_level_2.conf
  3. Предоставьте права доступа на чтение:

    chmod +r /etc/asterisk/manager_custom_level_2.conf
  4. В файл manager_custom_level_2.conf добавьте дополнительные опции для менеджера 1cami

    (+) 
    ;;; Дополнительные опции для ASTERISK 11+ ;;; Начало ;;;;
    eventfilter=!Event: Newexten
    eventfilter=!Event: DeviceStateChange
    eventfilter=!Event: NewConnectedLine
    eventfilter=!Event: Newchannel
    eventfilter=!Event: SoftHangupRequest
    eventfilter=!Event: HangupRequest
    eventfilter=!Event: BridgeDestroy
    eventfilter=!Event: BridgeCreate
    eventfilter=!Event: BridgeMerge
    eventfilter=!Event: MusicOnHoldStop
    eventfilter=!Event: MusicOnHoldStart
    eventfilter=!Event: NewCallerid
    eventfilter=!Event: LocalBridge
    eventfilter=!Event: Unhold
    eventfilter=!Event: Hold
    eventfilter=!Event: AttendedTransfer
    ;;; Дополнительные опции для ASTERISK 11+ ;;; Конец ;;;;
  5. Чтобы изменения вступили в силу выполните команду:

    asterisk -rx'manager reload'

Твики и допиливания

Небольшой твик для стабильной работы FOP панели, перезапускает её раз в 10 минут

chmod 770 -R /var/www/admin/modules/fw_fop
echo "*/10 * * * * root amportal restart_fop 2>/dev/null">>/etc/crontab

Исправляем косяки с путями хранения звуков

cp -r /var/lib/asterisk/sounds/ /usr/share/asterisk/
rm -r /var/lib/asterisk/sounds/
ln -s /usr/share/asterisk/sounds /var/lib/asterisk/
chown -R asterisk:asterisk /var/lib/asterisk/sounds/
chown -R asterisk:asterisk /var/lib/asterisk/sounds/custom/
echo "" >>/etc/modprobe.d/dahdi.conf
chown asterisk:asterisk /etc/modprobe.d/dahdi.conf

Если планируется загружать на сервер файлы через WEB интерфейс (например мелодии в ожидании) большого размера, нужно увеличить параметры php отвечающие за предельные размеры таких файлов. Редактируем файл:

nano /etc/php5/apache2/php.ini

Ищем параметры и устанавливаем свои значения, например 32 мбайта

post_max_size = 32M
upload_max_filesize = 32M

Перезагрузим WEB сервер.

/etc/init.d/apache2 restart

Реализация

Считаем, что админ уже все настроил и можно приступать. Все, что нам нужно – это объект 1С HTTPСоединение и ровные руки, чтобы отправлять ровные запросы.

Код работы с Asterisk настолько тривиальный, что его нет смысла здесь приводить. Все сводится к элементарной отправке и чтению HTTP-запросов. Не верите? Смотрите сами:

Организация соединения:

Соединение=Новый HTTPСоединение(IP,Port,,,,Таймаут,);

Отправка и чтение запроса:

ТекстКоманды=«/asterisk/rawman?action=…бла-бла-бла»;

Запрос= Новый HTTPЗапрос();

Запрос.АдресРесурса=ТекстКоманды;

Ответ=Соединение.Получить(Запрос);

Это все

Configuring the Asterisk Server

Three files located in /etc/asterisk/ have to be modified as follows:

a) manager.conf

Asterisk can be connected to Asterisk Manager Interface (AMI) via a Manager. The manager.conf is the configuration file that holds information such as, the list of users allowed to connect to the AMI, their secrets (passwords), the IP’s from which they can connect, their privileges, etc.

Following is a simple sample configuration:

1.                        ; the name of the main default context - it must not be changed 
2. enabled = yes                   ; By default is set to "no". Must be set it to "yes" in order for the AMI to work
3. port = 5038                     ; The port to which the AMI will listen
4. bindaddr = 0.0.0.0            ; This binds the AMI to all the IPs of the server  (0.0.0.0 binds to all)
5.       ; The username to identify when connecting to the AMI at log on
6. secret = manager_pwd      ; The password to enter at log on
7. permit=0.0.0.0/0.0.0.0     ; The IPs that the user manager_username will be able to connect from (0.0.0.0/0.0.0.0 permits all)
8. read = system,call,log,verbose,command,agent,user,originate     ; read permissions for the user manager_username 
9. write = system,call,log,verbose,command,agent,user,originate    ; write permissions for the user manager_username
Refer the website http://www.voip-info.org/wiki/view/Asterisk+config+manager.conf for more details.

b) sip.conf

The sip.conf is the SIP (Session Initiation Protocol) channel configuration file that contains the configuration for the SIP channel driver, chan_sip.so. It also has the information and credentials, required for a telephony device to contact and interact with Asterisk. 

      
1.                         ; Defines the default configuration for every user and peer
2. context = default            ; The context as defined in extensions.conf for incoming calls
3. bindport = 5060             ; UDP Port to bind to (SIP standard port is 5060)
4. bindaddr = 0.0.0.0          ; IP address to bind to (0.0.0.0 binds to all)
5. srvlookup = yes              ; Enable DNS SRV lookups on outbound calls
6.                         ; SIP user 1
7. type = friend                  ; A SIP entity which can place calls and to which Asterisk can place calls (Both incoming and outgoing) 
8. context = default
9. username = aksunik      ; This declares that our user will be named 'aksunik'
10. secret=3294
11. host = dynamic              ; Enables the telephone to connect from any IP address
12. callerid= "Aks Unik :)"
13.                           ; SIP user 2 
14. type = friend
15. context = default
16. username = 3166
17. secret=3166
18. host = dynamic
19. callerid="Rahul Gupta"
20.                        ; SIP user 3
21. type = friend
22. username = 3023
23. secret=3023
24. context = default
25. host = dynamic
26. callerid="Anand Balan"

Refer the website http://www.voip-info.org/wiki/view/Asterisk+config+sip.conf for more details.

c) extensions.conf

The configuration file «extensions.conf» contains the «dial plan» of Asterisk and the master plan of control or execution flow for all of its operations. It controls the way by which the incoming and outgoing calls are handled and routed.

   
1. 
2. autofallthrough=yes
3.                 ; Context name
4. exten => 3294,1,Dial(SIP/aksunik)           ; Syntax: Dial(protocol/user)
5. exten => 3166,1,Dial(SIP/rahulg)
6. exten => 3023,1,Dial(SIP/anandb)

Each execution step in the extension is written in this format:

exten => 

  • extension is the phone number to which the call is placed.
  • priority is a sequence number for each command line of an extension, indicating the order of execution of the commands.
  • command is the command to be executed. Refer http://www.voip-info.org/wiki/view/Asterisk+-+documentation+of+application+commands for the commands list.

exten => 3294,1,Dial(SIP/aksunik) implies that when dialing 3294, Asterisk will Dial the user aksunik through SIP protocol.

Refer the website http://www.voip-info.org/wiki/view/Asterisk+config+extensions.conf for more details.

Important: Asterisk server has to be restarted for the configuration changes to take effect. 

Restarting the Asterisk Server:

Do the following:

    a) Execute the command asterisk -r to connect to the asterisk CLI.

    b) In CLI, execute the command core stop now to stop the Asterisk server. The server will be stopped and the CLI will be closed.

    c) Execute asterisk start to start the Asterisk server.

All the configuration file changes will be applied once the server is restarted.

Настройка AJAM HTTPS

Настройка HTTPS не является обязательным условием. Этот раздел можно пропустить.

Если мы хотим опубликовать ajam интерфейс на порту 4443 в режиме https, файл http.conf должен выглядеть примерно так:

Для астериск версии 1.6

http.conf
enabled=yes
bindaddr=0.0.0.0
bindport=8088
prefix=asterisk
enablestatic=yes

sslenable=yes
sslbindaddr=0.0.0.0
sslbindport=4443 
sslcert = /etc/asterisk/ssl/ajam.pem

Для астериск версии 1.8 и выше

http.conf
enabled=yes
bindaddr=0.0.0.0
bindport=8088
prefix=asterisk
enablestatic=yes

tlsenable=yes
tlsbindaddr=0.0.0.0:4443
tlscertfile= /etc/asterisk/ssl/ajam.pem
tlsprivatekey= /etc/asterisk/ssl/ajam.pem

Также для https режима необходимо сгенерировать сертификат, которым будут шифроваться передаваемые данные.
Самый простой способ, это генерация самоподписанного сертификата на сервере Asterisk командой:

 cd /tmp
openssl req -new -x509 -days 365 -nodes -out /tmp/foo.pem -keyout /tmp/foo.pem
mkdir /etc/asterisk/ssl
mv /tmp/foo.pem /etc/asterisk/ssl/ajam.pem

Новая версия API Телфин

Сразу хочется сказать пару слов о новой версии API Телфин — API стал значительно лучше.

Во-первых, новый API предоставляет значительно больше возможностей, что точно понравится и разработчикам, и клиентам.

Во-вторых, API стал понятнее, вопреки тому, что в разы увеличился в размерах. Прежде всего, за счет логичной и понятной архитектура новой версии

В-третьих, в Телфин позаботились о разработчиках и добавили Swagger UI, что сильно экономит время при разработке.

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

What is REST?

  • Communication is performed using a client-server model.
  • The communication is stateless. Servers do not store client state between requests.
  • Connections are layered, allowing for intermediaries to assist in routing and load balancing.
  • A uniform interface. Resources are identified in the requests, messages are self-descriptive, etc.

ARI does not strictly conform to a REST API. Asterisk, as a stand-alone application, has state that may change outside of a client request through ARI. For example, a SIP phone may be hung up, and Asterisk will hang up the channel — even though a client through ARI did not tell Asterisk to hang up the SIP phone. Asterisk lives in an asynchronous, state-ful world: hence, ARI is RESTful. It attempts to follow the tenants of REST as best as it can, without getting bogged down in philosophical constraints.

Тонкая настройка фильтров на основе регулярных выражений

Фильтрация на базе регулярных выражений — это мощный инструмент внешней компоненты ROM-Asterisk. В других внешних компонентах для работы с Asterisk эта функциональность отсутствует.

Именно эта функциональность дает возможность успешно реализовать проекты в больших call-центрах, где идет серьезный поток звонков и Asterisk генерирует огромное количество событий.

Правильная настройка фильтра регулярных выражений дает возможность «отбить» лишние события еще на стороне ROM-Asterisk, не пуская их в процедуру ОбработкаВнешнегоСобытия и тем самым значительно снять нагрузку с пользовательского сеанса 1С.

В идеале, сеанс пользователя 1С должен получать только те события Asterisk, которые касаются только его.

Пример

Пользователь Василий имеет внутренний номер телефона «902». При начале входящего звонка, еще до поднятия трубки, необходимо показать номер звонящего.  А при ответе на звонок, необходимо создать документ «Событие».

Соответственно, пользовательский сеанс 1С должен отслеживать события Asterisk: Dial, Bridge и Hangup. Но, не все, а только касающиеся номера «902». Событие Dial выглядит следующим образом:

Event: Dial
Privilege: call,all
SubEvent: Begin
Channel: SIP/202-0000019c
Destination: SIP/902-0000019d
CallerIDNum: 202
CallerIDName: Operator-202
ConnectedLineNum: 902
ConnectedLineName: Vasiliy-902
UniqueID: 1335616897.790
DestUniqueID: 1335616897.791
Dialstring: 902

1
2
3
4
5
6
7
8
9
10
11
12

EventDial

Privilegecall,all

SubEventBegin

ChannelSIP202-0000019c

DestinationSIP902-0000019d

CallerIDNum202

CallerIDNameOperator-202

ConnectedLineNum902

ConnectedLineNameVasiliy-902

UniqueID1335616897.790

DestUniqueID1335616897.791

Dialstring902

Для этого применим регулярное выражение:

Dial.{1,}?902|Bridge.{1,}?902|Hangup.{1,}?902

1 Dial.{1,}?902|Bridge.{1,}?902|Hangup.{1,}?902

Можно слегка усложнить задачу, ведь нам важно получать только события начала звонка, т.е. Dial…Begin, а в при использовании фильтра выше, в сеанс Василия попадут еще и события окончания набора Dial…End

Модифицируем регулярное выражение:

Dial.{1,}?Begin.{1,}?902|Bridge.{1,}?902|Hangup.{1,}?902

1 Dial.{1,}?Begin.{1,}?902|Bridge.{1,}?902|Hangup.{1,}?902

Установка строки фильтра выполняется с помощью метода УстановитьРегулярноеВыражение объекта ROM-Asterisk.

Enter AMI and AGI

Not long into the project, two application programming interfaces (APIs) were added to Asterisk: the Asterisk Gateway Interface (AGI) and the Asterisk Manager Interface (AMI). These interfaces have distinct purposes:

  1. AGI is analogous to CGI in Apache. AGI provides an interface between the Asterisk dialplan and an external program that wants to manipulate a channel in the dialplan. In general, the interface is synchronous — actions taken on a channel from an AGI block and do not return until the action is completed.
  2. AMI provides a mechanism to control where channels execute in the dialplan. Unlike AGI, AMI is an asynchronous, event driven interface. For the most part, AMI does not provide mechanisms to control channel execution — rather, it provides information about the state of the channels and controls about where the channels are executing.

Ложка дегтя

Когда мы являемся источником события, то все вроде бы как хорошо. А вот, когда мы хотим просто слушать, то не все так гладко.

Перефразируя мем «нельзя просто так взять и получать события по AJAM». При работе через AJAM нам нужно будет периодически задалбывать HTTP-сервер запросами типа «Сервер, там для меня случайно нет событий?».

Допустим, нам нужно получить инфу о том, что на нас идет входящий звонок. Тогда нам нужен какой-то обработчик ожидания, который периодически будет опрашивать HTTP-сервер.

Именно для такого случая, придумали AMI-команду . Она делает следующую вещь — говорит Asterisk-у: «Мол, я тут событие жду. Не разрывай пож-та соединение пока оно не придет. Я готов ждать максимум 30 секунд». Asterisk конечно же так и поступит.

Но, все это время, пока мы ждем событие, наш HTTP-запрос будет находиться в «висячем» состоянии и клиентское окно 1С будет выглядеть зависшим.

  1. Пользователю, независимо от пола, «висячее» состояние вряд ли понравится
  2. Сервер тратит свои ресурсы на поддержание открытой сессии

Вы спросите, а может делать частые HTTP-запросы, допустим каждые 10 секунд, с таймаутом ожидания 10 секунд?

Может быть… Я же не знаю вашей нагрузки на Asterisk и на 1С.

ИМХО, здесь важно найти оптимальный баланс  — и сервер не задолбать, и не пропустить важное событие AMI

Использование

Загрузка внешней компоненты

Загрузка выполняется стандартно — с помощью методов ЗагрузитьВнешнююКомпоненту и ПодключитьВнешнююКомпоненту.

Получение событий

События, полученные внешней компонентой, передаются в 1С через стандартный интерфейс IAsyncEvent и доступны в предопределенной процедуре ОбработкаВнешнегоСобытия(Источник,Событие,Данные)

Можно отключить получение событий, для этого достаточно воспользоваться методом РежимПрослушивания(0). Это может пригодиться при реализации исходящего Call-центра, где нужно отдавать команды на оригинацию, а события в этом случае не важны.

При разрыве соединения ОбработкаВнешнегоСобытия получит событие «Disconnect». В демо-примере показано как сделать автоподключение.

Фильтрация на стороне внешней компоненты

По большому счету, события можно фильтровать и внутри 1С в процедуре ОбработкаВнешнегоСобытия, но это дороже по ресурсам. Дешевле «отбивать» события на стороне ВК, тем самым снимая нагрузку с клиентского сеанса 1С. При правильно настроенных фильтрах в пользовательский сеанс 1С будут попадать только события, которые относятся к этому пользователю.

Пример фильтра

Например, стоит задача получать только события Dial, Bridge и Hangup, причем только для внутреннего номера 902.

Фильтр будет таким:

Dial.{1,}?902|Bridge.{1,}?902|Hangup.{1,}?902

Можно использовать обычный фильтр вхождения подстроки, тогда просто: «902«.

Если фильтр не указан, то вы получите все события.

Параметры компонента

Параметр Описание
Host Адрес сервера Asterisk
Port Порт на котором опубликован AJAM интерфейс, по-умолчанию 8088
Prefix Префикс AJAM интерфейса, по-умолчанию asterisk
Enabled Состояние компонента, если true значит компонент соединен с Asterisk
DigestAutorization Режима Digest авторизации в AJAM инетрфейсе
ObjectEventMode Если установить в true, то все внешние события будут возбраняться в виде строки которая вычисляется функцией 1С «Вычислить»
SOAPEvents Если установить в true включится режим отправки всех событий на указанный в следующем параметре адрес
SOAPUrl Полный путь к вебсервису, способному обрабатывать события Asterisk
EventsTimeout Таймаут обработки событий Asterisk
UseHTTPS Если установить в true, компонент будет шифровать все сообщения AJAM
Version Возвращает версию компонента
HaspLicenseServer Адрес сервера лицензирования HASP
Proxy Адрес HTTP прокси сервера
PorxyLogin Логин на HTTP прокси
PorxySecret Пароль на HTTP прокси
MikoLicense Параметр для установки облачной лицензии МИКО SAAS
LicenseMode Возвращает текущий режим лицензирования компонента

Проверка работы и дополнительные настройки

В консоли сервера где установлен Asterisk выполняем следующую команду:

sudo asterisk -rx "http show status"

Если все настроено правильно, то ответ будет примерно такой:

HTTP Server Status:
Prefix: /asterisk
Server Enabled and Bound to 0.0.0.0:8088

HTTPS Server Enabled and Bound to 0.0.0.0:4443

Enabled URI's:
/asterisk/httpstatus => Asterisk HTTP General Status
/asterisk/phoneprov/... => Asterisk HTTP Phone Provisioning Tool
/asterisk/amanager => HTML Manager Event Interface w/Digest authentication
/asterisk/uploads => HTTP POST mapping
/asterisk/arawman => Raw HTTP Manager Event Interface w/Digest authentication
/asterisk/manager => HTML Manager Event Interface
/asterisk/rawman => Raw HTTP Manager Event Interface
/asterisk/static/... => Asterisk HTTP Static Delivery
/asterisk/amxml => XML Manager Event Interface w/Digest authentication
/asterisk/mxml => XML Manager Event Interface

Enabled Redirects:
  None.

Проверка настроек AMI:

manager show settings 

Вывод команды

Global Settings:
----------------
  Manager (AMI):             Yes            
  Web Manager (AMI/HTTP):    Yes            
  TCP Bindaddress:           0.0.0.0:5038   
  HTTP Timeout (minutes):    60             
  TLS Enable:                No             
  TLS Bindaddress:           Disabled       
  TLS Certfile:              asterisk.pem   
  TLS Privatekey:                           
  TLS Cipher:                               
  Allow multiple login:      Yes            
  Display connects:          Yes            
  Timestamp events:          No             
  Channel vars:                             
  Debug:                     No             
  Block sockets:             No 

Проверка настроек менеджера Asterisk:

sip*CLI> manager show user 1cami 

       username: 1cami
         secret: <Set>
            acl: yes
      read perm: call,user,cdr,all
     write perm: call,reporting,originate,all
displayconnects: yes

Если в качестве результата получим строку:

Response: Success
Message: Authentication accepted

Значит со стороны Asterisk все настроено правильно.

Не забудьте открыть на фаерволе порт 4443 или 8088 чтобы интерфейс ajam был доступен из вне.

Например для iptables под управлением CENTOS это делается добавлением строчки в файл /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp   --dport 8088 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp   --dport 4443 -j ACCEPT

ARI: An Interface for Communications Applications

The Asterisk RESTful Interface (ARI) was created to address these concerns. While AMI is good at call control and AGI is good at allowing a remote process to execute dialplan applications, neither of these APIs was designed to let a developer build their own custom communications application. ARI is an asynchronous API that allows developers to build communications applications by exposing the raw primitive objects in Asterisk — channels, bridges, endpoints, media, etc. — through an intuitive REST interface. The state of the objects being controlled by the user are conveyed via JSON events over a WebSocket.

These resources were traditionally the purview of Asterisk’s C modules. By handing control of these resources over to all developers — regardless of their language choice — Asterisk becomes an engine of communication, with the business logic of how things should communicate deferred to the application using Asterisk.

Overview

The Hangup Cause family of functions and dialplan applications allow for inspection of the hangup cause codes for each channel involved in a call. This allows a dialplan writer to determine, for each channel, who hung up and for what reason(s). Note that this extends the functionality available in the HANGUPCAUSE channel variable, by allowing a calling channel to inspect all called channel’s hangup causes in a variety of dialling situations.

Note that this feature replaces the technology specific mechanism of using the MASTER_CHANNEL function to access a SIP channel’s SIP_CAUSE, as well as extends similar functionality to a variety of other channel drivers.

Пример: Совершение вызова с канала SIP на указанный номер.

В данном случае исходящий вызов на номер внешнего абонента не будет совершаться до тех пор, пока наш SIP абонент не ответит на вызов:

 Action: Originate
 Channel: SIP/101test
 Context: default
 Exten: 8135551212
 Priority: 1
 Callerid: 3125551212
 Timeout: 30000
 Variable: var1=23|var2=24|var3=25
 ActionID: ABC45678901234567890

Где номер 8135551212 – это локальный городской номер телефона.
В данном примере также показано, как устанавливать переменные канала в Originate запросе.

Обратите внимание: Что параметры (в данном случае набор переменных канала) в версии 1.6 (и выше) должны отделяться друг от друга символом “,” (запятой), а не символом “|”. Чтобы полностью быть уверенным, какой разделитель используется в Вашей версии, можно в исходных кодах взглянуть на содержимое файла “include/asterisk/app.h”, на предмет определения конструкции с именем “AST_STANDARD_APP_ARGS”

Там вы сразу поймете, какой символ используется в качестве разделителя в наборе параметров.

При использовании данного примера, вызов абонента SIP/101test будет завершен, если он не ответит в течение 30 секунд.

Installing Asterisk

Asterisk is predominantly for Linux machines. Anyhow, it works for CentOS and Ubuntu, as well. Follow the steps one by one to install Asterisk in your Linux machine.

    a) Go to «/usr/src/» directory and download the required version of Asterisk from the website: http://www.asterisk.org/downloads/asterisk/all-asterisk-versions.

     Example: wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

    b) Extract the downloaded tar file as follows:       

tar zxvf asterisk*

    c) Navigate to the folder created after extracting the tar file, as mentioned below:

cd /usr/src/asterisk*

    d) Execute the following command:

./configure && make menuselect && make && make install && make samples && make config

    e) Navigate to «/etc/asterisk». Check if all the configuration files (.conf files) are available there.

Now, Asterisk is successfully installed and the server has started.

Refer the website http://www.voip-info.org/wiki/view/Asterisk+Step-by-step+Installation for more details. 

SIP телефон(софтфон) для 1С:Предприятия 8 и IP АТС (виртуальная и офисная) Промо

«АТС.Ринголайн» и «Ringophone» — это современный взгляд, комплексное решение для организации телефонии в офисе, которое работает прямо из коробки. Решения направлены на организации, где главный упор сделан на коммуникацию и взаимоотношения с клиентами.
RingoPhone 1С — это бесплатный sip телефон, выполненный в виде внешней обработки для 1С. Данная панель телефонии разработана для любых конфигураций 1С:Предприятия 8. RingoPhone работает с АТС на базе Asterisk и провайдерами, которые поддерживают SIP протокол. IP телефония набирает огромную популярность и всё больше возможностей открывается при объединении телефонии и CRM системы. Возможность встроить телефон в свою CRM систему, позволяет осуществлять управление не только на уровне АТС, но и на уровне самого телефона.
АТС.RingoLine изначально создавалась с учётом интеграции с современными CRM системами. CRM системам доступно менять любые настройки АТС. Такие как: создание пользователей, добавление и удаление операторов колл-центра, возможность задавать переадресацию сотрудникам, получать информацию о звонках с АТС, а возможность доработки позволит заложить новые алгоритмы распределения звонков по сотрудникам в зависимости от данных в CRM системе.

1 стартмани

04.06.2013   
52627   
221   
logilink.ru   

81
   

Оборудование

Asterisk может работать как с аналоговыми линиями (FXO-/FXS-модули), так и цифровыми (ISDN, BRI и PRI — потоки Т1/E1). С помощью определённых компьютерных плат (наиболее известными производителями которых являются Digium, Sangoma, OpenVox, Rhino, AudioCodes) Asterisk можно подключить к высокопропускным линиям Т1/E1, которые позволяют работать параллельно с десятками телефонных соединений. Полный список поддерживаемого оборудования для соединения с телефонной сетью общего пользования определяется поддержкой оборудования в модулях ядра, например:

  • DAHDI, акроним «Digium Asterisk Hardware Device Interface» (ранее назывался Zaptel), разрабатывается параллельно с Asterisk компанией Digium.
  • mISDN, разрабатывается Карстеном Кайлом (англ. Karsten Keil) из команды SuSE и компанией Beronet.
  • CAPI.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *