Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Bug: Chatwoot → Cloud API audio fails with `TypeError: t.mimetype?.startsWith is not a function

Open
#2,678 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
52/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
typescript
Domain
api

Research direction

Trace the audio path named in the stack trace, starting at audioWhatsapp and following sendAttachment and receiveWebhook, then compare it with the direct Evolution API path. Use a real captured Chatwoot payload because the issue's mimetype examples are placeholders; done means the audio request no longer throws before reaching Meta while direct sending still works.

Written by the indexing model from the issue text.

Description

bug
📋 Bug Description

Environment

  • Evolution API: v2.3.7
  • Chatwoot: latest
  • Integration: WhatsApp Business Cloud API
  • Storage: IDrive E2 (S3 compatible)
  • Docker deployment

Problem

Sending an audio attachment from Chatwoot to a WhatsApp Cloud API instance fails with:

TypeError: t.mimetype?.startsWith is not a function
    at Ls.audioWhatsapp
    at ut.sendAttachment
    at ut.receiveWebhook

Text messages, images and PDFs are sent successfully. Only audio attachments are affected.

Reproduction

  1. Configure Chatwoot with Evolution API.
  2. Configure a WhatsApp Business Cloud API instance.
  3. Open a conversation.
  4. Send an audio message from the Chatwoot interface.
  5. The request fails before reaching Meta.

Comparison

Scenario A — audio sent directly using the Evolution API endpoint
Result: ✅ No mimetype?.startsWith exception. Evolution continues processing normally.

Scenario B — the exact same audio sent from Chatwoot
Result: ❌ Exception thrown immediately, before the request reaches Meta:

TypeError: t.mimetype?.startsWith is not a function

Payload comparison (anonymized)

Works — direct Evolution API call:

{
  "mimetype": "audio/ogg"
  // ...
}

Fails — via Chatwoot:

{
  "mimetype": null
  // or {}, or the actual captured value — TO FILL IN
}

(placeholder — replace with the real captured object once logged; see note below)

Expected behavior

Evolution should correctly detect or normalize the attachment MIME type received from Chatwoot before calling audioWhatsapp(). Since ?. only guards against null/undefined, a non-null, non-string mimetype (object, array, etc.) reaches .startsWith() unguarded and throws.

Additional information

This appears to affect only the Chatwoot → Cloud API attachment flow. The direct Evolution API → Cloud API flow works correctly.

If necessary, I can provide the complete stack trace, the Chatwoot payload, the Evolution payload, and a full comparison between both requests.

🔄 Steps to Reproduce
  1. Configure Chatwoot with Evolution API.
  2. Configure a WhatsApp Business Cloud API instance.
  3. Open a conversation in Chatwoot.
  4. Send an audio message from the Chatwoot interface.
  5. Request fails with TypeError before reaching Meta:
    TypeError: t.mimetype?.startsWith is not a function
    at Ls.audioWhatsapp
    at ut.sendAttachment
    at ut.receiveWebhook

Note: sending the same audio directly via the Evolution API endpoint (bypassing Chatwoot) works fine — no exception.

✅ Expected Behavior

Evolution should correctly detect or normalize the attachment MIME type received from Chatwoot before calling audioWhatsapp()

❌ Actual Behavior

TypeError: t.mimetype?.startsWith is not a function
at Ls.audioWhatsapp
at ut.sendAttachment
at ut.receiveWebhook

🌍 Environment
  • OS: [e.g. Ubuntu 20.04, Windows 10, macOS 12.0]
  • Node.js version: [e.g. 18.17.0]
  • Evolution API version: [e.g. 2.3.7]
  • Database: [e.g. PostgreSQL 14, MySQL 8.0]
  • Connection type: [e.g. Baileys, WhatsApp Business API]
📋 Logs

📝 Additional Context

No response

Dominant language
TypeScript
Stars
9.6k
Forks
7.3k
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from evolution-foundation/evolution-api

All issues in evolution-foundation/evolution-api

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.