From 9bbeb5aa25be913a3bf71195e3debc14f1cc40a6 Mon Sep 17 00:00:00 2001 From: Hyungu Kang | Airen Date: Wed, 21 Aug 2024 10:56:26 +0900 Subject: [PATCH] [AC-3510] feat: add callbacks.onWidgetSettingFailure (#347) ## Changes - Added `callbacks.onWidgetSettingFailure` - Added error page to playground ![image](https://github.com/user-attachments/assets/3d9e6c7e-26f3-43e3-a7e7-0fc929373785) ticket: [AC-3510] [AC-3510]: https://sendbird.atlassian.net/browse/AC-3510?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ --- packages/self-service/playground.html | 57 -------- .../self-service/playground/chatbot-404.png | Bin 0 -> 26835 bytes packages/self-service/playground/index.html | 131 ++++++++++++++++++ .../self-service/scripts/generateIndex.js | 2 +- src/context/WidgetSettingContext.tsx | 2 + src/libs/api/widgetSetting.ts | 57 ++++---- src/types.ts | 1 + 7 files changed, 165 insertions(+), 85 deletions(-) delete mode 100644 packages/self-service/playground.html create mode 100644 packages/self-service/playground/chatbot-404.png create mode 100644 packages/self-service/playground/index.html diff --git a/packages/self-service/playground.html b/packages/self-service/playground.html deleted file mode 100644 index 17410ec10..000000000 --- a/packages/self-service/playground.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - Chatbot playground - - - - - - - - - - - - - - - - -
- - - - - diff --git a/packages/self-service/playground/chatbot-404.png b/packages/self-service/playground/chatbot-404.png new file mode 100644 index 0000000000000000000000000000000000000000..3222f48d7ca6d0f35ceb87b149a22c8b10610ba3 GIT binary patch literal 26835 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 + + + + + + Chatbot playground + + + + + + + + + + + + + + + +
+
+ + + +
+
+ Page not found + We can't seem to find the page you are looking for. + Explore Sendbird AI chatbot + not-found +
+
+ +
+ + + + + diff --git a/packages/self-service/scripts/generateIndex.js b/packages/self-service/scripts/generateIndex.js index 797a27514..f3ec3bb9c 100644 --- a/packages/self-service/scripts/generateIndex.js +++ b/packages/self-service/scripts/generateIndex.js @@ -9,5 +9,5 @@ export function generateIndexFile(version) { const content = `import(\`/${version}/output.js\`).then(() => console.log("AI chatbot module has been successfully loaded"));`; fs.writeFileSync('dist/index.js', content); - fs.cpSync('playground.html', 'dist/playground/index.html'); + fs.cpSync('playground', 'dist/playground', { recursive: true }); } diff --git a/src/context/WidgetSettingContext.tsx b/src/context/WidgetSettingContext.tsx index 0045d2b68..63fb7e798 100644 --- a/src/context/WidgetSettingContext.tsx +++ b/src/context/WidgetSettingContext.tsx @@ -46,6 +46,7 @@ export const WidgetSettingProvider = ({ children }: React.PropsWithChildren) => firstMessageData, botStudioEditProps, autoOpen, + callbacks, } = useConstantState(); if (!appId || !botId) { @@ -91,6 +92,7 @@ export const WidgetSettingProvider = ({ children }: React.PropsWithChildren) => botId, userId: strategy === 'manual' ? injectedUserId : cachedSession?.userId, }) + .onError(callbacks?.onWidgetSettingFailure) .onGetBotStyle((style) => setBotStyle(style)) .onAutoNonCached(({ user, channel }) => { const session = { diff --git a/src/libs/api/widgetSetting.ts b/src/libs/api/widgetSetting.ts index cb3477365..89c1e490c 100644 --- a/src/libs/api/widgetSetting.ts +++ b/src/libs/api/widgetSetting.ts @@ -1,4 +1,6 @@ -import { resolvePath } from '../../utils'; +import { SendbirdError } from '@sendbird/chat'; + +import { noop, resolvePath } from '../../utils'; type APIResponse = { bot_style: { @@ -69,7 +71,7 @@ export async function getWidgetSetting({ const response = await fetch(path); const result = await response.json(); if (!response.ok) { - throw new Error(result.message || 'Something went wrong'); + throw new SendbirdError(result); } const json = result as APIResponse; @@ -119,33 +121,30 @@ export const widgetSettingHandler = ( AutoCached: (response: { channel?: ResponseChannel }) => void; ManualNonCached: (response?: { channel: ResponseChannel }) => void; ManualCached: (response: { channel?: ResponseChannel }) => void; + Error: (error: Error) => void; }; const callbacks: { + onError: Callbacks['Error']; onGetBotStyle: Callbacks['BotStyle']; onAutoNonCached: Callbacks['AutoNonCached']; onAutoCached: Callbacks['AutoCached']; onManualNonCached: Callbacks['ManualNonCached']; onManualCached: Callbacks['ManualCached']; } = { - onGetBotStyle: () => { - /* empty */ - }, - onAutoNonCached: () => { - /* empty */ - }, - onAutoCached: () => { - /* empty */ - }, - onManualNonCached: () => { - /* empty */ - }, - onManualCached: () => { - /* empty */ - }, + onError: noop, + onGetBotStyle: noop, + onAutoNonCached: noop, + onAutoCached: noop, + onManualNonCached: noop, + onManualCached: noop, }; const handlers = { + onError: (callback?: Callbacks['Error']) => { + if (callback) callbacks.onError = callback; + return handlers; + }, onGetBotStyle: (callback: Callbacks['BotStyle']) => { callbacks.onGetBotStyle = callback; return handlers; @@ -167,16 +166,20 @@ export const widgetSettingHandler = ( return handlers; }, get: async () => { - const response = await getWidgetSetting({ - host: params.host, - appId: params.appId, - botId: params.botId, - ...getParamsByStrategy(strategy, useCachedSession, params), - }); - - callbacks.onGetBotStyle(response.botStyle); - if (strategy === 'auto') handleAutoStrategy(response); - if (strategy === 'manual') handleManualStrategy(response); + try { + const response = await getWidgetSetting({ + host: params.host, + appId: params.appId, + botId: params.botId, + ...getParamsByStrategy(strategy, useCachedSession, params), + }); + + callbacks.onGetBotStyle(response.botStyle); + if (strategy === 'auto') handleAutoStrategy(response); + if (strategy === 'manual') handleManualStrategy(response); + } catch (error) { + if (error instanceof Error) callbacks.onError(error); + } }, }; diff --git a/src/types.ts b/src/types.ts index a78e37b0f..0fd1c669a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4,6 +4,7 @@ export interface SendbirdChatAICallbacks { * @private Callback to be called when the widget expand state changes. */ onWidgetExpandStateChange?: (isExpanded: boolean) => void; + onWidgetSettingFailure?: (error: Error) => void; } export interface FunctionCallRequestInfo {