Отправляем звонки из Asterisk на почту

Была поставлена задача отправлять записи входящих звонков отдела продаж руководителю в конце дня. Сервер телефонии у меня настроен вручную, веб интерфейс (freepbx) не установлен. 

Самое простое решение пришедшее на ум - копировать mp3 файлы с записями разговоров в отдельную папку, после чего, в конце дня, отправлять эти файлы на почту и очищать папку.

Делим задачу на 3 этапа:
  1. Подготовить файлы
  2. Настроить почтовый клиент
  3. Написать скрипт отправки сообщений и поместить его в cron


Подготавливаем файлы

Смотрим диалплан в астериске:
nano /etc/asterisk/extensions.conf

У меня настроена запись звонков с последующей и конвертацией их в mp3. Находим нужный контекст и смотрим как происходит сохранение и конвертация файла. Добавляем в конец команду копирования файла в папку /var/mp3/sales-in/

 exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 16 --silent "/var/mp3/${UNIQUEID}.wav" "/var/mp3/${UNIQUEID}.mp3" && rm -f "/var/mp3/${UNIQUEID}.wav" && chmod o+r "/var/mp3/${UNIQUEID}.mp3" && cp "/var/mp3/${UNIQUEID}.mp3" "/var/mp3/sales-in/");

Теперь после записи и конвертирования файла, создается его копия в папке /var/mp3/sales-in

Настраиваем отправку почты

Следующий этап - настройка sendmail и установка консольного почтового клиента MUTT для отправки писем с вложениями (sendmail самостоятельно этого не умеет):
apt-get install sendmail

Я решил не углубляться в настройки почтового сервера, мы будем отправлять сообщения через ящик зарегистрированный на gmail. Для этого нам нужно настроить sendmail на работу с почтовым сервером гугла:
nano /etc/mail/sendmail.mc

добавляем в конец (но до MAILER_DEFENITIONS) следующие строки:
 # for gmail
define(`SMART_HOST',`smtp.gmail.com')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`RELAY_MAILER',`esmtp')dnl
define(`RELAY_MAILER_ARGS', `TPC $h 587')dnl
FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl

Далее создаем папку и файл
mkdir /etc/mail/auth
nano /etc/mail/auth/client-info
И добавляем в него следующие строки (заменяя yourlogin@gmail.com на ваш почтовый адрес, а password на ваш пароль) :
AuthInfo:smtp.gmail.com "U:root" "I:yourlogin@gmail.com" "P:password" "M:PLAIN"
AuthInfo:smtp.gmail.com:587 "U:root" "I:yourlogin@gmail.com" "P:password" "M:PLAIN"

Для больше защищенности выставляем права:
chmod 600 /etc/mail/auth/client-info
chmod 700 /etc/mail/auth

Преобразуем файл в нужный формат:
makemap -r hash /etc/mail/auth/client-info.db < /etc/mail/auth/client-info

Пересобираем sendmail и перезагружаем его для принятия изменений:
cd /etc/mail/
make 
/etc/init.d/sendmail reload

Проверяем отправку сообщения примерно так:
echo "текст письма" | sendmail -s "Это тест" your@mail.ru

Для отправки сообщений со вложениями установим почтовый клиент:
apt-get install mutt

Во избежание проблем с кодировкой сообщений сделаем следующее:
echo "application/octet-stream txt" >> ~/.mime.types/

Проверяем работу mutt, заменяя path/to/yourfile/mp3 на путь к файлу:
echo "Текст письма" | mutt -a /path/to/yourfile/mp3 -s "Тема письма" -- your@mail.ru

Пишем скрипт отправки сообщения и помещаем его в cron

Скрипт должен проверять наличие файлов в папке со звонками. Если файлов нет - отправлять письмо сообщающее об отсутствии звонков. В противном случае - прикреплять файлы к письму. При этом короткие записи (не отвеченные) нам не нужны, поэтому сначала удалим файлы размером менее 10 килобайт.

Cоздаем и открываем файл:
nano /home/gk/mail-calls.sh

 #!/bin/bash

#проверяем, если ли файлы в директории
if [ -z "`ls /var/mp3/sales-in/`" ]; then
   # сообщаем, что звонков не было
   echo "Папка пустая"
   echo $(date +"%d.%m.%y")" входящих звонков в отдел продаж не было." | mutt -s $(date +"%d.%m.%y")" звонков в не было." -- test@domain.ru
   echo "Пустое письмо отправленно"

else
   echo "Звонки были"
   #удаляем короткие файлы менее 10 килобайт
   echo "Убираем неотвеченные звонки"
   find /var/mp3/sales-in/ -type f -size -10k -delete
   #отправляем файлы на почту
   echo "Входящие звонки отдела продаж за "$(date +"%d.%m.%y") | mutt -a $(ls /var/mp3/sales-in/*.mp3) -s "Звонки от "$(date +"%d.%m.%y") -- test@domain.ru
   echo "Cообщение отправлено"
   # удаляем файлы
   rm -rf /var/mp3/sales-in/*
   echo "Файлы удалены"
fi

Делаем скрипт исполняемым:
chmod +x /home/gk/mail-calls.sh
Ставим скрипт в автозагрузку: каждый день в 22:00.

Запуск скрипта через crontab -e  у меня не сработал. Заморачиваться с этим не стал - добавил его в /etc/crontab с указанием пользователя от имени которого будем запускать скрипт. Не забываем нажать Enter после последнего правила в кроне (у меня файл заканчивается на #) :)

00 22   * * *   root    /home/gk/mail-calls.sh
#

Вот в общем и все.

1 комментарий:

  1. Sendmail-ом также можно слать почту через свой smtp. В моем случае Zimbra (25 port, starttls, normal password), настройки изменились следующи образом:

    sendmail.mc:
    # for mydomaine.ru
    define(`confPRIVACY_FLAGS', `needmailhelo,authwarnings,noexpn,novrfy,noverb')dnl
    define(`SMART_HOST',`smtp.mydomaine.ru')dnl
    define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
    define(`RELAY_MAILER',`esmtp')dnl
    define(`RELAY_MAILER_ARGS', `TPC $h 25')dnl
    FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl

    client-info:
    AuthInfo:smtp.mydomaine.ru "U:noreply@mydomaine.ru" "I:noreply@mydomaine.ru" "P:password" "M:LOGIN"
    AuthInfo:smtp.mydomaine.ru:25 "U:noreply@mydomaine.ru" "I:noreply@mydomaine.ru" "P:password" "M:LOGIN"

    ОтветитьУдалить