-
Defined the null-coalescing operator
%||%internally. It was used by.evo_post()andsend_contact()but is only part of base R since 4.4.0, so the package failed to load on R 4.2--4.3 (the declared minimum is R 4.2.0). -
send_*()functions now normalise the recipientnumber, stripping formatting characters (spaces, dashes, parentheses and a leading+) before the request. Previously a number such as"+5581999990000"was sent verbatim and could be rejected by the API, even though it was shown as valid in the documentation. JIDs (values containing@, e.g. group ids...@g.us) are passed through unchanged. -
.normalize_media()no longer silently treats a mistyped file path as base64. It now requires standard (padded) base64 and emits a path-aware error pointing at the resolved location when a file is not found. -
Corrected the copyright holder in
LICENSE, which still referenced an unrelated package.
-
Unified the API reference URL across
READMEandDESCRIPTION(https://evoapicloud.com). -
Removed a dead "apikey" redaction branch in the verbose logger (the API key is only ever sent as a header, never in the request body).
-
Added a
testthatsuite covering the offline helpers (jid(),.normalize_media(),.compact(),.evo_path(),.assert_scalar_string()) and the argument-validation guard clauses of the exportedsend_*()functions andevo_client(). -
Added
.Rhistoryand.DS_Storeto.Rbuildignore.
- The global timeout option was renamed from
evoapi.timeouttoevolution.timeoutto match the package name. The previous option name was silently ignored due to a mismatch betweenzzz.Rand the internal request function (#1).
-
send_list(): sends interactive list messages with sections and selectable rows, mapping to the Evolution API v2sendListendpoint. -
check_is_whatsapp(): verifies whether phone numbers are registered on WhatsApp via thechat/whatsappNumbersendpoint. -
print.evo_client(): new S3 print method that displays instance name and base URL when inspecting a client object.
-
.evo_post()now extracts and surfaces the actual API error message from the JSON response body (fieldsresponse$messageormessage), instead of showing a generic "Evolution API error (status)" string. -
Non-JSON error responses (e.g., HTML from a 502/503 gateway error) are now handled gracefully instead of crashing with a parse error.
-
All
send_*()functions now validate required arguments up front with clear{cli}error messages (e.g.,"'number' must be a single non-empty character string"). -
evo_client()uses descriptivecli::cli_abort()messages instead ofstopifnot(), with hints like"Use Sys.getenv(\"EVO_APIKEY\")"for the API key argument.
-
Verbose output now includes response timing (e.g.,
✔ HTTP 201 (0.34s)). -
Verbose output now shows a preview of the response body (first 500 characters) to help with debugging.
-
Large base64
mediafields are truncated in verbose logs to keep output readable.
-
jid()now strips all non-digit characters (including+) before appending@s.whatsapp.net. Previously,jid("+5581...")produced an invalid JID with the+preserved. -
send_list():footerparameter now defaults to""instead ofNULL, because the Evolution API requiresfooterTextto be present in the request body (HTTP 400 otherwise). -
send_sticker()andsend_whatsapp_audio()now pass media through.normalize_media(), enabling local file paths (e.g.,"~/Downloads/sticker.webp") to be auto-encoded to base64. Previously onlysend_media()supported this. -
.normalize_media()now callspath.expand()so that~in file paths is correctly resolved to the user's home directory. -
send_whatsapp_audio()removed unused parameters (link_preview,mentions_everyone,mentioned) that are not part of thesendWhatsAppAudioAPI endpoint. -
send_buttons()now emits acli::cli_warn()at runtime alerting that interactive buttons are not supported on the Baileys (WhatsApp Web) connector and may be discontinued. The warning suggestssend_poll()as an alternative. -
send_list()now emits acli::cli_warn()at runtime alerting that interactive list messages are not supported on the Baileys (WhatsApp Web) connector and may be discontinued. The warning suggestssend_poll()as an alternative.
-
Fixed author name typo in DESCRIPTION: "Vaconcelos" → "Vasconcelos".
-
README now accurately lists all exported functions including
send_list()andcheck_is_whatsapp(). -
README includes new sections: verbose output example, configuration table, and
send_list()/check_is_whatsapp()usage examples. -
All roxygen documentation improved with
@description,@examples,@seealsocross-references, and more specific@returndescriptions. -
Added
jsonlitetoImports(used for response preview in verbose mode).
- Initial CRAN release.
- Core messaging functions:
send_text(),send_status(),send_media(),send_whatsapp_audio(),send_sticker(),send_location(),send_contact(),send_reaction(),send_buttons(),send_poll(). evo_client()factory with httr2 retry and apikey header.jid()helper for building WhatsApp JIDs.