Скрипт отправки СМС через Goip4 шлюз для ABillS

Приведу пример PHP скрипта, которым я рассылаю СМС сообщения через GoIP4 шлюз.

Сначала выберем тарифы только с месячным начислением (я выбрал все, исключив с дневным начислением, так как их меньше):

SELECT name, tp_id FROM tarif_plans;
SELECT name, tp_id FROM tarif_plans WHERE tp_id NOT IN(1,2,4,8,9,10,39,63,64,65,106,107,109,110,114,117,118,119)


Собственно вот сам скрипт, я запускаю его из cron на отдельном сервере (где я установил GoIP4 СМС сервер):

#!/usr/bin/php
<?php

$mysql_host="192.168.1.5";
$mysql_user="TEXT";
$mysql_password="TEXT";
$mysql_base="abills";

$db=mysqli_connect($mysql_host, $mysql_user, $mysql_password, $mysql_base);
mysqli_query($db, "SET NAMES 'utf8'");

$Result = mysqli_query($db,
"
SELECT im.uid, uc.value, b.deposit, im.activate, tp.month_fee
FROM internet_main im
LEFT JOIN users u ON (im.uid = u.uid)
LEFT JOIN users_pi u_pi ON (im.uid = u_pi.uid)
LEFT JOIN bills b ON (u.bill_id= b.id)
LEFT JOIN tarif_plans tp ON (tp.tp_id = im.tp_id)
LEFT JOIN users_contacts uc ON (im.uid = uc.uid)
WHERE im.tp_id NOT IN(1,2,4,8,9,10,39,63,64,65,106,107,109,110,114,117,118,119)
AND uc.type_id=1
AND DATEDIFF(CURDATE(), im.activate) = 27
AND b.deposit+u.credit< tp.month_fee
AND u.reduction=0
AND u.company_id=0
AND u_pi._actual_mob=1;
"
);

while($Row = mysqli_fetch_array($Result))
{
$uid = $Row['uid'];
$phone =$Row['value'];
$deposit = intval($Row['deposit']);
$activate = $Row['activate'];
$date_end = date("d-m", strtotime("$activate +30 days"));
$fee = intval($Row['month_fee']);

$phone_length=strlen($phone);

if($phone_length==10)
{
$mess_ = "Інтернет відключиться $date_end. На рах. $deposit грн, тариф $fee. КОМПАНІЯ";
$mess =  rawurlencode($mess_);

print("$phone           $mess_\n");

$r = file_get_contents("http://192.168.1.55/goip/en/dosend.php?USERNAME=text&PASSWORD=text&smsprovider=3&goipname=lifecell&smsnum=$phone&method=2&Memo=$mess");
mysqli_query($db, "INSERT INTO sms VALUES(NULL, '$uid', '$phone', NOW(), '$mess_', '$activate')");
}
}
?>

Таблицы «_actual_mob» в стандартной базе данных abills нету, я создал дополнительное поле с checkbox, которым можно отметить актуальность мобильного телефона в учетной записи пользователя, 1 — актуален, 0 — по умолчанию нет.
Можно также добавить еще SQL запрос удаляющий старые записи, например старее 1 года.

Для логов отправленных СМС я создал такую таблицу в базе ABillS:

CREATE TABLE IF NOT EXISTS `sms` (
  `id` mediumint(254) NOT NULL AUTO_INCREMENT,
  `uid` mediumint(254) NOT NULL,
  `phone` varchar(32) NOT NULL,
  `datetime` datetime NOT NULL,
  `text` varchar(254) NOT NULL,
  `activate` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=384 DEFAULT CHARSET=utf8 COMMENT='Sms log';

В дальнейшем можно посмотреть содержимое таблицы через модуль rwizard или меню Настройка — SQL Commander:

SELECT * FROM sms LIMIT 500

Я использую Zabbix для мониторинга, по этому я еще открыл конфигурацию Zabbix агента:

/etc/zabbix/zabbix_agentd.conf

И добавил параметр:

UserParameter=sms_sent_today,mysql -u root -e "SELECT count(*) FROM abills.sms WHERE datetime LIKE '`date +%Y-%m-%d`%';" -s -N

И добавил элемент данных с интервалом 12 часов, тригггер предупреждающий о превышении нормы отправленных смс, и график на Zabbix сервере, чтобы видеть на графике сколько СМС отправляется ежедневно.

Смотрите также мои статьи:
Скрипт отправки СМС через Goip4 шлюз
Установка и настройка GoIP СМС-сервера
SQL запросы для ABillS

Did my article help you? How about buying me a cup of coffee as an encouragement? Buy me a coffe.

Оставьте комментарий

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