Будучи главным инженером по Asterisk в компании столкнулся с задачей по настройке e-mail оповещений в случае пропущенных звонков и т. д. В связи с чем написал инструкцию, которую представляю ниже.
1.1. Обеспечить возможность отправки Email оповещения о пропущенных звонках на Астериске с помощью sendmail relay через учетную запись gmail.com.
2.1. Установленна система Ubuntu 12.04 LTS Server;
2.2. Имеется логин и пароль от учетной записи root;
2.3. Установлен астериск.
3.1. Установка OpenSSL:
#apt-get install openssl
3.2. Установка Sendmail:
#apt-get install sendmail
3.3. Создание сертификата с помощью OpenSSL:
3.3.1. Создаем директорию под сертификаты:
#mkdir /etc/mail/certs
3.3.2. Ограничиваем права на чтение, запись и исполнение суперпользователем.
#chmod 700 /etc/mail/certs
3.3.3. Переходим в нашу директорию
#cd /etc/mail/certs
3.3.4. Начинаем генерировать сертификат
#openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem
#openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem
#openssl req -x509 -new -days 3650 -key /etc/mail/certs/mykey.pem -out /etc/mail/certs/mycert.pem
3.3.5. создаем линк
#ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem
3.3.6. меняем права
#chmod 600 /etc/mail/certs/*
3.4. Подготовка конфигов для компиляции конечной конфигурации для Sendmail пакета:
3.4.1. Создаем папку
#mkdir /etc/mail/auth
3.4.2. Создаем файл и редактируем его
#nano /etc/mail/auth/authinfo
3.4.3. Вбиваем в файл следующую информацию:
AuthInfo:smtp.gmail.com:587 «U:root» «I:USERNAME@gmail.com» «P:PASSWORD» «M:PLAIN»
AuthInfo: «U:root» «I:USERNAME@gmail.com» «P:PASSWORD» «M:PLAIN»
Где USERNAME@gmail.com – учетная запись на gmail.com
PASSWORD – пароль от учетной записи от gmail.com
3.4.4. Конвертируем данный файл:
makemap hash -r /etc/mail/auth/authinfo < /etc/mail/auth/authinfo
3.4.5. Добавляем в /etc/mail/sendmail.mc нужную конфигурацию. (Важно: сделать это до первого FEATURE)
#nano /etc/mail/sendmail.mc
dnl # Smrp relay
define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')
define(`confCACERT_PATH', `CERT_DIR')
define(`confCACERT', `CERT_DIR/CAcert.pem')
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')
dnl #
dnl # gmail auth
define(`SMART_HOST',`[smtp.gmail.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/auth/authinfo.db')dnl
3.4.6. Компилируем конфигурацию:
make -C /etc/mail
3.5. Создание скрипта на шеле который будет отправлять сообщения о звонках (пропущенных, принятых и т д);
3.5.1. Создание шелл скрипта
#nano /var/lib/asterisk/agi-bin/power3.ru
3.5.2. Вбиваем в данный файл:
3.5.3. Меняем права на данный файл:
#chmod 755 /var/lib/asterisk/agi-bin/power3.ru
3.6. Настройка Asterisk на отправку сообщений о событиях, связанных с обработкой звонка.
#nano /etc/asterisk/extensions.conf
И в конце экстеншена на который звонки будут отправляться и оповещения о звонках, которых должны приходить оповещения, добавляем ниже:
exten => h,1,System(/var/lib/asterisk/agi-bin/power3.ru «my@email.net» "${CALLERID(num)}" "${CALLERID(name)}" "${DIALSTATUS}" "${VMSTATUS}" "${EXTEN}")
где my@email.net – почта куда хотим отправить сообщение о событии связанное со звонком.
3.7. Перезапускаем сервисы:
#service sendmail restart
#servie asterisk restart ( или config reload /etc/asterisk/extensions.conf или dialplan reload в консоли астера)
3.8. Проверяем.
При создании использовал следующие материалы:
habrahabr.ru/sandbox/56133
www.phinesolutions.com/sendmail-gmail-smtp-relay-howto.html
linuxconfig.org/configuring-gmail-as-sendmail-email-relay
www.theschmandts.org/blog/email-notifications-for-missed-calls-in-asterisk
1. Задача:
1.1. Обеспечить возможность отправки Email оповещения о пропущенных звонках на Астериске с помощью sendmail relay через учетную запись gmail.com.
2. Исходная система:
2.1. Установленна система Ubuntu 12.04 LTS Server;
2.2. Имеется логин и пароль от учетной записи root;
2.3. Установлен астериск.
3. Этапы решения:
3.1. Установка OpenSSL:
#apt-get install openssl
3.2. Установка Sendmail:
#apt-get install sendmail
3.3. Создание сертификата с помощью OpenSSL:
3.3.1. Создаем директорию под сертификаты:
#mkdir /etc/mail/certs
3.3.2. Ограничиваем права на чтение, запись и исполнение суперпользователем.
#chmod 700 /etc/mail/certs
3.3.3. Переходим в нашу директорию
#cd /etc/mail/certs
3.3.4. Начинаем генерировать сертификат
#openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem
#openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem
#openssl req -x509 -new -days 3650 -key /etc/mail/certs/mykey.pem -out /etc/mail/certs/mycert.pem
3.3.5. создаем линк
#ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem
3.3.6. меняем права
#chmod 600 /etc/mail/certs/*
3.4. Подготовка конфигов для компиляции конечной конфигурации для Sendmail пакета:
3.4.1. Создаем папку
#mkdir /etc/mail/auth
3.4.2. Создаем файл и редактируем его
#nano /etc/mail/auth/authinfo
3.4.3. Вбиваем в файл следующую информацию:
AuthInfo:smtp.gmail.com:587 «U:root» «I:USERNAME@gmail.com» «P:PASSWORD» «M:PLAIN»
AuthInfo: «U:root» «I:USERNAME@gmail.com» «P:PASSWORD» «M:PLAIN»
Где USERNAME@gmail.com – учетная запись на gmail.com
PASSWORD – пароль от учетной записи от gmail.com
3.4.4. Конвертируем данный файл:
makemap hash -r /etc/mail/auth/authinfo < /etc/mail/auth/authinfo
3.4.5. Добавляем в /etc/mail/sendmail.mc нужную конфигурацию. (Важно: сделать это до первого FEATURE)
#nano /etc/mail/sendmail.mc
dnl # Smrp relay
define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')
define(`confCACERT_PATH', `CERT_DIR')
define(`confCACERT', `CERT_DIR/CAcert.pem')
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')
dnl #
dnl # gmail auth
define(`SMART_HOST',`[smtp.gmail.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/auth/authinfo.db')dnl
3.4.6. Компилируем конфигурацию:
make -C /etc/mail
3.5. Создание скрипта на шеле который будет отправлять сообщения о звонках (пропущенных, принятых и т д);
3.5.1. Создание шелл скрипта
#nano /var/lib/asterisk/agi-bin/power3.ru
3.5.2. Вбиваем в данный файл:
#!/bin/sh
#данный скрипт используется для отправки оповещении о событиях связанные со звонком
#$1 первая переменная принимаемая данным скриптом есть адресс электронной почты куда надо отправить сообщение
#$2 номер телефона звонящего
#$3 имя звонящего
#$4 статус звонка
#$5 статус голосового сообщения
#$6 куда звонили
if [ $# != 6 ]
then exit 1
fi
#Store command line args in nice variables
EMAIL=$1
CALLERIDNUM=$2
CALLERIDNAME=$3
DIALSTATUS=$4
VMSTATUS=$5
EXTEN=$6
DEBUG=0 #Set to 0 for standard operation. 1 will log inputs and mail commands for debugging.
LOGFILE="/var/log/asterisk/IncomingCalls.log"
SENDMAIL=1 #Set to 1 if you want it to email the alert. 0 is useful for debugging.
EMAILCMD="/usr/sbin/sendmail -t"
FROMEMAIL="your_sending@email.net"
SUBJECT="[PBX] Incoming call for extension ${EXTEN}"
#log mail command
if [ ${DEBUG} -eq 1 ]; then
echo $1 $2 \"$3\" $4 $5 $6 >> ${LOGFILE}
fi
#Check we have an email address if not quit
if [ "${EMAIL}" = "" ]; then
exit 0
fi
if [ ${DIALSTATUS} = "CANCEL" ]; then
BODY="${CALLERIDNAME} (${CALLERIDNUM}) hung up."
elif [ ${DIALSTATUS} = "ANSWER" ]; then
BODY="${CALLERIDNAME} (${CALLERIDNUM}) was answered by ${EXTEN}."
else
BODY="[ ${DIALSTATUS} ] ${CALLERIDNAME} (${CALLERIDNUM}) hung up."
#check for hangup in vm menu. ex call went to vm and user hung up
if [ ${VMSTATUS} = "USEREXIT" ]; then
BODY="[ ${DIALSTATUS} ] ${CALLERIDNAME} (${CALLERIDNUM}) hung up on vm."
fi
#check for hangup in vm menu. ex call went to vm and user hung up
if [ ${VMSTATUS} = "FAILED" ]; then
BODY="[ ${DIALSTATUS} ] ${CALLERIDNAME} (${CALLERIDNUM}) hung up on vm."
fi
#if they left a vm we already would get an email. Don't need a 2nd
if [ ${VMSTATUS} = "SUCCESS" ]; then
exit 0
fi
fi
#log mail command
if [ ${DEBUG} -eq 1 ]; then
echo "To: ${EMAIL} Subject: ${SUBJECT} ${BODY}" >> ${LOGFILE}
fi
#send email
if [ ${SENDMAIL} -eq 1 ]; then
${EMAILCMD} <<INLINE
To: ${EMAIL}
From: ${FROMEMAIL}
Subject: ${SUBJECT}
${BODY}
Asterisk PBX
INLINE
fi
exit 0
3.5.3. Меняем права на данный файл:
#chmod 755 /var/lib/asterisk/agi-bin/power3.ru
3.6. Настройка Asterisk на отправку сообщений о событиях, связанных с обработкой звонка.
#nano /etc/asterisk/extensions.conf
И в конце экстеншена на который звонки будут отправляться и оповещения о звонках, которых должны приходить оповещения, добавляем ниже:
exten => h,1,System(/var/lib/asterisk/agi-bin/power3.ru «my@email.net» "${CALLERID(num)}" "${CALLERID(name)}" "${DIALSTATUS}" "${VMSTATUS}" "${EXTEN}")
где my@email.net – почта куда хотим отправить сообщение о событии связанное со звонком.
3.7. Перезапускаем сервисы:
#service sendmail restart
#servie asterisk restart ( или config reload /etc/asterisk/extensions.conf или dialplan reload в консоли астера)
3.8. Проверяем.
При создании использовал следующие материалы:
habrahabr.ru/sandbox/56133
www.phinesolutions.com/sendmail-gmail-smtp-relay-howto.html
linuxconfig.org/configuring-gmail-as-sendmail-email-relay
www.theschmandts.org/blog/email-notifications-for-missed-calls-in-asterisk