Давно я не писал о Звездочке, но волею судеб, возможно скоро сменю работу. Буду трудиться в UseLess Inc.:) где под мои чутким руководством, не покладая пакетов, будут работать десятки серверов IP-телефонии.
Что такое Голосовая почта, зачем она нужна, все за и против опустим. Кто-то пользуется, как я, кто-то бросает трубку едва услышав голос робота(таким личностям строго запрещено читать далее)
Настройки грозной машини Голосовой почти хранятся в файле voicemail.conf(если кто забыл)
Секция [general], позвоялет настроить глобальные параметры голосовой почты.
Опция | Значения | Описание |
format | wav49|gsm|wav | Указывает в каком формате мы можем сохранять файлы, будьте внимательны, тут еще используется устаревший разделитель | (Когда уже выпилят этот анахронизм) |
serveremail | user@domain | От кого будет отправлено письмо |
attach | yes,no | Прикреплять ли запись к письму |
maxmsg | 9999 | Максимальное к-во сообщений в ящике |
maxsecs | 9999 | Максимальная продолжительность сообщения |
minsecs | 4 | Минимальная продолжительность сообщения(если меньше, то сообщение не сохраниться) |
maxgreet | 1800 | Максимальная продолжительность приветствия |
skipms | 1800 | Шаг перемотки сообщения, с помощью * и # |
maxsilence | 5 | После заданного к-ва секунд тишины, запись прекратиться |
silencethreshold | 128 | Определяет уровень тишины(лучше не трогать) |
maxlogins | 3 | К-во неуспешных входов в голосовую почту, после которых Астер положит трубку |
moveheard | yes | Перемещать прослушанные сообщения в папку OLD |
forward_urgent_auto | no | если no пользователь может устанавливать степень важности при пересылке |
userscontext | default | если используете users.conf, можно указать контекст в котором зарег запись |
externnotify | /path/to/script | Выполнить заданный скрипт после сохранения сообщения |
smdienable | no | Если используете Астер как сервер голосовй почты на PBX которая поддерживает SMDI, то вкл это здесь:) |
smdiport | /dev/ttyS0 | Указываем порт SMDI по которому будут ходить сообщения к нашей АТС |
externpass | /path/to/script | При смене пароля, указанный здесь скрипт будет оповещен об этом(ящик, пароль, контекст) и должен будет внести изменения в voicemail.conf |
externpassnotify | /path/to/script | При смене пароля, указанный здесь скрипт будет оповещен об этом(ящик, пароль, контекст), Asterisk сам изменит voicemail.conf. Если указана предыдущая опция, то эта будет проигнорирована |
externpasscheck | /path/to/voicemailpwcheck.py | Проверяет сложность пароля, ведь голосовая почта нуждается в защите:) |
directoryintro | dir-intro | Приветствие по умолчанию для приложения Directory() |
charset | ISO-8859-1 | Устанавливает набор символов, по умолчанию Latin1, UTF8 давай 21век:) |
adsifdn | 0000000F | при использовании Analog Display Services Interface(ADSI) настраивает Feature Descriptor Number. |
adsisec | 9BDBF7AC | Устанавливает security lock code. |
adsiver | 1 | Устанавливает версию голосовой почты АDSI |
pbxskip | yes | Если не хотим видеть в теме письма PBX, то ставим yes |
fromstring | The Asterisk PBX | Устанавливаем поле From: в письме |
usedirectory | yes | Позволяет составлять письма из своих ящиков, чтобы использовать преимущества Directory() |
odbcstorage | item from res_odbc.conf | Позволяет хранить письма в базе данных, здесь указываем коннектор к базе |
odbctable | table name | Указывает таблицу в которой храниться почта |
emailsubject | [PBX]: New message ${VM_MSGNUM} in mailbox ${VM_MAILBOX} | Настраиваем поле Subject: в емейле |
emailbody | Dear ${VM_NAME}:\n\n\tjust wanted to let you know you were just left a ${VM_DUR} long message (number ${VM_MSGNUM})\nin mailbox ${VM_MAILBOX u might\nwant to check it when you get a chance. Thanks!\n\n\t\t\t\t–Asterisk\n | Настраиваем настраиваем текст емейла |
emaildateformat | %A, %d %B %Y at %H:%M:%S | Настраиваем формат даты и времени емейлов.Используйте те же правила как и функция STRFTIME в языке С |
mailcmd | /usr/sbin/sendmail -t | Указываем кто будет нам писать письма, по умолчанию пишет дефолтный почтовик ОС |
pollmailboxes | no, yes | Если вы кладете в ящик пользователя не только приложением voicemail, то установив yes, Asterisk будет перелопачивать ящики пользователей, и менять состояние индикатора(MWI), даже если мы положили в ящик сообщение другой программой |
pollfreq | 30 | Таймаут между опросами ящиков, если задана прерыдущая опция |
imapgreetings | no, yes | Позволяет хранить приветствия в IMAP хранилище |
greetingsfolder | INBOX | Указываем папку на IMAP сервера где будут храниться приветствия |
imapparentfolder | INBOX | Указываем родительскую папку на IMAP сервера для ваших ящиков |
imapserver | localhost | Указываем адрес IMAP сервера |
imapport | 143 | Указываем порт IMAP сервера |
imapflags | ssl | Необязательный параметр доступа к IMAP серверу. Например ‘ssl’ включает OpenSSL шифрование подразумевается что IMAP библиотеки скомпилированы с поддержкой OpenSSL. |
imapfolder | INBOX | Папка в которой хранятся сообщения на сервере. по умолчанию INBOX. |
authuser | user | Мастер пользователь который подключается к IMAP серверу, если сервер настроен с одним пользователем у которого есть доступ ко всем ящикам |
authpassword | password | пароль мастер пользователя |
imapopentimeout | 60 | таймаут открытия TCP(в секундах) |
imapclosetimeout | 60 | таймаут закрытия TCP(в секундах) |
imapreadtimeout | 60 | таймаут чтения TCP(в секундах) |
imapwritetimeout | 60 | таймаут записи TCP(в секундах) |
Есть еще возможность отправлять сообщения на пейджер!!(Покажите мне человека которые ними пользуется)
Каждый ящик описывается в виде
если задан e-mail сообщение будет отправлено на почту. ЕСЛИ ПАРОЛЬ С ПРЕФИКСОМ ‘-‘, то его изменить невозможно.
Кроме секции общих настроек есть дополнительные опции, которые могут быть заданы для каждого ящика отдельно и переопределять значения, которые указаны в секции [general]:
Опция | Значения | Описание |
tz | eastern, european, etc. | Определяет временную зону, более подробно далее |
locale | de_DE.utf8, es_US.utf8, etc. | Как генерировать дату и время в разных локализациях. Посмотреть список локализаций locale -a |
attach | yes, no | Добавлять ли к письму еще и само сообщение |
attachfmt | wav49, wav, etc. | Формат голосового сообщения |
saycid | yes, no | Проговаривать номер, кто оставил сообщение saycid=yes Если не задано или no, то будет указано в письме. Если задан, если существует файл с таким же именем как caller id в папке |
cidinternalcontexts | Внутренний контекст для воспроизведения имени, вместо caller id | |
sayduration | yes, no | Добавляет длительность сообщения |
saydurationm | 2 | минимальная длительность сообщения, о которой следует говорить, по умолчанию 2 |
dialout | context | Разрешить пользователям звонить из своих ящиков! если задано то нажав 4 в ящике, мы попадем в этот контекст. НЕБЕЗОПАСНО |
sendvoicemail | yes, no | Позволяет создавать сообщения, из своего ящика, и отправлять другим пользователям, кнопка 5 в меню ящика |
searchcontexts | yes, no | Позволяет не определять контекст для голосовой почты. Будет искать во всех контекстах голосовой почты. Не рекомендуется |
callback | Какой контекст использовать при звонке отправителю сообщения, нужно чтобы контекст обрабатывал формат набора втч международный(если необходимо) | |
exitcontext | Определяет контекст в который может выйти абонент во время того как оставляет сообщение, например нажав 0 может попасть к оператору, по умолчанию возвращается в контекст откуда пришел | |
review | yes, no | Должно стоять да, ведь люди расстраиваются если не могут прослушать свои сообщения до их отправки |
operator | yes, no | Предоставить возможность выхода пользователя из голосовой почты(нажав ноль), если он не хочет оставлять сообщение предусмотрите номер о и укажите его обработчик в exitcontext |
envelope | no, yes | Включение/выключение воспроизведение доп сведений перед воспроизведения сообщения. Это не влияет на опцию 3,3 из Меню расширенных настроек ящика |
delete | no, yes | Удалять сообщения после отправки на емейл, не рекомендуется |
volgain | 0.0 | Увеличивает громкость сообщений, требует sox, лучше не использовать |
nextaftercmd | yes, no | Включает следующее сообщение после нажатия 7 или 9(сохр удаление текущего) |
forcename | yes, no | Предлагает новому пользователю, который зашел со своим паролем записать имя. |
forcegreetings | yes, no | то же что и выше но только для приветствий |
hidefromdir | yes, no | Спрятать определенные ящики от приложения Directory() |
tempgreetwarn | yes, no | Напоминание владельцу ящика что у него установлено временное приветствие, удобно если люди вернулись с отпуска |
passwordlocation | spooldir | Можно заставить астериск хранить пароли в: voicemail.conf, папке spool для каждого ящика в файле secret.conf. неприменимо для realtime пользователей. |
messagewrap | no, yes | Нажав 6 на последнем сообщении мы перейдем к первому, нажав 4 на первом перейдем к последнему |
minpassword | 6 | Минимальная длина пароля |
vm-password | custom_sound | Приглашение на ввод пароля |
vm-newpassword | custom_sound | Приглашение на ввод нового пароля |
vm-passchanged | custom_sound | Сообщение об успешной смене пароля |
vm-reenterpassword | custom_sound | Приглашение для повторного ввода пароля |
vm-mismatch | custom_sound | Сообщение о том что введенный пароль и повторно введенный пароль не совпадают |
vm-invalid-password | custom_sound | Сообщение о неправильном пароле |
vm-pls-try-again | custom_sound | Сообщение “Попробуйте еще раз” |
listen-control-forward-key | # | Кнопка перемотки вперед сообщения |
listen-control-reverse-key | * | Кнопка перемотки назад |
listen-control-pause-key | 0 | Кнопка паузы |
listen-control-restart-key | 2 | Кнопка повтора |
listen-control-stop-key | 13456789 | Кнопка остановки воспроизведения |
backupdeleted | 0 | Корзина сообщений, какое количество сообщений будет храниться даже после их удаления, 0 отключает опцию |
Секция [zonemessages]
Доступные временные зоны можно посмотреть здесь /usr/share/zoneinfo/
Можно создавать и свои временные зоны, нужно для удобного отображение даты и времени пользователям голосовой почты
кое что мы можем поменять:
‘filename’ название звукового файла(кавычки обязательны!)
${VAR} переменная
A или a день недели (Saturday, Sunday, …)
B или b или h месяц (January, February, …)
d или e номер дня в месяце (1,2,3…31)
Y Год
I или l часы, 12ч формат
H Часы, 24ч формат (часы с “oh”)
k Часы, 24 hour clock (часы без “oh”)
M Минуты, с 00 произносятся как “o’clock”
N минуты, с 00 произносятся как “сотни” (US военные)
P или p AM или PM
Q “сегодня”, “вчера” или ABdY(нестандартное strftime значение)
q “” (сегодня), “yesterday”, weekday, или ABdY(нестандартное strftime значение)
R 24 формат с минутами
Название зоны | Значения | Описание |
eastern | America/New_York|’vm-received’ Q ‘digits/at’ IMp | (EST/EDT) |
central | America/Chicago|’vm-received’ Q ‘digits/at’ IMp | (CST/CDT) |
central24 | America/Chicago|’vm-received’ q ‘digits/at’ H N ‘hours’ | (CST/CDT) но в 24 часовом формате |
military | Zulu|’vm-received’ q ‘digits/at’ H N ‘hours’ ‘phonetic/z_p’ | GMT |
european | Europe/Copenhagen|’vm-received’ a d b ‘digits/at’ HM | Central European time (CEST) |
В большинстве случаев хватает стандартного default контекста голосовой почты, но можно делать и свои:)
Формат ящика:
mailbox => password[,FirstName LastName[,email addr[,pager addr[,options[|options]]]]]
mailbox – номер ящика, обычно совпадает с номером абонента
password – цифровой пароль к ящику
FirstName LastName – Имя Фамилия Владельца ящика. Данные этих полей используется для определения пользователя
email address – почта на которую будут отправлены письма о сообщениях в голосовой почте
pager address – да да пейджер!!!
options – возможно добавить 9 опций: attach, serveremail, tz, saycid, review, operator, callback, dialout, exitcontext. которые переопределяют значения установленные ранее. Опции устанавливаются связками option = значение, и разделяется с помощью |
Пример:
; Voicemail Configuration [general] format=wav49|wav [email protected] attach=yes skipms=3000 maxsilence=10 silencethreshold=128 maxlogins=3 emaildateformat=%A, %B %d, %Y at %r pagerdateformat=%A, %B %d, %Y at %r sendvoicemail=yes ; Allow the user to compose and send a voicemail while inside [zonemessages] eastern=America/New_York|'vm-received' Q 'digits/at' IMp central=America/Chicago|'vm-received' Q 'digits/at' IMp central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours' military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p' european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM [shifteight.org] 100 => 1234,Leif Madsen,[email protected] 101 => 1234,Jim Van Meggelen,[email protected] 102 => 1234,Russell Bryant,[email protected] 103 => 1234,Jared Smith,[email protected]
Для интеграции с диалпланом используется два приложения
VoiceMail() – сохраняет сообщения
Синтаксис:
VoiceMail(mailbox[@context][&mailbox[@context][&…]][,options])
Опции:
b – абонент услышит сообщение о занятости владельца почтового ящика.
u – абонент услышит сообщение о недоступности владельца почтового ящика (если таковое существует).
d([c]) полученные цифры должны будут быть обработаны в контексте с. Если его нет то в текущем.
g(число) Увеличивает громкость записи на заданное число децибел (дБ). Только на DAHDI каналах.
s Пропускается воспроизведение инструкций.
U – Пометить сообщение как важное. Удобно если почта храниться на IMAP
P – Пометить сообщение как приоритетное.
Стандартный экстеншен с возможностью указания что абонент занят или недоступен
exten => 101,1,Dial(${JOHN},10) same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) same => n(unavail),VoiceMail(101@default,u) same => n,Hangup() same => n(busy),VoiceMail(101@default,b) same => n,Hangup()
VoiceMailMain() – позволяет прослушивать и управлять ящиком
Синтаксис:
VoiceMailMain([mailbox][@context][,options])
Опции:
p – Эта опция указывает Asterisk трактовать значение почтовыйящик как номер, который должен быть добавлен в начало имени почтового ящика, введенного абонентом. Чаще всего это используется, когда на одном сервере Asterisk располагается много ящиков голосовой почты для разных компаний.
g(#) – При записи сообщений голосовой почты увеличивает их громкость на величину прирост. Эта опция должна быть задана как целое число, обозначающее количество децибел.
s – Не проводится проверка пароля.
a(папка) – Сообщение папки пропускается, и выполняется переход непосредственно к папке, заданной параметром папка. Значение по умолчанию для этой опции – 0. Возможные значения: 0 – INBOX, 1 – Old, 2 – Work, 3 – Family, 4 – Friends, 5 – Cust1, 6 – Cust2, 7 – Cust3, 8 – Cust4, 9 – Cust5
Для Управления почтой проще всего создать экстеншен типа:
exten => 5000,1,VoiceMailMain()
Directory() приложение, используя имена, заданные в описаниях почтовых ящиков в файле voicemail.conf, предоставляет абоненту телефонный справочник абонентов АТС для набора номеров по имени.
принимает три аргумента: контекст голосовой почты, из которого считываются имена, контекст диалплана, в котором вызывается пользователь (необязательный), и строку опций (также необязательный). По умолчанию Directory() ведет поиск пользователя по фамилии.
Если передается опция f, поиск осуществляется по имени.
exten => 8,1,Directory(default,incoming,f)
exten => 9,1,Directory(default,incoming)
Для добавления джитбуфера следует пропустить нашу голосовую почту через локальный канал:
[Services] exten => 5000,1,Dial(Local/vmm@Services/nj) exten => vmm,1,VoiceMailMain()
j- включает джитбуфер
n- указывает что канал не был оптимизирован другим способом.
В папке с записанными звонками хранятся также файлы msg####.txt в которых содержится дополнительная информация о сообщении. На этот файл и реагируют MWI
веб-интерфейс
Если не чистить после сборки то можно найти:
/usr/ports/net/asterisk/files/contrib/scripts/vmail.cgi
1. копируем в папку с CGI скриптами,
2. разрешаем чтение файла voicemail.conf всем.
3. В апаче разрешить CGI
AddHandler cgi-script .cgi .pl
4. Закоментировать строку 20 в CGI файле
5. Подправить строку 148, чтобы указывало где искать
6. Подправить путь к картинкам почты(/images)
7. Права на доступ к INBOX(а то не сможем читать писать удалять)
На этом думаю все! Позже будет рассмотрено как можно хранить почту в БД, но это совсем другая история.