Hey there, fellow developer! Ready to supercharge your marketing efforts with Zoho Campaigns? Let's dive into building a robust API integration using Ruby. Zoho Campaigns offers a powerful API that'll let you automate your email marketing tasks, and we're going to harness that power today.
Before we jump in, make sure you've got:
First things first, let's get our project structure in place:
mkdir zoho_campaigns_integration cd zoho_campaigns_integration bundle init
Now, open up that Gemfile and add these gems:
gem 'httparty' gem 'dotenv'
Run bundle install
, and we're off to the races!
Zoho uses OAuth 2.0, so let's tackle that first:
require 'httparty' require 'dotenv/load' class ZohoAuth TOKEN_URL = 'https://accounts.zoho.com/oauth/v2/token' def self.get_access_token response = HTTParty.post(TOKEN_URL, body: { refresh_token: ENV['ZOHO_REFRESH_TOKEN'], client_id: ENV['ZOHO_CLIENT_ID'], client_secret: ENV['ZOHO_CLIENT_SECRET'], grant_type: 'refresh_token' }) JSON.parse(response.body)['access_token'] end end
Pro tip: Use a .env
file to store your credentials. Never commit this to version control!
Now that we're authenticated, let's make some requests:
class ZohoCampaigns include HTTParty base_uri 'https://campaigns.zoho.com/api/v1.1' def initialize @options = { headers: { 'Authorization' => "Zoho-oauthtoken #{ZohoAuth.get_access_token}" } } end def get_mailing_lists self.class.get('/getmailinglists', @options) end def create_campaign(data) self.class.post('/createcampaign', @options.merge(body: data)) end end
Let's implement some key features:
class ZohoCampaigns # ... previous code ... def add_subscriber(list_key, subscriber_data) self.class.post("/json/listsubscribe?resfmt=JSON&listkey=#{list_key}", @options.merge(body: subscriber_data)) end def send_campaign(campaign_key) self.class.post("/sendcampaign?resfmt=JSON&campaignkey=#{campaign_key}", @options) end def get_campaign_report(campaign_key) self.class.get("/getanalyticsdetails?resfmt=JSON&campaignkey=#{campaign_key}", @options) end end
Always be prepared for the unexpected:
class ZohoCampaigns # ... previous code ... def handle_response(response) case response.code when 200 JSON.parse(response.body) when 429 sleep(60) # Wait for a minute if rate limited retry else raise "API request failed: #{response.code} - #{response.body}" end end end
Don't forget to test! Here's a quick RSpec example:
RSpec.describe ZohoCampaigns do let(:client) { ZohoCampaigns.new } it "fetches mailing lists successfully" do lists = client.get_mailing_lists expect(lists).to be_an(Array) expect(lists.first).to have_key('listkey') end # Add more tests for other methods end
Remember to cache your access token and refresh it only when needed. Also, batch your requests when possible to minimize API calls.
And there you have it! You've just built a solid foundation for integrating Zoho Campaigns into your Ruby projects. From here, you can expand on this base, adding more specific functionalities as needed.
Remember, the Zoho Campaigns API documentation is your best friend for diving deeper. Now go forth and conquer those email campaigns!
Happy coding, and may your open rates be ever in your favor! 🚀📧