fix(inboxes): guide users through meta api incident (#15210)
An API-level issue on Meta’s side is preventing Chatwoot Cloud customers from completing some Meta inbox setup flows and can affect actions in existing Instagram conversations. This draft temporarily gates the affected Facebook, Instagram, and WhatsApp flows behind one incident flag and gives users clear guidance with a link to the current status incident. Self-hosted installations remain unchanged. While WhatsApp Embedded Signup is unavailable, selecting WhatsApp Cloud takes eligible users directly to manual setup and explains the current limitations. Related: https://status.chatwoot.com/incident/976975 Fixes https://linear.app/chatwoot/issue/CW-7771/guide-users-through-meta-api-incident ### Things to know - `IS_META_INBOX_CREATION_DISABLED` is the single temporary rollout flag and is currently enabled. - The incident behavior applies only to Chatwoot Cloud. - Facebook, Instagram, and WhatsApp Embedded Signup are removed from the new onboarding suggestions while the incident is active. - Existing Instagram inbox settings and conversations show incident guidance with a status link. - The WhatsApp Cloud provider routes to manual setup while the flag is enabled. - Manual setup works only for numbers already connected to WhatsApp Cloud API; numbers using WhatsApp Business app coexistence are not supported by this flow yet. - The flag should be disabled or removed after the incident is resolved. ### How to test 1. Run Chatwoot with the Cloud installation configuration and open the new inbox flow. 2. Confirm Facebook and Instagram authentication actions are disabled and display the amber incident banner. 3. Open the WhatsApp provider selector and confirm WhatsApp Cloud is described as manual setup with Cloud API credentials. 4. Select WhatsApp Cloud and confirm it opens the manual setup form with the incident warning and links to the current status incident. 5. Open WhatsApp Embedded Signup directly and confirm the signup action is disabled while the eligible manual setup option remains available. 6. Open the initial account onboarding flow and confirm Meta channels are not offered while other configured channels remain available. 7. Open an existing Instagram inbox and conversation and confirm the incident guidance links to the current status incident. 8. Run the same flows as a self-hosted installation and confirm they remain available. --------- Co-authored-by: Muhsin <12408980+muhsin-k@users.noreply.github.com>
This commit is contained in:
@@ -33,7 +33,10 @@ import {
|
||||
// constants
|
||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
|
||||
import { REPLY_POLICY } from 'shared/constants/links';
|
||||
import wootConstants from 'dashboard/constants/globals';
|
||||
import wootConstants, {
|
||||
IS_META_INBOX_CREATION_DISABLED,
|
||||
META_RESTRICTION_STATUS_URL,
|
||||
} from 'dashboard/constants/globals';
|
||||
import { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';
|
||||
import { INBOX_TYPES } from 'dashboard/helper/inbox';
|
||||
|
||||
@@ -93,6 +96,7 @@ export default {
|
||||
currentUserId: 'getCurrentUserID',
|
||||
listLoadingStatus: 'getAllMessagesLoaded',
|
||||
currentAccountId: 'getCurrentAccountId',
|
||||
isOnChatwootCloud: 'globalConfig/isOnChatwootCloud',
|
||||
}),
|
||||
isOpen() {
|
||||
return this.currentChat?.status === wootConstants.STATUS_TYPE.OPEN;
|
||||
@@ -170,6 +174,16 @@ export default {
|
||||
instagramInbox
|
||||
);
|
||||
},
|
||||
isInstagramRestrictionBannerVisible() {
|
||||
return (
|
||||
this.isOnChatwootCloud &&
|
||||
IS_META_INBOX_CREATION_DISABLED &&
|
||||
this.isAnInstagramChannel
|
||||
);
|
||||
},
|
||||
instagramRestrictionStatusUrl() {
|
||||
return META_RESTRICTION_STATUS_URL;
|
||||
},
|
||||
replyWindowBannerMessage() {
|
||||
if (this.isAWhatsAppChannel) {
|
||||
return this.$t('CONVERSATION.TWILIO_WHATSAPP_CAN_REPLY');
|
||||
@@ -453,6 +467,14 @@ export default {
|
||||
class="flex flex-col justify-between flex-grow h-full min-w-0 m-0"
|
||||
>
|
||||
<div ref="topBannerRef">
|
||||
<Banner
|
||||
v-if="isInstagramRestrictionBannerVisible"
|
||||
color-scheme="warning"
|
||||
class="mx-2 mt-2 min-h-12 !h-auto rounded-lg"
|
||||
:banner-message="$t('CONVERSATION.INSTAGRAM_RESTRICTION_BANNER')"
|
||||
:href-link="instagramRestrictionStatusUrl"
|
||||
:href-link-text="$t('CONVERSATION.INSTAGRAM_RESTRICTION_STATUS_LINK')"
|
||||
/>
|
||||
<Banner
|
||||
v-if="!currentChat.can_reply"
|
||||
color-scheme="alert"
|
||||
@@ -462,7 +484,7 @@ export default {
|
||||
:href-link-text="replyWindowLinkText"
|
||||
/>
|
||||
<Banner
|
||||
v-else-if="hasDuplicateInstagramInbox"
|
||||
v-if="hasDuplicateInstagramInbox"
|
||||
color-scheme="alert"
|
||||
class="mx-2 mt-2 overflow-hidden rounded-lg"
|
||||
:banner-message="$t('CONVERSATION.OLD_INSTAGRAM_INBOX_REPLY_BANNER')"
|
||||
|
||||
Reference in New Issue
Block a user