сценарий для отправки SMS, E-mail, или на экран iPhone

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение Vovix » Пн сен 28, 2015 1:47 pm

Хочу поделиться своей наработкой, в принципе ни чего особенного
просто удобный, как мне кажется, сценарий который передает сообщения пользователю
тремя возможными путями (при чем кому передать можно просто указать именем пользователя или его прозвищем):

1) Через SMS - используется специальный адрес e-mail(в моем случае МЕГАФОН) привязанный к номеру
2) Просто письмо на электронную почту
3) Выдача сообщения непосредственно на экран iPhone или iPad (используется доп.библиотека: http://majordomo.smartliving.ru/forum/v ... one#p16175)

Вызов скрипта:

Код: Выделить всё

runScript('send_mes', array('to'=>$to,'subj'=>$subj,'msg'=>$msg,'what'=>$what)); 
где:
$to - это переменная со значением "Кому отправить" (при этом можно указать как ИМЯ или прозвище, так и адрес эл.почты)
$subj - тема сообщения (не обязательно)
$msg - сам текст сообщения
$what - что передать (чем), возможные значения: SMS, Email, iPhone

Необходимые условия:
Используются объекты из класса "Users"
задействованные (необходимые) свойства для объектов:
"altName" - альтернативные имена (корни имен) через запятую, возможно и в дательном падеже
"fullName" - имя пользователя (основное имя)
"AppleID" - AppleID пользователя в iCloud
"AppleDevNum" - номер устройства Apple соответствующего например iPhone (если имеем несколько устройств Apple)
"ApplePass" - пароль к AppleID пользователя в iCloud. У меня храниться в закодированном виде: http://habrahabr.ru/post/61309/ файл с функцией добавлен в библиотеку на сервер (каталог lib)
"Email" - основной адрес электронной почты пользователя
"gender" - пол пользователя одной буквой
"sms2email" - адрес электронной почты для отправки SMS

Вот сценарий "send_mes" с комментариями:
send_mesПоказать

Код: Выделить всё

/*
* Сценарий 'send_mes' для MajorDoMo 
* автор: Владимир Попов, на форуме - Vovix 
* дата последнего изменения: 30.09.2015 
* runScript('send_mes', array('to'=>$хххх,'subj'=>$yyyy,'msg'=>$zzzz,'what'=>$qqqq)) 
*/

// кому отправить, просто имя или адрес e-mail включающий знак "@" (при пустом = "admin")
$user_to=($params['to']=='') ?  "admin" : $params['to'];

// тема сообщения (при пустом = "Alice! Smart Home system")
$subject=($params['subj']=='') ?  "Alice! Smart Home system" : $params['subj'];

// текст сообщения (при пустом = "проверка связи")
$msg=($params['msg']=='') ?  "проверка связи" : $params['msg'];

// что будем отправлять (через что): SMS, Email, iPhone
$what=($params['what']=='') ?  "iPhone" : $params['what'];

// константы для e-mail отправок
$from = "admin@mdm.vovix";
$sms2email='';

// присваеваем первоначальные НЕИЗВЕСТНЫЕ значения, на всякий случай
$fullName='unknown';
$user='unknown';
$gender='unknown';

// вариант №1
// проверим встречается ли символ '@' в кому отправить, т.е. указан ли конкретный e-mail?? 
// если не встретилось или это первый символ, то будем определять среди своих пользователей
// $podstr1=strpos($user_to, '@');
// if (($podstr1===false)||($podstr1=='0')) {
    
// вариант №2
// проверим НЕ указан ли именно e-mail    
if (!preg_match("/^[a-zA-Z0-9\-\._]+@[-a-zA-Z0-9\-]+\.[-a-zA-Z0-9\-\.]+$/i", $user_to)) {
    
    // определяем массив значений альтернативных имен 
    $altNameArray=array();
    
    // переберем всех пользователей
    $objects=getObjectsByClass("Users");
    foreach($objects as $obj) {
        // проверим, может это главное имя и перебирать альтернативы тогда не надо? 
        if (gg($obj['TITLE'].".fullName")==$user_to) {
            $fullName=gg($obj['TITLE'].'.fullName');
            $sms2email=gg($obj['TITLE'].'.sms2email');
            $user=$obj['TITLE']; 
        } else {
            // присвоим
            $altName=gg($obj['TITLE'].".altName");
            // имена разделены запятой
            $altNameArray = explode(",",$altName);
            $len=count($altNameArray);
            // в цикле проверяем вхождение альтернативных имён
            for($j=0;$j<$len;$j++) {
                $podstr2=strpos($user_to, $altNameArray[$j]);
                if ($podstr2===false) {
                    // тут нет таких
                  } else {
                    // вот нашли
                    $fullName=gg($obj['TITLE'].'.fullName');
                    $sms2email=gg($obj['TITLE'].'.sms2email');
                    $user=$obj['TITLE'];
                } 
            }
        }
    }
}

// проверим ЧТО будем отправлять
switch ($what): 
    
    // SMS
    case 'SMS':
    case 'sms':
    case 'СМС':
    case 'смс':
    
        if ($user<>'unknown') {
            say ("Отправляю SMS сообщение. Кому: ".$user_to.". Текст сообщения: ".$msg.". Получатель мне известен как: ".$fullName,1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject); 
            SendMail($from, $sms2email, $subject, $message);
        } else if (!($podstr1===false)||!($podstr1=='0')) {
            say ("Я попытаюсь отправить SMS сообщение посредством e-mail. Кому: ".$user_to.". Текст сообщения: ".$msg.". Но с получателем я видимо не знакома и не уверена в представленном вами e-mail адресе.",1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject); 
            SendMail($from, $user_to, $subject, $message);   
        } else {
            say ("Увы, отправить СМС не получиться, такого адреса: ".$user_to." я ,видимо, не знаю.",1);
        }
    break;
    
    // Email
    case 'Email':
    case 'E-mail':
    case 'еmail':
    case 'e-mail':
    case 'письмо':
        if (($user<>'unknown')&&(gg($user.'.Email')<>'')) {
            say ("Отправляю e-mail. Кому: ".$user_to.". Текст письма: ".$msg.". Получатель мне известен как: ".$fullName,1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject);
            SendMail($from, gg($user.'.Email'), $subject, $message);
        } else if (($user<>'unknown')&&(gg($user.'.Email')=='')) {
            $fullName=gg($user.'.fullName');
            $gender=gg($user.'.gender');
            $ending1=($gender<>'ж') ? 'ен' : 'на';
            $pronoun1=($gender<>'ж') ? 'его' : 'её';
             say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." электронном адресе.",1);
        } else {
            say ("Я попытаюсь отправляю e-mail на адрес: ".$user_to.". Текст письма: ".$msg.". Но с получателем я видимо не знакома и не уверена в представленом вами e-mail адресе.",1);
            $message = iconv("UTF-8", "WINDOWS-1251", $msg);
            $subject = iconv("UTF-8", "WINDOWS-1251", $subject); 
            SendMail($from, $user_to, $subject, $message);   
        }
    break;
    
    // iPhone
    case 'iPhone':
    case 'Iphone':
    case 'IPhone':
    case 'iphone':
    case 'телефон':
        if (($user<>'unknown')&&(gg($user.'.AppleID')<>'')) {
            $fullName=gg($user.'.fullName');
            $AppleID=gg($user.'.AppleID');
            $ApplePass=dsCrypt(gg($user.'.ApplePass'),true);
            $gender=gg($user.'.gender');
            $AppleDevNum=(gg($user.'.AppleDevNum')=='') ?  0 : gg($user.'.AppleDevNum');
            // особенность наше сообщение передадим как тему, так лучше на экране выглядит
            $subject=$msg;
            soundToMyiPhone($AppleID, $ApplePass, $subject, $AppleDevNum);
            say ("На iPhone, пользователя: ".$fullName.", отправлен сигнал и текст на экран.",1);
        } else if (($user<>'unknown')&&(gg($user.'.AppleID')=='')) {
            $fullName=gg($user.'.fullName');
            $gender=gg($user.'.gender');
            $ending1=($gender<>'ж') ? 'ен' : 'на';
            $pronoun1=($gender<>'ж') ? 'его' : 'её';
             say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." Ай Фон Ай Ди.",1);
        } else {
            say ("Не понятно на чей Ай Фон нужно отправить сигнал. Видимо я ".$user_to." пока не знаю!",1); 
        }
    break;
    
    // не понятно что
    default:
        say ("Тут какая-то ошибка с каналом отправки сообщения. ".$what." - такой вариант отправки мне не известен.",1);
endswitch;
 
Последний раз редактировалось Vovix Ср сен 30, 2015 8:53 am, всего редактировалось 1 раз.
За это сообщение автора Vovix поблагодарил:
Amarok (Вт сен 29, 2015 5:42 am)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение Amarok » Вт сен 29, 2015 5:45 am

А про $gender подробнее можно? Где и как используется?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение Vovix » Вт сен 29, 2015 1:11 pm

Amarok писал(а):А про $gender подробнее можно? Где и как используется?
Да конечно!
У меня просто используется это тут например:

Код: Выделить всё

$fullName=gg($user.'.fullName');
$gender=gg($user.'.gender');
$ending1=($gender<>'ж') ? 'ен' : 'на';
$pronoun1=($gender<>'ж') ? 'его' : 'её';
say ("Пользователь ".$fullName." мне извест".$ending1.", но у меня нет данных о ".$pronoun1." электронном адресе.",1);
т.е. окончания и местоимения во фразе Алисы зависят от пола!
За это сообщение автора Vovix поблагодарил:
Amarok (Вт сен 29, 2015 3:08 pm)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение adzam » Ср мар 30, 2016 12:34 pm

Я все делал согласно инструкции с первого поста

команду отсылаю
runScript('send_mes', array('to'=>'Vitalii','subj'=>$subj,'msg'=>$msg,'what'=>'Email'));

получаю в чат сообщение
12:29 Алиса: Отправляю e-mail. Кому: Vitalii. Текст письма: проверка связи. Получатель мне известен как: Vitalii

и это все казалось бы сообщение должно уйти, но не уходит или не доходит.
Может еще надо добавить что-то библиотеку там или прогу какую-то подскажите пож. буду премного благодарен.
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение Vovix » Ср мар 30, 2016 5:29 pm

adzam писал(а):Я все делал согласно инструкции с первого поста

команду отсылаю
runScript('send_mes', array('to'=>'Vitalii','subj'=>$subj,'msg'=>$msg,'what'=>'Email'));

получаю в чат сообщение
12:29 Алиса: Отправляю e-mail. Кому: Vitalii. Текст письма: проверка связи. Получатель мне известен как: Vitalii

и это все казалось бы сообщение должно уйти, но не уходит или не доходит.
Может еще надо добавить что-то библиотеку там или прогу какую-то подскажите пож. буду премного благодарен.
Проблема в неработающей по умолчанию функции SendMail!
над ней приходится шаманить! У меня реализовано через организацию почтового сервера непосредственно на localhost!
(как делал уже не помню, будет время посмотрю у себя)

Здесь в форумах можно найти варианты реанимации функции SendMail
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение adzam » Вт апр 19, 2016 1:21 pm

Vovix писал(а):
adzam писал(а):Я все делал согласно инструкции с первого поста

команду отсылаю
runScript('send_mes', array('to'=>'Vitalii','subj'=>$subj,'msg'=>$msg,'what'=>'Email'));

получаю в чат сообщение
12:29 Алиса: Отправляю e-mail. Кому: Vitalii. Текст письма: проверка связи. Получатель мне известен как: Vitalii

и это все казалось бы сообщение должно уйти, но не уходит или не доходит.
Может еще надо добавить что-то библиотеку там или прогу какую-то подскажите пож. буду премного благодарен.
Проблема в неработающей по умолчанию функции SendMail!
над ней приходится шаманить! У меня реализовано через организацию почтового сервера непосредственно на localhost!
(как делал уже не помню, будет время посмотрю у себя)

Здесь в форумах можно найти варианты реанимации функции SendMail
Помогите мне оживить эту функцию, ну никак не запускается, уже весь мозг высушил и не могу победить ее!
Может кто обьяснит или какую-то инструкцию сделает ну типа для чайников?
Спасибо за любой ответ.
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
ToteMeiSter
Сообщения: 54
Зарегистрирован: Пн ноя 09, 2015 5:42 pm
Благодарил (а): 7 раз
Поблагодарили: 3 раза

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение ToteMeiSter » Чт апр 21, 2016 8:32 am

А чем телеграмм не устраивает, оперативно отправляет все согласно приоритету.

Отправлено с моего 2013023 через Tapatalk
kozsv
Сообщения: 38
Зарегистрирован: Пт дек 11, 2015 9:26 pm
Благодарил (а): 8 раз
Поблагодарили: 3 раза

Re: сценарий для отправки SMS, E-mail, или на экран iPhone

Сообщение kozsv » Ср авг 03, 2016 4:39 pm

Отвечу я чем телеграм не устраивает, я как и тот кто написал пост в место платных сервисов смс использую почту мегафона для отправки себе на телефон смс через почту вида login@megafon.ru (примерно так), для случаев когда на телефоне нет интернете придёт смс оповещение о важном событии. Наверно по этому платят платным сервисам за смс. И мне тоже хочется чтоб это за работало щас попробую.
Ответить