Pull to refresh

Настройка Email оповещения пропущенных звонков Астериск PBX

Будучи главным инженером по Asterisk в компании столкнулся с задачей по настройке e-mail оповещений в случае пропущенных звонков и т. д. В связи с чем написал инструкцию, которую представляю ниже.

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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.