Skip to content
/ mrkt Public
forked from raszi/mrkt

This gem provides some level of abstraction to Marketo REST APIs.

License

Notifications You must be signed in to change notification settings

ormtech/mrkt

 
 

Repository files navigation

Mrkt

Build Status Code Climate Test Coverage

This gem provides some level of abstraction to Marketo REST APIs. Please note that this gem is alpha quality.

Installation

Add this line to your application's Gemfile:

gem 'mrkt'

And then execute:

$ bundle

Or install it yourself as:

$ gem install mrkt

Prerequisites

Get the following from your Marketo admin:

  • hostname, i.e. '123-abc-123.mktorest.com'
  • client id, e.g. '4567e1cdf-0fae-4685-a914-5be45043f2d8'
  • client secret, e.g. '7Gn0tuiHZiDHnzeu9P14uDQcSx9xIPPt'

Usage

Create a client and authenticate

client = Mrkt::Client.new(
  host: '123-abc-123.mktorest.com', 
  client_id:  '4567e1cdf-0fae-4685-a914-5be45043f2d8', 
  client_secret: '7Gn0tuiHZiDHnzeu9P14uDQcSx9xIPPt')

If you need verbosity during troubleshooting, set the client to debug mode

client.debug = true

Get leads matching an email, print their id and email

response = client.get_leads(:email, ['sammy@acme.com'])
response[:result].each do |result|
  p "id: #{result[:id]}, email: #{result[:email]}"
end

Create/Update leads

response = client.createupdate_leads([{ email: 'sample@example.com', firstName: 'John' }], lookup_field: :email)
response[:result].each do |result|
  p "id: #{result[:id]}, email: #{result[:email]}"
end

Run a smart campaign on existing leads

campaign_id = 42        # this is the ID of the campaign
lead_ids    = [1, 2, 4] # these are the leads who receive the campaign
tokens      = [{        # these tokens (optional) are then passed to the campaign
                 name:  '{{my.message}}',
                 value: 'Updated message'
               }, {
                 name:  '{{my.other token}}',
                 value: 'Value for other token'
               }]
client.request_campaign(campaign_id, lead_ids, tokens) # tokens can be omited
=> { requestId: 'e42b#14272d07d78', success: true }

Connection Customization

The underlying Faraday connection can be completely customized

connection = Faraday.new(url: 'https://123-abc-123.mktorest.com') do |conn|
  conn.request :multipart                       # required
  conn.request :url_encoded                     # required

  # Add request middleware to retry failed requests
  conn.request(:retry,
    max:                 10,
    interval:            0.05,
    interval_randomness: 0.5,
    backoff_factor:      2,
    exceptions: [
      Errno::ETIMEDOUT,
      'Timeout::Error',
      ::Faraday::Error::TimeoutError,
      ::Faraday::ConnectionFailed
    ]
  )

  conn.response :logger, Rails.logger           # Add a custom logger
  conn.response :mkto, content_type: /\bjson$/  # required

  conn.adapter Faraday.default_adapter
end

client = Mrkt::Client.new(
  connection:    connection,
  host:          '123-abc-123.mktorest.com',
  client_id:     '4567e1cdf-0fae-4685-a914-5be45043f2d8',
  client_secret: '7Gn0tuiHZiDHnzeu9P14uDQcSx9xIPPt')

Run Tests

$ bundle exec rspec

Examples

Examples are in the spec/ directory.

Contributing

  1. Fork it ( https://github.com/raszi/mrkt/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

About

This gem provides some level of abstraction to Marketo REST APIs.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%