Самый простой способ- создать конференцию вручную по запросу пользователя и отправить ему данные.
Но это не наш метод. Коференция будет "создаваться" автоматически, в ответ на электронное письмо пользователя.
Мое решение позволяет:
1. Проверять отправителя (письма только с домена организации).
2. Проверять соответствие уже созданных конференций и отправителя (1 конференция на пользователя).
3. Проверять лимит созданных конференция.
4. Не требует перезагрузки конфигурации Asterisk при создании новой конференции.
Получение почты и проверку отправителя отдадим fetchmail и procmail. Отправлять будет sendemail.
Установка и настройка:
cd /tmp/
wget http://caspian.dotconf.net/menu/Softwar e/SendEmail/sendEmail-v1.56.tar.gz
tar -zxvf sendEmail-v1.56.tar.gz
cp -a sendEmail-v1.56/sendEmail /usr/local/bin
sudo chmod +x /usr/local/bin/sendEmail
touch /root/.fetchmailrc
chmod 700 /root/.fetchmailrc
mkdir /home/asterisk/meetings
touch /home/asterisk/meetmail/ok.mail
touch /home/asterisk/meetings/meetme.sh
touch /home/asterisk/meetings/meetme-clear.sh
chmod +x /home/asterisk/meetings/meetme.sh
chmod +x /home/asterisk/meetings/meetme-clear.sh
touch /home/asterisk/meetings/tmp.file
touch /home/asterisk/meetings/meetcount
touch /home/asterisk/meetings/meetcountmail
mkdir /home/asterisk/meetmail
yum install fetchmail
cat >/root/.fetchmailrc
port 110
user 'conference'
pass 'password'
mda "/usr/bin/procmail -d %T"
EOF
cat >/root/.procmailrcPATH=/usr/sbin:/usr/bi n
MAILDIR=/home/asterisk/meetmail/
DEFAULT=$MAILDIR
VERBOSE=YES
:0:
*^From:.*(@shrainer\.me)
*^Subject: meetme
| formail -x From: >> /home/asterisk/meetmail/ok.mail
:1:
*^From:.*
/dev/null
EOF
Конференции не будут создаваться на станции по каждому запросу пользователей, а будут только выдаваться данные этих конференций. Это позволит не перечитывать конфигурации станции каждый раз и облегчит код.
Первый скрип отвечает на запросы пользователей. Procmail складывает в файл ok.mail только адреса и только отправителей прошедших проверку. В конце работы скрипт благополучно херит всю полученную почту, за не надобностью:
#cat /home/asterisk/meetings/meetme.sh
#!/bin/bash
BDPATH=/home/asterisk/meetings
TMPFILE=$BDPATH/tmp.file
ALRMAIL=$BDPATH/meetcountmail
FLOOR=1001
RANGE=9999
fetchmail -F
echo | sed 's/ *(.*)//; s/>.*//; s/.*[<] *//' /home/asterisk/meetmail/ok.mail | awk 'NR%2==0' >> $TMPFILE
if [ -s "$TMPFILE" ]
then
while read line; do
MAIL=$line
MAILCHECK=`grep $MAIL $ALRMAIL|wc -l`
if [ $MAILCHECK -ne 0 ]
then
ROOMNUM=`grep $MAIL $ALRMAIL | awk '{print $1}'`
PASS=`asterisk -rx "database get CONFERENCE/$ROOMNUM userpin" | grep -i 'Value:' | awk '{print $2}'`
/usr/local/bin/sendEmail -f conference@shrainer.me -t $MAIL -o message-charset=utf-8 -o message-content-type=html -u "Конференция была создана ранее" -m "
Конференция по вашему запросу уже была создана ранее.
Данные конференции
Внешний номер телефона - 7-495-XXX-XX-XX (Россия, Москва)
Внутренний номер конференции - $ROOMNUM
пинкод - $PASS
Инструкция http://shrainer.me
Напоминаем! Срок жизни конференци до 23:59 текущего дня.
" -s pop.shrainer.me
else
MEETNUM=(`cat $BDPATH/meetcount`)
if [[ "$MEETNUM" -gt "1005" ]];
then
/usr/local/bin/sendEmail -f conference@shrainer.me -t $MAIL -o message-charset=utf-8 -o message-content-type=html -u "Конференция не была создана" -m "
В настоящее время свободных комнат телеконференций нет.
Если телеконференция нужна вам сегодня, обратитесь в службу технической поддержки.
" -s pop.shrainer.me
else
if [[ "$MEETNUM" -le "0" ]];
then ROOMNUM="1000"
echo $ROOMNUM > $BDPATH/meetcount
else ROOMNUM=$MEETNUM
fi
echo $((ROOMNUM+1)) > $BDPATH/meetcount
PASS=`asterisk -rx "database get CONFERENCE/$ROOMNUM userpin" | grep -i 'Value:' | awk '{print $2}'`
/usr/local/bin/sendEmail -f conference@shrainer.me -t $MAIL -o message-charset=utf-8 -o message-content-type=html -u "Конференция успешно создана" -m "
Данные конференции
Внешний номер телефона - 7-495-XXX-XX-XX (Россия, Москва)
Внутренний номер конференции - $ROOMNUM
пинкод - $PASS
Инструкция http://shrainer.me
Напоминаем! Срок жизни конференци до 23:59 текущего дня.
" -s pop.shrainer.me
echo `date` $MAIL $ROOMNUM >> /var/log/tmpmeetings.log
echo $ROOMNUM $MAIL >> $ALRMAIL
fi
fi
done < $TMPFILE
rm -rf TMPFILE
fi
rm -rf /home/asterisk/meetmail/*
cat /dev/null > $TMPFILE
cat /dev/null > /home/asterisk/meetmail/ok.mail
Скрипты будут запускаться кроном:
cat >>/etc/crontab<#*/10 * * * * root HOME=/root /bin/bash /home/asterisk/meetings/meetme.sh -s
#59 23 * * * root /bin/bash /home/asterisk/meetings/meetme-clear.sh
EOF
Теперь пользователь, отправив письмо на адрес conference@shrainer.me с темой meetme, получит данные номера телеконференции.
Не блогадарите.
Комментариев нет:
Отправить комментарий