<!-- Don't steal my work! Questions or comments? Head to arnaud.detheux.org to contact me or tweet @AdeTheux -->

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arnaud de Theux • Blog</title>
	<atom:link href="http://arnaud.detheux.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://arnaud.detheux.org/blog</link>
	<description></description>
	<lastBuildDate>Mon, 29 Apr 2013 16:22:22 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Zendesk: hide the name of submitter and date in forum article</title>
		<link>http://arnaud.detheux.org/blog/29/04/2013/zendesk-hide-the-name-of-submitter-and-date-in-forum-article/</link>
		<comments>http://arnaud.detheux.org/blog/29/04/2013/zendesk-hide-the-name-of-submitter-and-date-in-forum-article/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 16:13:11 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Customer Support]]></category>
		<category><![CDATA[zendesk]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=524</guid>
		<description><![CDATA[The Problem It&#8217;s a request we have quite often so, even though it&#8217;s a one line of code, I thought it might be useful to share this! If you don&#8217;t want your name to be tied to a forum article, &#8230; <a href="http://arnaud.detheux.org/blog/29/04/2013/zendesk-hide-the-name-of-submitter-and-date-in-forum-article/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h5>The Problem</h5>
<p>It&#8217;s a request we have quite often so, even though it&#8217;s a one line of code, I thought it might be useful to share this! <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>If you don&#8217;t want your name to be tied to a forum article, you can create a fake Zendesk user just to post articles.<br />Another easy way is to use this bit of code to remove entirely the date and the forum submitter name.</p>
<p> An article will look like this:<br />
<a href="http://arnaud.detheux.org/blog/wp-content/uploads/2013/04/Screen-Shot-2013-04-29-at-16.58.12.png"><img src="http://arnaud.detheux.org/blog/wp-content/uploads/2013/04/Screen-Shot-2013-04-29-at-16.58.12.png" alt="Screen Shot 2013-04-29 at 16.58.12" width="321" height="99" class="aligncenter size-full wp-image-526 ing" /></a></p>
<p>Create a Global JavaScript widget and put in there the following code.</p>
<h5>The code</h5>
<pre class="brush: js">$j(".entry-container p.entry_user").hide();</pre>
<p>It&#8217;s available on my <a title="GitHub" href="https://github.com/Chompy86/Zendesk-widgets/blob/master/hide_forums_details.js" target="_blank">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/29/04/2013/zendesk-hide-the-name-of-submitter-and-date-in-forum-article/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zendesk: hide ticket fields based on a user&#8217;s organisation</title>
		<link>http://arnaud.detheux.org/blog/10/11/2012/zendesk-hide-ticket-fields-based-on-a-users-organisation/</link>
		<comments>http://arnaud.detheux.org/blog/10/11/2012/zendesk-hide-ticket-fields-based-on-a-users-organisation/#comments</comments>
		<pubDate>Sat, 10 Nov 2012 22:44:50 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Customer Support]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hide]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[zendesk]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=513</guid>
		<description><![CDATA[It&#8217;s cool to display ticket fields to agents and/or end users, but what if you have different organisations in the same Zendesk and want to hide specific fields only for people in a specific organisation? Well, say no more! The &#8230; <a href="http://arnaud.detheux.org/blog/10/11/2012/zendesk-hide-ticket-fields-based-on-a-users-organisation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s cool to display ticket fields to agents and/or end users, but what if you have different organisations in the same Zendesk and want to hide specific fields only for people in a specific organisation? Well, say no more! <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h5>The requirement</h5>
<p>In one of my Zendesk environment I have 3 organisations: organisation of customer 1, organisation of customer 2 and our internal organisation (our company). Whenever end users, agents or light agents from our company are checking a ticket, I want them to see a specific ticket field that contains an internal reference. If people from organisation of customer 1 or 2 are checking out the same ticket I don&#8217;t want them to see that internal reference.</p>
<h5>The solution</h5>
<p>Create a Global JavaScript extension in which you replace var organization_ids = [<em>20863746</em>] by the actual ID of the organisation that shouldn&#8217;t see the field (you can have the ID via Manage&gt; People&gt; Organisations) and replace id_to_remove = &#8220;#ticket_fields_<em>20813026</em>&#8221; by the unique ID of your custom field. Or even, by modifying the code a bit, simply put there the CSS ID of the field.</p>
<pre class="brush: js">//START hide field based on organisation
jQuery(function($) {
	var organization_ids = [22071016],
//Insert here the ID from the organisation which shouldn't see the field
		id_to_remove = "#ticket_fields_20813026",
//Insert here the ID of custom field or the DIV ID of a system field you want to hide
		user_url = jQuery("a#top-right-name").attr("href");

	jQuery.getJSON(user_url, {}, function(data){
	 if (organization_ids.indexOf(data.organization_id) >= 0){
	 	jQuery(id_to_remove).parent().remove()
	 }
	})
})
//END hide field based on organisation</pre>
<h5>The result</h5>
<p>This is the internal view<a href="http://arnaud.detheux.org/blog/wp-content/uploads/2012/11/field_nothidden_by_org-copy.png"><img class="aligncenter size-full wp-image-514" title="Field not hidden" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/11/field_nothidden_by_org-copy.png" alt="" width="1807" height="489" /></a></p>
<p>This is the customer&#8217;s view. Hey, something disappeared!</p>
<p><a href="http://arnaud.detheux.org/blog/wp-content/uploads/2012/11/field_hidden_by_org.png"><img class="aligncenter size-full wp-image-515" title="Field hidden" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/11/field_hidden_by_org.png" alt="" width="1807" height="489" /></a></p>
<p>&nbsp;</p>
<h5>The source</h5>
<p>Available on <a href="https://github.com/Chompy86/Zendesk-widgets/blob/master/zendesk_hide_ticket_field_based_on_org.js" target="_blank">my GitHub account</a></p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/10/11/2012/zendesk-hide-ticket-fields-based-on-a-users-organisation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reset the ECU of a 370Z: harder than cheating on an arcade console</title>
		<link>http://arnaud.detheux.org/blog/09/10/2012/reset-the-ecu-of-a-370z-harder-than-cheating-on-an-arcade-console/</link>
		<comments>http://arnaud.detheux.org/blog/09/10/2012/reset-the-ecu-of-a-370z-harder-than-cheating-on-an-arcade-console/#comments</comments>
		<pubDate>Tue, 09 Oct 2012 19:24:05 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Cars]]></category>
		<category><![CDATA[370Z]]></category>
		<category><![CDATA[cars]]></category>
		<category><![CDATA[ecu]]></category>
		<category><![CDATA[nissan]]></category>
		<category><![CDATA[reset]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=506</guid>
		<description><![CDATA[Resetting the ECU of your car might be useful if you mod it in any way, if you just bought it second hand and want it to &#8220;learn&#8221; your driving style quickly or even if you experience weird average consumption. &#8230; <a href="http://arnaud.detheux.org/blog/09/10/2012/reset-the-ecu-of-a-370z-harder-than-cheating-on-an-arcade-console/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Resetting the <a title="ECU on Wiki" href="http://en.wikipedia.org/wiki/Engine_control_unit" target="_blank">ECU</a> of your car might be useful if you mod it in any way, if you just bought it second hand and want it to &#8220;learn&#8221; your driving style quickly or even if you experience weird average consumption.</p>
<p>You usually have two options: removing the negative plug of your battery (but also losing some settings on the on-board computer) or by a tricky plugs &amp; pedals games.<br />
Let&#8217;s hit the right-left-left-triangle-circle-left-right-right sequence <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ul>
<li>With accelerator pedal fully released, turn the ignition switch &#8220;ON&#8221; (= press twice on it) and wait 3 seconds</li>
<li>Fully depress and release the gas pedal 5 times (quickly and firmly)</li>
<li>Wait 7 seconds and fully depress the gas pedal and keep it for approximately 10 seconds until the SES light starts blinking (depending on your country, you will see either the &#8220;service engine soon&#8221; light or a light with an engine icon)</li>
</ul>
<p><a href="http://arnaud.detheux.org/blog/wp-content/uploads/2012/10/user3593_pic3595_1246072781.jpg"><img class="aligncenter size-full wp-image-507" title="SES light 370Z" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/10/user3593_pic3595_1246072781.jpg" alt="" width="341" height="259" /></a></p>
<ul>
<li>Fully release the gas pedal (while the SES light is still blinking)</li>
<li>Wait for about 10 seconds</li>
<li>Fully depress the gas pedal and keep it for more than 10 seconds</li>
<li>Fully release the gas pedal  (the SES light is still blinking)</li>
<li>Turn ignition switch to &#8220;OFF&#8221; position and now you can start the car</li>
</ul>
<p>After a reset, you <em>should </em>drive reasonably to avoid weird results in the first 50 or so kilometres. The best result can be achieved by doing a trip on the highway.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/09/10/2012/reset-the-ecu-of-a-370z-harder-than-cheating-on-an-arcade-console/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Add the backspace key shortcut back to Safari 6</title>
		<link>http://arnaud.detheux.org/blog/26/08/2012/add-the-backspace-key-shortcut-back-to-safari-6/</link>
		<comments>http://arnaud.detheux.org/blog/26/08/2012/add-the-backspace-key-shortcut-back-to-safari-6/#comments</comments>
		<pubDate>Sun, 26 Aug 2012 21:02:58 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[hint]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[moutainlion]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=482</guid>
		<description><![CDATA[Since I switched to Mountain Lion, I haven&#8217;t had a lot of issues. But some really minor differences between this new OS X version and Lion made me go crazy. A bit. I rely a lot on keyboard shortcuts to &#8230; <a href="http://arnaud.detheux.org/blog/26/08/2012/add-the-backspace-key-shortcut-back-to-safari-6/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Since I switched to Mountain Lion, I haven&#8217;t had a lot of issues. But some really minor differences between this new OS X version and Lion made me go crazy. A bit.</p>
<p>I rely a lot on keyboard shortcuts to enhance my workflow in Apps. And for a reason I still don&#8217;t understand, Apple removed the backspace keyboard shortcut to go back to the previously visited page. This shortcut works on any browser &amp; on any OS so I don&#8217;t get why we couldn&#8217;t use that handy shortcut anymore. They were probably too busy focusing on the trial vs. Samsung <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>I fiddled around the Safari .plist file with XCode and saw that there was still a mention of a &#8220;Back&#8221; key. As I looked more in depth, I discovered that some shortcuts were actually simply containing the shortcut keys in unicode mode. So, without any faith, I tried to tie the &#8220;Back&#8221; command to the backspace key, <a href="http://www.fileformat.info/info/unicode/char/232b/index.htm">in unicode</a>. And it worked! <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<h5>The solution</h5>
<p>Simply copy and paste this code into terminal, no sudo required. Relaunch Safari and you will be able to use backspace to go to the previous page again.</p>
<pre class="brush: text plain">defaults write com.apple.Safari NSUserKeyEquivalents -dict-add Back "\U232b"</pre>
<p>I think Apple is trying to encourage use to use the swipe movements on the trackpad, which I like and use while on the go. The problem is that at the office and at home I use my laptop with an external display and keyboard so this is useless&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/26/08/2012/add-the-backspace-key-shortcut-back-to-safari-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zendesk: add color to priorities in Views</title>
		<link>http://arnaud.detheux.org/blog/16/08/2012/zendesk-add-color-to-priorities-in-views/</link>
		<comments>http://arnaud.detheux.org/blog/16/08/2012/zendesk-add-color-to-priorities-in-views/#comments</comments>
		<pubDate>Thu, 16 Aug 2012 21:27:24 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Customer Support]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[custServ]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[zendesk]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=485</guid>
		<description><![CDATA[It&#8217;s a very, very minor addition but I tweaked our Zendesk CSS to show some colours next to each ticket&#8217;s priority level. I didn&#8217;t use the Zendesk score feature so I removed that column from the Views we have but &#8230; <a href="http://arnaud.detheux.org/blog/16/08/2012/zendesk-add-color-to-priorities-in-views/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s a very, very minor addition but I tweaked our Zendesk CSS to show some colours next to each ticket&#8217;s priority level. I didn&#8217;t use the Zendesk score feature so I removed that column from the Views we have but I wanted to know, by having a quick glance, how many low, normal or urgent requests we had.</p>
<h5></h5>
<h5>The solution</h5>
<p>Except from <em>priority_normal</em>, each priority has its own CSS class. So I simply added to my custom CSS the following code to add some colors (obviously, blue is &#8220;relaaax&#8221; and red is &#8220;WTFBBQ!11!!&#8221;)</p>
<pre class="brush: css">priority_urgent{
color:red;}

.priority_high{
color:orange;}

.priority_low{
color:blue;}</pre>
<h5></h5>
<h5>The result</h5>
<p style="text-align: center;"><a href="http://arnaud.detheux.org/blog/wp-content/uploads/2012/08/Screen-Shot-2012-08-16-at-22.57.57.png"><img class="aligncenter size-full wp-image-486 blog_post_img" title="Screen Shot 2012-08-16 at 22.57.57" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/08/Screen-Shot-2012-08-16-at-22.57.57.png" alt="" width="494" height="302" /></a></p>
<h5></h5>
<h5>The source</h5>
<p>Available <a href="https://github.com/Chompy86/Zendesk-widgets/blob/master/zendesk_priority_colors.css">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/16/08/2012/zendesk-add-color-to-priorities-in-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zendesk: change the default priority names</title>
		<link>http://arnaud.detheux.org/blog/20/06/2012/zendesk-change-default-priority-names/</link>
		<comments>http://arnaud.detheux.org/blog/20/06/2012/zendesk-change-default-priority-names/#comments</comments>
		<pubDate>Wed, 20 Jun 2012 09:31:25 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Customer Support]]></category>
		<category><![CDATA[custServ]]></category>
		<category><![CDATA[gooddata]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[priority]]></category>
		<category><![CDATA[zendesk]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=467</guid>
		<description><![CDATA[When we defined the Mondial Telecom SLA, we decided to use our own priority names instead of the usual high &#38; normal ones. Don&#8217;t ask why &#160; The Problem There is no way to edit the default Zendesk priority names. &#8230; <a href="http://arnaud.detheux.org/blog/20/06/2012/zendesk-change-default-priority-names/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>When we defined the <a href="http://www.mondialtelecom.eu" target="_blank">Mondial Telecom</a> SLA, we decided to use our own priority names instead of the usual high &amp; normal ones. Don&#8217;t ask why <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<h5>The Problem</h5>
<p>There is no way to edit the default Zendesk priority names. Which makes sense since you can simply create custom fields and disable the default ones. However the issue I had with that is firstly the way GoodData handles custom field metrics. With a system drop down menu, in <a href="http://www.gooddata.com" target="_blank">GoodData</a> you have a neat report. Custom fields are supported but the way they are displayed in GoodData is less powerful.</p>
<p style="text-align: center;"><a href="http://arnaud.detheux.org/blog/wp-content/uploads/2012/06/Screen-Shot-2012-06-20-at-12.55.28.png"><img class="aligncenter  wp-image-470 blog_post_img" title="GoodData - Zendesk: default priorities report" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/06/Screen-Shot-2012-06-20-at-12.55.28.png" alt="" width="943" height="411" /></a></p>
<p style="text-align: left;">The other issue is that we used our Zendesk for some time with the default priorities names. Changing suddenly in the middle of the process to custom drop down menus would have messed all that.</p>
<h5 style="text-align: left;">The solution</h5>
<p>jQuery comes to help! With a tiny JS snippet (to enable via Manage&gt; Extensions in your Zendesk) you can easily change the priority names in the ticket creation view and the tickets views. I skipped the macros &amp; triggers for now. So now we have the best of both worlds: custom priority names &amp; awesome metrics in GoodData reports.</p>
<p>Please note that it&#8217;s actually <a title="Twitter account" href="http://twitter.com/skipjac" target="_blank">Skip Moore</a> from Zendesk who published the code to change the names in the ticket creation view on <a href="https://github.com/skipjac/zendesk-widgets" target="_blank">his GitHub account</a>.</p>
<p style="text-align: center;"><a href="http://arnaud.detheux.org/blog/wp-content/uploads/2012/06/Screen-Shot-2012-06-20-at-15.28.57.png"><img class="aligncenter  wp-image-471 blog_post_img" title="Customized priorities name" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/06/Screen-Shot-2012-06-20-at-15.28.57.png" alt="" width="741" height="61" /></a></p>
<p>&nbsp;</p>
<h5>The code</h5>
<pre class="brush: js">/* Original code from Skip Moore of Zendesk - https://github.com/skipjac/zendesk-widgets */
$j('#ticket_priority_id option[value=1]').text('G3');
$j('#ticket_priority_id option[value=2]').text('G2');
$j('#ticket_priority_id option[value=3]').text('G1');
$j('#ticket_priority_id option[value=4]').text('G0');
/* Added this to display the correct priority name in the Views */
/* Update 16082012 - added the class to avoid breaking your CSS customization */
$j('span.priority_normal').replaceWith('<span class="priority_low">G2</span>');
$j('span.priority_low').replaceWith('<span class="priority_low">G3</span>');
$j('span.priority_high').replaceWith('<span class="priority_high">G1</span>');
$j('span.priority_urgent').replaceWith('<span class="priority_urgent">G0</span>');</pre>
<p>It&#8217;s available <a title="GitHub" href="https://github.com/Chompy86/Zendesk-widgets/blob/master/zendesk_change_prio.js" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/20/06/2012/zendesk-change-default-priority-names/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zendesk Enterprise: global satisfaction score</title>
		<link>http://arnaud.detheux.org/blog/04/06/2012/zendesk-enterprise-global-satisfaction-score/</link>
		<comments>http://arnaud.detheux.org/blog/04/06/2012/zendesk-enterprise-global-satisfaction-score/#comments</comments>
		<pubDate>Mon, 04 Jun 2012 13:11:45 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Customer Support]]></category>
		<category><![CDATA[ducksboard]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[satisfaction]]></category>
		<category><![CDATA[zendesk]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=444</guid>
		<description><![CDATA[One of my biggest grief about the Enterprise plan of Zendesk is its lack of support for the satisfaction score. I mean, all accounts have their own satisfaction score like on a regular plan but we lack a way to have &#8230; <a href="http://arnaud.detheux.org/blog/04/06/2012/zendesk-enterprise-global-satisfaction-score/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>One of my biggest grief about the <a href="http://www.zendesk.com/product/enterprise" target="_blank">Enterprise plan of Zendesk</a> is its lack of support for the satisfaction score. I mean, all accounts have their own satisfaction score like on a regular plan but we lack a way to have the global score of all branded spokes added to the one of the main hub.</p>
<p>I needed this. So I fixored this <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Plus, the following Python script will calculate your satisfaction score even if you have less than 100 satisfaction feedback on your account. And finally, I push the score to <a href="http://www.ducksboard.com" target="_blank">Ducksboard</a>, a very cool real time dashboard in which you can see all your business metrics.</p>
<p>So basically, a simple Python scripts reads the account.zendesk.com/satisfaction.json file, counts the number of 0 (bad) and 1 (good) feedbacks. It does this for each of your accounts so you can add more than the 3 I have below. Then some simple maths are applied to make a sum of all good and back feedbacks and give you a result in percent.</p>
<p>You need to trigger this script via a cron tab, for example, so that every x hour the latest data from your Zendesk accounts will be read. And at that moment it will also shoot the results to the Ducksboard API (I just left the code there, simply delete this if you don&#8217;t need it).</p>
<p>My second grief about the Enterprise plan is that it lacks the support of placeholders throughout the spokes (for automated emails, like <em>hello {{ticket_requester_name}} </em>), but that&#8217;s for another post <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h5>The script</h5>
<pre class="brush: py">#!/usr/bin/env python

"""Fetches the satisfaction score of Zendesk spokes and gathers it in one spot. You will need to call this script with a CRON so that it is launched every day, for example.
As a bonus, I left the code about Ducksboard. It's a cool system to display BI and monitoring stuff regarding your service. Simply replace the API_KEY and END_POINT values."""

__author__ = "Arnaud de Theux"
__web__ = "http://arnaud.detheux.org"
__twitter__ = "@AdeTheux"

from urllib import urlopen
import urllib
import sys
import os

###Below the 3 spokes we have at the moment, simply put your Zendesk account name
#spoke 1
good = 0
bad = 0
data = urlopen("http://SPOKE1.zendesk.com/satisfaction.json").readlines()[0]
good = data.count('1')
bad = data.count('0')

#spoke 2
good1 = 0
bad1 = 0
data = urlopen("http://SPOKE2.zendesk.com/satisfaction.json").readlines()[0]
good1 = data.count('1')
bad1 = data.count('0')

#spoke 3
good2 = 0
bad2 = 0
data = urlopen("http://SPOKE3.zendesk.com/satisfaction.json").readlines()[0]
good2 = data.count('1')
bad2 = data.count('0')

###Makes a simple addition
sum_good = good + good1 + good2
sum_bad = bad + bad1 + bad2

###You can now simply call sum_good and sum_bad to display it all over the interwebs.

###This is the code to push the values in bubbles in your Ducksboard account
command = "curl -u API_KEY:ignored -d '{\"value\": %d}' https://push.ducksboard.com/values/END_POINT/" % sum_good
command2 = "curl -u API_KEY:ignored -d '{\"value\": %d}' https://push.ducksboard.com/values/END_POINT/" % sum_bad

print command
os.system(command)
print command2
os.system(command2)</pre>
<h5>Demo</h5>
<p>Well in this case there is not much to show <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Either you just run the script and return the results wherever you want, or you push them to Ducksboard and it can look like this:</p>
<p><a href="http://arnaud.detheux.org/blog/04/06/2012/zendesk-enterprise-global-satisfaction-score/screen-shot-2012-06-04-at-14-06-21/" rel="attachment wp-att-453"><img class="aligncenter size-full wp-image-453 blog_post_img" title="Global satisfaction score in Zendesk" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/06/Screen-Shot-2012-06-04-at-14.06.21.png" alt="" width="321" height="160" /></a></p>
<h5>Code</h5>
<p>The source code is available <a title="GitHub" href="https://github.com/Chompy86/Zendesk-widgets/blob/master/zendesk_enterprise_satisfaction.py" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/04/06/2012/zendesk-enterprise-global-satisfaction-score/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zendesk: auto-fill a widget with data from ticket view</title>
		<link>http://arnaud.detheux.org/blog/14/05/2012/zendesk-auto-fill-a-widget-with-data-from-ticket-view/</link>
		<comments>http://arnaud.detheux.org/blog/14/05/2012/zendesk-auto-fill-a-widget-with-data-from-ticket-view/#comments</comments>
		<pubDate>Mon, 14 May 2012 17:06:39 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Customer Support]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[zendesk]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=421</guid>
		<description><![CDATA[As we deliver our own VoIP service, we also have our own Support Tool internally. This is great in terms of responsiveness or for the data our Support Teams need to have since they can simply ask our developers to &#8230; <a href="http://arnaud.detheux.org/blog/14/05/2012/zendesk-auto-fill-a-widget-with-data-from-ticket-view/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>As we deliver our own VoIP service, we also have our own Support Tool internally. This is great in terms of responsiveness or for the data our Support Teams need to have since they can simply ask our developers to add that.</p>
<p>However, it means logging into a different tool than Zendesk to resolve a ticket which is time consuming. I therefore created a simple widget which allows a Support Agent to check a customer&#8217;s profile in only one click from Zendesk&#8217;s ticket view:</p>
<p style="text-align: center;"><a href="http://arnaud.detheux.org/blog/wp-content/uploads/2012/05/Screen-Shot-2012-05-14-at-18.43.58.png"><img class="aligncenter  wp-image-422 blog_post_img" title="Zendesk widget EU Support tool" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/05/Screen-Shot-2012-05-14-at-18.43.58-1024x402.png" alt="" width="584" height="229" /></a></p>
<p>The widget simply fetches the phone number of the customer from the <em>custom</em> ticket field (you just need to know its ID via Manage&gt; Ticket Fields) and replicates on page load to the widget&#8217;s search box. It&#8217;s all done with 3 lines of code, jQuery and using the .val() function <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h5>Code</h5>
<pre class="brush: js">&lt;script type="text/javascript" charset="utf-8"&gt;
$j('#ID_OF_YOUR_WIDGET_INPUT_BOX').val($j('#ticket_fields_NUMBER').val());
&lt;/script&gt;</pre>
<p>The source is on <a href="https://github.com/Chompy86/Zendesk-widgets/blob/master/zendesk_widget_autofill.js" target="_blank">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/14/05/2012/zendesk-auto-fill-a-widget-with-data-from-ticket-view/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fun with Angelina (a.k.a. Nissan 370Z)</title>
		<link>http://arnaud.detheux.org/blog/08/05/2012/fun-with-angelina-a-k-a-370z/</link>
		<comments>http://arnaud.detheux.org/blog/08/05/2012/fun-with-angelina-a-k-a-370z/#comments</comments>
		<pubDate>Tue, 08 May 2012 19:51:14 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[370Z]]></category>
		<category><![CDATA[countryside]]></category>
		<category><![CDATA[exhaust]]></category>
		<category><![CDATA[nap]]></category>
		<category><![CDATA[nissan]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=410</guid>
		<description><![CDATA[While this could have been a bad porn movie name, Angelina is actually just the nickname a friend gave to my recently purchased Nissan 370Z. Now that the weather is finally getting better (I&#8217;m in Belgium, don&#8217;t get your hopes &#8230; <a href="http://arnaud.detheux.org/blog/08/05/2012/fun-with-angelina-a-k-a-370z/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While this could have been a bad porn movie name, Angelina is actually just the nickname a friend gave to my recently purchased <a title="370Z on Wiki" href="http://en.wikipedia.org/wiki/Nissan_370Z#NISMO_370Z_.282009.E2.80.93_.29">Nissan 370Z</a>. Now that the weather is finally getting better (I&#8217;m in Belgium, don&#8217;t get your hopes too high) I could enjoy a day without rain and with temperatures reaching 15°. Insane! <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p><span style="color: rgba(0, 0, 0, 0);"><span style="text-decoration: underline;"><img class="aligncenter" style="color: inherit; font: normal normal normal 15px/normal 'Helvetica Neue', Helvetica, Arial, sans-serif; font-style: inherit; font-weight: inherit; line-height: 1.625; border-style: solid; border-color: #dddddd; margin-top: 0.4em; display: block; margin-left: auto; margin-right: auto; clear: both; margin-bottom: 1.625em; border-width: 1px; padding: 6px;" title="Nissan 370Z" src="https://lh5.googleusercontent.com/-SWteEV08_o4/T0lJl7MUJJI/AAAAAAAAEI4/grSbE8EAMR0/s512/IMAGE_1DD97E16-F176-484C-8D4F-508F9A9C04BF.JPG" alt="" width="512" height="512" /></span></span></p>
<p>So while taking Angelina for a <em>n</em>th ride, I figured I&#8217;d have some fun and record the action. It&#8217;s only when heading back home that my geek side re-appeared: this frickin&#8217; iPhone records in 1080p (and don&#8217;t get me started on &#8220;Android does it&#8221;, I know! I guess it was just one of the first times I filmed for a long time)! So I launched iMovie, had a 5 minutes edit and here is the result:</p>
<p><center><iframe src="https://www.youtube.com/embed/8dqA_6jLerI" frameborder="0" width="800" height="480"></iframe><br />
<iframe width="800" height="480" src="https://www.youtube.com/embed/MWD3_60KNJc" frameborder="0" allowfullscreen></iframe><br />
<iframe width="800" height="480" src="https://www.youtube.com/embed/SgULs3_z730" frameborder="0" allowfullscreen></iframe></center><br />
This is a (non Nismo) stock 370Z from 2011 with Navigation and Sport pack. But the whole exhaust line has been replaced by a <a href="http://www.nap-autoteile.com/">NAP</a> one with a remote to open/close the valve. I have to admit I leave it opened most of the time <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  As for the tyre squealing, I know, there wasn&#8217;t any. The countryside is fun because it&#8217;s quite empty but before I know these tiny roads and who/what could pop by at any moment I&#8217;ll avoid drifting along (I hear you, people *boooing* in the back). But the countryside also means a long ride to the office or&#8230; being stopped by a bunch of people while coming back from the office because toads are migrating and crossing the road (true story!).</p>
<p>Note that a few weeks ago I headed to the <a href="http://www.cebit.de/">CeBIT</a> to promote <a href="http://www.mondialtelecom.eu">our work</a>. A 5 hours drive. With 70% on <em>autobahn</em>. Imagine the grin on my face <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  . At that point, there were two recording sessions: <a href="http://arnaud.detheux.org/dropbox/data/userfiles/Temp/370Z-tunnel.m4a">in a tunnel</a> - <a href="http://arnaud.detheux.org/dropbox/data/userfiles/Temp/370-rev.m4a">just rev&#8217;ing</a></p>
<p>This is truly an amazing piece of engineering and a very efficient anti stress ball. Plus, when you compare all the tiny details with its main rivals such as a 911 Turbo or an M3, you realize how this purchase is much more clever (or at least with the budget of a 26 years old). Do I really need to tell myself that the leather was stitched by hand? Nope, I don&#8217;t care. Do I care however that the fuel tank is roughly 10-15% bigger than the two others? Definitely! The kind of details that in my opinion prove that this car has been designed for the real fun and passion, not just for the badge on it.</p>
<p>Next step: le Mans Classic race in July. A meeting of 350Z, 370Z and GT-R owners from Belgium, France and Luxembourg. I will leave the GT-R ahead, promised!</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/08/05/2012/fun-with-angelina-a-k-a-370z/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://arnaud.detheux.org/dropbox/data/userfiles/Temp/370-rev.m4a" length="82997" type="audio/mpeg" />
<enclosure url="http://arnaud.detheux.org/dropbox/data/userfiles/Temp/370Z-tunnel.m4a" length="96569" type="audio/mpeg" />
		</item>
		<item>
		<title>Zendesk plugin in HipChat</title>
		<link>http://arnaud.detheux.org/blog/03/05/2012/zendesk-plugin-in-hipchat/</link>
		<comments>http://arnaud.detheux.org/blog/03/05/2012/zendesk-plugin-in-hipchat/#comments</comments>
		<pubDate>Thu, 03 May 2012 15:05:43 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Customer Support]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[hipchat]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[r2d2]]></category>
		<category><![CDATA[zendesk]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=400</guid>
		<description><![CDATA[I&#8217;m finally active again on my blog! For this first post I wanted to quickly show my little Zendesk plugin for HipChat. Our dev team created a bot in HipChat called R2D2 (yes, we have a lot of imagination!). We create different plugins &#8230; <a href="http://arnaud.detheux.org/blog/03/05/2012/zendesk-plugin-in-hipchat/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m finally active again on my blog! <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>For this first post I wanted to quickly show my little <a href="http://www.zendesk.com">Zendesk</a> plugin for <a href="http://www.hipchat.com">HipChat</a>. Our dev team created a bot in HipChat called R2D2 (yes, we have a lot of imagination!). We create different plugins for that bot (useful&#8230; or not) and call each plugin by typing !<em>plugin</em>.</p>
<p>Note that the source of the bot itself is not available for now so you will need to hack my plugin to make it work in your HipChat account (or actually any other service, but HipChat rocks).</p>
<p>I had the idea because, firstly I wanted to fool around with Python for the first time of my life<br />
and the Zendesk API; secondly, because our CEO wanted a quick and easy way to have a view on our support team&#8217;s performance. Instead of receiving a long reporting email each day or having to log into Zendesk to check the Reporting section, he can fire up the <em>!zendesk</em> command in HipChat and get the stats in a few seconds.</p>
<p>I plan on adding other functionalities soon like SLAs statistics, average Time To Assign, average Time To Resolve, top performers, &#8230;</p>
<h5>Demo</h5>
<p><em>Best viewed in fullscreen mode.</em></p>
<p><iframe src="https://www.youtube.com/embed/_5Iq3fpWo14" frameborder="0" width="800" height="407"></iframe></p>
<h5>Source</h5>
<pre class="brush: py">
#!/usr/bin/env python

__author__      = "Arnaud de Theux"
__web__         = "http://arnaud.detheux.org"
__twitter__     = "@AdeTheux"

"""This is a python script that runs as a plugin on top of our HipChat chat bot. It displays information regarding your Zendesk account. To make it run, just complete the Settings part and your branded spokes URL. Note that some code needs our chat bot to run, you will need to modify the code for it to run without our bot"""

import sys
import os
import httplib2
from urllib import urlopen
import urllib
from xml.dom.minidom import parseString
import re

###Settings. Replace with your own Zendesk credentials and URL. If you don't use the API token (baaad) just put your password
user           = 'YOUR_USER_EMAIL_ADDRESS/token'
password       = 'YOUR_TOKEN'
zendesk        = 'http://ACCOUNT.zendesk.com/' # the / at the end is important!



###Fetches unsolved tickets view and returns only number of tickets
class ZendeskBot(BotPlugin):
    @botcmd
    def zendesk(self, mess, args):
        self.send(mess.getFrom(), "/me is preparing the statistics... ", message_type=mess.getType())
        h= httplib2.Http(".cache")
        h.add_credentials(user, password)
        resp, xml_view_opened = h.request(zendesk+"rules/YOUR_VIEW_ID.xml", "GET", headers={'content-type' : 'application/xml'} )
        opened_tickets = re.search('<tickets .+?count="([0-9]+)"', xml_view_opened).groups() 
    
    
###Fetches satisfaction score of spoke
        good = 0
        bad  = 0
        data = urlopen("http://SPOKE1.zendesk.com/satisfaction.json").readlines()[0]
        good = data.count('1')
        bad  = data.count('0')
        
#Fetches satisfaction score of spoke
        good1 = 0
        bad1  = 0
        data = urlopen("http://SPOKE2.zendesk.com/satisfaction.json").readlines()[0]
        good1 = data.count('1')
        bad1  = data.count('0')
        
#Fetches satisfaction score of spoke
        good2 = 0
        bad2  = 0
        data = urlopen("http://SPOKE3.zendesk.com/satisfaction.json").readlines()[0]
        good2 = data.count('1')
        bad2  = data.count('0')
        
#Makes a sum of the satisfaction scores
        sum_good = good + good1 + good2
        sum_bad = bad + bad1 + bad2
        sum_total = sum_good + sum_bad
        
#Convert it to % in case there are not yet 100 ratings in Zendesk account
        sum_good_percentage = round(float(sum_good)/sum_total*100,0)
        sum_bad_percentage = round(float(sum_bad)/sum_bad*100,0)
        
        
        
###Fetches the tags file
        h= httplib2.Http(".cache")
        h.add_credentials(user, password)
        resp, content = h.request(zendesk+"tags.xml", "GET", headers={'content-type' : 'application/xml'} )
        
#Displays the top 10 tags (You need to replace [1] by [0] and increment accordingly below. I start from line 1 because I don't want the first tag to be displayed.
#1
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[1].toxml()
        xmlDataName=xmlTag.replace('<name>','').replace('','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[1].toxml()
        xmlDataTag=xmlTag.replace('<count>','').replace('</count>','')
#2
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[2].toxml()
        xmlDataName1=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[2].toxml()
        xmlDataTag1=xmlTag.replace('<count>','').replace('</count>','')
#3
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[3].toxml()
        xmlDataName2=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[3].toxml()
        xmlDataTag2=xmlTag.replace('<count>','').replace('</count>','')
#4
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[4].toxml()
        xmlDataName3=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[4].toxml()
        xmlDataTag3=xmlTag.replace('<count>','').replace('</count>','')
#5
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[5].toxml()
        xmlDataName4=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[5].toxml()
        xmlDataTag4=xmlTag.replace('<count>','').replace('</count>','')
#6
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[6].toxml()
        xmlDataName5=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[6].toxml()
        xmlDataTag5=xmlTag.replace('<count>','').replace('</count>','')
#7
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[7].toxml()
        xmlDataName6=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[7].toxml()
        xmlDataTag6=xmlTag.replace('<count>','').replace('</count>','')
#8
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[8].toxml()
        xmlDataName7=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[8].toxml()
        xmlDataTag7=xmlTag.replace('<count>','').replace('</count>','')
#9
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[9].toxml()
        xmlDataName8=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[9].toxml()
        xmlDataTag8=xmlTag.replace('<count>','').replace('</count>','')
#10
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('name')[10].toxml()
        xmlDataName9=xmlTag.replace('<name>','').replace('</name>','')
        
        dom = parseString(content)
        xmlTag = dom.getElementsByTagName('count')[10].toxml()
        xmlDataTag9=xmlTag.replace('<count>','').replace('</count>','')



######### WORK IN PROGRESS #########
###Fetches top performer
#Displays the top performer by stripping of the <assignee -name> tags on latest tickets
#        h= httplib2.Http(".cache")
#        h.add_credentials(user, password)
#        resp, xml_view_top_perf = h.request(zendesk+"rules/YOUR_VIEW_ID.xml", "GET", headers={'content-type' : 'application/xml'} )
#
#        dom = parseString(xml_view_top_perf)
#        xmlTag = dom.getElementsByTagName('assignee-name')[0].toxml()
#        xmlDataNameTopPerf=xmlTag.replace('</assignee><assignee -name type="">','').replace('</assignee>','')
######### WORK IN PROGRESS #########
        

        
###Display the ouput
        if sum_good_percentage >= 85:
            result='There is a %i%% satisfaction rate. Good job!\n' % sum_good_percentage
        else:
            result='There is a %i%% satisfaction rate. That\'s quite low, you should be ashamed!\n' % sum_good_percentage
        
        if opened_tickets > 1:
            result+='There is a total of %s unresolved requests at the moment. Chop chop, go solve them!\n' % opened_tickets
        else:
            result+='There is a total of %s unresolved request at the moment. Chop chop, go solve it!\n' % opened_tickets

        result+='These are the top 10 tags and their occurrences: '+xmlDataName+'('+xmlDataTag+') '+xmlDataName1+'('+xmlDataTag1+') '+xmlDataName2+'('+xmlDataTag2+') '+xmlDataName3+'('+xmlDataTag3+') '+xmlDataName4+'('+xmlDataTag4+') '+xmlDataName5+'('+xmlDataTag5+') '+xmlDataName6+'('+xmlDataTag6+') '+xmlDataName7+'('+xmlDataTag7+') '+xmlDataName8+'('+xmlDataTag8+') '+xmlDataName9+'('+xmlDataTag9+')\n'
        
#        result+='The top performer this week is %s. Give that man a raise!' % xmlDataNameTopPerf
        return result
</tickets></pre>
<p>You can find the source on my (empty <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) <a title="GitHub" href="https://github.com/Chompy86/Zendesk-widgets/blob/master/zendesk_hipchat_bot.py">GitHub account</a>.</p>
<p>Enjoy!</p>
<h5>Update 12/05/2012</h5>
<p>Here is our VP of Engineering showing our bot&#8217;s JIRA capabilities @ ABUG-3</p>
<p><a href="http://arnaud.detheux.org/blog/03/05/2012/zendesk-plugin-in-hipchat/img_0478/" rel="attachment wp-att-417"><img class="aligncenter size-large wp-image-417" title="R2D2 demo @ ABUG3" src="http://arnaud.detheux.org/blog/wp-content/uploads/2012/05/IMG_0478-1024x768.jpg" alt="R2D2 demo @ ABUG3" width="584" height="438" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/03/05/2012/zendesk-plugin-in-hipchat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Almost 4 years later&#8230;</title>
		<link>http://arnaud.detheux.org/blog/28/01/2012/almost-4-years-later/</link>
		<comments>http://arnaud.detheux.org/blog/28/01/2012/almost-4-years-later/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 13:44:07 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Site]]></category>

		<guid isPermaLink="false">http://arnaud.detheux.org/blog/?p=392</guid>
		<description><![CDATA[&#8230; I&#8217;ve decided I might want to write down some thoughts and discoveries again. We&#8217;ll see how that goes very soon]]></description>
				<content:encoded><![CDATA[<p>&#8230; I&#8217;ve decided I might want to write down some thoughts and discoveries again. We&#8217;ll see how that goes very soon <img src='http://arnaud.detheux.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/28/01/2012/almost-4-years-later/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C&#8217;est la fin des haricots</title>
		<link>http://arnaud.detheux.org/blog/22/05/2008/la-fin-des-haricots/</link>
		<comments>http://arnaud.detheux.org/blog/22/05/2008/la-fin-des-haricots/#comments</comments>
		<pubDate>Thu, 22 May 2008 17:15:19 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Site]]></category>

		<guid isPermaLink="false">http://arnoz.wordpress.com/?p=391</guid>
		<description><![CDATA[Toutes les bonnes choses ont une fin et, vu mon manque de temps libre dernièrement, je pense que ce blog va plutôt se transformer en archives d&#8217;articles. Tout reste toutefois accessible et, on ne sait jamais, je pourrais peut-être reprendre &#8230; <a href="http://arnaud.detheux.org/blog/22/05/2008/la-fin-des-haricots/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Toutes les bonnes choses ont une fin et, vu mon manque de temps libre dernièrement, je pense que ce blog va plutôt se transformer en archives d&#8217;articles.</p>
<p>Tout reste toutefois accessible et, on ne sait jamais, je pourrais peut-être reprendre la plume un de ces jours&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/22/05/2008/la-fin-des-haricots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wing’s tunes</title>
		<link>http://arnaud.detheux.org/blog/27/03/2007/wings-tunes/</link>
		<comments>http://arnaud.detheux.org/blog/27/03/2007/wings-tunes/#comments</comments>
		<pubDate>Tue, 27 Mar 2007 14:37:22 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://arnoz.wordpress.com/27/03/2007/wings-tunes/</guid>
		<description><![CDATA[Une charmant artiste asiatique a décidé de recomposer à sa manière des titres biens connus de tous des Beatles, d&#8217;AC/DC ou encore de Queen. Le résultat est&#8230; affligeant! Vous trouvez pas que ça ressemble à une sonnerie MIDI comme celles &#8230; <a href="http://arnaud.detheux.org/blog/27/03/2007/wings-tunes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Une charmant artiste asiatique a décidé de recomposer à sa manière des titres biens connus de tous des Beatles, d&#8217;AC/DC ou encore de Queen. Le résultat est&#8230; affligeant! Vous trouvez pas que ça ressemble à une sonnerie MIDI comme celles des GSM d&#8217;il y a plusieurs années?</p>
<p>[audio:http://old-blog.arnoz.be/wp-content/plugins/audio-player/MP3/wing.mp3]</p>
<p><a href="http://www.wingtunes.com/public/songs.aspx" title="Cliquez ici pour ouvrir ce lien dans une nouvelle fen&ecirc;tre" class="linkext" target="_blank">Wing Tunes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/27/03/2007/wings-tunes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://old-blog.arnoz.be/wp-content/plugins/audio-player/MP3/wing.mp3" length="264484" type="audio/mpeg" />
		</item>
		<item>
		<title>Alfred le pingouin</title>
		<link>http://arnaud.detheux.org/blog/26/03/2007/alfred-le-pingouin/</link>
		<comments>http://arnaud.detheux.org/blog/26/03/2007/alfred-le-pingouin/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 14:08:57 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Humour]]></category>

		<guid isPermaLink="false">http://arnoz.wordpress.com/26/03/2007/alfred-le-pingouin/</guid>
		<description><![CDATA[En plus d&#8217;avoir une obsession bizarre, on ne peut que remarquer le bon goût de l&#8217;intérieur de sa maison.]]></description>
				<content:encoded><![CDATA[<p>En plus d&#8217;avoir une obsession bizarre, on ne peut que remarquer le bon goût de l&#8217;intérieur de sa maison.</p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/26/03/2007/alfred-le-pingouin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Be.Live Tour</title>
		<link>http://arnaud.detheux.org/blog/05/03/2007/belive-tour/</link>
		<comments>http://arnaud.detheux.org/blog/05/03/2007/belive-tour/#comments</comments>
		<pubDate>Mon, 05 Mar 2007 10:54:29 +0000</pubDate>
		<dc:creator>Arnaud</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://arnoz.wordpress.com/23/02/2007/belive-tour/</guid>
		<description><![CDATA[Be.Live Tour est un petit festival qui en est a sa première édition et qui se déroulera vers avril-mai 2007. Concept: Le Be.Live Tour est un concept simple: Choisis pour leur diversité musicales, 4 groupes/artistes belges, prendront part à une &#8230; <a href="http://arnaud.detheux.org/blog/05/03/2007/belive-tour/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Be.Live Tour est un petit festival qui en est a sa première édition et qui se déroulera vers avril-mai 2007.</p>
<p><a href="http://img58.imageshack.us/img58/8907/flyernj7.jpg" rel="lightbox" class="" target="_blank"><img class="img" width="270" height="405" src="http://img58.imageshack.us/img58/8907/flyernj7.jpg" alt="Image" /></a></p>
<p><strong>Concept:</strong><br />
Le Be.Live Tour est un concept simple:<br />
Choisis pour leur diversité musicales, 4 groupes/artistes belges, prendront part à une tournée dans les plus grandes villes de la région Wallonne. Chaque date verra les groupes/artistes se représenter, avec une rotation de l&#8217;affiche principale.<br />
L&#8217;objectif du Be.Live Tour est aussi simple que son concept:<br />
En effet une partie considérable du public belge ignorent les trésors de leur propre pays et le be.live tour donnera l&#8217;opportunité à certains de redécouvrir le véritable bain de talent musical et culturel qu&#8217;est la Belgique!</p>
<p><strong>Affiche:</strong><br />
Pour cette première édition, 4 protagonistes seront présents:</p>
<ul>
<li><a href="http://www.puggyband.com/" title="Cliquez pour ouvrir dans une nouvelle fenêtre" class="" target="_blank">Puggy</a></li>
<li><a href="http://www.mariewarnant.com/" title="Cliquez pour ouvrir dans une nouvelle fenêtre" class="" target="_blank">Marie Warnant</a></li>
<li><a href="http://www.matthieubioul.com/" title="Cliquez pour ouvrir dans une nouvelle fenêtre" class="" target="_blank">Matthieu Bioul</a></li>
<li><a href="http://www.mylittlecheap.com/" title="Cliquez pour ouvrir dans une nouvelle fenêtre" class="" target="_blank">My Little Cheap Dictaphone</a></li>
</ul>
<p><strong>Tickets:</strong><br />
Les tickets sont dès à présent disponibles en prévente au prix de 13,50€ (11,50€ pour étudiants) sur <a href="http://www.ticketnet.be/shop/fr/resultat.asp?recherche=mots&amp;mots=be.live&amp;idtier=14" title="Cliquez pour ouvrir dans une nouvelle fenêtre" class="" target="_blank">TicketNet</a> et le site de la <a href="http://www.fnac.be/" title="Cliquez pour ouvrir dans une nouvelle fenêtre" class="" target="_blank">Fnac</a>.</p>
<p><strong>Street team:</strong><br />
N&#8217;hésitez pas à envoyer votre candidature afin de faire partie de la street team pour promouvoir l&#8217;événement. Vous recevrez des entrées gratuites!</p>
<p><a href="http://www.belivetour.com/" title="Cliquez pour ouvrir dans une nouvelle fenêtre" class="linkext" target="_blank">Site officiel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://arnaud.detheux.org/blog/05/03/2007/belive-tour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
