Борьба с Callatell CallBack в ASP.NET с использованием C#.NET

Я строю веб-приложение в ASP.NET с использованием C#.NET, которое отправляет SMS с помощью clickatell.

Я безуспешно пытаюсь получить статус обратно от clickatell, создав страницу CallBack под названием ClickatellCallBack.aspx Вот код позади страницы:

открытый частичный класс ClickatellCallBack: System.Web.UI.Page
{
защищенная пустота Page_Load(отправитель объекта, EventArgs e)
{
// Получить значения из QueryString.
строка apiID = Request.QueryString["api_id"];
string from = Request.QueryString["from"];
string to = Request.QueryString["to"];
string timestamp = Request.QueryString["timestamp"];
string apiMsgId = Request.QueryString["apiMsgId"];
string cliMsgId = Request.QueryString["cliMsgId"];
строка status = Request.QueryString["status"];
строка обвинения = Request.QueryString["обвинение"];

   // Insert the SMS Status values into the database.  
   int smsStatusID = SMSManager.InsertSMSStatus(apiID, from, to,
      timestamp, apiMsgId, cliMsgId, status, charge);  

}
}

По сути, эта страница извлекает значения строки запроса, отправленные с clickatell, и вставляет их в таблицу базы данных.

Я зарегистрировал следующий URL обратного вызова: http://www.mydomain.com/ClickatellCallBack.aspx с clickatell и выбрал тип обратного вызова: HTTP GET

В моей команде sendmsg я установил подтверждение доставки и запрос обратного вызова следующим образом: deliv_ack=1 и callback=3

Единственная проблема в том, что ничего не происходит. URL-адрес CallBack, по-видимому, не доступен для clickatell.

Я что-то пропустил? Я делаю что-то неправильно. Нужно ли реализовывать этот URL обратного вызова, используя что-то отличное от страницы ASP.NET? Есть ли какая-то настройка clickatell, которую я пропускаю?

Любая помощь будет принята с благодарностью.

С уважением

Вальтер

2 ответа

Решение

Я решил проблему, поместив параметры callback и delivery_ack с помощью команды startbatch, а не команды quicksend. Это похоже на работу. Так вот что у меня внутри C#.NET функция, которая запускает пакет:

protected string get_batch_id(string session_id, string message_body)
{
    // Declare a WebClient.
    WebClient client = new WebClient();

    // Add a User Agent Header.
    client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR1.0.3705;)");

    // Add the session_id to the Query String.
    client.QueryString.Add("session_id", session_id);

    // Add the template to the Query String.
    client.QueryString.Add("template", message_body);

    // Add the callback to the Query String.
    client.QueryString.Add("callback", "3");

    // Add the deliv_ack to the Query String.
    client.QueryString.Add("deliv_ack", "1");

    // Declare the baseurl.
    string baseurl = "http://api.clickatell.com/http_batch/startbatch";

    // Open the baseurl.
    Stream data = client.OpenRead(baseurl);

    // Declare and instantiate a StreamReader to retrieve the results of executing the startbatch command.
    StreamReader reader = new StreamReader(data);

    // Parse and split the returned string into the returned_strings array.
    string[] returned_strings = reader.ReadToEnd().Split(' ');

    // Retrieve the batch_id from the (second element of the) returned_strings array.
    string batch_id = returned_strings[1].ToString();

    // Close the Stream.
    data.Close();

    // Close the Reader.
    reader.Close();

    // Return the batch_id.
    return (batch_id);
}

Уф!

Поэтому мне также удалось получить следующую функциональность, успешно закодированную в ASP.NET с помощью C#.NET:

  1. Отправить сообщение одному получателю;
  2. Отправить одно и то же сообщение нескольким получателям;
  3. Отправить персональное сообщение одному получателю;
  4. Отправить персональное сообщение нескольким получателям;

По пути я заметил, что не так много примеров кода ASP.NET с помощью C#.NET,

Я просто получаю ответ от Clickatell API, десериализуя объект javascript, который я получил из запроса, который я отправил в Clickatell API.

Я просто возвращаю его на свою веб-страницу, используя оператор return Ok().

Другие вопросы по тегам