Скрипт (н-р, на Python) учета телефонных звонков

Артем18 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
10.01.2011

В аттаче картинка с схемой реализации учета звонков.

Описание таблицы базы данных:

Базу данных заполняет SIP сервер (asterisk)

TABLE cdr (

calldate timestamp with time zone DEFAULT now() NOT NULL,

clid character varying(80) DEFAULT ''::character varying NOT NULL,

src character varying(80) DEFAULT ''::character varying NOT NULL,

dst character varying(80) DEFAULT ''::character varying NOT NULL,

dcontext character varying(80) DEFAULT ''::character varying NOT NULL,

channel character varying(80) DEFAULT ''::character varying NOT NULL,

dstchannel character varying(80) DEFAULT ''::character varying NOT NULL,

lastapp character varying(80) DEFAULT ''::character varying NOT NULL,

lastdata character varying(80) DEFAULT ''::character varying NOT NULL,

duration bigint DEFAULT (0)::bigint NOT NULL,

billsec bigint DEFAULT (0)::bigint NOT NULL,

disposition character varying(45) DEFAULT ''::character varying NOT NULL,

amaflags bigint DEFAULT (0)::bigint NOT NULL,

accountcode character varying(20) DEFAULT ''::character varying NOT NULL,

uniqueid character varying(150) DEFAULT ''::character varying NOT NULL,

userfield character varying(255) DEFAULT ''::character varying NOT NULL

);

описание:

clid - на какой номер был вызов (абонент)

dst = 100 - звонок во время статьи дня

billsec - длительность звонка

-------------

Добавка:

dst = 103 - звонок во время утреннего урока

Уточнение:

Деньги считает оператор SIP телефонии, мы можем считать только время, например лимит 360 минут, это два урока, по деньгам это 10-12 долларов.

Сейчас ситема реализована так, что позвонить может каждый желающий, блокировка производится вручную при помощи файла blocked.lst вида:

74956996652

74956996578

В случае превышения установленного лимита минут добавляем номер абонента в этот файл.

В случае если администратор убирает блокировку - удаляем номер из этого файла.

В принципе ничего не мешает реализовать тот же алгоритм используя базу данных, при помощи python скрипта

Сейчас скрипты работают так:

Принимаем входящий звонок

Определяем номер звонящего

Проверяем есть ли этот номер в списке заблокированных

Если номер не заблокирован - перезваниваем.

Система перезванивает при создании файла вида:

NUMBER=$1 #берем номер абонента из командной строки

echo "Channel: SIP/$NUMBER@sipmarket

MaxRetries: 1

RetryTime: 30

WaitTime: 120

Context: lesson-out

Extension: 103

Priority: 2

AlwaysDelete: Yes

Callerid: $NUMBER" >/var/spool/asterisk/tmp/$NUMBER.call # помещаем файл вызова во временную папку

sleep 10 #даем человеку время повесить трубку

cp /var/spool/asterisk/tmp/$NUMBER.call /var/spool/asterisk/outgoing/$NUMBER.call #копируем файл для отрабатывания системы

файл в папке /var/spool/asterisk/tmp/ оставляем для контроля, кто пользовался услугой.

нынешние скрипты написаны на шелле :)

база - posgresql

-------------

По сути, надо только собрать номера телефонов и сколько кто проговорил, чтобы отсеять те, у которых деньги кончились (видимо только по номеру телефона - где организован и как список абонентов), чтобы им больше не звонить.

Можно сделать наоборот, писать в файл только разрешенные номера.

-------------

Будут уточняющие вопросы, спрашивайте!

А так жду сроков и стоимостей исполнения.