コード例 #1
0
        public string MakePhoneCall()
        {
            TwilioApi twilio = new TwilioApi(DatabasePharmacyService.GetById(1));

            twilio.MakePhoneCall(new Notification());
            return("Calling");
        }
        public async Task LookupReturnsNumberTypeIfValidCredentials()
        {
            var lookupsMock = new Mock <ITwilioLookupsApi>(MockBehavior.Strict);

            lookupsMock.Setup(api => api.NumberInfo(It.IsAny <string>(), It.IsAny <string>(), "carrier"))
            .ReturnsAsync((string phoneNumber, string countryCode, string type) =>
                          JObject.Parse($"{{\"url\": \"https://lookups.twilio.com/v1/PhoneNumbers/{phoneNumber}?Type=carrier\",\"carrier\": {{ \"type\": \"mobile\" }},\"phone_number\": \"{phoneNumber}\",\"country_code\": \"{countryCode}\"}}"));

            var messagingMock = new Mock <ITwilioMessagingApi>(MockBehavior.Strict);

            var twilioApi = new TwilioApi(lookupsMock.Object, messagingMock.Object, "ACxxxxxxxxxxxxxx", _smsNumber);

            var connectFunction = new LookupWorkflow(twilioApi);
            var result          = await connectFunction.Process(_connectEvent, _context);

            Assert.Equal(2, result.Count);

            var lambdaResult = result["LambdaResult"];

            Assert.NotNull(lambdaResult);
            Assert.True(lambdaResult.Type == JTokenType.Boolean);
            Assert.True(lambdaResult.Value <bool>());

            var numberType = result["NumberType"];

            Assert.NotNull(numberType);
            Assert.True(numberType.Type == JTokenType.String);
            var typeValue = (string)numberType;

            Assert.NotNull(typeValue);
            Assert.Equal("mobile", typeValue);

            lookupsMock.VerifyAll();
        }
コード例 #3
0
        public async Task SmsReturnsTrueIfValidCredentialsAndMessageQueued()
        {
            var lookupsMock = new Mock <ITwilioLookupsApi>(MockBehavior.Strict);

            lookupsMock.Setup(api => api.NumberInfo(It.IsAny <string>(), It.IsAny <string>(), "carrier"))
            .ReturnsAsync((string phoneNumber, string countryCode, string type) =>
                          JObject.Parse($"{{\"url\": \"https://lookups.twilio.com/v1/PhoneNumbers/{phoneNumber}?Type=carrier\",\"carrier\": {{ \"type\": \"mobile\" }},\"phone_number\": \"{phoneNumber}\",\"country_code\": \"{countryCode}\"}}"));

            var smsBodyNumber = IVRWorkflow.SwitchCallerId(_customerNumber);
            var messagingMock = new Mock <ITwilioMessagingApi>(MockBehavior.Strict);

            messagingMock.Setup(api => api.SendSMS(It.IsAny <string>(), It.Is <Dictionary <string, string> >(
                                                       args => args["From"].Equals(_systemNumber) && args["To"].Equals(_customerNumber) && args["Body"].Contains($"={smsBodyNumber}"))))
            .ReturnsAsync((string accountSid, Dictionary <string, string> args) =>
                          JObject.Parse($"{{\"account_sid\": \"{accountSid}\",\"api_version\": \"2010-04-01\",\"body\": \"{args["Body"]}\",\"from\": \"{args["From"]}\",\"status\": \"queued\",\"to\": \"{args["To"]}\"}}"));

            var twilioApi = new TwilioApi(lookupsMock.Object, messagingMock.Object, "ACxxxxxxxxxxxxxx", _systemNumber);

            var connectFunction = new SmsWorkflow(twilioApi);
            var result          = await connectFunction.Process(ConnectEventWithMessageEndingWithPhoneParameter, _context);

            Assert.Single(result);
            var lambdaResult = result["LambdaResult"];

            Assert.NotNull(lambdaResult);
            Assert.True(lambdaResult.Type == JTokenType.Boolean, "LambdaResult type is not Boolean");
            Assert.True(lambdaResult.Value <bool>(), "LambdaResult value is not true");

            lookupsMock.VerifyAll();
            messagingMock.VerifyAll();
        }
コード例 #4
0
        public async Task SmsReturnsFalseIfValidButBadCredentials()
        {
            var lookupsMock      = new Mock <ITwilioLookupsApi>(MockBehavior.Strict);
            var lookupsException =
                await TwilioTests.CreateException($"https://lookups.twilio.com/v1/PhoneNumbers/{_customerNumber}?Type=carrier", HttpMethod.Get, HttpStatusCode.Unauthorized);

            lookupsMock.Setup(api => api.NumberInfo(_customerNumber, It.IsAny <string>(), "carrier"))
            .ThrowsAsync(lookupsException);

            var messagingMock = new Mock <ITwilioMessagingApi>(MockBehavior.Strict);

            var twilioApi = new TwilioApi(lookupsMock.Object, messagingMock.Object, "ACxxxxxxxxxxxxxx", _systemNumber);

            var connectFunction = new SmsWorkflow(twilioApi);
            var result          = await connectFunction.Process(ConnectEventWithMessageEndingWithPhoneParameter, _context);

            Assert.Single(result);
            var lambdaResult = result["LambdaResult"];

            Assert.NotNull(lambdaResult);
            Assert.True(lambdaResult.Type == JTokenType.Boolean);
            Assert.False(lambdaResult.Value <bool>());

            lookupsMock.VerifyAll();
        }
コード例 #5
0
        // GET: Twilio
        public ActionResult Index()
        {
            var twilio = new TwilioApi(new Models.Pharmacy());

            twilio.SendTextMessage(Models.Notification.GetTestNotification());
            return(View());
        }
        public async Task LookupReturnsEmptyNumberTypeIfValidButBadCredentials()
        {
            var lookupsMock      = new Mock <ITwilioLookupsApi>(MockBehavior.Strict);
            var lookupsException =
                await TwilioTests.CreateException($"https://lookups.twilio.com/v1/PhoneNumbers/{_customerNumber}?Type=carrier", HttpMethod.Get, HttpStatusCode.Unauthorized);

            lookupsMock.Setup(api => api.NumberInfo(_customerNumber, It.IsAny <string>(), "carrier"))
            .ThrowsAsync(lookupsException);

            var messagingMock = new Mock <ITwilioMessagingApi>(MockBehavior.Strict);

            var twilioApi = new TwilioApi(lookupsMock.Object, messagingMock.Object, "ACxxxxxxxxxxxxxx", _smsNumber);

            var connectFunction = new LookupWorkflow(twilioApi);
            var result          = await connectFunction.Process(_connectEvent, _context);

            Assert.Equal(2, result.Count);

            var lambdaResult = result["LambdaResult"];

            Assert.NotNull(lambdaResult);
            Assert.True(lambdaResult.Type == JTokenType.Boolean);
            Assert.True(lambdaResult.Value <bool>());

            var numberType = result["NumberType"];

            Assert.NotNull(numberType);
            Assert.True(numberType.Type == JTokenType.String);
            var typeValue = (string)numberType;

            Assert.NotNull(typeValue);
            Assert.Equal(string.Empty, typeValue);
        }
コード例 #7
0
        public void RegisterUrlForIncomingSms()
        {
            var tw = new TwilioApi(new TwilioSmsReceiver());

            //tw.RegisterUrlForIncomingSms(TwilioTestHelper.TestAccountSid, TwilioTestHelper.TestAuthToken, TwilioTestHelper.TestFromNumber_Valid, "https://Dummy.com/Dummy");
            tw.RegisterUrlForIncomingSms(TwilioTestHelper.TrialAccountSid, TwilioTestHelper.TrialAuthToken, TwilioTestHelper.TrialSendingNumber, 111);
        }
コード例 #8
0
 public static void SendRecalls(List <Notification> notifications)
 {
     foreach (var n in notifications)
     {
         var twilio = new TwilioApi(Patient.PatientDict[n.PatientId].getPharmacy());
         SendNotification(n, twilio);
     }
 }
コード例 #9
0
        public void ValidIfEnvironmentVariablesSet()
        {
            var twilioApi = new TwilioApi();

            Assert.NotNull(twilioApi.LookupsApi);
            Assert.NotNull(twilioApi.MessagingApi);
            Assert.False(string.IsNullOrEmpty(twilioApi.AccountSid));
            Assert.False(string.IsNullOrEmpty(twilioApi.SmsNumber));
        }
コード例 #10
0
        private void PrepareForSending()
        {
            var notifications = getNotifications();

            foreach (var n in notifications)
            {
                var pat = Patient.PatientDict[n.PatientId];

                var twilio = new TwilioApi(pat.getPharmacy());
                SendNotification(n, twilio);
            }
        }
        public async Task SendsSmsAndReturnsQueryUrlWhenCallerStartsSessionWithoutClientUrl()
        {
            var smsBodyNumber = connectEventWithoutClientUrl.SelectToken("Details.ContactData.CustomerEndpoint.Address")
                                .Value <string>()
                                .Substring(1);
            var lookupsMock = new Mock <ITwilioLookupsApi>(MockBehavior.Strict);

            lookupsMock.Setup(api => api.NumberInfo(It.IsAny <string>(), It.IsAny <string>(), "carrier"))
            .ReturnsAsync((string phoneNumber, string countryCode, string type) =>
                          JObject.Parse($"{{\"url\": \"https://lookups.twilio.com/v1/PhoneNumbers/{phoneNumber}?Type=carrier\",\"carrier\": {{ \"type\": \"mobile\" }},\"phone_number\": \"{phoneNumber}\",\"country_code\": \"{countryCode}\"}}"));

            var messagingMock = new Mock <ITwilioMessagingApi>(MockBehavior.Strict);

            messagingMock.Setup(api => api.SendSMS(It.IsAny <string>(), It.Is <Dictionary <string, string> >(
                                                       args => args["From"].Equals(SmsNumber) && args["Body"].Contains($"={IVRWorkflow.SwitchCallerId(smsBodyNumber)}"))))
            .ReturnsAsync((string accountSid, Dictionary <string, string> args) =>
                          JObject.Parse($"{{\"account_sid\": \"{accountSid}\",\"api_version\": \"2010-04-01\",\"body\": \"{args["Body"]}\",\"from\": \"{args["From"]}\",\"status\": \"sent\",\"to\": \"{args["To"]}\"}}"));

            var twilioApi = new TwilioApi(lookupsMock.Object, messagingMock.Object, "ACxxxxxxxxxxxxxx", SmsNumber);

            var smsWorkflow = new SmsWorkflow(twilioApi);

            using (var testClient = new HttpClient(new SuccessfulCreateSessionImmediateReturn())
            {
                BaseAddress = new Uri("https://cvnet2.radishsystems.com/ivr/api/")
            })
            {
                try
                {
                    Environment.SetEnvironmentVariable("TWILIO_PHONENUMBER", SmsNumber);
                    var workflow = new CreateSessionWorkflow(testClient, smsWorkflow);
                    var response = await workflow.Process(connectEventWithoutClientUrl, context);

                    Assert.Equal(JTokenType.Boolean, response["LambdaResult"].Type);
                    Assert.True((bool)response["LambdaResult"]);
                    Assert.Equal(QueryUrl, response["QueryUrl"].Value <string>());
                    Assert.False(response.TryGetValue("SessionStatus", out var value));
                    Assert.False(response.TryGetValue("SessionUrl", out value));
                    Assert.False(response.TryGetValue("PropertiesUrl", out value));
                    Assert.False(response.TryGetValue("ControlMessageUrl", out value));
                    Assert.True(response.TryGetValue("ConnectStartTime", out value));
                    Assert.Equal(JTokenType.Date, value.Type);
                }
                finally
                {
                    Environment.SetEnvironmentVariable("TWILIO_PHONENUMBER", null);
                }
            }

            lookupsMock.VerifyAll();
            messagingMock.VerifyAll();
        }
コード例 #12
0
        public static bool SendFilledNotification(Refill refill)
        {
            var n = new Notification(refill, Notification.NotificationType.Ready);
            var p = DatabasePrescriptionService.GetById(refill.PrescriptionId);

            n.PatientId = p.PatientId;
            System.Diagnostics.Debug.WriteLine(n.PatientId);
            n.NotificationId = DatabaseNotificationService.Insert(n);
            var pat    = Patient.PatientDict[n.PatientId];
            var twilio = new TwilioApi(pat.getPharmacy());

            SendNotification(n, twilio);
            return(true);
        }
コード例 #13
0
        public void Send()
        {
            var tw = new TwilioApi(new TwilioSmsReceiver());

            var taskResult = tw.SendMessage(1111, TwilioTestHelper.TrialAccountSid, TwilioTestHelper.TrialAuthToken, TwilioTestHelper.TestFromNumber_Valid, "Test", TwilioTestHelper.TestToNumber_Valid.ToEnumerable());

            taskResult.Wait();

            var result = taskResult.Result.First();

            Console.WriteLine(result.Message ?? "Success");

            Assert.That(result.Success, Is.True);
        }
コード例 #14
0
        public ActionResult EditTicket(Ticket model)
        {
            Ticket ticket = context.Tickets.Find(model.ID);

            ticket.TicketNotes = model.TicketNotes;
            ticket.Employee    = context.Employees.Find(model.EmployeeId);
            ticket.UpdateNote  = model.UpdateNote;
            ticket.UpdatedDate = DateTime.Now;
            ticket.EmployeeId  = model.EmployeeId;
            context.SaveChanges();
            //ticket.ReceiveUpdate
            if (true)
            {
                TwilioApi.Send(ticket);
            }

            return(RedirectToAction("tickets"));
        }
コード例 #15
0
        private static void SendNotification(Notification n, TwilioApi twilio)
        {
            System.Diagnostics.Debug.WriteLine("Sending Notification: " + n.NotificationId);
            var p = Patient.PatientDict[n.PatientId];

            if (n.Type == Notification.NotificationType.Recall)
            {
                twilio.MakeRecallPhoneCall(n);
                Notification.MarkSent(n);
            }
            else if (((n.Type == Notification.NotificationType.Refill || n.Type == Notification.NotificationType.Ready) && p.SendRefillMessage) || (n.Type == Notification.NotificationType.Birthday && p.SendBirthdayMessage))
            {
                switch (p.ContactMethod)
                {
                case Patient.PrimaryContactMethod.Call:
                    twilio.MakePhoneCall(n);
                    break;

                case Patient.PrimaryContactMethod.Email:
                    EmailService.SendNotification(n);
                    break;

                case Patient.PrimaryContactMethod.Text:
                    twilio.SendTextMessage(n);
                    break;

                case Patient.PrimaryContactMethod.OptOut:
                    // Do nothing
                    break;

                default:
                    break;
                }
                Notification.MarkSent(n);
            }
        }
コード例 #16
0
        public static void SendNotification(Patient p, String message)
        {
            var twilio = new TwilioApi(p.getPharmacy());

            twilio.SendTextMessage(p, message);
        }
コード例 #17
0
        public static void SendNotification(Notification notification)
        {
            var twilio = new TwilioApi(Patient.PatientDict[notification.PatientId].getPharmacy());

            SendNotification(notification, twilio);
        }
コード例 #18
0
        public void DeregisterUrlForIncomingSms()
        {
            var tw = new TwilioApi(new TwilioSmsReceiver());

            tw.DeregisterUrlForIncomingSms(TwilioTestHelper.TrialAccountSid, TwilioTestHelper.TrialAuthToken, TwilioTestHelper.TrialSendingNumber);
        }