You are viewing the Portuguese (Brazil) site, but your language preference is set to English. Switch to English site →

Menu

Expand
Classifique esta página:

Lembretes de agendamentos com C# e ASP.NET MVC

Ahoy! Agora recomendamos que você crie seus lembretes de agendamento por SMS com a funcionalidade de programação de mensagens integrada da Twilio. Acesse a documentação de recursos de mensagens para saber mais sobre como programar mensagens SMS!

Pronto para implementar lembretes de agendamentos em seu aplicativo? Veja como funciona:

  1. Um administrador cria um agendamento para uma data e hora futuras e armazena o número de telefone de um cliente no banco de dados para esse agendamento
  2. Um processo em segundo plano verifica o banco de dados em um intervalo regular, procurando agendamentos que exijam o envio de um lembrete
  3. Em um horário configurado antes do agendamento, um lembrete de SMS é enviado ao cliente para lembrá‐lo do agendamento

Confira como a Yelp usa o SMS para confirmar reservas de restaurantes para clientes.

Blocos de construção

Aqui estão as tecnologias que usaremos para fazer isso:

  • ASP.NET MVC para criar um aplicativo da web orientado por banco de dados
  • O recurso de mensagens da API REST da Twilio para enviar mensagens de texto
  • Hangfire para nos ajudar a programar e executar tarefas em segundo plano de forma recorrente


Neste tutorial, vamos destacar os principais trechos de código que fazem este aplicativo funcionar. Confira o README do projeto no GitHub para ver como executar o código por conta própria.

Como ler este tutorial

Para implementar lembretes de agendamentos, trabalharemos em uma série de histórias de usuários que descrevem como implementar totalmente lembretes de agendamentos em um aplicativo da web. Veremos o código necessário para satisfazer cada história e exploraremos o que precisávamos adicionar em cada etapa.

Tudo isso pode ser feito com a ajuda da Twilio em menos de meia hora.

Vamos começar!

Criar um agendamento

Como usuário, quero criar um agendamento com um nome, números de telefone de convidado e um horário no futuro.

Para criar um aplicativo de lembrete de agendamento automatizado, provavelmente devemos começar com um agendamento. Esta história requer que criemos um pouco de IU e um objeto de modelo para criar e salvar um novo Appointment em nosso sistema. Em um nível alto, vamos adicionar o que precisamos:

  • Um formulário para inserir detalhes sobre o agendamento
  • Uma rota e uma função de controlador no servidor para processar o formulário
  • Uma rota e uma função de controlador no servidor para lidar com a solicitação POST do formulário
  • Um objeto de modelo Appointment persistente para armazenar informações sobre o usuário

Muito bem, então sabemos o que precisamos para criar um novo agendamento. Agora, vamos começar analisando o modelo, onde decidimos quais informações queremos armazenar com o agendamento.

Visite nosso modelo de agendamento

Modelo de agendamento

O modelo de agendamento é bastante simples, mas como os humanos estarão interagindo com ele, vamos nos certificar de que adicionamos alguma validação de dados.

Nosso aplicativo conta com o ASP.NET Data Annotations. Em nosso caso, queremos apenas validar que alguns campos são obrigatórios. Para isso, usaremos a anotação de dados [Required].

Por padrão, ASP.NET MVC exibe o nome da propriedade ao processar um controle. Em nosso exemplo, esses nomes de propriedade podem ser Name ou PhoneNumber. Para renderização de Name, não deve haver nenhum problema. Mas para PhoneNumber, poderíamos querer exibir algo melhor, como "Número de telefone". Para esse tipo de cenário, podemos usar outra anotação de dados: [Display(Name = "Phone Number")].

Para validar o conteúdo do campo PhoneNumber, estamos usando a anotação de dados [Phone] que confirma que os números de telefone inseridos pelo usuário estão de acordo com os padrões de formatação E.164.

Loading Code Sample...
        
        
        AppointmentReminders.Web/Models/Appointment.cs

        O modelo de agendamento

        AppointmentReminders.Web/Models/Appointment.cs

        O nosso modelo de agendamento agora está definido. É hora de dar uma olhada no formulário que permite que um administrador crie novos agendamentos.

        Confira o novo formulário de agendamento

        Novo formulário de agendamento

        Quando criamos um novo agendamento, precisamos de um nome de convidado, um número de telefone e uma hora. Usando as classes de auxiliador de HTML, podemos vincular o formulário ao objeto do modelo. Esses auxiliares gerarão a marcação HTML necessária que criará um novo agendamento no envio.

        Loading Code Sample...
              
              
              AppointmentReminders.Web/Views/Appointments/_Form.cshtml

              Novo formulário de agendamento

              AppointmentReminders.Web/Views/Appointments/_Form.cshtml

              Agora que temos um modelo e uma IU, veremos como podemos interagir com Appointments.

              Veja como interagir com Agendamentos

              Interação com agendamentos

              Como usuário, quero exibir uma lista de todos os agendamentos futuros e poder excluir esses agendamentos.

              Se você é uma organização que lida com muitos agendamentos, provavelmente deseja poder visualizá‐los e gerenciá‐los em uma única interface. É isso que vamos abordar nesta história do usuário. Criaremos uma IU para:

              • Mostrar todos os agendamentos
              • Excluir agendamentos individuais

              Sabemos quais interações queremos implementar, então vamos ver primeiro como listar todos os futuros Agendamentos.

              Confira o controlador para listar os agendamentos

              Obter uma lista de agendamentos

              No nível do controlador, vamos obter uma lista de todos os agendamentos no banco de dados e vamos renderizá‐los com uma exibição. Também adicionamos um prompt se não houver agendamentos, para que o usuário admin possa criar um.

              Loading Code Sample...
                    
                    
                    AppointmentReminders.Web/Controllers/AppointmentsController.cs

                    Listar todos os agendamentos

                    AppointmentReminders.Web/Controllers/AppointmentsController.cs

                    É assim que retornamos a lista de agendamentos, agora precisamos renderizá‐los. Vamos analisar o modelo de agendamentos para isso.

                    Visite o modelo de Agendamentos para ver como renderizar a lista

                    Exibição de todos os agendamentos

                    A exibição de índice lista todos os agendamentos classificados por ID. A única coisa que precisamos adicionar para preencher nossa história de usuário é um botão de exclusão. Adicionaremos o botão de edição apenas para começar.

                    Auxiliares de HTML

                    Você pode notar que, em vez de codificar os urls para Editar e Excluir, estamos usando os auxiliares de HTML do ASP.NET MVC. Se você visualizar a marcação renderizada, verá esses caminhos.

                    • /Appointments/Edit/id para editar
                    • /Appointments/Delete/id para excluir

                    AppointmentsController.cs contém métodos que lidam tanto com operações de edição quanto de exclusão.

                    Loading Code Sample...
                          
                          
                          AppointmentReminders.Web/Views/Appointments/Index.cshtml

                          Exibir todos os agendamentos

                          AppointmentReminders.Web/Views/Appointments/Index.cshtml

                          Agora que temos a capacidade de criar, visualizar, editar e excluir agendamentos, podemos nos aprofundar na parte divertida: agendar um trabalho recorrente que enviará lembretes por SMS quando um agendamento estiver chegando!

                          O que é necessário para enviar lembretes de SMS?

                          Enviar lembretes

                          Como um sistema de agendamentos, desejo notificar um usuário via SMS sobre um intervalo arbitrário antes de um agendamento futuro.

                          Há muitas maneiras de criar essa parte de nosso aplicativo, mas não importa como você o implemente, deve haver duas partes em movimento:

                          • Um script que verifica o banco de dados quanto a qualquer agendamento que esteja por vir e, em seguida, envia um SMS.
                          • Um trabalhador que executa esse script continuamente.

                          Vamos dar uma olhada em como decidimos implementar este último com o Hangfire.

                          Familiarize‑se com o Hangfire

                          Trabalhando com o Hangfire

                          Se você nunca usou um agendador de tarefas antes, você pode querer verificar esta publicação do Scott Hanselman que mostra algumas maneiras de executar tarefas em segundo plano em ASP.NET MVC. Decidimos usar o Hangfire devido à sua simplicidade. Se tiver uma maneira melhor de programar trabalhos em ASP.NET MVC, comente com a gente.

                          O Hangfire precisa de um back‐end de algum tipo para enfileirar os trabalhos futuros. Nesta implementação, estamos usando o SQL Server Database, mas é possível usar um armazenamento de dados diferente. Você pode verificar a documentação dele para obter mais detalhes.

                          Loading Code Sample...
                                
                                
                                AppointmentReminders.Web/packages.config

                                Dependências do Hangfire

                                AppointmentReminders.Web/packages.config

                                Agora que incluímos dependências do Hangfire no projeto, vamos dar uma olhada em como configurá‐lo para usá‐lo em nosso aplicativo de lembretes de agendamentos.

                                Visite a configuração do Hangfire

                                Classe de configuração do Hangfire

                                Criamos uma classe nomeada Hangfire para configurar nosso agendador de trabalhos. Essa classe define dois métodos estáticos:

                                1. ConfigureHangfire para definir parâmetros de inicialização para o agendador do trabalho.
                                2. InitialzeJobs para especificar quais trabalhos recorrentes devem ser executados e com que frequência devem ser executados.
                                Loading Code Sample...
                                      
                                      
                                      AppointmentReminders.Web/App_Start/Hangfire.cs

                                      Configuração do Hangfire

                                      AppointmentReminders.Web/App_Start/Hangfire.cs

                                      É apenas isso para a configuração. Vamos dar uma olhada rápida em como inicializamos o agendador de trabalhos.

                                      Inicialização do agendador de trabalhos

                                      Inicialização do Agendador de trabalhos

                                      Este projeto do ASP.NET MVC é aplicativo baseado em OWIN, que nos permite criar uma classe de inicialização para executar qualquer lógica de inicialização personalizada necessária em nosso aplicativo. Este é o local preferido para iniciar o Hangfire: consulte os documentos de configuração para obter mais informações.

                                      Loading Code Sample...
                                            
                                            
                                            AppointmentReminders.Web/Startup.c

                                            Iniciar o Hangfire

                                            AppointmentReminders.Web/Startup.c

                                            Agora que começamos o agendador de trabalhos, vamos dar uma olhada na lógica que é executada quando nosso trabalho é executado.

                                            Verifique o trabalho em segundo plano de notificação

                                            Trabalho em segundo plano de notificação

                                            Nesta classe, definimos um método chamado Execute que é chamado a cada minuto pelo Hangfire. Sempre que o trabalho é executado, precisamos:

                                            1. Obter uma lista de agendamentos futuros que requerem o envio de notificações
                                            2. Usar a Twilio para enviar lembretes de agendamentos via SMS

                                            As classe AppointmentsFinder consulta nosso banco de dados do SQL Server para encontrar todos os agendamentos cuja data e hora estão chegando em breve. Para cada um desses agendamentos, usaremos a API REST da Twilio para enviar uma mensagem formatada.

                                            Loading Code Sample...
                                                  
                                                  
                                                  AppointmentLembretes.Web/trabalhadores/SendNotificationsJob.cs

                                                  Trabalho em segundo plano de notificações

                                                  AppointmentLembretes.Web/trabalhadores/SendNotificationsJob.cs

                                                  Agora que estamos recuperando uma lista de agendamentos futuros, vamos dar uma olhada em como usamos a Twilio para enviar notificações via SMS.

                                                  Vamos usar a Twilio para enviar algumas notificações por SMS

                                                  Solicitação da API REST da Twilio

                                                  Esta classe é responsável por ler nossas credenciais de conta da Twilio no Web.confige usar a API REST da Twilio para realmente enviar uma notificação a nossos usuários. Também precisamos de um número da Twilio para usar como remetente para a mensagem de texto. Na verdade, enviar a mensagem é uma única linha de código!

                                                  Loading Code Sample...
                                                        
                                                        
                                                        AppointmentReminders.Web/Domain/Twilio/RestClient.cs

                                                        Enviar SMS com a Twilio

                                                        AppointmentReminders.Web/Domain/Twilio/RestClient.cs

                                                        Tutorial divertido, certo? Onde podemos levá‐lo a partir daqui?

                                                        Para onde ir em seguida?

                                                        Para onde ir em seguida?

                                                        E com um pequeno código e um pouco de configuração, estamos prontos para receber lembretes automatizados de agendamentos disparados em nosso aplicativo. Bom trabalho!

                                                        Se você for um desenvolvedor de C# que trabalha com a Twilio, talvez queira conferir outros tutoriais:

                                                        Clique para ligar

                                                        Coloque um botão em sua página da web que conecta os visitantes ao suporte ao vivo ou à equipe de vendas por telefone.

                                                        Autenticação de 2 fatores

                                                        Melhore a segurança da funcionalidade de login do seu app Flask adicionando autenticação de dois fatores por mensagem de texto.

                                                        Isso ajudou?

                                                        Obrigado por conferir este tutorial! Se você tiver algum feedback para compartilhar, entre em contato pelo Twitter... adoraríamos ouvir suas ideias e saber o que você está desenvolvendo!

                                                        Kevin Segovia Daniel Erazo
                                                        Classifique esta página:

                                                        Precisa de ajuda?

                                                        Às vezes, todos nós precisamos; a programação é difícil. Receba ajuda agora da nossa equipe de suporte, ou confie na sabedoria da multidão navegando pelo Stack Overflow Collective da Twilio ou buscando a tag Twilio no Stack Overflow.

                                                        Loading Code Sample...
                                                              
                                                              
                                                              

                                                              Obrigado pelo seu feedback!

                                                              Selecione o(s) motivo(s) para seu feedback. As informações adicionais que você fornece nos ajudam a melhorar nossa documentação:

                                                              Enviando seu feedback...
                                                              🎉 Obrigado pelo seu feedback!
                                                              Algo deu errado. Tente novamente.

                                                              Obrigado pelo seu feedback!

                                                              thanks-feedback-gif