Configuration
Every setting in TechnoVision WhatsApp Core, and what each one changes.
The account
WhatsApp -> Configuration -> Accounts. One account per sending number.
| Field | What it does |
|---|---|
| Name | What people see when they choose an account. |
| Provider | Which gateway sends. Simulated sends nothing and records everything; Meta WhatsApp Cloud API sends. |
| Phone Number ID | Meta's identifier for your sending number. It is not a telephone number, and putting one in it is the most common setup mistake. |
| Sender Number | Display only, so people know which number a message comes from. |
| API Version | The Meta Graph version. Pin it. An unpinned version changes underneath you. |
| Attempts | How many times a failing message is retried before it is left as failed. |
| Retry delay | Minutes before the first retry. Each further attempt waits twice as long as the one before. |
The status line at the top of the form says what is missing. It is there so an administrator finds out before a message does.
The access token
The token is not a field on the account, and that is deliberate. A token in a column is a token in every backup, every duplicated database and every screenshot of that form.
Set it as a system parameter instead:
Settings -> Technical -> System Parameters -> New
| Key | Value |
|---|---|
| technovision_whatsapp.account_<id>.access_token | your permanent token |
<id> is the database id of the account, which the status line on the account form tells you. Only a system administrator can read or write it.
Retry policy
A failed send is retried when the failure could plausibly succeed later - a timeout, a 5xx, a rate limit. It is not retried when the provider has said the message can never be delivered: a number that is not on WhatsApp, a malformed request, a missing credential. Retrying those every ten minutes buries the errors that matter.
The delay doubles with each attempt and is capped at one day.
Templates
WhatsApp -> Configuration -> Templates.
A template is a message with placeholders written {{ object.field }}:
Hello {{ object.partner_id.name }}, invoice {{ object.name }} for
{{ object.amount_total }} is now overdue.Set Applies to to the model the template is written against. A template with placeholders will not render without a record - a customer receiving "Dear , your invoice is overdue" is worse than a failure somebody can see.
Who can do what
| WhatsApp User | WhatsApp Manager | |
|---|---|---|
| Send a message | yes | yes |
| Read the message log | yes | yes |
| Delete from the log | no | yes |
| Edit a template | no | yes |
| Configure an account | no | yes |
| Set the token | no | system administrator only |
Multi-company
An account belongs to a company, and messages inherit it. Global record rules keep the logs apart. A template with no company is shared.