O autor do artigo conta como ele conseguiu aplicar habilidades de programação para automatizar os processos de rotina de seu próprio evento de casamento.Para a maioria das pessoas, 3 de setembro de 2016 foi o sábado mais comum, mas na minha memória essa data permanecerá para sempre, porque foi nesse dia que eu e minha esposa fizemos um casamento.

Ao planejar um casamento, você precisa considerar muitos pontos: comida, decoração e decoração, luminárias de mesa (sim, separados da decoração), flores, acomodações, transporte, entretenimento e a escolha do local. Em geral, ao planejar um casamento, você se depara com muitas incógnitas, mas eu tinha certeza de uma coisa: nenhum casamento pode ficar sem um monte de listas, listas aninhadas que não terminam até o fim. Quanto mais listas flutuavam diante dos meus olhos, mais frequentemente eu começava a pensar em como melhorar o processo de preparação. Foi dolorosamente ineficiente e todo o trabalho foi realizado manualmente. Eu tinha certeza de que a tecnologia certamente poderia ajudar a melhorar pelo menos alguns dos pontos.
Você pode se surpreender ao saber que convidar pessoas para um casamento é caro (mais de 380 libras por pessoa). Primeiro, você precisa enviar convites preliminares com uma data e uma notificação curta, e somente então - de pleno direito, com uma descrição mais detalhada do evento. Além disso, tudo isso é enviado por correio, o que significa que é lento. As tentativas de "pegar" os convidados e obter uma resposta deles sobre se eles querem vir para o feriado com comida e bebida gratuitas (embora, ao que parece, quem não quer?!) Demorem muito tempo. E, finalmente, enviar convites não é ecologicamente correto, porque os cartões de papel são uma coisa única, eles rapidamente esquecem e se tornam inúteis para qualquer pessoa.
Mas voltando às listas. Dividimos os hóspedes em vários grupos:
- Aqueles que você gostaria de ver no festival
- Aqueles que responderam ao segundo convite pedindo uma resposta
- Quem aceitou o convite
- Quem aceitou o convite e escolheu comida
Mas eu gosto das listas: eles têm alguns requisitos predefinidos que os transformam em um ótimo objeto para automação.
Mensagem na garrafa
Eu tinha certeza de que todos os hóspedes em potencial, independentemente da idade, tinham um telefone celular, o que significava que chegara a hora de Twilio. O código fornecido aqui pode ser ignorado com segurança, se você desejar, pois está sempre disponível no
repositório GitHub correspondente.
O SMS como um canal de comunicação atendeu perfeitamente às minhas necessidades. Eu poderia configurar o envio em massa de mensagens, processando as respostas de maneira rápida e eficiente. Fazendo os primeiros esboços de trabalho do produto e considerando as opções do banco de dados, tentei fazer algo simples que pudesse ser facilmente compartilhado e não quisesse dedicar muito tempo à aparência. No final, me deparei com a biblioteca python gspread, que me permitia ler e escrever nas
tabelas do Google . Essa não era a opção mais rápida, mas bastante flexível, o que tornava fácil o acesso a tabelas e a leitura dos resultados.
Para o primeiro prompt,
criei uma tabela com três colunas:
- Nome
- Número de telefone
- Status da confirmação (status de confirmação)
- Status de detalhes do contato
- Message_count (o número de mensagens enviadas ao convidado foi útil no futuro)
Depois de concluir a entrada de dados básicos,
executei a lista através do
gspread , que enviou um SMS para cada hóspede que possui um número de celular:
import json import time import gspread from oauth2client.client import SignedJwtAssertionCredentials from twilio.rest import TwilioRestClient
E como o texto SMS geralmente parece um pouco chato, eu adicionei um
Unicode para apimentar. Aqui está a aparência da mensagem para os sortudos convidados:

Em seguida, usei o Flask como servidor da Web, fiz minha solicitação de URL para o ponto do Twilio Messaging em / messages e adicionei if-checks simples para analisar as respostas:
@app.route("/messages", methods=['GET', 'POST']) def hello_guest(): if "yes" in body_strip: # confirmation_status wks_attendees.update_acell("F"+str(guest_confirmation_cell.row), 'Accepted') # « » resp.message(u"\u2665" + "Thanks for confirming, we'll be in touch!" + u"\u2665") # r , elif "no" in from_body.lower(): # « » wks_attendees.update_acell("F"+str(guest_confirmation_cell.row), 'Declined') # resp.message("Sorry to hear that, we still love you though!") else: # , resp.message("You sent a different keyword, we need a yes or a no, you sent: "+ from_body) return str(resp)


A primeira mensagem foi enviada às 8:37 da manhã de 19 de fevereiro e a primeira confirmação foi recebida um pouco depois às 8:40. Às 9:38, eu já tinha recebido 23 confirmações, ou seja, 32% das respostas estavam no meu bolso! Dois dias após o início do envio em massa, 58% dos convidados já confirmaram sua participação. Apesar do sucesso óbvio, minha futura esposa ainda não ficou 100% impressionada com o meu serviço de SMS para convites de casamento, e decidi adicionar um pouco mais de funcionalidade ao aplicativo.
Estatísticas! Eu poderia criar uma lista de convidados atualizada e fornecê-la mediante solicitação, dando um feedback instantâneo à minha futura noiva. O código acabou sendo bastante simples, pois eu já havia configurado alguns dos contadores mais simples da tabela antes e, portanto, tudo se resumia em obter o conteúdo de células individuais e adicioná-lo ao SMS:
Exemplo de SMS enviado por este código:

Pode não parecer muito bonito, mas é muito informativo.
O fato de Lauren poder agora seguir as atualizações automáticas da lista de convidados nos salvou muitas dores de cabeça. Como resultado, recebi a aprovação dela para a ampla integração do SMS, e logo essa ferramenta foi usada em quase todos os processos onde era possível. Algumas das aplicações eram óbvias, por exemplo, enviar notificações por SMS sobre o lançamento de um site de casamento (feito, aliás, no
Heroku ) ou trabalhar com listas de presentes de casamento e muitas outras soluções das quais tenho orgulho até hoje.
Festa gloriosa
Depois de compilar a lista de convidados e coletar respostas, chegou-se à lição, que geralmente é adiada para mais tarde - descobrindo as preferências de gosto dos convidados. O primeiro passo foi enviar outro SMS informando os convidados sobre a necessidade de visitar o site e selecionar as categorias de alimentos servidos no formulário do Google. O formulário parecia bastante comum, mas preenchia o mesmo arquivo no qual havia dados sobre os visitantes. Assim, agora tínhamos uma mesa de visitantes que aceitava convites e uma mesa que preenchia o formulário de seleção de alimentos. Se estivéssemos conversando sobre qualquer ferramenta de automação comum, eu teria que esperar os convidados escolherem lentamente seus pratos, mas meu casamento foi realizado com o apoio do Twillio, e isso significa que eu poderia receber uma resposta dos convidados com o mínimo esforço.
Foi necessário verificar duas tabelas pelo nome dos convidados e atualizar o status dos pratos selecionados após o recebimento de novas informações. Isso exigiu alguns sinos e assobios adicionais no código, mas assim que eu terminei com eles, eu poderia executar o script o mais rápido possível, recebendo um SMS com as informações mais recentes:
import json import time import gspread from oauth2client.client import SignedJwtAssertionCredentials from twilio.rest import TwilioRestClient
Agora que eu tinha uma lista de convidados precisa e uma lista de pratos constantemente atualizada, fazia sentido disponibilizar essas estatísticas publicamente usando o aplicativo principal. Para isso, foi necessário adicionar apenas o conteúdo das células correspondentes à resposta do SMS:

Essa medida acabou sendo muito útil, pois permitiu que a empresa que estava servindo o feriado estivesse ciente de nosso progresso e forneceu informações muito práticas daqueles que ainda não haviam feito sua escolha. O próximo candidato à automação foi o processo de receber respostas dos convidados. Para isso, bastava percorrer a lista, encontrar nela "violadores" que não escolheram seus pratos e enviar mensagens a eles!
for num in range(2, 72):

O grande dia estava chegando mais rápido do que imaginávamos. A única coisa que resta a fazer é enviar o último SMS, lembrando aos convidados os detalhes básicos e a necessidade de se armar com um guarda-chuva, o que ajudará a proteger contra o verão britânico tipicamente chuvoso:

Em conclusão
Organizar um casamento nunca é fácil. A qualquer momento, pode parecer que muitos aspectos do evento estão fora de seu controle. A automação definitivamente facilitou minha vida, fornecendo um canal direto de comunicação com os hóspedes e inúmeras ferramentas para seguir suas respostas e lembrá-las de qualquer necessidade de decidir e responder. Ela nos ajudou a tomar um dos assuntos mais tediosos que acompanha esses eventos em nossas próprias mãos, nos permitiu liberar muito tempo e focar em outros componentes importantes de um evento tão importante em nossas vidas.
Criar soluções escaláveis para tarefas complexas nunca é fácil, e mesmo uma das versões finais do meu aplicativo mal consegue lidar com as tarefas em alguns lugares. Inicialmente, planejei desenvolver uma solução mais abrangente, com visualização do progresso, integração de voz, menos dependente dos scripts da CLI, mas o tempo prevaleceu nessa corrida. Em geral, estou satisfeito com o resultado. Não há sistemas de comunicação perfeitos. Você deve sempre usar o canal mais adequado ao seu público, seja
SMS ,
voz ,
bate-papo ,
vídeo ou
semáforo .
Se você quiser falar sobre automação de casamentos, envie-me um email no
Twitter .
