Freigeben über


Starting Microsoft Teams conversation on items from SharePoint list - Part 1

In this 3 part series we will explore a scenario of a customer service team in Contoso and build solution that helps them become productive and help Contoso increase customer satisfaction. The solution we will build will leverage new capabilities in Microsoft 365 universal toolkit for teamwork - SharePoint, Yammer, Teams and Flow.

What is greater invention than sliced bread? Dare I say SharePoint list! Talk to any SharePoint developer or an architect and they will tell you that SharePoint lists are like ninjas. They are useful in practically every collaboration scenarios. From maintaining master lists of products, to customer feedback, to orders. You can also link one SharePoint list to another, very much like your relational database tables. And what makes it so appealing is that it is easy. You can create a list in seconds and start adding columns. They became so popular that Microsoft published an article comparing SharePoint lists to databases. Suffice to say, SharePoint lists are first class citizens since dawn of SharePoint and will be so for long term. If you are still not convinced about how awesome SharePoint lists are, you may want to check out new investments Microsoft is making in addressing some performance barriers. Microsoft recently announced that SharePoint lists no more has the 5000 items limit in view.

Business scenario – customer feedback

This article is not about SharePoint lists, but about how we can take our most beloved functionality and make it even more useful to business scenarios by extending its value using Microsoft Teams. Now that I have your attention, imagine you are working in customer support group and use SharePoint list to track customer feedback. Because this is SharePoint list, you can sort, filter, group, export to excel etc. to help you with triaging process. In your group, you work with several team members each responsible for an aspect of customer support function. How would you like if you could have a near real time conversation with your team about each customer feedback that you add to SharePoint list? For instance, if you receive a customer feedback about certain improvements you could do in your supply chain; with conversations in the team, you can tag (@mention) the supply chain representative and brain storm on ideas. Since the conversation is happening in the open, others in your team can participate in the brainstorming as well. What you get out of this is quick resolution or a next step action on the customer feedback and close the loop with the customer. Without this conversation, the customer feedback in the SharePoint list would have to wait until you meet with your team to triage the feedback where the feedback would have received few minutes for discussion. Now instead you can take insights from the conversation and add that to your triaging process.

Make it real!

In this section we will walkthrough on how we make the above scenario real using SharePoint online list and Microsoft Teams. Following are high level steps

  1. Create customer feedback list in SharePoint
  2. Create a Team and a channel in Microsoft Teams
  3. Configure Incoming webhook connector
  4. Create a Flow to push customer feedback from SharePoint list into Teams channel as Rich card
  5. Having conversation with your team members on the feedback

Create customer feedback list in SharePoint

Based on our business scenario of customer feedback, let's start by creating a SharePoint list with few relevant columns. Screenshot below shows our customer feedback SharePoint list:

Columns in Customer feedback list:

  1. Title: Default mandatory single line text column. Captures title of the feedback
  2. Customer Name: Choice field with list of customers. If customer name is not present, user can add a new one
  3. Area: Pre-defined list of categories for feedback. Choice includes Customer service, Shipping, Packaging and Quality. As we build our Flow, we will use Area to redirect the feedback to channel specific to the Area. For instance, feedback about Shipping will be pushed into Shipping channel within Teams
  4. Feedback: Multi line of text to capture feedback
  5. Status: Pre-defined list of feedback status – New, In Review, Archived and Addressed. As feedback is triaged, the status is changed to reflect the feedback state. At present status is changed manually by user triaging the feedback.
  6. Action: Multi line of text describing what action was taken on the feedback

Create a Team and a channel in Microsoft Teams

Next we create Customer Satisfaction team in Microsoft Teams. Within this team, we create 4 channels: Customer service, Packaging, Quality and Shipping. Idea here is that each channel represents an aspect of customer satisfaction. For instance, we will have packaging related conversations, documents, and notes within Packaging channel. We also add our customer satisfaction team members to the team.

Now we have SharePoint list where we capture customer feedback and we have a team in Microsoft Teams to have conversations and teamwork internally within members of this organization.

Configure Incoming webhook connector

In order to get value out of these capabilities, we will integrate customer feedback list with conversations in teams. This will allow members of the team to collaborate and triage the feedback in near real time and be prepared for next triage meeting. The way we will achieve this is by pushing area specific customer feedback to its respective channel. For instance, if a customer feedback is about packaging, the feedback will be published in Packaging channel for discussion. Similarly, feedback about shipping will be published in Shipping channel. You get the idea!

There are couple of ways to achieve this. One way is to use the new Teams action in Flow, which is in preview at the time of this writing, and second approach is the use Incoming Webhook connector and HTTP action in Flow. For purpose of this article, we will use Incoming webhook connector as it provides some additional customization in the way rich cards are published in the channel. Using this approach we have ability to use JSON for customizing the message.

Follow steps below to configure Incoming webhook connector for Customer service channel. Repeat these steps for other channels in your team

  1. Add connector by right clicking on the channel and selecting Connectors
  2. Add Incoming Webhook connector
  3. Click on Install
  4. Give a name to the connector and click on Create
  5. On thenext screen, you will be presented with URL to the connector. The URL is important and should be saved because we will use it later when we configure Flow
  6. That is it, we have our Incoming Webhook connector configured for Customer service channel

Create a Microsoft Flow to push customer feedback from SharePoint list into Teams channel

Now we build a Flow that pushes the customer feedback from SharePoint list to respective channel within Teams.

  1. Navigate to Flow by going to URL https://flow.microsoft.com and login using your Office 365 credentials

  2. Click on My Flows and click on Create from blank

  3. Next select When an item is created. This is applicable to SharePoint

  4. Configure the Flow. In this Flow, we will publish every new feedback created in SharePoint to Customer service Teams channel

    1. Specify the site URL where your Customer Feedback list resides. Then select the Customer Feedback list

    2. Select HTTP-HTTP in the Action

    3. Method is POST

    4. In the Uri paste the url we copied when we configured Incoming webhook connector

    5. In the Headers add Content Type value application/json

      d. In the Body, paste the following

      [sourcedode language="text"]

      {

      "@@type": "MessageCard",

      "@@context": "https://schema.org/extensions",

      "summary": "New feedback created for <<Area Value>> ",

      "themeColor": "0075FF",

      "sections": [

      {

      "heroImage": {

      "image": <<Created By Picture>>

      }

      },

      {

      "startGroup": true,

      "title": <<Title>> ,

      "activityImage": <<Created By Picture>> ,

      "activityTitle": <<Customer Name Value>> ,

      "activitySubtitle": <<Status Value>> ,

      "facts": [

      {

      "name": "Date submitted:",

      "value": <<Created>>

      },

      {

      "name": "Customer",

      "value": <<Customer Name Value>>

      },

      {

      "name": "Area",

      "value": <<Area Value>>

      },

      {

      "name": "Feedback:",

      "value": <<Feedback>>

      },

      {

      "name": "Link:",

      "value": <<Link to Item>>

      }

      ]

      },

      {

      "startGroup": true,

      "activitySubtitle": "Access this feedback [Link to insight] <<link to item>> \n\nThis message was created by an automated workflow in Microsoft Flow. Do not reply."

      }

      ]

      }

  5. Make sure you edit the Body and replace the placeholders <<>> with valued from Dynamic expression. The end result should look like this

  6. Click on Create flow to save the flow

Congratulations! You are done with the integration. The beauty of this approach is that it gives you the flexibility to customize the conversation (aka message card) as it is posted in the Teams channel. Because it is JSON, you can be creative with the branding as well as the content that goes into the conversation. In future post, we will look at how we can add interactivity to this conversation such that user can update the feedback item directly from the Teams channel.

One thing I didn't add to the flow is the conditional logic that would post the feedback to Teams channel specific to Area. You can easily do this by adding Switch between When item is created and the HTTP post action.

Having conversation with your team members on the feedback

Let's get this to work by creating a new feedback in the SharePoint list and having conversation around it within Teams

  1. I start by creating a new customer feedback in SharePoint list
  2. The Flow runs in the background and posts the feedback to our customer service channel within Teams
  3. The value of integration is to have conversation with my team members around this feedback. I start this by pulling in my team members to discuss this feedback
  4. Now my team members who are so customer obsessed, they jump in to this conversation to address this issue.

Business value

The value here is the accelerated time to address the feedback. Because of the conversation in Teams, we could pull in our experts based on the feedback that was received and brain storm on possible solutions prior to the triage meeting. Moreover, since the conversation is happening in the channel, other team members, who were not part of this conversation, could learn on what is happening around this feedback. In next few articles we will be extending this capability with additional scenarios by leveraging some of the extensibility capabilities in Teams

If you are still trying to figure out why Teams, I suggest you check out blog by my colleague, Matt Soseman, who provides a demo and overview video of Teams

Resources

  1. This integration scenario was inspired by video on youtube by Teams program manager Nishanth Nadarajah
  2. Recommend following Matt Soseman's blog on Teams here
  3. If you need JSON sample for other scenarios such as Yammer, Trello etc. head over to this website
  4. Refer to this MSDN article if you need in depth information on building rich cards in Teams

Let me know your thoughts / comments and feedback.

Part 2

In part 2 we will extend this solution such that the team reaches out for insights outside its immediate team by leveraging Yammer

AC

Comments

  • Anonymous
    February 09, 2018
    Nice one! Really liked it. I must confess tough, I had tough time configuring the JSON. But it worked in the end. Will be waiting for the next articles.
    • Anonymous
      February 10, 2018
      Thank you. As I mentioned in the article there is an easier way to do this using new Teams action within Flow. However, I chose this approach because I plan on adding richer interaction in future posts.
  • Anonymous
    November 07, 2018
    This is really awesome, thanks for this post. Unfortunately I was unable to get the Flow to work. It just keeps telling me "Bad payload received by generic incoming webhook." A Google of this error was not helpful? I followed you steps exactly except that I altered the field names.
    • Anonymous
      November 16, 2018
      I had the same error happen when I tried this. Take a look at your failed flow and the input in the HTTP part.In my case, I wanted to display who modified the item. I had used the "Modified by" field instead of "Modified by DisplayName". "Modified by" returns several values, messing up the payload.Thanks Arbindo for sharing this :).