Topic: автоматическая отправка смс

Добрый день!
Подскажите, возможно, и если да то как, реализовать автоматическую отправку смс при сохранении записи в таблице, с данными из определённых полей этой записи?

2 (edited by sibprogsistem 2019-06-26 13:39:18)

Re: автоматическая отправка смс

Petr wrote:

Добрый день!
Подскажите, возможно, и если да то как, реализовать автоматическую отправку смс при сохранении записи в таблице, с данными из определённых полей этой записи?

скажите падробнее что от куда и куда нужно и если есть проек прикрепите

Re: автоматическая отправка смс

Ок. Подробнее.
Например: есть таблица "приход" со столбцами "дата", "поставщик", "вес".
Добавляем строку и после нажатия кнопки с функцией "сохранить запись" на телефон уходит смс содержащая "поставщик" и "вес".

4 (edited by sibprogsistem 2019-06-26 14:42:02)

Re: автоматическая отправка смс

Petr wrote:

Ок. Подробнее.
Например: есть таблица "приход" со столбцами "дата", "поставщик", "вес".
Добавляем строку и после нажатия кнопки с функцией "сохранить запись" на телефон уходит смс содержащая "поставщик" и "вес".

ясно,вот нечто подобное из моего проекта...
надеюсь поможет

//***********************************************************************************************
//передача смс сообщения в зависимости от выбора смс оператора***********************************
//***********************************************************************************************
    function Switchsms(smessage, SMS: string): boolean;
var
    ini : TInifile;
    ClickatellCom :TClickatellCom;
    TurboSmsUa :TTurboSmsUa;
    s, sResult, sLog, SMSPhone, SMSMessage,r: string;
    xml: string;
    slParam: TStringList;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
    SMSLogin:=ini.ReadString('senderlog','SMSLogin','');  // получаем логин
    SMSPassword:=ini.ReadString('senderlog','SMSPassword','');  // получаем пароль
    SMSAPI_ID:=ini.ReadString('senderlog','SMSAPI_ID','');  // получаем  required
    SMSSender:=ini.ReadString('senderlog','SMSSender','');  // получаем подпись отправителя
    SMSPhone:=SQLEXecute('SELECT telephonClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);  // получаем номер
    SMSMessage:= smessage;  // получаем сообщение
    try
      //если выбран смс оператор epochta
      if SMS = 'epochta' then
        begin
            sResult := SendSMS(SMSLogin, SMSPassword, SMSSender, SMSPhone, SMSMessage); // авторизация и отправка смс
            showmessage(sresult);
        end;
      //если выбран смс оператор turbosms
      if SMS = 'turbosms' then
         begin
            TurboSmsUa := TTurboSmsUa.Create;
            sLog := TurboSmsUa.Auth(SMSLogin, SMSPassword);  // авторизация
            sLog := TurboSmsUa.SendSMS(SMSSender, SMSPhone, SMSMessage); // отправка смс
            showmessage(sLog);
         end;
       //если выбран смс оператор turbosms  
       if SMS = 'Clickatel' then
          begin
           ClickatellCom := TClickatellCom.Create;
           s := ClickatellCom.SendSMS(SMSLogin, SMSPassword, SMSAPI_ID, SMSPhone, SMSMessage);// авторизация и отправка смс
           showmessage(s);
          end;
    finally
        ini.Free;
        ClickatellCom.Destroy;
        TurboSmsUa.Destroy;
    end;
end;

//***********************************************************************************************
//выбор смс сообщения в соотвествии с настройками************************************************
//***********************************************************************************************
function smstr(str: string): string;
var
ini,langIni,inir:TiniFile;
s,t,strshow,sS,sDl,sNM,sAM:string;
sFirstName:string = SQLEXecute('SELECT firstNameClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sTwoName:string = SQLEXecute('SELECT twoNameClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sLastName:string = SQLEXecute('SELECT lastNameClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sModel:string = SQLEXecute('SELECT model FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sSN:string = SQLEXecute('SELECT serialNamber FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sTO:string = SQLEXecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment LEFT OUTER JOIN servise ON TypeOfEquipment.id=servise.id_TypeOfEquipment WHERE servise.id=' +frmServiceCen.tgList.sqlValue);
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  inir :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  strshow:=inir.ReadString('lang','directlang', '');
  langIni:=TIniFile.Create(ExtractFilePath (ParamStr (0))+ strshow);
  sS:= SQLExecute('SELECT IFNULL(SUM(sumInPrice.inPrice),0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
  sDl:= IntToStr(SQLExecute('SELECT IFNULL(SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff),0)-"'+sS+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
  sAM:=inir.ReadString('othersetting','AdressMas','');
  sNM:=inir.ReadString('othersetting','NameMas','');
  try
   //если нажата кнопка отправки сообщения в форме frmServiceCen
   if (str='frmServiceCen') then begin
         //загрузить статус оборудования
         t:=SQLEXecute('SELECT id_status FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
              //если статус оборудования * и сообщение включно то вернуть в результат текст сообщения %0:s
              if (t='1')  then begin
                         if (ini.ReadString('smstr','et','')='1')  then  result:= Format (langIni.ReadString('smstr','et',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sNM,sAM,sNM,sTO] )else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='2')  then begin
                         if (ini.ReadString('smstr','etd','')='1')  then  result:=Format (langIni.ReadString('smstr','etd',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='3')  then begin
                         if (ini.ReadString('smstr','dr','')='1')  then  result:=Format (langIni.ReadString('smstr','dr',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='4')  then begin
                         if (ini.ReadString('smstr','epae','')='1')  then  result:=Format (langIni.ReadString('smstr','epae',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='5')  then begin
                         if (ini.ReadString('smstr','eur','')='1')  then  result:=Format (langIni.ReadString('smstr','eur',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='6')  then begin
                         if(ini.ReadString('smstr','eaatic','')='1')  then  result:=Format (langIni.ReadString('smstr','eaatic',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] )else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
            end;
     //если нажата кнопка отправки сообщения в форме frmMasterWork
     if (str='frmMasterWork') then begin
         //загрузить статус оборудования
         t:=SQLEXecute('SELECT id_status FROM servise WHERE id=' +IntToStr(frmMasterWork.tgListServise.dbItemID));
              //если статус оборудования * и сообщение включно то вернуть в результат текст сообщения
if (t='1')  then begin
                         if (ini.ReadString('smstr','et','')='1')  then  result:=Format (langIni.ReadString('smstr','et',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='2')  then begin
                         if (ini.ReadString('smstr','etd','')='1')  then  result:=Format (langIni.ReadString('smstr','etd',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='3')  then begin
                         if (ini.ReadString('smstr','dr','')='1')  then  result:=Format (langIni.ReadString('smstr','dr',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='4')  then begin
                         if (ini.ReadString('smstr','epae','')='1')  then  result:=Format (langIni.ReadString('smstr','epae',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='5')  then begin
                         if (ini.ReadString('smstr','eur','')='1')  then  result:=Format (langIni.ReadString('smstr','eur',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='6')  then begin
                         if(ini.ReadString('smstr','eaatic','')='1')  then  result:=Format (langIni.ReadString('smstr','eaatic',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] )else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
            end;
      finally
    end;
ini.free;
inir.free;
LangIni.free;

end;

//***********************************************************************************************
//кнопка передачи смс сообщения******************************************************************
//***********************************************************************************************
procedure frmServiceCen_bsmsout_OnClick (Sender: TObject; var Cancel: boolean);
var
smsini:TInifile;
smsmessage: string;
begin
smsini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
//если смс оператор выбран
   if smsini.ReadString('sender', 'sendersms', '') <> '' then begin
    //вызвать функцию smstr и получить текст смс сообщения
    smsmessage:=smstr('frmServiceCen');
     // если есть текст в смс сообщении
     showmessage(smsmessage);
     if smsmessage<>'' then begin
       //передать в функцию Switchsms текст смс и имя оператора
       if smsini.ReadString('sender', 'sendersms', '') = 'epochta' then Switchsms (smsmessage,'epochta') else
       if smsini.ReadString('sender', 'sendersms', '') = 'turbosms' then Switchsms (smsmessage,'turbosms') else
       if smsini.ReadString('sender', 'sendersms', '') = 'Clickatel' then Switchsms (smsmessage,'Clickatel');
    end;
  //если смс оператор не выбран
  end else  MessageBox(mess33, mess32, MB_OK+MB_ICONINFORMATION);
end;

Re: автоматическая отправка смс

спасибо!
сложновато для меня конечно... но попробую разобраться)

Re: автоматическая отправка смс

vovka3003 wrote:

Можно отправлять e-mail, а на телефоне настроить уведомление в браузере или почтовике. Ещё, как вариант - телеграмм бот. Вроде в 21-м веке живём, а СМС-провайдеры все равно звереют с ценниками на СМС...

ааа... спасибо! это наверное и правда для меня приемлемей будет! не знаю почему на смс зациклился)
порою форум сейчас.
если есть пример для моего случая буду благодарен за наводку!)

Re: автоматическая отправка смс

спасибо!!!

Re: автоматическая отправка смс

Пример

// https://www.clickatell.com/register/
// Select: Developers' Central
// Type Api: HTTP

const
    SMSLogin = '';    // required
    SMSPassword = ''; // required
    SMSAPI_ID = '';   // required
    SMSSender = '';   // optional    https://www.clickatell.com/product-help/developers-central/sender-id-guide/

procedure frmAbonent_bSave_OnAfterClick (Sender: TObject);
var
    ClickatellCom :TClickatellCom;
    sMessage: string;
begin
    ClickatellCom := TClickatellCom.Create;

    sMessage := '';
    sMessage := 'Firstname: ' + frmAbonent.edFirstName.Text + #13#10+
                'Lastname: ' + frmAbonent.edLastName.Text;

    if sMessage <> '' then
    begin
        s := ClickatellCom.SendSMS(SMSLogin, SMSPassword, SMSAPI_ID, sPhone, sMessage);
    end;

    ClickatellCom.Destroy;
end;
Dmitry.

Re: автоматическая отправка смс

спасибо!!!

Re: автоматическая отправка смс

vovka3003 wrote:

С мылом попроще. Вот пример: http://myvisualdatabase.com/forum/viewt … 516#p31516
Как настроить уведомлялку на телефоне - вопрос гугления (у меня хром стреляет из пушки в фоновом режиме при получении письма на Яндекс)

встроил себе. всё отлично работает! еще раз спасибо!!!