sticker
field is currently not supported and will return null. Developer should rely on webhooks to get the sticker details.psid
, tid
).user_ref
is currently not supported. Added below features to No changes section
profile_pic
. API calls with profile_pic
field will return an error message.message_echoes
will support templates(generic, button, media)subject_to_new_eu_privacy_rules
flag. Developers will now have the option to either use Messenger Profile API or the tool via app dashboard.participants
field in Conversation API to retrieve the user's name.Added below features to No changes section
messaging_handovers
and standby
webhooks will be supported.Added below features to No changes section
message_echoes
webhook. Only supported for text and image. As part of our efforts to comply with new privacy rules in Europe, we're making updates that will impact some developers and businesses that use our Messenger API. Beginning December 16th, several Messenger APIs will be unavailable for developers and businesses in Europe, and for people in Europe who connect with businesses globally. These changes will impact some APIs and UI components (listed in the next sections) for the following audience:
Impacted countries: All of the 30 European Economic Area (EEA) countries, which includes:
Given the impact listed previously, we recommend providing an alternate experience using quick replies, text and inline URLs for webviews for the impacted scenarios. The two tables that follow provide:
We are currently working to restore these features and will continue to update this document and the changelog section with the details as they are available. You can also refer to the FAQ section for more details on frequently asked questions.
Following is a list of features and APIs that are not affected by these changes. Any exceptions are listed in the Notes column.
Area | Feature | Notes |
---|---|---|
Receive API (Webhooks) | None | |
Receive API (Webhooks) | None | |
Receive API (Webhooks) | Only postback webhooks for get started button, icebreaker and supported templates will be operational. Other postback webhooks will be affected | |
Receive API (Webhooks) |
| None |
Send API | None | |
Send API | None | |
Send API | Generic Template, Button Template, Media Template (images only, other media/attachments including audio, video, and files will return an error message) | Only supported on Android and iOS. Template will not be rendered on web client and chat plugin. Users will see an Attachment unavailable error |
Send API | Only supported on Android and iOS. Template will not be rendered on web client and chat plugin. Users will see an Attachment unavailable error | |
Send API | None | |
Send API | None | |
Entry Points | None | |
Entry Points | None | |
Entry Points | None | |
Entry Points | None | |
Entry Points | None | |
Messenger Profile API | Ice breakers, Get started button, Welcome Page, Domain Whitelist, Account Linking URL | None |
Conversation API | Only text message will work. | |
Handover Protocol | None | |
Handover Protocol | None | |
User Profile API | Supported for all fields except for |
The following actions can help you determine scenarios that are impacted by these changes:
subject_to_new_eu_privacy_rules
flag on Messenger Profile API to check for page impact.The table that follows provides more details and recommendations for alternatives on heavily-used APIs.
Area: Feature | User Impact | Developer Impact | Mitigation |
---|---|---|---|
Send API: | Media/attachments on new messages won't render in the thread. Media/attachments on existing messages will still be visible | Returns an error message | |
Send API: | Templates won’t render in the message thread because API calls will fail. Templates in existing messages will still be visible, but users won’t be able to take any action on them | Returns an error message | Replace templates with a combination of text, quick replies and web views |
Send API: | Templates won't render in the thread because API calls will fail. | Returns an error message | N/A |
Send API: | No user impact | Returns an error message | N/A |
Send API: | Templates won’t render in the thread because API calls will fail. Old templates will still be usable but users won’t be able to take any action on them | Returns an error message. For existing OTN token, Send API calls won't work For OTN template that were sent out in the past (pending user opt-in), user clicks won't work | N/A |
Send API: | Typing indicator won't be visible | Returns an error message | N/A |
Receive API (Webhooks): | User can send attachments but will receive an error message letting them know the business may not have received the attachment | Webhook will be delivered with attachment unavailable fallback payload | N/A |
Receive API (Webhooks): | No User Impact | Webhook will be delivered with attachment unavailable fallback payload | N/A |
Receive API (Webhooks): | No User Impact | Webhook will not be delivered | N/A |
Messenger Profile API: | Users won't see the persistent menu. | API call will succeed. Persistent menu won't be shown in thread | Use the Get Started button or a menu keyword. See Messenger Profile API - Persistent menu |
Persona API: | Persona details (name & profile pic) won't show in the thread. | Returns an error message | Introduce another persona. See Persona API fallback |
Account linking: | None | Returns an error message | N/A |
ID Matching: | N/A | Returns an error message | N/A |
Custom Labels: | N/A | Returns an error message | N/A |
Entry Points: | Users are not offered the upgrade dialog | Upgrade webhook is not delivered | N/A |
Entry Points: Web Plugins (Send to Messenger | Plugins won't render | No change | N/A |
Entry Points: Web Plugins (Checkbox plugin, Chat plugin) | No change |
| N/A |
Messenger Extensions SDK: | N/A | Affected fields ( | N/A |
Messenger Feature Review API: | N/A | Returns an error message | N/A |
The following error is returned for API calls that are not operational due to the new privacy rules in Europe. You should leverage the unique error code and error subcode that follows to identify errors and handle the fallback gracefully.
{ "error":{ "message":"(#10) This action was not submitted due to new privacy rules in Europe. See developer documentation for more info", "type":"OAuthException", "code":10, "error_subcode":2018336, "fbtrace_id":"AUmkjfWVra1NAa-qEH5NcI8" } }
The following fallback webhook will be delivered when user sends a message with unsupported media/attachment.
{ "message":{ "mid":"m_toDnmD...", "text":"Some text", "attachments":[ { "type":"fallback", "payload":{ "url":null, "title":"Attachment Unavailable" } } ] } }
The following API response will be returned when you query the Conversation API that contains an unsupported attachment/media.
GET {{MESSAGE_ID}}?fields=id,message,attachments,... { "id":"{{MESSAGE_ID}}", "message":"{{MESSAGE_TEXT}}", "attachments":{ "data":[ { "id":1234, //dummy id "name":"Media not available due to new privacy rules in Europe. See developer documentation for more info" } ] } }
Instead of sending the media as an attachment, you can send the raw media/attachment URL as a text. This will allow users to open/view the media/attachment via Messenger In-app browser.
{ "recipient":{ "id":"{{PSID}}" }, "messaging_type":"response", "message":{ "attachment":{ "type":"{image|video|audio|file}", "payload":{ "url":"https://example.com/video.mp4" } } } }
{ "recipient":{ "id":"{{PSID}}" }, "messaging_type":"response", "message":{ "text":"https://example.com/video.mp4" } }
Instead of sending the information as a template, you can use a combination of plain text and quick replies instead. This enables users to have enough context/information to continue the conversation.
{ "recipient":{ "id":"{{PSID}}" }, "message":{ "attachment":{ "type":"template", "payload":{ "template_type":"{{SOME_UNSUPPORTED_TEMPLATE}}", "elements":[ { "title":"Welcome!", "image_url":"https://petersfancybrownhats.com/company_image.png", "subtitle":"We have the right hat for everyone.", "buttons":[ { "type":"web_url", "url":"https://petersfancybrownhats.com", "title":"View Website" }, { "type":"postback", "title":"Start Chatting", "payload":"DEVELOPER_DEFINED_PAYLOAD" } ] } ] } } } }
{ "recipient":{ "id":"{{PSID}}" }, "messaging_type":"response", "message":{ "text":"Welcome! We have the right hat for everyone.", "quick_replies":[ { "content_type":"text", "title":"View Website", "payload":"{{DEVELOPER_DEFINED_PAYLOAD}}" }, { "content_type":"text", "title":"Green", "payload":"{{DEVELOPER_DEFINED_PAYLOAD}}" } ] } }
The URL Button opens a webpage in the Messenger webview. This button can be used with the Button and Generic Templates. You can send the URL link directly in plain text instead of wrapping it with a URL button. Users will be able to click the plain text URL and the URL will open inside the Messenger in-app browser. You can also use a URL-shortener service to convert a lengthy URL to its short form so it easier for users to remember and type.
{ "recipient":{ "id":"{{PSID}}" }, "message":{ "attachment":{ "type":"template", "payload":{ "template_type":"button", "text":"Try the URL button!", "buttons":[ { "type":"web_url", "url":"https://www.messenger.com/", "title":"URL Button" } ] } } } }
{ "recipient":{ "id":"{{PSID}}" }, "messaging_type":"response", "message":{ "text":"https://www.messenger.com/" } }
You can use the Get Started button to set the context and introduce the various menu/options available to the user. When the Get Started button is clicked, a combination of text and quick replies can be used as a replacement for persistent menu experience.
You should also provide a special keyword menu to display the menu options. This will allow the user to type menu at any point in the conversation and bring up the menu options in the form of text and quick replies.
{ "persistent_menu":[ { "locale":"default", "composer_input_disabled":false, "call_to_actions":[ { "type":"postback", "title":"Talk to an agent", "payload":"CARE_HELP" }, { "type":"postback", "title":"Outfit suggestions", "payload":"CURATION" }, { "type":"web_url", "title":"Shop now", "url":"https://www.originalcoastclothing.com/", "webview_height_ratio":"full" } ] } ] }
{ "recipient":{ "id":"{{PSID}}" }, "messaging_type":"response", "message":{ "text":"Welcome to Original Coast Clothing. At any point in time, you can type 'menu' to bring up the list of menu options. Here are some of the available options:", "quick_replies":[ { "content_type":"text", "title":"Talk to an agent", "payload":"CARE_HELP" }, { "content_type":"text", "title":"Outfit suggestions", "payload":"CURATION" }, { "content_type":"text", "title":"Shop now", "payload":"SHOP_URL" } ] } }
You can use a message to introduce a different persona in the conversation flow. This will let users know that a different agent is handling the conversation despite the profile picture being unchanged.
{ "recipient":{ "id":"{{PSID}}" }, "message":{ "text":"How can I help you?" }, "persona_id":"{{PERSONA_ID}}" }
{ "recipient":{ "id":"{{PSID}}" }, "messaging_type":"response", "message":{ "text":"Hi, this is Joe from OCC, How can I help you?" } }