This functionality is in development. Meta can change or remove this functionality at any time.
Messenger helps brands build lasting relationships through conversation. Whether you are talking to a loyal customer or someone brand new, Messenger lets businesses help customers with their pre and post purchase inquiries. Every interaction is an opportunity for the businesses to delight the customer. And, businesses now have more robust tools such as Customer Feedback Template to measure the experience they provide to their customers. With Customer Feedback Template businesses can:
Allowed:
Not allowed:
A typical flow using the Customer Feedback template is shown above:
Details of the template and its setup is provided in the following sections.
We support the most commonly used scoring standards in the industry which include CSAT, NPS, CES as well as Free Form inputs.
Below are the various scoring options and their nomenclature for our API calls.
Score Type: CSAT type: "csat " default_title: "How would you rate your experience with <business>?" options: "one_to_five", "five_stars" (default if no option set), "five_emojis" payload: "1", "2", "3", "4", "5" Score Type: NPS type: "nps" default_title: "How likely are you to recommend <business> to a friend?" options: "zero_to_ten" (also default if no option set) payload: "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" Score Type: CES type: "ces" defaut_title: "Overall, how easy was it to solve your problem today?" options: "one_to_seven" (also default if no option set) payload: "1", "2", "3", "4", "5", "6", "7"
CSAT(Customer Satisfaction Score) will be able to support views with 1 to 5, 5 stars or 5 emojis, default if none is provided would be “five_stars”. You can provide your own custom title for the question, if none is provided, the default_title will be chosen. Note: default_titles will be translated and localized to the locale of the user. Custom titles will not be translated, you would have to perform the translation yourselves if needed.
Selecting a score in any of the view formats will translate to a numeric score from 1 to 5 which will be the value that would be sent to your web-hook. That is what the payload fields show above. An example CSAT view using five_stars is shown below.
NPS(Net Promoter Score) will be able to support views with numbers from 0 to 10, default if none is provided would be “zero_to_ten”.. You can provide your own custom title for the question, if none is provided, the default_title will be chosen. Note: default_titles will be translated and localized to the locale of the user. Custom titles will not be translated, you would have to perform the translation yourselves if needed.
Selecting a score will translate to a numeric score from 0 to 10, which will be the value that would be sent to your web-hook. An example NPS view is shown below.
CES(Customer Effort Score) will be able to support views with numbers from 1 to 7, default if none is provided would be “one_to_seven”. You can provide your own custom title for the question, if none is provided, the default_title will be chosen. Note: default_titles will be translated and localized to the locale of the user. Custom titles will not be translated, you would have to perform the translation yourselves if needed. Selecting a score will translate to a numeric score from 1 to 7, which will be the value that would be sent to your web-hook. An example CES view is shown below.
Optional Free Form Input Field: To each of the score types you can also attach an additional free-form input. This input can be optionally set and can be used if you need text feedback in addition to the score a customer selects. Please note, a customer can choose to submit a score without providing text feedback. Also, the form input has a character limit of 400. Below is an example for a CSAT score type with five_stars and the additional free-from input.
For each of the scoring options you can also set the score labels to clearly define the level of the lowest value and the highest value in the template. The values that you can use are below. Please note, some values are default for certain score options, provided in parentheses below. For e.g. if no score label for CSAT is provided, it will take neg_pos as the default. You could also choose "none" if you would like to not show any labels at all.
"neg_pos" = Negative - Positive (default value for CSAT) "hard_easy" = Hard - Easy (default value for CES) "dis_sat" = Very Dissatisfied - Very Satisfied "unlike_like" = Very Unlikely - Very Likely (default value for NPS) "poor_great" = Poor - Great "none" = ""
For eg. a CSAT five_stars score option with neg_pos set would show the Negative and Positive indicators as below.
The standard messaging window for sending the template to a user is 24 hours after the user's last message. We encourage you to send the template within the 24 hour window for better customer experience and response rates. We also recognize that sometimes surveys will need to be sent outside this window. For that, you can use the message-tag: CUSTOMER_FEEDBACK while sending the template. This tag allows you to send the template within 7 days after the user's last message. Please note, the tag can only be used with the customer feedback template. Use in any other form is prohibited and will fail.
With the specific nomenclature out of the way, let us now look at the API that can be used to send the Customer Satisfaction Template to a thread.
A call should be made to the Send API with the following POST structure. Example values filled in:
curl -X POST -H "Content-Type: application/json" -d '{ "recipient": { "id": "<PSID>" }, "message": { "attachment": { "type": "template", "payload": { "template_type": "customer_feedback", "title": "Rate your experience with Original Coast Clothing.", // Business needs to define. "subtitle": "Let Original Coast Clothing know how they are doing by answering two questions", // Business needs to define. "button_title": "Rate Experience", // Business needs to define. "feedback_screens": [{ "questions":[{ "id": "hauydmns8", // Unique id for question that business sets "type": "csat", "title": "How would you rate your experience with Original Coast Clothing?", // Optional. If business does not define, we show standard text. Standard text based on question type ("csat", "nps", "ces" >>> "text") "score_label": "neg_pos", // Optional "score_option": "five_stars", // Optional "follow_up": // Optional. Inherits the title and id from the previous question on the same page. Only free-from input is allowed. No other title will show. { "type": "free_form", "placeholder": "Give additional feedback" // Optional } }] }], "business_privacy": { "url": "https://www.example.com" }, "expires_in_days" : 3 // Optional, default 1 day, business defines 1-7 days } } } }' "https://graph.facebook.com/v7.0/me/messages?access_token=<PAGE_ACCESS_TOKEN>"
Property | Type | Description |
---|---|---|
| String | Required. The |
| String | Required. Must be "template". |
| String | Required. Must be "customer_feedback". |
| String | Required. Defines the main title of the template that gets sent to the thread with the button to open the feedback form. Max 65 chars allowed. No URLs. |
| String | Required. Defines the sub-title of the template that gets sent to the thread with the button to open the feedback form. Max 80 chars allowed. No URLs. |
| String | Required. Defines the button title for the button that will open the feedback form. Max 20 chars allowed. No URLs. |
| Array< | Required. This is an array of objects. Each object represents 1 page. Please note we only support one page and one question per page right now. If multiple pages or multiple questions per page are set, we will throw an error back. |
| Array< | Required. Each page may have up to 1 questions. This is an array of objects. Each object represents 1 question. |
| String | Required. Alphanumeric. Maximum 80 characters. Must be unique throughout the entire form. You shall use these as the unique identifiers of the questions which would be sent back in the response to help you tie context back to your system. Ids should be alpha numeric and can contain any number of underscores(_) for e.g. banjkkl__2345 is a valid id, abnj-4567 is not a valid id due to the “-”. |
| String | Required. The type of the question. Currently supported values include: "csat", "nps", "ces", "free_form. Please check Score Types section above for more details. |
| String | Optional. You can provide your own custom title for the question, if none is provided, the default_title will be chosen. Please check Score Types section above for more details. Note: default_titles will be translated and localized to the locale of the user. Custom titles will not be translated, you would have to perform the translation yourselves if needed. Min 5 chars and Max 85 chars allowed. No URLs. |
| String | Optional. Field to define the level labels for low and high values. Please check Score Level Indicators section above for details. Values include 'neg_pos', 'hard_easy', 'dis_sat', 'unlike_like','poor_great' |
| String | Optional. Field to define the score selector views. For e.g. values include '1_to_5', 'five_stars', 'five_emojis' for csat type. Please check Score Types section above for more details. |
|
| Optional. Object to set a free form input. Inherits the title and id from the previous question on the same page. Only free-from input is allowed. |
| String | Required. Set value as 'free_form'. |
| String | Optional. Placeholder to be shown inside the free form text input. Defaults to "Give additional feedback", if none provided. Max 65 chars allowed. No URLs. |
|
| Required. Object to provide your privacy policies in the template. |
| String | Required. The link to your hosted privacy policy. Example, the "privacy policy" link in the screenshots. You only need to provide the URL, and the link text will be automatically generated in the template. |
| Integer | Optional. Set the time for template expiration in minutes. You can set a value between 1 to 7. Unit is days. If no value is set then a default of 1 day would be set. |
Please re-note the following restrictions that apply to the template.
Please check individual field restrictions in the API properties table above.
After the template is sent in thread, you shall wait and expect the customer to fill in the information and submit it. Your web-hook server will receive a “messaging_feedback” event (i.e., an event that contains the submitted data) once the customer submits the feedback. Please ensure you have subscribed to the “messaging_feedback” webhook subscription for your app and page in the app dashboard.
Note: The customer will have the time; set in the expires_in_days field of the send request (default 1 day, if not set) to fill the template and submit the feedback. The form will auto-expire after the set time, after which the in-thread entry point will no longer be available.
The received feedback event will be as below:
{ "object": "page", "entry": [{ "time": <timestamp>, "messaging": [{ "sender": { "id": "<PSID>" }, "recipient": { "id": "<page_id>" }, "messaging_feedback": { "feedback_screens": [{ "screen_id": 0, "questions": { "hauydmns8": { "type": "csat", "payload" : "5", "follow_up": { "type": "free_form", "payload" : "I am very satisfied!" } } } }] } }] }] }
Property | Type | Description |
---|---|---|
| Integer | The timestamp when the customer submits the feedback. |
sender | String | The customer |
recipient | String | The page |
|
| The standard key of a “messaging_feedback” event. This holds an array of feedback_screens with an array of object of feedback question responses. |
| Array< | Holds feedback by the customer. Each object represents a form page of your original request, with customer feedbacks. Each object has a key “screen_id”, which is the form page index, and a key “questions”, which holds your question ids and customer answers. The objects are present in the same sequence as your original request. |
|
| Holds questions in a form page. Each object has the key as the question id, and the value answered by the customer. |
| String | question.id set in the Send API request, as a key to the responses submitted by the customer. |
| String | Defines the type of the scoring mechanism used. For e.g csat, nps, ces etc |
| String | Score value selected by the customer. |
|
| Object that stores the value of the free form text input if set. |
| String | Will be set to free_form to identify free form responses vs other responses. |
| String | Free form text feedback provided by the customer. |