@@ -1125,6 +1125,20 @@ export class ChatwootService {
11251125 return result ;
11261126 }
11271127
1128+ private getAdsMessage ( msg : any ) {
1129+ interface AdsMessage {
1130+ title : string ;
1131+ body : string ;
1132+ thumbnailUrl : string ;
1133+ sourceUrl : string ;
1134+ }
1135+ let adsMessage : AdsMessage | undefined = msg . extendedTextMessage ?. contextInfo . externalAdReply ;
1136+
1137+ this . logger . verbose ( 'Get ads message if it exist' ) ;
1138+ adsMessage && this . logger . verbose ( 'Ads message: ' + adsMessage ) ;
1139+ return adsMessage ;
1140+ }
1141+
11281142 private getTypeMessage ( msg : any ) {
11291143 this . logger . verbose ( 'get type message' ) ;
11301144
@@ -1278,6 +1292,8 @@ export class ChatwootService {
12781292
12791293 const isMedia = this . isMediaMessage ( body . message ) ;
12801294
1295+ const adsMessage = this . getAdsMessage ( body . message ) ;
1296+
12811297 if ( ! bodyMessage && ! isMedia ) {
12821298 this . logger . warn ( 'no body message found' ) ;
12831299 return ;
@@ -1378,6 +1394,64 @@ export class ChatwootService {
13781394 }
13791395 }
13801396
1397+ this . logger . verbose ( 'check if has Ads Message' ) ;
1398+ if ( adsMessage ) {
1399+ this . logger . verbose ( 'message is from Ads' ) ;
1400+
1401+ this . logger . verbose ( 'get base64 from media ads message' ) ;
1402+ const getBase64AdMsg = await axios . get ( adsMessage . thumbnailUrl , { responseType : 'arraybuffer' } ) ;
1403+ const base64 = getBase64AdMsg . data . toString ( 'base64' ) ;
1404+
1405+ const contentType = getBase64AdMsg . headers [ 'content-type' ] ;
1406+ const extension = mimeTypes . extension ( contentType ) ;
1407+ const mimeType = extension && mimeTypes . lookup ( extension ) ;
1408+
1409+ if ( ! mimeType ) {
1410+ this . logger . warn ( 'mimetype of Ads message not found' ) ;
1411+ return ;
1412+ }
1413+
1414+ const random = Math . random ( ) . toString ( 36 ) . substring ( 7 ) ;
1415+ const nameFile = `${ random } .${ mimeTypes . extension ( mimeType ) } ` ;
1416+ const fileData = Buffer . from ( base64 , 'base64' ) ;
1417+ const fileName = `${ path . join ( waInstance ?. storePath , 'temp' , `${ nameFile } ` ) } ` ;
1418+
1419+ this . logger . verbose ( 'temp file name: ' + nameFile ) ;
1420+
1421+ this . logger . verbose ( 'create temp file' ) ;
1422+ writeFileSync ( fileName , fileData , 'utf8' ) ;
1423+ const truncStr = ( str : string , len : number ) => {
1424+ return str . length > len ? str . substring ( 0 , len ) + '...' : str ;
1425+ } ;
1426+
1427+ const title = truncStr ( adsMessage . title , 40 ) ;
1428+ const description = truncStr ( adsMessage . body , 75 ) ;
1429+
1430+ this . logger . verbose ( 'send data to chatwoot' ) ;
1431+ const send = await this . sendData (
1432+ getConversation ,
1433+ fileName ,
1434+ messageType ,
1435+ `${ bodyMessage } \n\n\n**${ title } **\n${ description } \n${ adsMessage . sourceUrl } ` ,
1436+ ) ;
1437+
1438+ if ( ! send ) {
1439+ this . logger . warn ( 'message not sent' ) ;
1440+ return ;
1441+ }
1442+
1443+ this . messageCacheFile = path . join ( ROOT_DIR , 'store' , 'chatwoot' , `${ instance . instanceName } _cache.txt` ) ;
1444+
1445+ this . messageCache = this . loadMessageCache ( ) ;
1446+
1447+ this . messageCache . add ( send . id . toString ( ) ) ;
1448+
1449+ this . logger . verbose ( 'save message cache' ) ;
1450+ this . saveMessageCache ( ) ;
1451+
1452+ return send ;
1453+ }
1454+
13811455 this . logger . verbose ( 'check if is group' ) ;
13821456 if ( body . key . remoteJid . includes ( '@g.us' ) ) {
13831457 this . logger . verbose ( 'message is group' ) ;
0 commit comments