Skip to content

Commit 0c4ebe9

Browse files
committed
feat(chatwoot): melhora deteccao de mimeType com regex e logs detalhados
1 parent eefe3f2 commit 0c4ebe9

1 file changed

Lines changed: 29 additions & 4 deletions

File tree

‎src/api/integrations/chatbot/chatwoot/services/chatwoot.service.ts‎

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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-zA-Z0-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-zA-Z0-9]+)$/)?.[0] || '';
1683+
if (type === 'image' && documentExtensions.includes(fileExtension.toLowerCase())) {
16591684
type = 'document';
16601685
}
16611686

0 commit comments

Comments
 (0)