feat: 增价crisp会话客服

This commit is contained in:
2025-08-26 08:59:37 -07:00
parent 6b8f828277
commit 632cb85ad3
5 changed files with 71 additions and 2 deletions
+54
View File
@@ -0,0 +1,54 @@
'use client';
import useGlobalStore from '@/config/use-global';
import { Crisp } from 'crisp-sdk-web';
import { useEffect } from 'react';
// Configuration object for Crisp
const CRISP_CONFIG = {
websiteId: '47fcc1ac-9674-4ab1-9e3c-6b5666f59a38',
autoload: false,
};
/**
* Initializes and configures the Crisp chat widget.
* Sets user email if available and loads the widget.
*/
const CrispChat = () => {
const { user } = useGlobalStore();
useEffect(() => {
// Configure Crisp with the provided website ID
try {
Crisp.configure(CRISP_CONFIG.websiteId, {
autoload: CRISP_CONFIG.autoload,
});
} catch (error) {
console.error('Failed to configure Crisp:', error);
}
// Set user email and load Crisp if auth_identifier exists
if (user?.auth_methods?.[0]?.auth_identifier) {
try {
Crisp.setTokenId(`${user.auth_methods[0].auth_identifier}_${user.id}`);
Crisp.user.setEmail(user.auth_methods[0].auth_identifier);
Crisp.load();
} catch (error) {
console.error('Failed to set user email or load Crisp:', error);
}
}
// Cleanup function to reset Crisp on component unmount
return () => {
try {
Crisp.session.reset();
} catch (error) {
console.error('Failed to reset Crisp session:', error);
}
};
}, [user]); // Re-run effect if user changes
return null; // Component does not render anything
};
export default CrispChat;