В Asterisk достаточно давно есть механизм AJAM для работы с командами менеджера через HTTP/HTTPS. Хотя возможность эта уже не нова, но её использование в основном ограничивается Asterisk GUI, в реальной жизни используется редко.

Кроме аналогичных стандартному AMI функций AJAM позволяет и выполнить некоторые непривычные операции. Например, немногие знают, но Asterisk позволяет удаленно загружать файлы на сервер. Эта возможность, кстати, используется в панели телефонии 1С от МИКО для передачи факса. Для истории опишу, какие шаги нужно выполнить чтобы загрузить файл через AJAM на сервер астериска.

Для начала аккаунт менеджера, используемый для подключения, должен быть настроен в manager.conf обычным образом, у пользователя должна быть установлена привилегия config на запись. Далее в http.conf создаем секцию post_mappings:

[post_mappings]
uploads=/var/lib/asterisk/uploads

В данном случае имя параметра — часть URL для запроса записи в папку, значение — папка для записи. Функция реализующая данную опцию содержится в отдельном модуле — res_http_post.so, он должен быть загружен для того чтобы все заработало. Если такого модуля нет, то его придется собрать из исходных кодов, для его сборки в свою очередь нужен libgmime-devel. После загрузки модуля проверяем что настройки применились:

pbx*CLI> 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.

Протестировать загрузку файла можно выполнив из консоли следующие команды (конечно использовав ваши логин и пароль, у пользователя должна быть привилегия write=config):

curl --cookie cookies.txt --cookie-jar cookies.txt «http://pbx.mycorp.ru:8088/asterisk/rawman?action=Login&username=admin&secret=manager»

curl --cookie cookies.txt -F «file=@Fax.pdf» http://pbx.mycorp.ru:8088/asterisk/uploads

Если все нормально, то файл будет загружен в нужную папку, а вы уведите ответ сервера:

<!DOCTYPE HTML PUBLIC «-//IETF//DTD HTML 2.0//EN»>
<html><head>
<title>200 OK</title>
</head><body>
<h1>OK</h1>
<p>File successfully uploaded.</p>
<hr />
<address>Asterisk Server</address>
</body></html>

Если не авторизоваться вызовом первой команды, то вы получите привет от HAL9000:

<!DOCTYPE HTML PUBLIC «-//IETF//DTD HTML 2.0//EN»>
<html><head>
<title>403 Access Denied</title>
</head><body>
<h1>Access Denied</h1>
<p>Sorry, I cannot let you do that, Dave.</p>
<hr />
<address>Asterisk Server</address>
</body></html>

Неправильно сформированный запрос. например использование метода PUT вместо POST:

<!DOCTYPE HTML PUBLIC «-//IETF//DTD HTML 2.0//EN»>
<html><head>
<title>501 Not Implemented</title>
</head><body>
<h1>Not Implemented</h1>
<p>Attempt to use unimplemented / unsupported method</p>
<hr />
<address>Asterisk Server</address>
</body></html>

Есть и другие сообщения об ошибке, подробнее в них поможет разобраться код модуля, файл res_http_post.c

Похожие сообщения:

автор igorg \\ теги: , , , , , , ,