Pull to refresh

Comments 14

хорошая статья, пришлось как раз все это постигать по кусочкам месяца два назад для нового проекта ) жаль тогда этого матерала не было
хороший проект PAMI (php ami) хотя очень скудная документация (можно сказать её нет) но пользоваться все равно удобно
Спасибо. PAMI мне понравился, прост в использовании, заслуживает внимания. Документации не много, согласен.
У PAMI скудная документация, но это компенсируется большим кол-вом примеров и официальной докой астера. А вообще какие то простые вещи можно реализовать через fsock.
Через fsock можно, но у PAMI мне понравился обширный вывод DEBUG информации, столько всего я через fsock вытащить в читабельном виде не смог, это сильно помогло в поиске проблемы когда originate не проходил
Спасибо, Алексей. Вы пишите хорошо и интересно. Я в свое время делал проект с использованием AMI. На тот момент не смог реализовать функцию hold (постановка на удержание). Не знаете, можно ли это реализовать на ami сейчас?
Спасибо за отзыв. Я в нашем проекте воспользовался парковкой вызова.
Кратко алгоритм и пример:
Action: Park
Channel: SIP/104-000001ce
Parkinglot:
Timeout: 30000


При этом, "Parkinglot" не указывать. Вызов будет помещен на свободный слот.
"Timeout" — через указанное время вызов вернется обратно.
Далее анализировать event:
  • "ParkedCall" — тут можем понять на какой слот попал наш клиент.
  • "UnParkedCall" и "ParkedCallGiveUp" — event оповещяет о завершении парковки.

Снять с такого «удержания» возможно позвонив на слот парковки, простой "originate".
Многие примеры, которые вы привели, работать не будут, из-за лишнего параметра Priority
Параметр Priority используется только вместе с Context, Exten

Команда Originate ответит вам «extension not found»

текст примера
Action: Originate
Channel: SIP/104
Application: PickupChan
Data: SIP/104-0000003c
Priority: 1
Callerid: 104
Variable: SIPADDHEADER=«Call-Info:\;answer-after=0»

Прошу описать детали, на какой версии Asterisk проявляется? Есть ли ссылка на более подробную документацию. Не сталкивался с описанной ситуацией.

Все примеры из текущей статьи тестировалась на Asterisk 10.9.0.
Кроме того, используются в реальном проекте.
Версии Asterisk — начиная с 1.8 и заканчивая 13.
На некоторых АТС было замечено поведение — если не указан "Priority", то originate завершается с ошибкой.
Документация есть на официальном Wiki
Вот цитата:
Priority — Priority to use (requires Exten and Context)


Насколько я помню, так было всегда — еще с версии 1.4 и вряд ли это изменится.
Упрощенно, Priority — это номер строки в описании экстена. А сам экстен не располагается в вакууме — ему нужен контекст. Примере ниже 1,2,4 — это и есть Priority
Пример с Asterisk-Wiki
Within each extension, there must be one or more priorities. A priority is simply a sequence number. The first priority on an extension is executed first. When it finishes, the second priority is executed, and so forth.

exten => 6123,1,do something
exten => 6123,2,do something else
exten => 6123,4,do something different

Подумайте, какой смысл в Priority, если нет ни экстена, ни контекста? Что приоритезировать? Вы же отдаете управление в апликуху, а не в диалплан…

Все примеры из текущей статьи тестировалась на Asterisk 10.9.0.
Кроме того, используются в реальном проекте.
Версии Asterisk — начиная с 1.8 и заканчивая 13.

Алексей, у вас же не совсем Астериск, у вас его форк — Аскозия. Вполне возможно, что разработчики Аскозии что-то там подправили и просто тихо игнорируют параметр, в котором нет смысла. А вот Астериск выдаст ошибку и будет прав.
Забыл добавить к предыдущему посту, что сама статья — хорошая, важная и нужная. Спасибо за статью
Спасибо за комментарий. Обязательно перепроверим.

Priority — Priority to use (requires Exten and Context)

Да, с этим знаком, доку читал.
Я на текущий момент не могу привести точный пример, но был случай с одной из станций, где без этого параметра не работала команда.
Подумайте, какой смысл в Priority, если нет ни экстена, ни контекста

От части согласен с Вами, но в моем понимании свойство просто игнорируется если не назначены "Exten" и "Context".

у вас же не совсем Астериск, у вас его форк — Аскозия

Помимо Askozia наше работает и с прочими атс:
  • MyPBX U серии (там кстати Asterisk 1.6 версии), это особый случай, не все примеры описанные выше применимы.
  • АТС на базе Asterisk с 1.8 по 13 версии

Точно!

T 127.0.0.1:5038 -> 127.0.0.1:39664 [AP]
Message: Extension does not exist…
#
Может кто подскажет как можно соединить 2 внешних абонента. Не использую внутренний номер sip. По аналогии что бы в место Channel: SIP/104-000001ce было скажем Phone: 89123456789
Следует использовать Local канал:
Пример «Channel»:
Local/number@context

тут:
  • "number" — номер телефона, именно на него придет вызов, как только абонент снимет трубку вызов будет направлен на exten
  • "context" — в этом контексте будет производится набор номера "number"
Sign up to leave a comment.

Articles