Asterisk авторизация и звонки по pin-коду

Астериск умеет авторизовывать абонентов по предустановленному паролю (пин коду). Для авторизации будем использовать внутреннюю базу данных и функцию Authenticate().

Синтаксис функции:

Authenticate(password[|options])
Authenticate(/passwdfile|[|options])
Authenticate(/db-keyfamily|options)

Доступные для выбора опции:

  • a — ячейке ${ACCOUNTCODE} в CDR присваивается значение пин-кода.
  • d — указывает Астериску, что первый аргумент является не пин-кодом, а семейством в БД
  • r — после звонка удаляет pin из БД (работает только с опцией d)

Сначала пропишем функцию Authenticate() в ту часть диалплана (extensions.conf), которая отвечает за исходящие вызовы. В этом примере проверка пин-кода будет отрабатывать при попытке совершить звонок по России:

 
exten => _8XXXXXXXXXX,1,Answer
exten => _8XXXXXXXXXX,n,Authenticate(/pin,ad)
exten => _8XXXXXXXXXX,n,Dial(SIP/mytrunk/${EXTEN},,R)
exten => _8XXXXXXXXXX,n,Hangup

Значение аргумента /pin в сочетании с опцией d указывает Астериску, что пин-код следует искать во внутренней базе данных в семействе под названием pin. При этом, pin — не является предустановленным значением названия семейства, вместо него можно использовать любое другое (например — parol).

Теперь можно перезагрузить диалплан и добавить в него пин-код:

 
asterisk*CLI> dialplan reload
Dialplan reloaded.
asterisk*CLI> database put pin 1234 MyPin
asterisk*CLI> database show pin
/pin/1234 : MyPin

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

Теперь при наборе номера, попадающего под шаблон, указанный в диалплане, Астериск попросит абонента ввести пароль и нажать #. У абонента будет три попытки, если все три раза пин-код будет введен неверно — вызов будет принудительно завершен. При правильном вводе пинкода — Астериск совершит соединение с набранным номером.

Для удаления пин-кода используйте следующую команду:

 
asterisk*CLI> database del pin 1234
Database entry removed.

Leave a Reply

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