`[Bug] /send/list and /send/button fail with "server returned error 405" — legacy ListMessage/ButtonsMessage rejected by WhatsApp, while /send/carousel (InteractiveMessage) works
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
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
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:
- returning a clear, documented error instead of a raw
server returned error 405; and - 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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di evolution-foundation/evolution-go
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
evolution-foundation/evolution-go#193 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
evolution-foundation/evolution-go#104 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
evolution-foundation/evolution-go#101 ·
I maintainer di solito rispondono entro 1 giorno
-
POST /group/participant always returns 400 "participants is required and cannot be empty" (wrong validation middleware on route)Forse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
evolution-foundation/evolution-go#97 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
evolution-foundation/evolution-go#219 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di evolution-foundation/evolution-go
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
blinklabs-io/dingo#5368 ·
I maintainer di solito rispondono entro 1 giorno
-
difficulty: easy enhancement frontend good first issue help wanted priority: P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rafaelsilvabr/pdfHandler#18 ·
-
Difficoltà 2/5 1-2 giorni Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno