Cum să trimiți SMS din C#.Net

Pentru a trimite SMS din C#.Net ai mai multe opțiuni. Poți folosi biblioteca C# SMS API de la Ozeki sau poți folosi cereri HTTP. Pentru a trimite un mesaj text în C#.Net, cea mai bună opțiune depinde de tipul de proiect C# pe care îl folosești. Dacă scrii cod pentru a servi cereri web, cum ar fi C# pe o pagină ASP, ar trebui să alegi cererile HTTP. Dacă creezi o aplicație desktop, un serviciu Windows sau o aplicație mobilă pentru Android sau iPhone, cel mai bine este să folosești biblioteca C# SMS API. Acest ghid (Figura 1) se concentrează doar pe trimiterea de SMS. Dacă ai nevoie să faci atât trimitere, cât și primire, poți începe prin a citi mai întâi ghidul Cel mai bun C# SMS API în 2025.

Cum să trimiți SMS din C#.Net
Figura 1 - Cum să trimiți SMS din C#.Net

Descarcă biblioteca C# sms api (cod sursă gratuit)

Un exemplu funcțional complet al C# sms api poate fi descărcat de la următorul URL. Acest cod este oferit gratuit și poate fi modificat și redistribuit liber de către tine.

Descarcă: OzekiConsole.zip (51 Kb)

Cum să trimit SMS dintr-o aplicație desktop C#

Trimiterea unui mesaj text dintr-o aplicație desktop (sau o aplicație consolă sau serviciu Windows) are cerințe diferite față de trimiterea unui SMS de pe un site web. O aplicație desktop rulează pentru o perioadă semnificativă de timp (multe minute, zile sau chiar săptămâni). În acest caz, este benefic să menții o conexiune permanentă la gateway-ul SMS. Folosirea cererilor web one-time fire and forget nu este o alegere bună pentru aceste aplicații. Cel mai mare beneficiu al menținerii unei conexiuni permanente este că primești informații despre evenimentele de livrare a mesajelor, cum ar fi rapoartele de trimitere, rapoartele de livrare și eșecurile de livrare a SMS-urilor.

Pentru a trimite SMS dintr-o aplicație desktop C#, folosește mai întâi exemplul furnizat (după cum poți vedea în Figura 2):

  1. Conectează-te la gateway-ul SMS Ozeki folosind numele de utilizator și parola ozx pe care le-ai creat în interfața de utilizator a gateway-ului SMS. Pentru a te conecta, folosește comanda "connect hostname:port username password".
  2. Trimite mesajul tău text. Acest lucru poate fi făcut tastând "send număr_de_telefon textul_mesajului" dacă folosești aplicația consolă exemplu pentru trimitere.
  3. Așteaptă rapoartele de trimitere SMS și rapoartele de livrare SMS. Poți observa că aceste rapoarte sunt afișate pe ecran și conțin același ID de mesaj care a fost returnat când ai trimis SMS-ul.

Exemplu de aplicație consolă scrisă în C#.Net. Codul sursă al acestei aplicații consolă este disponibil pe pagina C# SMS API cu cod sursă.

exemple de csharp sms api
Figura 2 - Cum să trimiți un SMS din C# sms api

Exemplul de mai sus îți arată pașii necesari. Poți vedea că mai întâi se stabilește o conexiune permanentă la gateway-ul SMS, iar după aceea, mesajul este trimis. În final, vezi raportul de acceptare a mesajului și raportul de trimitere a mesajului.

Pentru a trimite SMS din C#, folosește următorul cod sursă:

  • 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="Acesta este textul de trimis din C#"});

Când setezi proprietatea Client.Autoconnect la true, te asiguri că clientul se va reconecta la gateway-ul SMS chiar dacă conexiunea de rețea este pierdută temporar sau gateway-ul SMS este repornit.

Pentru a primi rapoarte de livrare SMS în C#, trebuie să te înscrii la evenimente:

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

Aceste evenimente vor fi declanșate când gateway-ul SMS trimite rapoartele corespunzătoare prin conexiunea permanentă pe care am creat-o folosind connect. Acesta este cel mai mare beneficiu al folosirii unei conexiuni permanente. Primești notificări instantanee despre aceste evenimente legate de livrarea SMS-urilor. Astfel de notificări sunt greu de obținut dacă folosești un API SMS HTTP. Pe de altă parte, aceste informații sunt cruciale pentru orice afacere, și trebuie să le procesezi pentru a construi un software SMS bun.

Ce tipuri de rapoarte de livrare SMS sunt furnizate de API-ul SMS C#?

API-ul SMS C# returnează cinci tipuri de rapoarte de livrare SMS. Acestea sunt prezentate ca evenimente C#. Acestea sunt: evenimentul de acceptare SMS, evenimentul de neacceptare SMS, evenimentul de trimitere cu succes SMS, evenimentul de trimitere eșuată SMS, evenimentul de livrare cu succes SMS, evenimentul de livrare eșuată SMS.

Evenimentul de acceptare SMS: Evenimentul de acceptare SMS este declanșat atunci când gateway-ul SMS Ozeki acceptă SMS-ul pentru livrare și îl plasează în cutia de ieșire a contului utilizatorului.

Evenimentul de neacceptare SMS: Evenimentul de neacceptare SMS este declanșat dacă gateway-ul SMS Ozeki nu acceptă SMS-ul pentru livrare. Acest lucru se poate întâmpla, de exemplu, dacă utilizatorul rămâne fără credit SMS, sau dacă discul este plin sau apare altă eroare în gateway-ul SMS.

Evenimentul de trimitere cu succes SMS: Evenimentul de trimitere cu succes SMS este declanșat atunci când SMS-ul este livrat cu succes către rețeaua mobilă. Rețeaua mobilă returnează un raport de trimitere SMS, iar acest raport este transmis către clientul API SMS C# prin conexiunea stabilită. Evenimentul de trimitere cu succes SMS este declanșat, de exemplu, atunci când SMS-ul este trimis de către clientul SMPP care conectează sistemul la rețeaua mobilă prin Internet. Dacă trimiteți mesaje SMS prin intermediul unui gateway SMS Android, acest eveniment are loc atunci când SMS-ul este trimis de către modemul SMS integrat în telefonul Android. Dacă trimiteți SMS prin intermediul unui pool de modemuri GSM conectat la serverul dvs. printr-un cablu de date, evenimentul este declanșat atunci când modemul returnează codul de referință de 1 byte pentru trimiterea cu succes la comanda AT+CMGS a modemului.

Evenimentul de trimitere eșuată SMS: Evenimentul de trimitere eșuată SMS are loc dacă SMS-ul nu a putut fi trimis din orice motiv către rețeaua mobilă de către gateway-ul SMS Ozeki. De exemplu, dacă legătura Internet folosită de conexiunea client SMPP la rețeaua mobilă este offline sau dacă serverul SMPP returnează un mesaj de eroare SMPP atunci când SMS-ul este trimis. Dacă trimiteți mesaje SMS prin intermediul gateway-ului SMS Android, iar planul de telefon mobil Android rămâne fără credit sau telefonul nu este înregistrat în rețeaua mobilă, veți primi și acest eveniment. De asemenea, este posibil ca tabela de rutare SMS să nu fie configurată corect. Eroarea de trimitere SMS poate apărea și dacă utilizați un modem GSM pentru livrarea SMS și cablu de date dintre modem și PC este deconectat sau defect. În toate aceste cazuri, veți avea un mesaj de eroare în Event Args atașat acestui eveniment pentru a vă oferi o idee despre care ar putea fi motivul eșuării trimiterii SMS.

Evenimentul de livrare cu succes SMS: Evenimentul de livrare cu succes SMS este apelat atunci când SMS-ul este livrat cu succes către telefonul destinatarului. În acest caz, un raport de livrare SMS este returnat de rețeaua mobilă către gateway-ul SMS. Raportul de livrare SMS conține data și ora livrării și codul de stare al livrării cu succes. Gateway-ul SMS transmite aceste informații către API-ul SMS C#. Când primiți un eveniment de raport de livrare SMS în C#, puteți fi siguri că SMS-ul dvs. a fost primit de către destinatar.

Evenimentul de livrare eșuată SMS: Raportul de livrare SMS în C# poate fi gestionat cu evenimentul de livrare eșuată SMS dacă raportul de livrare conține un cod de stare de livrare nereușită. Acest lucru se poate întâmpla, de exemplu, dacă telefonul mobil către care a fost trimis SMS-ul nu este niciodată pornit. Acest eveniment se întâmplă rar, deoarece majoritatea rețelelor mobile nu returnează rapoarte de livrare negative.

Trimite SMS din C# SMS API (cod sursă gratuit de utilizat)

Pentru a trimite SMS din C# utilizați următorul cod sursă. Acest cod sursă poate fi modificat liber și redistribuit. Rețineți că puteți modifica și redistribui liber și sursa bibliotecii C# SMS API din proiectul 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("Conectat cu succes.");
            
            var msg = new OzxMessage();
            msg.ToAddress = recipient;
            msg.Text = message;

            Console.WriteLine("Se trimite mesajul. ID: "+msg.ID);
            Client.Send(msg);
        }

        static void Client_OnDisconnected(object sender, OzxArgs< string > e)
        {
            Console.WriteLine("Conexiune închisă. Motiv: " + e.Item.ToString());
        }

        static void Client_OnMessageAcceptedForDelivery(object sender, OzxArgs< string > e)
        {
            Console.WriteLine("Mesaj acceptat pentru livrare. ID: " + e.Item.ToString());
        }

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

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

        static void Client_OnMessageSubmitFailed(object sender, OzxArgs< string, DateTime, string > e)
        {
            Console.WriteLine("Trimiterea mesajului a eșuat. ID: " + e.Item1 + " Data: " + e.Item2+" Motiv: "+e.Item3);
        }

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

        static void Client_OnMessageDeliveryFailed(object sender, OzxArgs< string, DateTime, string > e)
        {
            Console.WriteLine("Livrarea mesajului a eșuat. ID: " + e.Item1 + " Data: " + e.Item2 + " Motiv: " + e.Item3);
        }

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

Cum să testați trimiterea SMS cu C#

Pentru a testa trimiterea SMS în API-ul SMS C# aveți două opțiuni: Puteți utiliza conexiunea tester SMS încorporat sau puteți configura două gateway-uri SMS pentru a avea un mediu de testare mai realist. Dacă configurați două gateway-uri SMS, mai întâi trebuie să configurați primul gateway SMS ca un simulator SMPP. Acest gateway SMS va furniza serviciu de server SMPP celui de-al doilea gateway SMS. Acesta va funcționa în același mod în care ar funcționa SMSC-ul unui operator de rețea mobilă. Al doilea gateway SMS se va conecta la primul folosind o conexiune client SMPP și va furniza serviciu C# SMS API aplicației dvs. C# SMS.

Întrebări frecvente Raportul de livrare (onMessageDeliveryFailed) este preluat pentru fiecare încercare eșuată sau este preluat doar când este atins numărul maxim de încercări?

Mesajul rămâne într-o stare de așteptare până când numărul maxim de încercări de livrare este epuizat.

Este posibil să stocați rapoartele de livrare SMS primite în SQL?

Pentru a primi rapoarte de livrare pentru mesajele dvs. SMS, navigați la meniul "Editare" și selectați "Preferințe server". În fila "Avansat", localizați caseta de bifare etichetată "Copiază rapoartele de livrare pentru utilizatori" și asigurați-vă că este bifată. Dacă ați configurat un gateway SQL la SMS, rapoartele de livrare primite vor fi stocate automat în baza de date ca mesaje primite standard. Iată cum sunt reflectate actualizările de stare a livrării:

  • Tabela ozekimessageout și Actualizări de Stare: Dacă trimiteți mesaje din tabela "ozekimessageout", câmpul "status" urmărește automat starea de livrare a fiecărui mesaj. Acest câmp se actualizează dinamic pentru a reflecta următoarele rezultate:
  • deliveredtonetwork: Mesaj trimis cu succes în rețea.
  • deliveredtohandset: Mesaj livrat pe telefonul destinatarului.
  • deliveryerror: A apărut o eroare în timpul livrării.
Această funcționalitate oferă o modalitate convenabilă de a monitoriza starea de livrare în baza de date în sine.

More information