Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Realize o sonho do chatbot próprio com Lita!

Odinei Ramone
December 13, 2018

Realize o sonho do chatbot próprio com Lita!

Chatbots estão em alta e muitas empresas utilizam esses recursos como uma forma de atender seus clientes por meio de redes sociais e aplicativos de chat. Mas será que não podemos fugir um pouco dessa complexidade e construir bots mais simples e especializados em realizar tarefas maçantes para nós? Vamos ver como construir um chatbot usando Ruby e a poderosa biblioteca Lita. Veremos também como consumir API’s, tratar respostas e enviá-las através de aplicativos de chat. Ao final veremos algumas sugestões de API’s para que você crie seu próprio chatbot!

Odinei Ramone

December 13, 2018
Tweet

More Decks by Odinei Ramone

Other Decks in Technology

Transcript

  1. Sobre mim! → Escrevo no codingwithchopsticks.github.io → Meu twitter é

    o @odineiramone → Meu telegram é o t.me/odineiramone
  2. # waking_up.rb if odinei.woke_up? odinei.open_eyes odinei.what_time_is_it odinei.check_weather # -> sucks

    # more stuff.. end Realize o sonho do chatbot próprio com Lita - @odineiramone
  3. # me.rb def check_weather 3.times do check_social_networks_for_a_long_time end weather =

    http.get('weathertimeis.com/my-house') weather.search_by(day: Time.zone.today) end Realize o sonho do chatbot próprio com Lita - @odineiramone
  4. # me.rb def check_weather 3.times do check_social_networks_for_a_long_time # oh boy...

    end weather = http.get('weathertimeis.com/my-house') weather.search_by(day: Time.zone.today) end Realize o sonho do chatbot próprio com Lita - @odineiramone
  5. "Se leva mais que 90 segundos, automatize!" - Desenvolvedor demitido

    por automatizar demais1. 1 Homem fica 6 anos sem fazer nada após automatizar seu trabalho.
  6. Chatbots? ! → Chatbots são programas de computador que tentam

    simular um ser humano na conversação com as pessoas - Wikipédia Realize o sonho do chatbot próprio com Lita - @odineiramone
  7. Como podem ajudar? → Facilitando tarefas simples que fazemos todo

    dia mas odiamos fazer. Realize o sonho do chatbot próprio com Lita - @odineiramone
  8. Lita → Código fonte em ruby → Vários adapters disponíveis

    → Muitos (muitos mesmo) plugins disponíveis → Possibilidade de usar o ecossistema ruby →Gems, Bundler... Realize o sonho do chatbot próprio com Lita - @odineiramone
  9. Requisitos → Ruby 2.x → Redis 2.6+ Realize o sonho

    do chatbot próprio com Lita - @odineiramone
  10. Criando seu bot! $ lita new create lita create lita/Gemfile

    create lita/lita_config.rb Realize o sonho do chatbot próprio com Lita - @odineiramone
  11. Iniciando seu bot! $ lita start Lita > lita help

    Lita: help - Lists help informat... # lot of helping stuff Realize o sonho do chatbot próprio com Lita - @odineiramone
  12. Nomeando seu bot! # lita_config.rb Lita.configure do |config| # The

    name your robot will use. config.robot.name = 'Dear Cinnamon Tea' end Realize o sonho do chatbot próprio com Lita - @odineiramone
  13. Nomeando seu bot! $ lita start Dear Cinnamon Tea >

    lita help Dear Cinnamon Tea > Dear Cinnamon Tea help Dear Cinnamon Tea: help - Lists help informat... # lot of helping stuff Realize o sonho do chatbot próprio com Lita - @odineiramone
  14. Handlers! # handlers/hello_lita.rb module Lita module Handlers class HelloLita <

    Handler route(/o que você quer fazer hoje?/, :take_over_the_world) # ... Lita.register_handler(self) end end end Realize o sonho do chatbot próprio com Lita - @odineiramone
  15. Handlers! # handlers/hello_lita.rb module Lita module Handlers class HelloLita <

    Handler route(/o que você quer fazer hoje?/, :take_over_the_world) # ... Lita.register_handler(self) end end end Realize o sonho do chatbot próprio com Lita - @odineiramone
  16. Handlers! # handlers/hello_lita.rb def take_over_the_world(response) response.reply( 'A mesma coisa que

    fazemos todas as noite... Tentar dominar o mundo!' ) end Realize o sonho do chatbot próprio com Lita - @odineiramone
  17. Handlers! # handlers/hello_lita.rb module Lita module Handlers class HelloLita <

    Handler route(/o que você quer fazer hoje?/, :take_over_the_world) def take_over_the_world(response) response.reply( 'A mesma coisa que fazemos todas as noite... Tentar dominar o mundo!' ) end Lita.register_handler(self) end end end Realize o sonho do chatbot próprio com Lita - @odineiramone
  18. Handlers! $ lita start Dear Cinnamon Tea > Dear Cinnamon

    Tea, o que você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Realize o sonho do chatbot próprio com Lita - @odineiramone
  19. Handlers! Dear Cinnamon Tea > Dear Cinnamon Tea, o que

    você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Dear Cinnamon Tea > o que você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Dear Cinnamon Tea >"o que você quer fazer hoje?" é de um desenho? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Realize o sonho do chatbot próprio com Lita - @odineiramone
  20. Handlers! Dear Cinnamon Tea > Dear Cinnamon Tea, o que

    você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Dear Cinnamon Tea > o que você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Dear Cinnamon Tea >"o que você quer fazer hoje?" é de um desenho? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Realize o sonho do chatbot próprio com Lita - @odineiramone
  21. In-chat help! # handlers/ping.rb module Lita module Handlers class Ping

    < Handler route(/ping/, :pong, command: true, help: { ping: "responde com PONG" }) def pong response response.reply "PONG" end Lita.register_handler(self) end end end Realize o sonho do chatbot próprio com Lita - @odineiramone
  22. In-chat help! # handlers/ping.rb class Ping < Handler route(/ping/, :pong,

    command: true, help: { ping: "responde com PONG" } ) # ... end Realize o sonho do chatbot próprio com Lita - @odineiramone
  23. In-chat help! Dear Cinnamon Tea > dear cinnamon tea help

    ping Dear Cinnamon Tea: ping - responde com PONG Realize o sonho do chatbot próprio com Lita - @odineiramone
  24. Hear class HelloLita < Handler route(/o que você quer fazer

    hoje?/, :take_over_the_world command: false # default ) end Realize o sonho do chatbot próprio com Lita - @odineiramone
  25. Hear Dear Cinnamon Tea > Dear Cinnamon Tea, o que

    você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Dear Cinnamon Tea > o que você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Realize o sonho do chatbot próprio com Lita - @odineiramone
  26. Respond class HelloLita < Handler route(/o que você quer fazer

    hoje?/, :take_over_the_world command: true ) end Realize o sonho do chatbot próprio com Lita - @odineiramone
  27. Respond Dear Cinnamon Tea > Dear Cinnamon Tea, o que

    você quer fazer hoje? A mesma coisa que fazemos todas as noite... Tentar dominar o mundo! Dear Cinnamon Tea > o que você quer fazer hoje? Dear Cinnamon Tea > Realize o sonho do chatbot próprio com Lita - @odineiramone
  28. Hear vs Respond: Final Round → Hear →O bot vai

    responder à rota em qualquer mensagem, tendo o nome dele ou não. → Respond →A rota só será respondida se mensagem iniciar com o nome do bot. Realize o sonho do chatbot próprio com Lita - @odineiramone
  29. Testando com RSpec # spec/handlers/hello_lita.rb require './handlers/hello_lita' describe Lita::Handlers::HelloLita, lita_handler:

    true do it "print quote" do send_command('o que você quer fazer hoje?') expect(replies.last).to( eq('A mesma coisa que fazemos todas as noite... Tentar dominar o mundo!') ) end end Realize o sonho do chatbot próprio com Lita - @odineiramone
  30. Testando com RSpec $ rspec Lita::Handlers::HelloLita print quote Finished in

    0.01261 seconds (files took 0.44045 seconds to load) 1 example, 0 failures Realize o sonho do chatbot próprio com Lita - @odineiramone
  31. Chamadas de API class Weather < Handler route(/previsao do tempo/,

    :weather, command: true help: { weather: 'responde com a previsão do tempo para Sao Paulo, Brasil' } ) def weather(response) # ... end Lita.register_handler(self) end Realize o sonho do chatbot próprio com Lita - @odineiramone
  32. Chamadas de API def weather(response) http_response = http.get("weathertimeis.com/my-house") weather =

    MultiJson.load(http_response.body) temperature = weather['temperature'] sensation = weather['sensation'] response.reply( "Está fazendo #{temperature}˚C com aquele gostinho de #{sensation}˚C" ) end Realize o sonho do chatbot próprio com Lita - @odineiramone
  33. Chamadas de API Dear Cinnamon Tea > Dear Cinnamon Tea,

    previsao do tempo Está fazendo 13˚C com aquele gostinho de 13˚C Realize o sonho do chatbot próprio com Lita - @odineiramone
  34. Configuração # lita_config.rb Lita.configure do |config| config.robot.adapter = :telegram_plus #

    config.robot.adapter = :shell config.adapters.telegram_plus.token = 'ask_to_botfather' end Realize o sonho do chatbot próprio com Lita - @odineiramone
  35. Iniciando o servidor $ lita start I, [2018-10-21T03:13:39.223356 8236] INFO

    -- : Starting bot Realize o sonho do chatbot próprio com Lita - @odineiramone
  36. Instalação e configuração # lita_config.rb config.handlers.giphy.api_key = 'dc6zaTOxFJmzC' # Beta

    key ¯\_(ϑ)_/¯ config.handlers.giphy.rating = 'g' Realize o sonho do chatbot próprio com Lita - @odineiramone
  37. Configuração # lita_config.rb Lita.configure do |config| # É necessário instalar

    o Redis To Go # no seu app no Heroku config.redis[:url] = ENV['REDISTOGO_URL'] config.http.port = ENV['PORT'] end Realize o sonho do chatbot próprio com Lita - @odineiramone
  38. Deploy level hard $ git add . $ git commit

    -m "Awesome bot" $ git push heroku master Realize o sonho do chatbot próprio com Lita - @odineiramone
  39. Nunca mais eu vou dormir! $ heroku addons:create scheduler:standard $

    heroku addons:open scheduler Frequency: Realize o sonho do chatbot próprio com Lita - @odineiramone
  40. Nunca mais eu vou dormir! $ heroku addons:create scheduler:standard $

    heroku addons:open scheduler Frequency: ¯\_(ϑ)_/¯ Realize o sonho do chatbot próprio com Lita - @odineiramone
  41. Por que usar o Lita? Realize o sonho do chatbot

    próprio com Lita - @odineiramone
  42. Por que usar o Lita? → Simples → Ecossistema →

    Divertido → Ruby ! Realize o sonho do chatbot próprio com Lita - @odineiramone
  43. Links batutas → lita.io → docs.lita.io → github.com/odineiramone/dear-cinnamon-tea-bot (rubyconfbr-2018) →

    speakerdeck.com/odineiramone Realize o sonho do chatbot próprio com Lita - @odineiramone