Como, e porquê, é que eu desenvolvi um serviço de piadas secas por telefone?

Este post é um plug ao meu serviço de piadas secas por telefone (wtf) disponível em https://piadas.secas.club

Bem, começando pelo meu background, sou um engenheiro de software que se foca em fullstack development na web porque, de facto, desenrasco-me com a maior parte dos serviços na web, backend, frontend, sideend, whatever. Portanto este post vai ter tanbém uma componente técnica para vocês nerds.

Sempre tive extrema vontade de colocar qualquer coisa em produção, um pequeno serviço para o utilizador, útil ou não. Bem, acho que encontrei um pequeno serviço nada útil mas que segui em frente na mesma. Atribuindo os créditos a quem são devidos, a ideia original não foi minha, simplesmente discutida às três pancadas a uma hora de almoço. Uns meses depois resolvi entrar em acção e assim foi.

O que é que eu criei então? Um serviço onde recebes piadas secas por telefone. Sim, recebes (ou alguém recebe) uma chamada e um gajo (eu) conta uma piada seca (que foi gravada de antemão). That’s it. Nothing else. Claro que a ideia é enviar a chamada para alguém que conheças e que queiras trollar. Piadas.secas.club é o endereço, fácil de lembrar?

Se calhar vamos ao que interessa e passar a falar como tudo funciona. Este pequeno projecto tem 4componentes importantes: o backend em Rails que serve de backoffice e API, frontend desenvolvido utilizando Gatsby.js (essencialmente React que gera um site estático), o serviço Twilio para fazer as chamadas e por último Stripe para receber os pagamentos de forma segura.

Pondo isto num diagrama, a arquitectura é representada pela seguinte imagem.

Arquitectura geral

Do ponto de vista das chamadas, o funcionamento é bastante simples:

  1. O utilizador insere o número do destinatário
  2. O pagamento é efectuado pelo Stripe e o servidor valida o mesmo
  3. Após boa cobrança é iniciada uma chamada através da API do Twilio onde se comunica qual o áudio a reproduzir quando a chamada é atendida

O Twilio utiliza XML para a programar uma chamada ao que eles chamaram de TwiML. Se quiséssemos fazer Text-to-Speech podíamos utilizar a seguinte estrutura:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Hello World</Say>
</Response>

No caso do serviço de piadas secas, é reproduzido um MP3 alojado num S3 Bucket da AWS e o TwiML correspondente é:

<Response>
<Play loop="10">https://api.twilio.com/cowbell.mp3</Play>
</Response>

Quando é criada uma requisição de chamada, o sistema aleatoriamente atribui uma das dezenas de piadas secas gravadas, assim nunca se sabe com que piada contar.

O Twilio também oferece callbacks de forma a comunicar os vários estados de uma chamada e isso é utilizado para saber se uma chamada foi completada ou não. Esta informação é depois utilizada para saber se se deve realizar novamente uma chamada no caso de ela não ser atendida à 1ª vez.

Para pagamentos foi implementado o Stripe por ter uma API simples e já bastantes bibliotecas em várias linguagens, incluindo Ruby. Um dos próximos passos seria implementar Paypal e/ou MBWay, para cobrir mais utilizadores.

O frontend foi desenvolvido em Gatsby.js por já estar familiarizado com a biblioteca e com React. Gatsby gera uma página estática (good for SEO e performance) que pode ser servida a partir de qualquer servidor. Netlify é um serviço simples que permite buildar e servir este tipo de páginas. Basta fazer git push que o Netlify recebe notificação e faz deploy das novas páginas.

Em termos de design também fui eu. Tentei-me basear num estilo cartoon, banda desenhada que dá aquele ar também meio cómico. CSS e styled-components FTW. Não sou designer nem lá perto mas, sem me querer gabar, acho que ficou impec.

Para o Backend foi utilizado Ruby on Rails por ser estupidamente fácil de fazer bootstrap de tudo. Nesta framework é-nos oferecido montes de funcionalidades e gems que se podem instalar que já fazem quase tudo por ti. Portanto foi fácil de criar um painel administrativo com a gem Administrate . Tanto o servidor como a base de dados estão alojados numa VPS da Scaleway (era cheap). Os deploys são feitos recorrendo à gem capistrano que automatiza praticamente todo o processo.

Voltando a falar do serviço de piadas, criei packs de chamadas (várias por um preço inferior), submissão de piadas secas e tudo com um copy num tom meio cómico.

Com este tipo de serviços levanta-se sempre a questão da privacidade dos dados. Levo este assunto muito a sério e nos dias que correm chateia-me imenso o que as empresas têm feito com os dados dos consumidores. Com isto quero comunicar que nenhum dado introduzido é comercializado nem transmitido a entidades terceiras. Os dados serão mantidos nos servidores locais pelo menor tempo possível. Requisitos de chamadas que não são concretizadas (não pagas) são apagadas do sistema numa questão de minutos. Chamadas que foram concretizadas terão o número de telefone redactado após semanas (dado não ser necessário manter este registo).

Com isto espero que gostem e usufruam do serviço tanto como eu gostei de o desenvolver, nem que seja pela piada.

Fiquem impecáveis e que tenham um dia particularmente espectacular. Tomem aí uns códigos de desconto nas próximas chamadas de piadas secas: E3C0AFE0, 13CC3D33, 156E1DE8, 8E05A891, 41F715CF, 0C0DC079

Piadas.secas.club

https://piadas.secas.club