MySQL

Недавно мне задали вопрос: «Как можно с помощью FreeSWITCH сделать рассылку факсов по списку номеров?» Я набросаю ключевые пункты, как это сделать.

Во-первых, у Вас должна быть какая-то SQL база со списком номеров. К примеру, берем MySQL с одной табличкой fax, где находиться колонка distination.

Во-вторых, файл, который будем отправлять. Что бы привести его в пригодный нам формат, воспользуемся утилитой convert:

convert -density 204x98 -units PixelsPerInch -resize 1728x1186\! -monochrome -compress Fax my-fax-file.pdf /opt/freeswitch/storage/fax_out/01.tif

В-третьих, напишем LUA-скрипт scripts/send_fax.lua, который будет лезть в базу, выбирать номер и отправлять наш файлик:

local fax_file = "/opt/freeswitch/storage/fax_out/01.tif"

local dbh = freeswitch.Dbh("dsn", "user", "password")
if dbh:connected() then
        freeswitch.consoleLog("NOTICE", "database connected\n")
else
        freeswitch.consoleLog("ERR", "database error\n")
    return
end

local my_query = "select distination from fax "

assert(dbh:query(my_query, function(row)
        freeswitch.consoleLog("NOTICE", "\nSending FAX to " ..row.distination.. "\n")
        send_fax = "originate sofia/gateway/farlep/" ..row.distination.. " &txfax(" ..fax_file.. ")"
        api = freeswitch.API()
        reply = api:executeString(send_fax)
        freeswitch.consoleLog("DEBUG", "\nSending " ..reply.. "\n")
end))

Теперь можем просто из консоли FreeSWITCH выполнить скрипт:

luarun send_fax.lua

Дальше, приправляем на свой вкус: записать результат отправки в базу или еще чего….

FreeSWITCHЯ описывал, как можно отправить SMS-визитку после звонка в Oktell. Пришла очередь сделать аналогический функционал на FreeSWITCH! Для этого я создаю в MySQL базе на сервере отдельную табличку, где буду хранить информацию о том, кому уже отправил визитку. В качестве языка написания сценария я выбрал JavaScript. Сценарий проверяет в табличке была ли отправлена уже SMS-визитка (на 1 номер должна только 1 уходить SMS), если нет, тогда смотрим код оператора (я смотрю украинских операторов) и для каждого из операторов создаем SMS. Отправляем через нашего SMS-провайдера.

А вот и сам JavaScript:

Oktell logoКак я описывал раньше, есть у меня SIP-GSM шлюз на базе Asterisk, который подключен к офисному серверу с Oktell. На модемы приходят разные SMS и пока они ложатся в файл на Linux сервере. В них бывает информация о балансе на карточках :). Идея — перенести все эти SMS в Oktell.

Для начала решил все SMS записывать в базу MySQL на сервере, а потом служебным сценарием забирать в Oktell. Создаю в MySQL пользователя, базу, и таблицу:

CREATE TABLE  `asterisk`.`gsm` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`date` DATETIME NOT NULL ,
`modem` VARCHAR( 10 ) NOT NULL ,
`callerid` VARCHAR( 16 ) NOT NULL ,
`msg` VARCHAR( 160 ) NOT NULL ,
`oktell` ENUM(  '0',  '1' ) NOT NULL DEFAULT  '0'
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT =  'Входящие SMS'

Asterisk LogoМы уже имеем настроенный сервер Asterisk через который Oktell осуществляет звонки на мобильные. Вся статистика храниться в /var/log/asterisk/cdr-csv/Master.csv Не очень удобно в плане работы… Вот и хочу перенести все в MySQL, а потом смогу эту информацию использовать в сценариях Oktell. Как и в предыдущей статье все будим собирать с исходников на Ubuntu Linux.
Приступим!

Виникла необхідність обмежити кількість повідомлень, які розміщують певні користувачі на форумі phpBB 3.0.7. Віднайшов рішення цієї задачі!

Створюємо файл modinstall.php наступного вмісту:

    < ?php
        define('IN_PHPBB', true);
        $phpbb_root_path = './';
        $phpEx = substr(strrchr(__FILE__, '.'), 1);
        include($phpbb_root_path . 'common.' . $phpEx);
        $user->session_begin();
        $auth->acl($user->data);
        $user->setup();
        include($phpbb_root_path . 'includes/acp/auth.' . $phpEx);
        $auth_admin = new auth_admin();

        $result = $auth_admin->acl_add_option(array(
            'local'      => array('u_limit_posts_per_day'),
            'global'   => array('u_limit_posts_per_day')
        ));
        
        print ('Permissions install ' . ($result ? 'completed successfully' : 'failed'));
    ?>

Встановлюємо на файл всі необхідні прав та виконуємо в браузері. Після, файл видаляємо!

Зіткнувся з ситуацією, коли на Debian Linux сервері MySQL разом із Apache2 завантажує процесор на 95-100%! Щось варто змінювати, адже доходить до повного зависання сервера. Перше, що спало на думку, доставити оперативної пам’яті та замінити процесор. Це лише частково вирішило проблему, у пікові моменти нічого не змінилося! Необхідно оптимізувати MySQL, адже на оптимізована під запити баз даних налаштування MySQL спричиняє активні звернення до жорсткого диску на читання, що збільшує середнє навантаження на процесор (оскільки останній буде постійно очікувати даних від жорсткого диску).

Після того, як я переніс один сайт на новий сервер, то отримав замість тексту, щось таке:
?????? ??? ????? ?????????? ???? ???? ??
Проблема в тім, що у попередній версії MySQL текст у базі зберігався у кодуванні Windows-1251, після оновлення — UTF8. Вирішення проблеми, оголосити набір символів у PHP скрипті відразу після з’єднання:

@mysql_pconnect($server, $user, $password);
$db_connect_id = @mysql_select_db($dbname);
@mysql_query(" SET NAMES 'cp1251' ", $db_connect_id);