<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>has_many :thoughts: Tag 37signals</title>
    <link>http://blog.kineticweb.com/articles/tag/37signals</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Musings from a Ruby on Rails development team</description>
    <item>
      <title>Highrise API and tagging</title>
      <description>&lt;p&gt;Like &lt;a href="http://forum.37signals.com/highrise/forums/15/topics/1312"&gt;many&lt;/a&gt;, I was disappointed that the &lt;a href="http://www.highrisehq.com/"&gt;Highrise&lt;/a&gt; &lt;a href="http://developer.37signals.com/highrise/"&gt;&lt;span class="caps"&gt;API&lt;/span&gt;&lt;/a&gt; does not support tagging of people. However, I found a way to easily add the capability to the 37signals-supplied Ruby wrapper class, even if it is unsupported. I added a &lt;code&gt;#tag!&lt;/code&gt; instance method to the Person class and used a call directly to the site, not through the &lt;span class="caps"&gt;API&lt;/span&gt;.&lt;/p&gt;


&lt;pre&gt;
class Person &amp;lt; Subject
  ...
  def tag!(tag_name)
    `curl -s -d 'name=#{tag_name}' #{ENV['HIGHRISE_URL']}parties/#{id}/tags`
  end
end
&lt;/pre&gt;

	&lt;p&gt;The output is a bunch of javascript to update the page to reflect the change, but one can safely ignore this. The tag is added and everything works great. Not sure how well this would work on Windows, as the &lt;code&gt;curl&lt;/code&gt; command-line program is likely unavailable.&lt;/p&gt;


	&lt;p&gt;We use this method in our latest project to add appropriate tags to people as they are created. It helps us segment people added to Highrise for the project from the rest of our contacts in Highrise.&lt;/p&gt;</description>
      <pubDate>Mon, 18 Feb 2008 13:28:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8162daad-bcb1-4b7f-a3df-e1c8c8a840e0</guid>
      <author>Colin A. Bartlett</author>
      <link>http://blog.kineticweb.com/articles/2008/02/18/highrise-api-and-tagging</link>
      <category>highrise</category>
      <category>ruby</category>
      <category>Rails</category>
      <category>37signals</category>
    </item>
    <item>
      <title>Voicemail integration with Highrise</title>
      <description>&lt;p&gt;I&amp;#8217;ve often had trouble keeping track of my voicemail messages. Even though they get emailed to me, the emails don&amp;#8217;t have any info about who the messages are from and I have no way of keeping track of if I&amp;#8217;ve responded or if there&amp;#8217;s an action item.&lt;/p&gt;


	&lt;p&gt;So I wrote a simple little Rails app to help me integrate my voicemail message into Highrise, the 37signals product which I&amp;#8217;ve been trying, and liking, in recent weeks. Their provided &lt;span class="caps"&gt;REST&lt;/span&gt; web service &lt;span class="caps"&gt;API&lt;/span&gt; and accompanying Ruby wrapper made the whole thing way too easy. I have two models:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Person&lt;/li&gt;
		&lt;li&gt;Voicemail&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;The Person model holds a cached list of the names and Highrise ID&amp;#8217;s of the people in my Highrise account. I can update this through a simple link in the app anytime I need.&lt;/p&gt;


	&lt;p&gt;The voicemails get into the app by a simple little &amp;#8220;pipe to program&amp;#8221; I added on the mail server. Something like this:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;curl -u username:password --data-binary @- http://address.of.app/import&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;When an email message is received at the voicemail alias, the entire email is POSTed to the address above where it&amp;#8217;s consumed with a tiny controller action like like:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;Voicemail.import(request.raw_post)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;The &amp;#8216;import&amp;#8217; class method simply uses TMail to parse the message, pull off the attached &lt;span class="caps"&gt;WAV&lt;/span&gt; file, save it to the file system, and create a new Voicemail record.&lt;/p&gt;


	&lt;p&gt;The rest of the interface is simple &lt;span class="caps"&gt;CRUD&lt;/span&gt; stuff: A list of new voicemails that have come in with a link to delete and a link to save for each one. When I &amp;#8216;save&amp;#8217; it, I choose a Person from a drop down of all my Highrise contacts and enter a very short 1 line description of what they called about. A note is instantly posted to the Person&amp;#8217;s Highrise history with the time of the voicemail, the 1-line description, and a link to listen to the voicemail. If 37signals provided file upload capability through the &lt;span class="caps"&gt;API&lt;/span&gt;, I might just upload the file to Highrise. Or I might not since the &lt;span class="caps"&gt;WAV&lt;/span&gt;&amp;#8217;s would eat up my storage space.&lt;/p&gt;


	&lt;p&gt;I hope to expand this a bit in the near future with a nice interface&amp;#8212;perhaps autocomplete instead of a drop down for choosing the Person. And I think I&amp;#8217;ll add a way to optionally create a Task in Highrise related to the Note. It would be nice if Highrise color-coded the categories applied to tasks; that way, I could categorize all the voicemail follow-up tasks and color code them so they stood out in my task list. I&amp;#8217;ll have to submit that as a feature request.&lt;/p&gt;


	&lt;h2&gt;Update&lt;/h2&gt;


	&lt;p&gt;Here&amp;#8217;s a screenshot, per Jason&amp;#8217;s request. Click for a full sized version. As you can see, the interface is very modest.
&lt;a href="http://blog.kineticweb.com/files/voicemails_screenshot.png"&gt;&lt;img src="http://blog.kineticweb.com/files/voicemails_screenshot_sm.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


Since the original posting, I changed a couple things:
	&lt;ul&gt;
	&lt;li&gt;I&amp;#8217;ve linked the person&amp;#8217;s name to their Highrise page&lt;/li&gt;
		&lt;li&gt;The little note icon on the left takes you to the note in Highrise that was created for this voicemail&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Fri, 01 Feb 2008 07:23:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2820418f-8e1b-4e95-b021-a101549ef745</guid>
      <author>Colin A. Bartlett</author>
      <link>http://blog.kineticweb.com/articles/2008/02/01/voicemail-integration-with-highrise</link>
      <category>Rails</category>
      <category>highrise</category>
      <category>37signals</category>
    </item>
  </channel>
</rss>
