ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

voicemail , название файла в теле письма .

Проблемы и их решения Asterisk как такового

Модераторы: april22, Zavr2008

voicemail , название файла в теле письма .

Сообщение zzuz » 01 апр 2017, 01:21

Клиент сегодня задал вроде как довольно простой вопрос.
"-Хотим получать письма с голосовой почтой , но чтобы не было вложений . Хотим , чтобы в теле письма была ссылка на сам файл" .
Ну, думаю , хоккей , делов то. А не тут то было.
Имеем изначально:
Код: выделить все
charset=UTF-8
emailsubject=Новое голосовое сообщение (${VM_MSGNUM}) для ${VM_MAILBOX}
emailbody=${VM_NAME},\n\nГолосовое сообщение для ${VM_MAILBOX}:\n\n\tОт:\t${VM_CALLERID}\n\tДлительность:\t${VM_DUR} seconds\n\tДата:\t${VM_DATE}\n\n .

Для веба рисуем и не забываем про .htaccess
Код: выделить все
ln -s /var/spool/asterisk/voicemail/default /var/www/html/voicemail

Теперь нужно каким-то макаром добавить в тело письма ссылку
Код: выделить все
http://domain.ru/voicemail/${VM_MAILBOX}/INBOX/${FILENAME}

Выясняется , что так просто в письмо засунуть имя файла не получится. Директорию мы можем узнать , где будут лежать файлы в переменной ${VM_MAILBOX}. А вот узнать какой файл имеется в виду в папке с файлами записей нет возможности. Судя по поиску , не так много людей задавалось такой задачей. Готового не найдено.
Файлы в директории голосовой почты храняться в формате "msg%04d.%s" , то есть msg0000.wav ,msg0001.wav и так далее. Возможности использовать номер сообщения через ${VM_MSGNUM} нет , так как нумерация файлов идет как n-1 и считается без ведущих нулей.
Открываем apps/app_voicemail.c и понимаем , что имени файла для этих целей не предусмотрено. Модуль знает какой файл он прикрепляет к письму , но возможности использовать это в письме не дает. Исправляем ситуацию .
Добавляем пару строк между строками "void prep_email_sub_vars" и "Retrieve info from VM attribute file" (я проверил , на всех версиях , аж до 14 версии функция и комментарии в ней остались такими же)
Код: выделить все
  make_file(fromfile, sizeof(fromfile), "", msgnum - 1);
  pbx_builtin_setvar_helper(ast, "VM_FILENAME", fromfile);

для удобства состряпал sed выражение
Код: выделить все
sed "/void prep_email_sub_vars/,/Retrieve info from VM attribute file/s/Retrieve.*/&\n\tmake_file(fromfile, sizeof(fromfile), \"\", msgnum - 1);\n\tpbx_builtin_setvar_helper(ast, \"VM_FILENAME\", fromfile);/" -i app_voicemail.c

*не забываем , что мы должны находится в asterisk<source>/apps .

Далее делаем
Код: выделить все
cd ../ ; make ;
asterisk -rx 'module unload app_voicemail.so';
cp apps/app_voicemail.so /usr/src/asterisk/modules/;
asterisk -rx 'module load app_voicemail.so'

Если это все прошло без ошибок , то у нас появляется возможность использовать переменную ${VM_FILENAME} , которая будет указывать на имя файла в виде "/msg0000.wav" (убирать ведущий слэш не стал , у нас и так ссылка формируется) . Далее добавляем в emailbody ссылку и получаем следующее
Код: выделить все
emailbody=${VM_NAME},\n\nГолосовое сообщение для ${VM_MAILBOX}:\n\n\tОт:\t${VM_CALLERID}\n\tДлительность:\t${VM_DUR} seconds\n\tДата:\t${VM_DATE}\n\nСсылка на файл : http://domain.ru/voicemail/${VM_MAILBOX}/INBOX/${VM_FILENAME}.wav \n\n

Формат файла указываем тот, что прописан в конфигурации модуля. В данном случае это format=wav . Выключаем на номере удаление файла записи (delete=no) и выключаем вложение в письмо (attach=no) .
При получении голосового сообщения получаем что-то вида
zzuz,
Голосовое сообщение для 710:
От: 713
Длительность: 0:09 seconds
Дата: 13:11:58 31-03-2017
Ссылка на файл: http://domain.ru/voicemail/710/INBOX//msg0009.wav


Вот. Развлекайтесь.
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1658
Зарегистрирован: 21 сен 2010, 13:33

Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH