@@ -26,9 +26,11 @@ interface Message {
2626
2727interface ChatModuleProps {
2828 onArtworkRecommendation ?: ( artwork : any ) => void ;
29+ externalMessage ?: string ;
30+ onMessageSent ?: ( ) => void ;
2931}
3032
31- export const ChatModule : React . FC < ChatModuleProps > = ( { onArtworkRecommendation } ) => {
33+ export const ChatModule : React . FC < ChatModuleProps > = ( { onArtworkRecommendation, externalMessage , onMessageSent } ) => {
3234 const [ messages , setMessages ] = useState < Message [ ] > ( [
3335 {
3436 id : '1' ,
@@ -55,6 +57,52 @@ export const ChatModule: React.FC<ChatModuleProps> = ({ onArtworkRecommendation
5557 }
5658 } , [ messages ] ) ;
5759
60+ useEffect ( ( ) => {
61+ if ( externalMessage ) {
62+ const sendExternalMessage = async ( ) => {
63+ const userMessage : Message = {
64+ id : Date . now ( ) . toString ( ) ,
65+ type : 'user' ,
66+ content : externalMessage ,
67+ timestamp : new Date ( )
68+ } ;
69+
70+ setMessages ( ( prev ) => [ ...prev , userMessage ] ) ;
71+ setIsLoading ( true ) ;
72+
73+ setTimeout ( ( ) => {
74+ const responses = [
75+ `${ externalMessage } 에 대한 맞춤형 코스를 추천해드릴게요! 이 전시회와 연관된 주변 갤러리와 박물관을 포함한 문화 코스를 계획해보세요. 근처 카페나 레스토랑도 함께 추천해드릴까요?` ,
76+ `훌륭한 선택이네요! ${ externalMessage . split ( ' ' ) [ 0 ] } 전시회를 중심으로 한 하루 코스를 짜보겠습니다. 비슷한 작품들을 볼 수 있는 다른 장소들과 함께 문화적 경험을 극대화할 수 있는 루트를 제안해드릴게요.` ,
77+ `${ externalMessage . split ( ' ' ) [ 0 ] } 전시회와 테마가 연결되는 다른 문화 공간들을 찾아보겠습니다. 미술관, 갤러리, 그리고 관련 문화시설들을 포함한 종합적인 코스를 계획해서 알려드릴게요!`
78+ ] ;
79+
80+ const assistantMessage : Message = {
81+ id : ( Date . now ( ) + 1 ) . toString ( ) ,
82+ type : 'assistant' ,
83+ content : responses [ Math . floor ( Math . random ( ) * responses . length ) ] ,
84+ timestamp : new Date ( ) ,
85+ suggestions : [
86+ '상세한 코스 일정 짜줘' ,
87+ '교통편 정보도 알려줘' ,
88+ '비슷한 다른 전시 추천해줘' ,
89+ '근처 맛집도 알려줘'
90+ ]
91+ } ;
92+
93+ setMessages ( ( prev ) => [ ...prev , assistantMessage ] ) ;
94+ setIsLoading ( false ) ;
95+ } , 1500 ) ;
96+ } ;
97+
98+ sendExternalMessage ( ) ;
99+
100+ if ( onMessageSent ) {
101+ onMessageSent ( ) ;
102+ }
103+ }
104+ } , [ externalMessage ] ) ;
105+
58106 const savedMessages = messages . filter ( ( msg ) => msg . isSaved ) ;
59107 const savedCount = savedMessages . length ;
60108
0 commit comments