Kako poslati SMS iz C#.Net

Za slanje SMS-a iz C#.Net imate nekoliko opcija. Možete koristiti C# SMS API biblioteku Ozeki-a, ili možete koristiti HTTP zahtjeve. Za slanje tekstualne poruke u C#.Net najbolja opcija ovisi o vrsti C# projekta koji koristite. Ako pišete kod za servisiranje web zahtjeva, kao što je C# na ASP web stranici, trebali biste koristiti HTTP zahtjeve. Ako kreirate desktop aplikaciju, Windows servis ili mobilnu aplikaciju za Android ili iPhone, najbolje je koristiti C# SMS API biblioteku. Ovaj vodič (Slika 1) fokusira se samo na slanje SMS-a. Ako trebate i slati i primati, možete početi čitanjem vodiča Najbolji C# SMS API u 2025.

Kako poslati SMS iz C#.Net
Slika 1 - Kako poslati SMS iz C#.Net

Preuzmite C# SMS API biblioteku (besplatni izvorni kod)

Potpuno funkcionalan primjer C# SMS API-a možete preuzeti sa sljedećeg URL-a. Ovaj kod je dostupan besplatno i možete ga slobodno mijenjati i redistribuirati.

Preuzimanje: OzekiConsole.zip (51 Kb)

Kako poslati SMS iz C# desktop aplikacije

Slanje tekstualne poruke iz desktop aplikacije (ili konzolne aplikacije ili Windows servisa) ima drugačije zahtjeve u odnosu na slanje SMS-a s web stranice. Desktop aplikacija radi duži vremenski period (mnogo minuta, dana ili čak tjedana). U ovom slučaju je korisno održavati trajnu vezu s SMS gatewayem. Korištenje jednokratnih web zahtjeva nije dobar izbor za ove aplikacije. Najveća prednost održavanja trajne veze je što dobivate informacije o događajima isporuke poruka, kao što su izvještaji o podnošenju, izvještaji o isporuci i neuspjesi u isporuci SMS-a.

Za slanje SMS-a iz C# desktop aplikacije prvo koristite navedeni primjer (kao što možete vidjeti na Slici 2):

  1. Povežite se s Ozeki SMS gatewayem koristeći ozx korisničko ime i lozinku koje ste kreirali u korisničkom sučelju SMS gatewaya. Za povezivanje koristite naredbu "connect hostname:port username password".
  2. Pošaljite svoju tekstualnu poruku. To možete učiniti upisivanjem "send brojtelefona tekst poruke" ako koristite primjer konzolne aplikacije za slanje.
  3. Pričekajte izvještaje o podnošenju SMS-a i izvještaje o isporuci. Možete primijetiti da su ti izvještaji ispisani na ekranu i da sadrže isti ID poruke koji je vraćen kada ste poslali SMS.

Primjer konzolne aplikacije napisane u C#.Net. Izvorni kod ove konzolne aplikacije dostupan je na stranici C# SMS API s izvornim kodom.

primjeri csharp sms api
Slika 2 - Kako poslati SMS iz C# sms api

Gornji primjer pokazuje vam potrebne korake. Možete vidjeti da se prvo uspostavlja trajna veza s SMS gatewayem, a nakon toga se šalje poruka. Na kraju vidite izvještaj o prihvaćanju poruke i izvještaj o podnošenju poruke.

Za slanje SMS-a iz C#, koristite sljedeći izvorni kod:

  • Client = new OzxClient();
  • Client.AutoReconnect = true;
  • Client.Connect("127.0.0.1", 9518, "testuser", "testpassword");
  • Client.Connect("127.0.0.1", 9518, "testuser", "testpassword");
  • Client.Send(new OzxMessage() {ToAddress="+36111111",Text="Ovo je tekst za slanje iz C#"});

Kada postavite svojstvo Client.Autoconnect na true, osiguravate da će se klijent ponovno spojiti na SMS gateway čak i ako je mrežna veza privremeno izgubljena ili ako je SMS gateway restartiran.

Za primanje izvještaja o isporuci SMS-a u C#, morate se prijaviti za događaje:

  • Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
  • Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
  • Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
  • Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
  • Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
  • Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;

Ovi događaji će se aktivirati kada SMS gateway pošalje odgovarajuće izvještaje preko trajne veze koju smo kreirali koristeći connect. Ovo je najveća prednost korištenja trajne veze. Dobivate trenutne obavijesti o ovim događajima vezanim uz isporuku SMS-a. Takve obavijesti je teško dobiti ako koristite HTTP SMS api. S druge strane, ove informacije su ključne za svaki posao, i morate ih obraditi kako biste izgradili dobar SMS softver.

Kakve vrste izvješća o isporuci SMS-ova pruža C# SMS API?

C# SMS API vraća pet vrsta izvješća o isporuci SMS-ova. Oni su predstavljeni kao C# događaji. To su: događaj prihvaćanja SMS-a, događaj neprihvaćanja SMS-a, događaj uspješnog slanja SMS-a, događaj neuspješnog slanja SMS-a, događaj uspješne isporuke SMS-a i događaj neuspješne isporuke SMS-a.

Događaj prihvaćanja SMS-a: Događaj prihvaćanja SMS-a pokreće se kada Ozeki SMS gateway prihvati SMS za isporuku i stavi ga u outbox korisničkog računa.

Događaj neprihvaćanja SMS-a: Događaj neprihvaćanja SMS-a pokreće se ako Ozeki SMS gateway ne prihvati SMS za isporuku. To se može dogoditi, na primjer, ako korisniku ponestane SMS kredita, ili je disk pun ili se dogodi neka druga pogreška u SMS gatewayu.

Događaj uspješnog slanja SMS-a: Događaj uspješnog slanja SMS-a pokreće se kada je SMS uspješno isporučen mobilnoj mreži. Mobilna mreža vraća izvješće o slanju SMS-a, a to izvješće se prosljeđuje C# SMS API klijentu putem uspostavljene veze. Događaj uspješnog slanja SMS-a pokreće se, na primjer, kada SMS pošalje SMPP klijent koji povezuje sustav s mobilnom mrežom putem interneta. Ako šaljete SMS poruke putem android SMS gatewaya, ovaj se događaj događa kada SMS pošalje SMS modem ugrađen u android telefon. Ako šaljete SMS putem standardnog GSM modem poola koji je spojen na vaš poslužitelj podatkovnim kabelom, događaj se pokreće kada modem vrati 1-bajtni referentni kod uspješnog slanja kao odgovor na AT+CMGS naredbu modema.

Događaj neuspješnog slanja SMS-a: Događaj neuspješnog slanja SMS-a događa se ako SMS nije mogao biti poslan iz bilo kojeg razloga u mobilnu mrežu od strane Ozeki SMS gatewaya. Na primjer, ako je internetska veza koju koristi SMPP klijent za vezu s mobilnom mrežom isključena ili ako SMPP poslužitelj vrati SMPP poruku o pogrešci prilikom slanja SMS-a. Ako šaljete SMS poruke putem android SMS gatewaya, a android mobilni telefon nema kredita ili telefon nije registriran u mobilnoj mreži, također ćete primiti ovaj događaj. Također je moguće da tablica usmjeravanja SMS-ova nije pravilno konfigurirana. Pogreška pri slanju SMS-a može se dogoditi i ako koristite GSM modem za isporuku SMS-ova i ako je podatkovni kabel između modema i računala isključen ili oštećen. U svim tim slučajevima imat ćete poruku o pogrešci u Event Args priloženom ovom događaju kako biste dobili ideju što bi mogao biti razlog neuspjeha slanja SMS-a.

Događaj uspješne isporuke SMS-a: Događaj uspješne isporuke SMS-a poziva se kada je SMS uspješno isporučen na primateljev telefon. U tom slučaju mobilna mreža vraća izvješće o isporuci SMS-a SMS gatewayu. Izvješće o isporuci SMS-a sadrži vremensku oznaku isporuke i statusni kod uspješne isporuke. SMS gateway prosljeđuje te informacije C# SMS API-ju. Kada primite događaj izvješća o isporuci SMS-a u C#-u, možete biti sigurni da je primatelj primio vaš SMS.

Događaj neuspješne isporuke SMS-a: Izvješće o isporuci SMS-a u C#-u može se obraditi pomoću događaja neuspješne isporuke SMS-a ako izvješće o isporuci sadrži statusni kod neuspješne isporuke. To se može dogoditi, na primjer, ako mobilni telefon na koji je SMS poslan nikada nije uključen. Ovaj se događaj rijetko događa jer većina mobilnih mreža ne vraća negativna izvješća o isporuci.

Pošalji SMS putem C# SMS API-ja (besplatni izvorni kod)

Za slanje SMS-a iz C#-a koristite sljedeći izvorni kod. Ovaj izvorni kod možete slobodno mijenjati i redistribuirati. Imajte na umu da također možete slobodno mijenjati i redistribuirati izvorni kod C# SMS API biblioteke u projektu Ozeki.Libs.Ozx.

using System;
using OZX;

namespace OzekiConsoleClient
{
    class Program
    {
        static OzxClient Client;

        static void Main(string[] args)
        {
         	Client = new OzxClient();
            Client.AutoReconnect = true;

            Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
            Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
            Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
            Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
            Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
            Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;
            Client.OnMessageViewed += Client_OnMessageViewed;
            Client.OnConnected += Client_OnConnected;
            Client.OnDisconnected += Client_OnDisconnected;
        
            Client.Connect("127.0.0.1",9580,"testuser","testpass");
        }

        static void Client_OnConnected(object sender, EventArgs e)
        {
            Console.WriteLine("Successfully connected.");
            
            var msg = new OzxMessage();
            msg.ToAddress = recipient;
            msg.Text = message;

            Console.WriteLine("Sending message. ID: "+msg.ID);
            Client.Send(msg);
        }

        static void Client_OnDisconnected(object sender, OzxArgs< string > e)
        {
            Console.WriteLine("Connection closed. Reason: " + e.Item.ToString());
        }

        static void Client_OnMessageAcceptedForDelivery(object sender, OzxArgs< string > e)
        {
            Console.WriteLine("Message accepted for delivery. ID: " + e.Item.ToString());
        }

        static void Client_OnMessageNotAcceptedForDelivery(object sender, OzxArgs< string, string > e)
        {
            Console.WriteLine("Message rejected. ID: " + e.Item1.ToString()+" Reason: "+e.Item2);
        }

        static void Client_OnMessageSubmitSuccess(object sender, OzxArgs< string, DateTime > e)
        {
            Console.WriteLine("Message submitted. ID: "+e.Item1+" Date: "+e.Item2);
        }

        static void Client_OnMessageSubmitFailed(object sender, OzxArgs< string, DateTime, string > e)
        {
            Console.WriteLine("Message submit failed. ID: " + e.Item1 + " Date: " + e.Item2+" Reason: "+e.Item3);
        }

        static void Client_OnMessageDeliverySuccess(object sender, OzxArgs< string, DateTime > e)
        {
            Console.WriteLine("Message delivered. ID: " + e.Item1 + " Date: " + e.Item2);
        }

        static void Client_OnMessageDeliveryFailed(object sender, OzxArgs< string, DateTime, string > e)
        {
            Console.WriteLine("Message delivery failed. ID: " + e.Item1 + " Date: " + e.Item2 + " Reason: " + e.Item3);
        }

        static void Client_OnMessageViewed(object sender, OzxArgs< string, DateTime > e)
        {
            Console.WriteLine("Message viewed. ID: " + e.Item1 + " Date: " + e.Item2);
        }
    }
}

Kako testirati slanje SMS-a s C#-om

Za testiranje slanja SMS-a u C# SMS API-ju imate dvije opcije: Možete koristiti ugrađenu sms tester vezu ili možete postaviti dva SMS gatewaya kako biste imali realnije okruženje za testiranje. Ako postavite dva SMS gatewaya, prvo morate konfigurirati prvi SMS gateway kao SMPP simulator. Ovaj SMS gateway će pružati SMPP serversku uslugu drugom SMS gatewayu. Radit će na isti način kao što bi radio SMSC mobilnog mrežnog operatera. Drugi SMS gateway će se povezati na prvi koristeći SMPP klijentsku vezu, i pružat će C# SMS API uslugu vašoj C# SMS aplikaciji.

Često postavljana pitanja

Dostavlja li se izvješće o isporuci (onMessageDeliveryFailed) za svaki neuspjeli pokušaj ili se dostavlja samo kada se dostigne maksimalni broj pokušaja?

Poruka ostaje u stanju čekanja dok se ne iscrpe svi pokušaji isporuke.

Je li moguće pohraniti dolazna izvješća o isporuci SMS-a u SQL?

Za primanje izvješća o isporuci vaših SMS poruka, idite na izbornik "Uredi" i odaberite "Postavke poslužitelja." Unutar kartice "Napredno", pronađite potvrdni okvir označen kao "Kopiraj izvješća o isporuci za korisnike" i provjerite je li označen. Ako ste konfigurirali SQL za SMS gateway, dolazna izvješća o isporuci bit će automatski pohranjena u bazi podataka kao standardne dolazne poruke. Evo kako se ažuriraju statusi isporuke:

  • ozekimessageout Tablica i Ažuriranja Statusa: Ako šaljete poruke iz tablice "ozekimessageout", polje "status" automatski prati stanje isporuke svake poruke. Ovo polje se dinamički ažurira kako bi odražavalo sljedeće ishode:
  • deliveredtonetwork: Poruka je uspješno poslana u mrežu.
  • deliveredtohandset: Poruka je isporučena na primateljev telefon.
  • deliveryerror: Došlo je do greške prilikom isporuke.
Ova funkcionalnost pruža praktičan način praćenja statusa isporuke unutar same baze podataka.

More information