Астериск умеет авторизовывать абонентов по предустановленному паролю (пин коду). Для авторизации будем использовать внутреннюю базу данных и функцию 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.