Asterisk конференции — создание через почту

от автора


Конференц-колы это очень удобный и нужный сервис. Собирать участников просто(они сами дозваниваются и подключаются), количество абонентов почти не ограничено(пока канал не кончится), телефонные линии свободны (если конференции у вас висят на отдельном sip номере с неограниченным количеством сессий.) Есть только одно неудобство — конференция создается по заявке. И если у админа заявок море, а то и заболел (уснул, напился, умер), то создание конференц-кола сильно затягивается. К тому же пароль у постоянных конференций тоже постоянный. И в этом случае бывший участник всегда сможет к ней подключиться, а то и вообще собрать там свой митинг, что ни есть гуд. Вот такие мысли крутились в моей голове после помпезного объявления по компании о запуске конференц-колов. И решено было создание телеконференций автоматизировать.

Но! Делать мы это будем через почту. Схема следующая. Пользователь пишет письмо с определенной темой на определенный адрес. Через некоторое время ему возвращается ответ с данными телеконференции.
Действующие лица и исполнители:
Crontab — Хроноголик. Постоянно испытывает потребность следить за временем, запускает bash скрипт и сопутствующие команды.
Fetchmail — Несчастный пролетарий, которого постоянно гоняют на почту и если таковая обнаруживается бедолага вынужден тащить неподъемные сообщения на сервер при помощи MTA.
Sendmail — та самая MTA при помощи которой fetchmail таскает письма на сервер.
Sendemail — легкомысленная профурсетка, которая, думая что шлет пользователям любовные записки, на самом деле, будучи жестоко обманутая bash скриптом, отправляет ответ с настройками конференции.
Bash скрипт — злостный эксплуататор всех вышеописанных персонажей. Тем не менее тоже не в масле катается, обрабатывает полученные письма, анализирует их и создает конференции.

Прежде всего необходимо установить и настроить fetchmail. А sendmail можно просто установить, настраивать для наших целей необязательно. Я руководствовался данной статьей (http://www.opennet.ru/base/net/fetchmail_setup.txt.html) чего и вам желаю. Для тех же кому некогда: в профиле пользователя, который имеет права на /etc/asterisk необходимо создать файл .fetchmailrc в котором прописать настройки подключения к серверу:

Пример.

	poll address.mail.server 	port 995         proto POP3         user 'account'         pass 'password'         ssl 

Проверить подключение можно командой fetchmail -k. В случае правильных настроек по адресу /var/spool/mail/username появиться отправленное письмо.

Далее. Crontab каждые 10 минут запускает срипт. А около 12 ночи стирает счетчик конференций и файл с временными конференциями.

*/10 * * * * cd /opt/bbb/meetings/ && ./mkmeet
59 23 * * * cat /dev/null > /etc/asterisk/meetme_additional.conf && cat /dev/null > /opt/neoflex/metings/meetcount

Ну и наш жестокий эксплуататор:

#!/bin/bash  #Проверяем почту и удаляем письма с сервера fetchmail -F  #Форматируем полученные письма, записываем результат во временный файл echo | sed -n '/From:/p; /Subject:/p' /var/spool/mail/username | sed s'/From/from/'g | sed s'/Subject/subject/'g | sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//' | sed s'/\:/ /'g >> tmp.file  #Путь к временному файлу bdpath=/opt/bbb/meetings  #Временный файл num=(`cat $bdpath/tmp.file`)  #Счетчик номера конференции meetc=(`cat $bdpath/meetcount`)  #Если номер конференции меньше чем ноль, то tmpconf = 5000, иначе равен счетчику if [[ "$meetc" -le "0" ]]; then  tmpconf="5000" echo "${tmpconf[$c]}" > meetcount else tmpconf=$meetc fi  #Задаем значение переменных a=0 b=`expr $a + 1` c=0  #Начинаем цикл while [ ${num[$a]} ] do  #Генерируем пароль FLOOR=10000 pass=0 while [ "$pass" -le $FLOOR ] do pass=$RANDOM done  #Задаем значение переменных mail=${num[$a]} subj="${num[$b]}" cut=`echo ${num[$a]} | sed 's/^.*@//'`  #Проверяем что письмо пришло от "наших", а не кого попало. if [[ "$cut" != "firma.ru" ]]; then subj="khuy" fi  Если тема письма meetme, создаем конференцию и отправляем пользователю данные. if [[ "$subj" == "meetme" ]]; then  echo "conf => ${tmpconf[$c]},$pass" >> /etc/asterisk/meetme_additional.conf /usr/sbin/asterisk -rx "reload" sendemail -f asterisk@firma.ru  -t $mail -o message-charset=utf-8 -o message-content-type=html -u "Conference call was successfully created" -m "<p>Данные конференции\ </p><p>Внешний номер телефона - 8(XXX)XXX-XXXX<br>Внутренний номер телефона - 550<br>Номер конференции - ${tmpconf[$c]}<br>пароль - $pass<br>Ссылка на инструкцию\  https://wiki.firma.ru/pages/viewpage.action?pageId=28066722<p><b>Напоминаем!!! Срок жизни конференци до 23:59 сегодняшнего дня.</b></p>" -s mail.firma.ru -xu asterisk@firma.ru -xp "password" echo `date` $mail ${tmpconf[$c]} >> /var/log/tmpmeetings.log tmpconf=`expr ${tmpconf[$c]} + 1` fi  a=`expr $a + 2` b=`expr $b + 2`  done  rm tmp.file echo "$tmpconf" > meetcount cat /dev/null > /var/spool/mail/root 

Вот и все. Теперь рассылаем не менее помпезное заявление о создании временных телеконференций и… На ваш вкус :))

ссылка на оригинал статьи http://habrahabr.ru/post/182270/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *