toplu sms gönderme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

toplu sms gönderme

Mesaj gönderen erdogan_ozkaya »

Merhaba,



Toplu SMS gönderimi için aşağıdaki kodu kullanıyorum fakat her numaraya tek tek gönderim yapıyor dolayısıyla liste uzayınca programda kasıyor; hızlandırmak için nasıl bir yol izleyebilirim, elinde örnek olan var mı acaba paylaşabilir mi acaba ?


Teşekürler,


Herkese iyi seneler dilerim.

Kod: Tümünü seç

procedure TSMS_GONDER_PENCERE.SPED_BTN_TOPLU_SMSClick(Sender: TObject);
var
 xsml, MESAJ: string;
 degisken: string;
begin
 if (IsConnectedToInternet) then
   if Demo then
     ShowMessage('DEMO UYGULAMADA KULLANAMAZSINIZ.')
   else
   begin
     if (Application.MessageBox('TOPLU SMS GÖNDERİLSİNMİ ?' + #13 + 'ONAYLIYORMUSUNUZ?', 'UYARI!', mb_YesNo + MB_ICONINFORMATION)) = IdYes then
     begin
       if QRY_MUSTERILER.RecordCount < 0 then
         ShowMessage('SMS gönderilecek numara bulunamadı.')
       else if Rz_TOPLU_SMS.Text = '' then
         ShowMessage(' Lütfen mesaj içeriği giriniz.')
       else
       begin
         QRY_MUSTERILER.Prior;
         mmoNUMARALAR.Clear;
         begin
           QRY_MUSTERILER.Open;
           while not QRY_MUSTERILER.Eof do
           begin
             if QRY_MUSTERILER.Fieldbyname('TELEFON').Text <> '' then
               mmoNUMARALAR.Text := mmoNUMARALAR.Text + '<no>' + QRY_MUSTERILER.Fieldbyname('TELEFON').Text + '</no>';
             QRY_MUSTERILER.next;
           end;
         end;


      /// SMS GÖNDER
         DM.R.CloseKey();
         DM.R.RootKey := HKEY_CURRENT_USER;
         DM.R.OpenKey('\Software\EliteSistem\Servis Takip', true);


      MESAJ := Rz_TOPLU_SMS.Lines.Text;
       xsml:='<?xml version="1.0" encoding="UTF-8"?>' +
               '<mainbody><header><company dil="TR">'+DM.R.ReadString('SMS Operatör')+'</company>'+
               '<usercode>'+ DM.R.ReadString('SMS Kullanıcı') + '</usercode>'+
               '<password>'+ DM.R.ReadString('SMS Şifre') + '</password>'+
               '<startdate></startdate>'+
               '<stopdate></stopdate>'+
               '<type>1:n</type>'+
               '<msgheader>' + DM.R.ReadString('SMS Orginatör') + '</msgheader>'+
               '</header>'+
               '<body>'+
               '<msg><![CDATA['+MESAJ+' '+ DM.R.ReadString('SMS Mersis No') + ']]></msg>'+
                mmoNUMARALAR.Text +
             //  '<no>' + mmoNUMARALAR.Text + '</no>'+
               '</body>'+
               '</mainbody>';
         if not uUtils.XmlPost.XMLPOST(DM.SMS_URL, xsml, degisken) then
         begin
           // eğer hata veriecek ise burada verilecek
         end;


       if degisken='20'
       then ShowMessage('    Mesaj Metninde boş olmasından veya maksimum mesaj karakterini geçildi    ') else
       if degisken='30'
       then ShowMessage('    Kullanıcı bilgisi bulunamadı    ') else
       if degisken='40'
       then ShowMessage('    Geçersiz Mesaj Başlığı (başlık sistem e tanımlanmamış)    ') else
       if degisken='50'
       then ShowMessage('    Yetersiz Kredisi Lütfen Kredi Yükleyiniz    ') else
       if degisken='60'
       then ShowMessage('    Telefon Numarası hiç tanımlanmamış    ') else
       if degisken='70'
       then ShowMessage('    Mesaj Başlığı hatalı    ') else

       end;
     end;
   end;
end;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: toplu sms gönderme

Mesaj gönderen freeman35 »

numaralar arasına virgül yada noktalı virgül koyarak denedin mi? en net cevap gönderdiğin siteye yada bu xml i alan yere sorman olacaktır.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: toplu sms gönderme

Mesaj gönderen erdogan_ozkaya »

Merhaba,

SMS gönderimi ili alakalı değil sorunum, burada tek, tek gönderdiği için sonuncu sms'i gönderene kadar kasıyor daha nasıl hızlandırabilirim acaba?

teşekkürler.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: toplu sms gönderme

Mesaj gönderen ertank »

Merhaba,

SMS gönderim firmalarının API dökümanları olması gerekli. Bu tür firmalar genelde toplu gönderim ve tek tek gönderim için farklı API metodları kullanırlar. Alternatif olarak @freeman35 dediği gibi tek metod içinde iki yöntem desteği veriyor olabilirler. Ancak bu bilgi sadece bu hizmeti veren firmadan alınabilir.

Sizin kullandığınız yöntemde bir defada birden fazla telefon bilgisi iletiyorsunuz. Bu noktada kontrol etmeniz gereken iki nokta var.
A- XML hazırlama süresi nedir?
B- Sunucu iletişim süresi nedir?

Kısacası, sizin XML gönderme işleminizde en uzun süreyi ne alıyor? Neyi düzeltmeniz gerekli? Bunu tespit etmelisiniz.

Mevcut kod ile aklıma gelen iki çözüm var.
1- SMS gönderimini bir thread içinde yaparak ana uygulama donmasını engellemek mümkün. Gönderilemeyen SMS için thread içinden bir event tetikleyerek ana uygulama ile iletişim kurabilirsiniz.
2- SMS gönderimine özel ayrı bir proje geliştirerek SMS gönderme için kendi geliştirdiğiniz bu uygulamayı çalıştırabilirsiniz. Bu yöntemde gönderilemeyen SMS bilgisini almak için yine bir iletişim yönetmi kullanmanız gerekecektir.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: toplu sms gönderme

Mesaj gönderen erdogan_ozkaya »

Hocam İlginiz için Çok Teşekkür Ederim ufak bir satır hatası yapmışım düzeltince anında gönderdi 6000 SMS 2sn gönderdi.


Hata yaptığım satır;
mmoNUMARALAR.Text := mmoNUMARALAR.Text + '<no>' + QRY_MUSTERILER.Fieldbyname('TELEFON').Text + '</no>';

Aşağıdaki gibi güncelledim, düzeldi.
mmoNUMARALAR.Lines.Add('<no>' + QRY_MUSTERILER.Fieldbyname('TELEFON').Text + '</no>');


Kod: Tümünü seç

procedure TSMS_GONDER_PENCERE.SPED_BTN_TOPLU_SMSClick(Sender: TObject);
var
  xsml, MESAJ: string;
  degisken: string;
begin
  if (IsConnectedToInternet) then
    if Demo then
      ShowMessage('DEMO UYGULAMADA KULLANAMAZSINIZ.')
    else
    begin
      if (Application.MessageBox('TOPLU SMS GÖNDERİLSİNMİ ?' + #13
      + 'ONAYLIYORMUSUNUZ?', 'UYARI!', mb_YesNo + MB_ICONINFORMATION)) = IdYes then
      begin
        if QRY_MUSTERILER.RecordCount < 0 then
          ShowMessage('SMS gönderilecek numara bulunamadı.')
        else if Rz_TOPLU_SMS.Text = '' then
          ShowMessage(' Lütfen mesaj içeriği giriniz.')
        else
        begin
          try

         /// SMS GÖNDER
            DM.R.CloseKey();
            DM.R.RootKey := HKEY_CURRENT_USER;
            DM.R.OpenKey('\Software\EliteSistem\Servis Takip', true);
 
            QRY_MUSTERILER.DisableControls; 
              QRY_MUSTERILER.Open; 
            QRY_MUSTERILER.Prior; 
            mmoNUMARALAR.Clear;
            begin
              while not QRY_MUSTERILER.Eof do
              begin
                if QRY_MUSTERILER.Fieldbyname('TELEFON').Text <> '' then
                  mmoNUMARALAR.Lines.Add('<no>' + QRY_MUSTERILER.Fieldbyname('TELEFON').Text + '</no>');
                QRY_MUSTERILER.next;
                caption:='SMS Gönder | Müşteri Sayısı: '+IntToStr(QRY_MUSTERILER.RecordCount); 
              end;
            end;
          finally 
            QRY_MUSTERILER.EnableControls; 

            MESAJ := Rz_TOPLU_SMS.Lines.Text;
            xsml:='<?xml version="1.0" encoding="UTF-8"?>' +
                    '<mainbody><header><company dil="TR">'+DM.R.ReadString('SMS Operatör')+'</company>'+
                    '<usercode>'+ DM.R.ReadString('SMS Kullanıcı') + '</usercode>'+
                    '<password>'+ DM.R.ReadString('SMS Şifre') + '</password>'+
                    '<startdate></startdate>'+
                    '<stopdate></stopdate>'+
                    '<type>1:n</type>'+
                    '<msgheader>' + DM.R.ReadString('SMS Orginatör') + '</msgheader>'+
                    '</header>'+
                    '<body>'+
                    '<msg><![CDATA['+MESAJ+' '+ DM.R.ReadString('SMS Mersis No') + ']]></msg>'+ mmoNUMARALAR.Text +
                  //  '<no>' + mmoNUMARALAR.Text + '</no>'+
                    '</body>'+
                    '</mainbody>'; 
              if not uUtils.XmlPost.XMLPOST(DM.SMS_URL, xsml, degisken) then
              begin
                 
              end; 
                caption:='SMS Gönder ';
          end;

          if degisken='20'
          then ShowMessage('    Mesaj Metninde boş olmasından veya maksimum mesaj karakterini geçildi    ') else
          if degisken='30'
          then ShowMessage('    Kullanıcı bilgisi bulunamadı    ') else
          if degisken='40'
          then ShowMessage('    Geçersiz Mesaj Başlığı (başlık sistem e tanımlanmamış)    ') else
          if degisken='50'
          then ShowMessage('    Yetersiz Kredisi Lütfen Kredi Yükleyiniz    ') else
          if degisken='60'
          then ShowMessage('    Telefon Numarası hiç tanımlanmamış    ') else
          if degisken='70'
          then ShowMessage('    Mesaj Başlığı hatalı    ') else
        end;
      end;
    end;
end;
Cevapla