Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

`[Bug] /send/list and /send/button fail with "server returned error 405" — legacy ListMessage/ButtonsMessage rejected by WhatsApp, while /send/carousel (InteractiveMessage) works

Aperta
#170 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
go
Ambito
api, backend

Direzione di ricerca

Inizia confrontando i percorsi di creazione dei messaggi /send/list e /send/button con il percorso funzionante /send/carousel, concentrandoti sui relativi tipi ListMessage, ButtonsMessage e InteractiveMessage. Riproduci il problema con la richiesta curl fornita e verifica che i messaggi di lista e di pulsante vengano recapitati correttamente; se rimangono formati legacy, conferma che la documentazione Swagger e il comportamento degli errori indichino chiaramente la limitazione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug
Welcome!
  • Yes, I have searched for similar issues on GitHub and found none.
What did you do?
Description

POST /send/list and POST /send/button consistently fail with HTTP 500 and
{"error":"server returned error 405"}. No message is delivered.

The error comes from the WhatsApp server after the library builds and dispatches the stanza —
it is not a request-validation problem. On the same instance, same token, same minute,
/send/text, /send/poll and /send/carousel all succeed.

The decisive detail: /send/carousel works and it sends InteractiveMessage, while the two
failing endpoints send the legacy ListMessage / ButtonsMessage types. This suggests WhatsApp
has deprecated the bare legacy formats, and that /send/list needs the same
InteractiveMessage (or ViewOnceMessage wrapper) treatment the carousel path already uses.

Environment
Version 0.7.2 (latest stable; digest sha256:6fa60146…)
Deployment Docker, evoapicloud/evolution-go:0.7.2
Account type Personal / consumer WhatsApp (not Business API)
Instance state connected: true, paired and healthy
Steps to reproduce
# 1. /send/list — body uses exactly the six required fields from the Swagger docs
curl -X POST http://<host>:8080/send/list \
  -H "apikey: <INSTANCE_TOKEN>" -H "instanceId: <INSTANCE_ID>" \
  -H "Content-Type: application/json" -d '{
    "number": "5599999999999",
    "title": "Company",
    "description": "Choose a department",
    "footerText": "Support",
    "buttonText": "View Menu",
    "sections": [{
      "title": "Departments",
      "rows": [{"title": "SALES"}, {"title": "FINANCE"}]
    }]
  }'

Actual result

{"error":"server returned error 405"}

HTTP 500

Expected result — a tappable single-select list, as described in the Swagger documentation.

Control tests (same instance, same token, minutes apart)
Endpoint Message type built HTTP Delivered?
/send/text ExtendedTextMessage 200 ✅
/send/poll PollCreationMessage 200 ✅ tappable, vote received back via webhook
/send/carousel InteractiveMessage 200 ✅
/send/list ListMessage 500 ❌ error 405
/send/button ButtonsMessage 500 ❌ error 405

This rules out authentication, routing, instance health, and version — and rules out
request-body problems: malformed bodies produce a clean 400 from evolution-go itself
("question is required", "footer is required"), never a 405.

Suggested fix

Send interactive lists/buttons as InteractiveMessage (or wrap in ViewOnceMessage), reusing the
approach that already works in the carousel path.

If the legacy format must be kept for backward compatibility, please consider:

  1. returning a clear, documented error instead of a raw server returned error 405; and
  2. flagging the limitation in the Swagger description, so integrators do not build features on an
    endpoint that cannot deliver.
Related

Possibly the same root cause as #59, but the observed symptom differs: there the API returns
200 and the message fails to render client-side; here it returns 500 and nothing is sent.

What did you expect?

Expected result — a tappable single-select list, as described in the Swagger documentation.

What did you observe instead of what you expected?
Control tests (same instance, same token, minutes apart)
Endpoint Message type built HTTP Delivered?
/send/text ExtendedTextMessage 200 ✅
/send/poll PollCreationMessage 200 ✅ tappable, vote received back via webhook
/send/carousel InteractiveMessage 200 ✅
/send/list ListMessage 500 ❌ error 405
/send/button ButtonsMessage 500 ❌ error 405

This rules out authentication, routing, instance health, and version — and rules out
request-body problems: malformed bodies produce a clean 400 from evolution-go itself
("question is required", "footer is required"), never a 405.

Screenshots/Videos

No response

Which version are you using?

0.7.2

What is your environment?

Linux

If applicable, paste the log output

Server logs

SendMessage called for number: +55…@s.whatsapp.net, type: ListMessage
Error sending message: server returned error 405
Error sending list: server returned error 405

SendMessage called for number: +55…@s.whatsapp.net, type: ButtonsMessage
Error sending message: server returned error 405
Error sending button message: server returned error 405

Contrast with the working carousel path:

Building carousel for +55…@s.whatsapp.net with 2 cards
SendMessage called for number: +55…@s.whatsapp.net, type: InteractiveMessage
Carousel sent to +55…@s.whatsapp.net with 2 cards
Additional Notes
Additional evidence: it is not a block on non-official clients

Another whatsmeow-based client (WAHA, engine GOWS — the same underlying Go library)
successfully sent an equivalent list message from the same phone number, within the same
minute
, receiving HTTP 201 with the message delivered and rendering as a tappable menu.

evolution-go even received that WAHA-sent list as an inbound event, confirming the message
traversed WhatsApp's network normally.

So the 405 is not WhatsApp rejecting the sender or the client library — it is WhatsApp rejecting
the legacy stanza format. WAHA encodes interactive lists using the current wrapper; the
evolution-go /send/list path does not.

Relation to the Swagger note

The current Swagger description for /send/list states:

"Uses legacy ListMessage format (no ViewOnceMessage wrapper) so it renders on iOS, Android and
WhatsApp Web."

That choice appears to be the root cause: WhatsApp seems to no longer accept the bare
ListMessage. The carousel endpoint in this same codebase already builds InteractiveMessage
successfully, so the building blocks are present.

Lingua principale
Go
Stelle
939
Fork
505
Merge medio
5m
PR unite (30g)
1

Preparare l'ambiente

  • Include un Dockerfile o un file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di evolution-foundation/evolution-go

Tutte le issue di evolution-foundation/evolution-go

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.