Hey there, fellow Ruby enthusiast! Ready to supercharge your chatbot game with Landbot? You're in the right place. We're going to walk through building a Landbot API integration that'll make your bots smarter, faster, and more powerful. Let's dive in!
Before we get our hands dirty, make sure you've got:
faraday
, but you do you)First things first, let's get our project off the ground:
mkdir landbot_integration && cd landbot_integration bundle init
Now, crack open that Gemfile and add:
gem 'faraday' gem 'json'
Run bundle install
, and we're off to the races!
Time to make friends with the Landbot API. Create a new file, landbot_client.rb
:
require 'faraday' require 'json' class LandbotClient BASE_URL = 'https://api.landbot.io/v1' def initialize(api_key) @conn = Faraday.new(url: BASE_URL) do |faraday| faraday.headers['Authorization'] = "Token #{api_key}" faraday.headers['Content-Type'] = 'application/json' faraday.adapter Faraday.default_adapter end end # We'll add more methods here soon! end
Let's add some basic operations to our client:
class LandbotClient # ... previous code ... def get_bot(bot_id) response = @conn.get("bots/#{bot_id}") JSON.parse(response.body) end def create_bot(name, template_id) response = @conn.post('bots', { name: name, template: template_id }.to_json) JSON.parse(response.body) end def update_bot(bot_id, settings) response = @conn.patch("bots/#{bot_id}", settings.to_json) JSON.parse(response.body) end end
Now, let's add some conversation magic:
class LandbotClient # ... previous code ... def get_conversations(bot_id) response = @conn.get("bots/#{bot_id}/customers") JSON.parse(response.body) end def send_message(customer_id, message) response = @conn.post("customers/#{customer_id}/send_message", { message: message }.to_json) JSON.parse(response.body) end end
For webhooks, you'll need to set up an endpoint in your web framework of choice. Here's a quick example using Sinatra:
require 'sinatra' require 'json' post '/landbot_webhook' do payload = JSON.parse(request.body.read) # Process the webhook payload # You might want to trigger a specific action based on the payload content status 200 end
Custom blocks are where things get really interesting. Here's a simple example:
class LandbotClient # ... previous code ... def create_custom_block(bot_id, block_data) response = @conn.post("bots/#{bot_id}/blocks", block_data.to_json) JSON.parse(response.body) end end # Usage client = LandbotClient.new('your_api_key') block_data = { type: 'text', message: 'This is a custom block!', next: 'some_block_id' } client.create_custom_block('your_bot_id', block_data)
Always expect the unexpected:
class LandbotClient # ... previous code ... private def handle_response(response) case response.status when 200..299 JSON.parse(response.body) when 429 raise "Rate limit exceeded. Try again in #{response.headers['Retry-After']} seconds." else raise "API error: #{response.status} - #{response.body}" end end end
Don't forget to test! Here's a quick RSpec example:
require 'rspec' require_relative 'landbot_client' RSpec.describe LandbotClient do let(:client) { LandbotClient.new('fake_api_key') } it 'fetches bot information' do # Mock the API response allow_any_instance_of(Faraday::Connection).to receive(:get).and_return(double(body: '{"id": "123", "name": "Test Bot"}')) bot = client.get_bot('123') expect(bot['name']).to eq('Test Bot') end end
When deploying, remember:
And there you have it! You've just built a solid foundation for your Landbot API integration in Ruby. Remember, this is just the beginning – there's so much more you can do with the Landbot API. Keep exploring, keep building, and most importantly, keep having fun with it!
Happy coding, Rubyist! 🚀