Ejemplo n.º 1
0
 public void OnDeliveryReportReceived(DeliveryReportList deliveryReportList, RequestException e)
 {
     if (_onDeliveryReportReceived != null)
     {
         _onDeliveryReportReceived(deliveryReportList, e);
     }
 }
Ejemplo n.º 2
0
 private void FireReportRetrieved(DeliveryReportList deliveryReportList, RequestException e)
 {
     for (int i = 0; i < this.smsMessagingImpl.DeliveryReportPullListeners.Count; i++)
     {
         smsMessagingImpl.DeliveryReportPullListeners[i].OnDeliveryReportReceived(deliveryReportList, e);
     }
 }
        public static void Execute()
        {
            // Configure in the 'app.config' which Logger levels are enabled(all levels are enabled in the example)
            // Check http://logging.apache.org/log4net/release/manual/configuration.html for more informations about the log4net configuration
            XmlConfigurator.Configure(new FileInfo("OneApiExamples.exe.config"));


            // Initialize Configuration object
            Configuration configuration = new Configuration(System.Configuration.ConfigurationManager.AppSettings.Get("Username"),
                                                            System.Configuration.ConfigurationManager.AppSettings.Get("Password"));

            // Initialize SMSClient using the Configuration object
            SMSClient smsClient = new SMSClient(configuration);

            // Send SMS
            smsClient.SmsMessagingClient.SendSMS(new SMSRequest(senderAddress, message, recipientAddress));

            // Wait for 30 seconds to give enought time for the message to be delivered
            System.Threading.Thread.Sleep(30000);

            // Get 'Delivery Reports'
            DeliveryReportList deliveryReportList = smsClient.SmsMessagingClient.GetDeliveryReports();

            Console.WriteLine(deliveryReportList);
        }
Ejemplo n.º 4
0
        public void Case3()
        {
            string senderAddress    = SendMessageRule.DefaultSenderAddress;
            string message          = "message4";
            var    recipientAddress = new string[] { "+886921859698" };
            string requestId        = "";

            var configuration = new Configuration("ENVOTIONS", "Envo6183");

            // Initialize SMSClient using the Configuration object
            var SMSClient = new SMSClient(configuration);

            // Send SMS
            var result = SMSClient.SmsMessagingClient.SendSMS(new SMSRequest(senderAddress, message, recipientAddress));

            requestId = result.ClientCorrelator;
            //requestId = "1430206446300481957";
            // Wait for 30 seconds to give enought time for the message to be delivered
            System.Threading.Thread.Sleep(30000);

            // Get 'Delivery Reports'
            DeliveryReportList deliveryReportList = SMSClient.SmsMessagingClient.GetDeliveryReportsByRequestId(requestId);

            Console.WriteLine(deliveryReportList);
        }
Ejemplo n.º 5
0
        public void Case1()
        {
            string userName  = "******";
            string password  = "******";
            string requestId = "1428275602020481488";

            var configuration = new Configuration(userName, password);
            var SMSClient     = new SMSClient(configuration);

            DeliveryReportList deliveryReportList = SMSClient.SmsMessagingClient.GetDeliveryReportsByRequestId(requestId);
        }
Ejemplo n.º 6
0
        public void GetDeliveryReport(string requestId)
        {
            // (1) 根據 requestId (DeliveryReportQueue.ClientCorrelator) 查詢簡訊發送結果
            // (2) 如果查得到結果(DeliveryReportList.DeliveryReports.Length != 0),則表示 SendMessageQueue 經由 Infobip 發送所有訊息的結果已經取得,可以進行以下步驟
            // (3) 在 DeliveryReportQueue (待查詢簡訊發送結果序列) 刪除對應資料
            // (4) 將 DeliveryReportList.DeliveryReports 塞入對應資料表 Infobip_DeliveryReport
            // (5) 出大表,SendMessageHistorys

            // (1) 根據 requestId (DeliveryReportQueue.ClientCorrelator) 查詢簡訊發送結果

            DeliveryReportList deliveryReportList = this.smsClient.SmsMessagingClient.GetDeliveryReportsByRequestId(requestId);

            // (2) 如果查得到結果(DeliveryReportList.DeliveryReports.Length != 0),則表示 SendMessageQueue 經由 Infobip 發送所有訊息的結果已經取得,可以進行以下步驟

            UpdateDb_GetDeliveryReport(requestId, deliveryReportList);
        }
Ejemplo n.º 7
0
 public void Run(Object stateInfo)
 {
     if ((smsMessagingImpl.DeliveryReportPullListeners != null) &&
         (smsMessagingImpl.DeliveryReportPullListeners.Count > 0))
     {
         try
         {
             DeliveryReportList deliveryReportList = smsMessagingImpl.GetDeliveryReports();
             if ((deliveryReportList != null) &&
                 (deliveryReportList.DeliveryReports != null) &&
                 (deliveryReportList.DeliveryReports.Length > 0))
             {
                 FireReportRetrieved(deliveryReportList, null);
             }
         }
         catch (RequestException e)
         {
             FireReportRetrieved(null, e);
         }
     }
 }
Ejemplo n.º 8
0
        private void UpdateDb_GetDeliveryReport(string requestId, DeliveryReportList deliveryReportList)
        {
            if (deliveryReportList.DeliveryReports.Length == 0)
            {
                return;
            }

            this.logService.Debug("InfobipSmsProvider(smsProviderType = {0}),接收簡訊發送結果(簡訊發送識別碼:{1},發送結果:{2})",
                                  smsProviderType.ToString(),
                                  requestId,
                                  deliveryReportList.ToString());

            // (3) 將 DeliveryReportList.DeliveryReports 塞入對應資料表 Infobip_DeliveryReport

            var sendMessageResultItemRepository = this.unitOfWork.Repository <Infobip_SendMessageResultItem>();

            foreach (var deliveryReport in deliveryReportList.DeliveryReports)
            {
                /*
                 *  System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.Entity.Core.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Infobip_DeliveryReport_dbo.Infobip_SendMessageResultItem_MessageId". The conflict occurred in database "EFunTechSms", table "dbo.Infobip_SendMessageResultItem", column 'MessageId'.
                 *  The statement has been terminated.
                 */
                if (!sendMessageResultItemRepository.Any(p => p.MessageId == deliveryReport.MessageId))
                {
                    this.logService.Error("取消建立 Infobip_DeliveryReport,因為 MessageId = {0} 不存在 Infobip_SendMessageResultItem", deliveryReport.MessageId);
                    continue;
                }

                var entity = new Infobip_DeliveryReport();
                entity.RequestId    = requestId;
                entity.MessageId    = deliveryReport.MessageId;
                entity.SentDate     = deliveryReport.SentDate.ToUniversalTime(); // 已換轉換成UTC時間
                entity.DoneDate     = deliveryReport.DoneDate.ToUniversalTime(); // 已換轉換成UTC時間
                entity.StatusString = deliveryReport.Status;

                DeliveryReportStatus Status = DeliveryReportStatus.Unknown;
                Enum.TryParse <DeliveryReportStatus>(deliveryReport.Status, out Status);
                entity.Status = Status;

                entity.Price       = deliveryReport.Price;
                entity.CreatedTime = DateTime.UtcNow;
                entity             = this.unitOfWork.Repository <Infobip_DeliveryReport>().Insert(entity);
            }

            Infobip_SendMessageResult infobip_SendMessageResult = this.unitOfWork.Repository <Infobip_SendMessageResult>().Get(p => p.ClientCorrelator == requestId);

            if (infobip_SendMessageResult == null)
            {
                throw new Exception(string.Format("InfobipSmsProvider(smsProviderType = {0}),無法取得 Infobip_SendMessageResult(ClientCorrelator:{1})", smsProviderType.ToString(), requestId));
            }

            // (4) 如果所有派送結果都取回了,就在 DeliveryReportQueue (待查詢簡訊發送結果序列) 刪除對應資料
            var deliveryReportQueueRepository = this.unitOfWork.Repository <DeliveryReportQueue>();
            var deliveryReportQueue           = deliveryReportQueueRepository.Get(p => p.RequestId == requestId && p.ProviderName == this.Name);

            if (deliveryReportQueue != null)
            {
                int SendMessageResultItemCount = infobip_SendMessageResult.SendMessageResults.Count;
                int DeliveryReportCount        = this.unitOfWork.Repository <Infobip_DeliveryReport>().Count(p => p.RequestId == requestId);

                deliveryReportQueue.SendMessageResultItemCount = SendMessageResultItemCount;
                deliveryReportQueue.DeliveryReportCount        = DeliveryReportCount;
                deliveryReportQueueRepository.Update(deliveryReportQueue);

                // 20151111 Norman, 暫時不刪除,用以除錯
                //if (DeliveryReportCount >= SendMessageResultItemCount)
                //{
                //    deliveryReportQueueRepository.Delete(p => p.RequestId == requestId);
                //}
            }

            // (5) 出大表,SendMessageHistorys
            SourceTable sourceTable = infobip_SendMessageResult.SourceTable;

            switch (sourceTable)
            {
            case SourceTable.SendMessageQueue:
                int sendMessageQueueId = infobip_SendMessageResult.SourceTableId;
                UpdateSendMessageHistory(sendMessageQueueId);
                break;

            case SourceTable.SendMessageHistory:
                int sendMessageHistoryId = infobip_SendMessageResult.SourceTableId;
                UpdateSendMessageRetryHistory(sendMessageHistoryId);
                break;
            }
        }