At Honeybadger we use Help Scout to manage our customer support, and that has worked out well for us. One thing I’ve wanted for quite a while is more integration between Help Scout, our internal dashboard, and the Stripe dashboard. After taking a mini-vacation to attend MicroConf this week, I decided it was time to make my dreams come true. :)
Help Scout allows you to plug “apps” into their UI, and you can build your own apps to populate the sidebar when looking at a help ticket. All you have to do is provide a URL that Help Scout can hit which returns a blob of HTML to be rendered on the page. Your app receives a signed POST request where the payload is some information about the support ticket you are viewing, which includes the email address of the person who created the ticket. Here’s a Rails controller that receives the request, verifies the signature, and returns some HTML for the user found by email address:
require 'base64'
require 'hmac-sha1'
class HelpscoutController < ApplicationController
skip_before_filter :verify_authenticity_token
before_filter :verify_signature
def user
payload = JSON.parse(request.raw_post)
if payload['customer'] && payload['customer']['email'] && @user = User.where(email: payload['customer']['email']).first
render json: { html: render_to_string(action: :user, layout: false) }
else
render json: { html: "User not found" }
end
end
protected
def verify_signature
bail and return false unless (sig = request.headers['X-Helpscout-Signature']).present?
(hmac = HMAC::SHA1.new("secret-that-you-enter-in-helpscout's-ui")).update(request.raw_post)
bail and return false unless sig.strip == Base64.encode64(hmac.digest).strip
end
def bail
render json: { html: "Bad signature" }, status: 403
end
end
After fetching the user record, it returns a blob of HTML via a HAML view:
%ul
%li Created on #{l(@user.created_at.to_date, format: :long)}
Then you’re done! Now when you view a ticket in Help Scout you’ll see info from your database about that user in the sidebar.
Comments