THE CRUTCHFIELD APPROACH TO EFFECTIVE CONTENT

As a consumer and as a content strategist, I’ve always looked to Crutchfield as an example of quality content.

Their product listings, like this Denon home theater receiver, don’t seem all that different at first glance. But when you dig deeper, you quickly notice the details that stand out: Bylined takes on the product. Detailed reviews. Extensive educational content including buying guides, setup guides, glossaries and FAQs.

The content is obviously created with audience-focused thinking, it’s carefully crafted, and it really shapes the brand.

The content quality doesn’t end with the product listings. Over in our story, you won’t find the usual blah-blah About Us section, or stale leadership profiles:

Sales our first year were terrible, and Bill didn’t know exactly what the problem was. So he mailed a questionnaire to several hundred customers, asking what was wrong with the catalog and the business. They replied that they didn’t know much about car stereos and were intimidated by the thought of installing one. 

Bill decided to fill the Crutchfield catalog with information, so readers would be comfortable with car stereo. Emphasizing complete information and exceptional customer service were what it took to get this company off and running, and these values continue to define our company culture today.

It’s an effective storytelling approach combined with plain language and refreshing corporate honesty. The headlines and subheads also stand out:

40 years of helping you choose and use great gear
How Bill learned to listen to you

Rather than focusing on their growth and accomplishments, Crutchfield focuses on how customers shaped the Crutchfield story. It’s a small-but-significant example that demonstrates how all of your content – even your company story – can benefit from a stronger “you” focus.

Posted in Technology | Tagged , | Leave a comment

NOTIFICATIONS WITH THE SALESFORCE IOS SDK IN IOS 8

Anytime there is an OS update for mobile devices, no matter the platform, I always like to pull up apps I have written before or are currently working on to check to see if there are any hiccups.  iOS 8 was no different.  I noticed that my notifications were not working with one of my apps that is built off of the Salesforce iOS SDK.

It turns out the way that iOS 8 handles notifications is a bit different than previous versions.  iOS 8 uses UIUserNotificationType instead of UIRemoteNotificationType which has to do with the way the permissions are setup.  When I did some looking I found out that the code to handle this was not yet incorporated into the Salesforce SDK.  Easy enough to fix so I added the code needed and did a pull request.  The changes are now merged into the SDK and should be compiled into the dependencies with the next release.

If you need this to work sooner than that, you can go get the code at Github.  The biggest change was in this method:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (void)registerForRemoteNotifications
{
#if TARGET_IPHONE_SIMULATOR // remote notifications are not supported in the simulator
    [selflog:SFLogLevelInfo msg:@"Skipping push notification registration with Apple because push isn't supported on the simulator"];
#else
    // register with Apple for remote notifications
    [selflog:SFLogLevelInfo msg:@"Registering with Apple for remote push notifications"];
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
        if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
            [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:kUserNotificationTypes categories:nil]];
            [[UIApplication sharedApplication] registerForRemoteNotifications];
        }else {
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:kRemoteNotificationTypes];
        }
    #else
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:kRemoteNotificationTypes];
    #endif
    
#endif
}

And if you need the fix before the code is compiled into the dependencies, you can simply create a new class and call it something like MyPushNotificationManager.  Grab the code for SFPushNotificationManager.h and .m from Github and paste it in your newly created files changing the class names to match the new one you created.  After this, it is just a matter of referencing MyPushNotificationManager anywhere where you would referenceSFPushNotificationManager.

This is what I am using and it works like a charm.  Let me know if you have any troubles.  Also, this is just a temporary fix till the binaries are updated.  Happy coding!!

Posted in Technology | Tagged , , , , , | Leave a comment

CONNECTING TO THE GOOGLE GEOLOCATION API WITH SALESFORCE

Recently I wrote a blog about how to use the MapQuest API to get the latitude and longitude for a zip code.  Another company that provides this same type of service is Google.  Google provides a Geocoding API that provides a lot of functionality.  The limits on the free version of the API are 1) 2500 requests per 24 hour period 2) 10 requests per second and 3) The results must be shown on a Google Map.  When you buy a license your limits go up to 100,000 requests a day.

So in this blog post I want to show you how to make a simple API call for the latitude and longitude of a zip code and then how to show those coordinates on a Google map.

In order to call the Google APIs you have to setup your Google account and then go into console to setup the services that you want to use.  To enable the Geocoding API you would log into your account and then go to this link: https://console.developers.google.com/project?authuser=0.  Once you have setup your Geocoding API you will be ready to get your API Keyfrom the console.  When an API Key is used then the requests get counted against that key.  If no key is used then the IP address of the server is used and since there are many users on Salesforce, the limits against the Salesforce servers would run out pretty fast.

Here is the basic code for calling the Google Geocoding API.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public void PopulateLatituteLongitude(){
        string apiKey ='ThisIsMyAPIKey';  //This is the key for server applications.  Put this in a custom setting
                string zipValue ='58103';
        url +='components=postal_code:' + zipValue;
        
        url +='&key=' + apiKey;
        Http h = new Http();
        HttpRequest req = new HttpRequest();
        req.setHeader('Content-type', 'application/x-www-form-urlencoded');
        req.setHeader('Content-length', '0');  //I am not sure if this is required or not
        req.setEndpoint(url);
        req.setMethod('POST');
                String responseBody ='';
                HttpResponse res = h.send(req);
        responseBody = res.getBody();
        
                /*Response body will include this…
            <geometry>
               <location>
                <lat>46.8647086</lat>
                <lng>-96.8262901</lng>
               </location>
                         </geometry>
               */
                string geometryString ='';
        string locationString ='';
        geometryString = SearchController.getValueFromXMLString(responseBody,'geometry');
        locationString = SearchController.getValueFromXMLString(geometryString,'location');
        latitudeValue = SearchController.getValueFromXMLString(locationString,'lat');
        longitudeValue = SearchController.getValueFromXMLString(locationString,'lng');
                 
    }
private staticString getValueFromXMLString(String xmlString,String keyField) {
        String valueFound ='';
        if(xmlString.contains('<' + keyField + '>') && xmlString.contains('<!--' + keyField + '-->')){
            try{
                valueFound = xmlString.substring(xmlString.indexOf('<' + keyField + '>') + keyField.length() + 2, xmlString.indexOf('<!--' + keyField + '-->')); 
            }catch (exception e){
                system.debug('Error in getValueFromXMLString.  Details: ' + e.getMessage() + ' keyfield: ' + keyfield);
            }           
        }
        return valueFound;
    }

Here are some details on the code above…
1) Notice the ‘components=postal code:’ piece.  There are many different types of data that can be passed to the components parameter.  Here we are passing just a zip code, but a full address can be passed also.
2) The API Key is simply sent as a query string parameter as &key=
3) Once the response comes back from the POST call some XML manipulation must be done.  Use the getValueFromXMLString method to pull out the ‘geometry’ section.  Then within that section the specific ‘location’ section can be pulled out.  Then finally within that ‘location’ section the ‘lat’ and ‘lng’ sections can be pulled out to get the final latitude and longitude values.

Now to show the latitude and longitude on a Google Map the following code can be added to the Visualforce page.
1) Here is the table that holds a DIV where the map will go….

1
2
3
4
5
6
7
8
9
<table width="100%">
  <tbody>
   <tr>
     <td width="100%">
        <div id="map_canvas"></div>
     </td>
   </tr>
  </tbody>
</table>    

2) Then this goes in the

section at the top of the page…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<head>
    <style
Posted in Technology | Tagged , , , | Comments Off

CONNECTING TO THE MAPQUEST API

Salesforce introduced a new GeoLocation field within the past few releases that allows you to store a latitude and longitude value in the same field.  The first trick to using these fields is how to reference them.  Normally when you reference a custom field you append the ‘__c’ after it.  But with this new GeoLocation you append either ‘__latitude__s’ or ‘__longitude__s’ after it.  That is easy enough to deal with.

What really makes this new field powerful though is how it can be used in SOSL and SOQL queries.  Here is how the syntax looks…

1
DISTANCE(myGeoLocationField__c, GEOLOCATION(37.775,-122.418),"mi") < 10

The ‘myGeoLocationField__c’ in the above syntax is the GeoLocation field on your custom or standard object.  The latitude and longitude values are in the GEOLOCATION method.  The “mi” value shows that miles will be used in the computation.  You can also use “km” in place of “mi” if that is needed.  But the magic in this is that you can simply place your distance after the < or > signs.  All of that computation then happens for you in the where clause of the SOQL or SOSL statement.

That is all great!  But how do we get the GeoLocation field updated?  I have worked with aStrikeIron tool that can populate these fields in batch.  I have also worked with the Google API, which provides a GeoLocation web service, and I hope to write a blog post about that service soon.

But in this blog post I want to write about the basics of calling the MapQuest API from Apex to get a GeoLocation back.

Here is some code to make that call…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
endpoint +='key=' + appKey;
//endpoint +='&callback=renderOptions'; //This will wrap the JSON if it is desired
endpoint +='&inFormat=kvp';
endpoint +='&outFormat=json';
endpoint +='&location=58103';
Http h = new Http();
        
// Instantiate a new HTTP request, specify the method (GET) as well as the endpoint and body
HttpRequest req = new HttpRequest();
req.setEndpoint(url);
req.setMethod('POST');
req.setBody(soapRequest);
            
// Send the request, and return a response
HttpResponse res = h.send(req);
return res.getBody();

The MapQuest API simply needs to have an App Key included as a query string parameter.  Then notice in the location parameter that I simply passed a zip code.  It is pretty cool that I just pass a zip code and then I can get back a latitude and longitude value.  Latitude and longitude values can of course vary widely within a zip code, but sometimes that is all you have.  You of course can pass a full address in to get a much more exact latitude and longitude value.

Once you get the ‘Body’ back from the API response then you can parse it and pull out the latitude and longitude that you need.

Salesforce makes it easy to do these integrations.  Please let us know if Sundog can help you with your next integration.

 

Posted in Technology | Tagged , , , | Leave a comment

LEVERAGING USER GENERATED CONTENT

LEVERAGING USER GENERATED CONTENT

Brands love to showcase their love from brand advocates and customers love to see their images valued by a company. However, when looking at what images to share and how to give credit, it’s important to keep in mind legal help to make sure the it’s ok for the brand to do so. A disclaimer on the Facebook page and website are one step in the right direction.
Below are a few disclaimers brands have put directly on their about section to set expectations and allows them to re-purpose content and stories shared with them.

Gap’s Facebook Page: “For any content that you submit, you specifically give Gap a non-exclusive, transferable, sub-licensable, royalty-free, worldwide license to use, copy, modify, delete, adapt, publish, translate, sell or distribute such content you post on the Gap Facebook page, without further approval by you or compensation by Gap.”

Coca-Cola simple redirects users to their “House Rules” with this simple statement: Coca-Cola Page House Rules.

BMW encourages their community to share with them by stating, “This is the official Facebook page of BMW – the page for BMW enthusiasts, fans and drivers. But this page is not all about us — it’s also about you! Send us pictures of your cars, tell us why you love driving and let us know what we can do for you.”

There are different ways to set expectations but it’s important to do so your audience is aware of how your company may use the content they share.

Posted in Technology | Tagged | Leave a comment

RESPONSE STRATEGY

As a company starts its social media strategy, it’s important to keep in mind when a negative post lands on your page or someone writes something inappropriate. There are a few things you can do to control these types of situations. The first is to have guidelines and disclaimers on your social accounts and next you will want to have a response strategy in place to help guide your community manager on how to engage in these situations.

Here is a good disclaimer by GAP:

“The Gap Facebook page is intended to be a fun community page where you can learn about upcoming sales, new styles, contests, promotions and more. We invite you to comment and ask questions on our wall. Please note that we do not endorse, nor are we responsible for the accuracy of the information, opinions, claims or advice shared by other Facebook users. Please do not rely on the information or advice of these postings. We strongly encourage everyone to respect the fellow members and their comments. Please understand that while we have no obligation to monitor the postings, we reserve the right, in our sole discretion, to remove postings that are:

1.) Abusive, defamatory or obscene

2.) Fraudulent, deceptive or misleading

3.) In violation of intellectual property rights of another

4.) Offensive—graphically or in tone

5.) Solicitations of any kind”

In a response strategy, its important to have drafted examples for different situations, but remember it’s best to keep it authentic, personable and realistic. One draft example may read something like:

“Andrew, we screwed up big time. I met with our manager and took a look at your situation. We’re going to make this right. Send a direct message with the best way and time to get a hold of you. In the meantime, we’ve done everything to make sure you’re the last person who feels ignored and mislead.”

In times of larger crisis, it may be best to pull a team together and put an action plan in place of the next steps. Keep in mind, social is a large part and understanding its best practices will help your company get back on track with your customers.

Posted in Technology | Tagged | Leave a comment

BRAND SOCIAL STRATEGY: KATE SPADE

The book, Blog Inc. delivers great blogging best practices as well as a series of interviews with top bloggers from around the world. While reading, I happen to stumble across an interview with the Kate Spade Social Media Manager, Cecilia Liu. She believes that it’s important to use all social media channels well to create the perfect storm. Let’s take a deeper dive into what we’ve learned from Kate Spade’s social media strategy.

Here is how they use their channels and feed back to the website at the right time in different ways:
• Facebook: Product focused. Questions and answers from customers. They also upload photo albums of their new clothing lines.
• Instagram: Capture the moments, which Kate Spade is living whether it’s at a fashion show, headquarters or traveling. Instagram acts as a supporting social channel.
• Twitter: Acts as the “Voice of Kate Spade Girl” and shares what she’s doing, what she’s wearing and the events she’s going to. Twitter acts as the live stream from the brand and also integrated campaigns such as #livecolorfully and #thingswelove.
• Tumblr: This channel acts as “Behind the Curtain” view to the brand. The brand comes to life through visuals and provides an in-depth look at the creative engine behind the scenes
• Pinterest: This channel shares style Inspiration and new looks. It’s nice that this Pinterest account doesn’t have an overwhelming amount of 400 boards to look at.
• YouTube: Here the brand distributes short branded films.
• Foursquare: Mainly used when brand and others check into events.

Kate Spade also focuses heavily on their Partner Strategy when featuring how celebrities wear their clothes, sharing “street style” and working with events, venues, artists and designers.

This content is created and shared to bring inspiration to their customers, stay top of their customer’s mind with their brand and build a relationship with their communities. In their campaigns, social leads the digital strategy. With their use of hashtags, they allow the community to communicate and engage in the campaign, follow hashtags, and see what their customers love about Kate Spade. This helps them see real time their customer’s taste.

At Kate Spade, social media is not treated as a silo but as an integrated part of the brand. They have resources dedicated to create a successfully, inspiring social presence for Kate Spade. If you love social and fashion, this is a brand you will want to follow.

Posted in Technology | Tagged | Leave a comment

CUSTOMER JOURNEYS DON’T DO ANYTHING ALONE

Let me take you back to a beautiful day in Fargo, North Dakota (yes, they do exist!). I just had an amazing cup of coffee on my patio, and I was heading across town to hear a local company give a presentation on “The Customer Journey.” Since the event was open to the public, I was excited to hear what some other locals had to say.

Two hours later, I left the session feeling very underwhelmed. I couldn’t understand how someone could take such an invigorating, meaningful and transformational topic … and deliver a dud! After spending some time noodling on the customer journey presentation, I realized the irony. The event teaching community business leaders about the importance of customer experience and journey mapping hadn’t applied any of the concepts to their own event. They demonstrated that they intellectually knew how to build a customer journey, but they hadn’t applied it to their own brand during my encounter with them.

At Sundog, I’m proud to say that we don’t just intellectually know why customer journeys are important and how to create them. We actually use our own customer journey to learn how our clients perceive working with us – from the beginning of our relationship through becoming loyal advocates. Some of the feedback challenges us. Some of it is inspiring and invigorating. But one thing is clear – when it comes to improving our customer experience (not just customer service), our team members look to the foundation set by our customer journey. We seek to innovate, create, and execute new and exciting strategies, processes, and experiences that elevate our own brand in the hearts and minds of our customers and broader market.

In our The Extra Mile: Part 2 webinar, my fellow presenter Andrew Richburg and I will discuss how to take a customer journey off your desk – and do something with it. Based on our firsthand experiences with journey mapping and facilitating transformation for our clients, as well as our internal transformation based on our own customer journey, we’ll discuss how creating positive impact takes alignment, prioritization, and ultimately meaningful action. We’ll dig into both tactical and strategic methods for using the journey as a change tool.

Here is quick overview of what we’ll be covering, and you can register free right here. I hope you can make it!

+  Transform relationships between your customers and your brand.
+  Take a closer look at your customer touchpoints and how they fit into the big picture.
+  Evaluate products and services from your customers’ point of view.
+  Create the right strategies and messages to reach further – and reach people in a way that really matters.
+  Align your teams and departments with common goals and understanding.
+  Make the most of marketing automation with a personal touch.
+  And gain more insights built on meaningful metrics.

Posted in Technology | Tagged , , , , | Leave a comment

TOP 5 REASONS WE CAN’T WAIT FOR DREAMFORCE

1. The Atmosphere: It’s busy. It’s motivating. It’s packed. It’s inspiring. And it’s a chance to network in a high-energy environment filled with great products, smart people and tons of fun. Between the sessions, speaker and product keynotes, hands-on training, concerts, volunteer opportunities and after-parties, these four days will be over before you know it. So enjoy the Dreamforce high. (You can sleep when it’s over.)

2. Circles of Success: If you didn’t try it last year, make sure you check it out this time. It’s the perfect opportunity to get personalized answers to all your Salesforce questions – in every role and industry. With the small round-table setting and your own internal Salesforce product expert, you’re sure to walk away feeling ready to tackle even your toughest Salesforce problems, too. You can sign up for Circles of Success through Agenda Builder or attend as a walk-in at the Success Zone.

3. Basecamp: You know that overwhelmed, claustrophobic, “I need to get away from the crowds for 15 minutes” feeling you get halfway through the first day? Well, we have the answer for you: just stop by our Basecamp to relax and recharge. There will be coffee, cocktails, snacks and even a free Fitbit just for stopping by. You can learn more about our Basecamp here.

4. Keynotes: Last year’s keynotes were pretty amazing, but somehow Salesforce stepped it up again. This year they will be featuring Hillary Rodham Clinton, Al Gore and Tony Robbins. I’m sure Marc Bennioff will have a few surprises up his sleeve as well (not to mention some amazing footwear). And of course, everyone will be rocking out with Bruno Mars at this year’s Dreamforce Gala.

5. The Future: As Dreamforce attendees, we get to see the future of Salesforce and new products before anyone else. Not only that, but we also get insights into how we can best utilize the newest features. So when we get back to the office, we all look like heroes!

What are YOU most excited about? Let us know, and don’t forget to stop by our Basecamp to say hello. And if you can’t make it this year, you can still follow us with #DFWalkABlock for all the highlights straight from Dreamforce!

Posted in Technology | Tagged , , , , | Leave a comment

THE EXTRA MILE STEP UP YOUR CUSTOMER JOURNEY: PART 1

In Part 1 of our new webinar series, we explored the what, why and how of the customer journey.

Miss out on the fun? Here’s a closer look at the fundamentals of the journey, plus you can watch the full online version below.

The Customer Journey
What: Learn about process mapping, customer experience and clustering/segmentation.
Why: Discover the uses, value and approach.
How: Incorporate customers, experiences and technologies/processes.

One of the biggest takeaways about the customer journey? It’s not an assumption. It’s a representation of actual process as experienced by your customers. And that makes it an incredible tool for change – giving you insight and foundation for transformation.

View the complete recording of THE EXTRA MILE Step Up Your Customer Journey: Part 1.

What’s Next: Part 2
To learn more, join us for the next webinar on October 2. Come see how to bring the customer journey to life, and use it as a catalyst to create positive change in your organization.
Register free right here.

Posted in Technology | Tagged , , , , | Leave a comment