@@ -1600,22 +1600,45 @@ export class ChatwootService {
16001600
16011601 public async sendAttachment ( waInstance : any , number : string , media : any , caption ?: string , options ?: Options ) {
16021602 try {
1603- const parsedMedia = path . parse ( decodeURIComponent ( media ) ) ;
1604- let mimeType = mimeTypes . lookup ( parsedMedia ?. ext ) || '' ;
1605- let fileName = parsedMedia ?. name + parsedMedia ?. ext ;
1603+ // Tenta detectar extensao da URL primeiro (mais confiavel)
1604+ const urlParts = media . split ( '/' ) ;
1605+ const lastPart = urlParts [ urlParts . length - 1 ] ; // Ex: "biksrd.jpeg"
1606+ const extensionMatch = lastPart . match ( / \. ( [ a - z A - Z 0 - 9 ] + ) $ / ) ; // Pega extensao
16061607
1608+ let mimeType = '' ;
1609+ let fileName = lastPart ;
1610+
1611+ // Se encontrou extensao na URL, usa ela
1612+ if ( extensionMatch ) {
1613+ const ext = '.' + extensionMatch [ 1 ] ; // Ex: ".jpeg"
1614+ mimeType = mimeTypes . lookup ( ext ) || '' ;
1615+ this . logger . verbose ( `Extensao detectada na URL: ${ ext } -> mimeType: ${ mimeType } ` ) ;
1616+ }
1617+
1618+ // Fallback: tenta com path.parse
1619+ if ( ! mimeType ) {
1620+ const parsedMedia = path . parse ( decodeURIComponent ( media ) ) ;
1621+ mimeType = mimeTypes . lookup ( parsedMedia ?. ext ) || '' ;
1622+ fileName = parsedMedia ?. name + parsedMedia ?. ext ;
1623+ this . logger . verbose ( `Fallback path.parse: ${ parsedMedia ?. ext } -> mimeType: ${ mimeType } ` ) ;
1624+ }
1625+
1626+ // Se ainda nao tem mimeType, faz requisicao para pegar content-type
16071627 if ( ! mimeType ) {
16081628 const parts = media . split ( '/' ) ;
16091629 fileName = decodeURIComponent ( parts [ parts . length - 1 ] ) ;
16101630
1631+ this . logger . verbose ( `Fazendo requisicao para obter content-type: ${ media } ` ) ;
16111632 const response = await axios . get ( media , {
16121633 responseType : 'arraybuffer' ,
16131634 } ) ;
16141635 mimeType = response . headers [ 'content-type' ] || 'application/octet-stream' ;
1636+ this . logger . verbose ( `Content-type do servidor: ${ mimeType } ` ) ;
16151637 }
16161638
16171639 // Garante que mimeType seja string valida
16181640 if ( ! mimeType || typeof mimeType !== 'string' ) {
1641+ this . logger . warn ( `mimeType invalido, usando fallback: ${ mimeType } ` ) ;
16191642 mimeType = 'application/octet-stream' ;
16201643 }
16211644
@@ -1655,7 +1678,9 @@ export class ChatwootService {
16551678 }
16561679
16571680 const documentExtensions = [ '.gif' , '.svg' , '.tiff' , '.tif' , '.dxf' , '.dwg' ] ;
1658- if ( type === 'image' && parsedMedia && documentExtensions . includes ( parsedMedia ?. ext ) ) {
1681+ // Verifica se a extensao do arquivo indica que deve ser documento
1682+ const fileExtension = fileName . match ( / \. ( [ a - z A - Z 0 - 9 ] + ) $ / ) ?. [ 0 ] || '' ;
1683+ if ( type === 'image' && documentExtensions . includes ( fileExtension . toLowerCase ( ) ) ) {
16591684 type = 'document' ;
16601685 }
16611686
0 commit comments