Verify the facility contact
Verify the facility email and each public phone number, so that patients can see them.
Patients see the facility email and a facility phone number only after you verify them. Kulcare also sends patient messages with verified values only. A message or a public page shows no unverified email or phone.
Who can verify
A member with the "Manage facilities" permission can verify. By default, the owner and the admins of the practice have it. Other members see the "Verified" and "Unverified" labels, but no "Verify" button.
Verify the facility email
- Open Connect, then Facility profile, then Contact.
- Find the email. Click "Verify".
- Click "Send code". Kulcare sends a code to the facility email.
- Type the code from the email. The label changes to "Verified".
The code is valid for 10 minutes. After five wrong codes, send a new code.
Verify a phone number
- Find the number in Contact. Click "Verify".
- Click "Send code". Kulcare sends the code by SMS to that number.
- Type the code from the SMS. The label changes to "Verified".
Kulcare sends an SMS only to numbers in India, the United States and the United Arab Emirates.
Verify a landline with a call
A landline cannot get an SMS. For a number in India, Kulcare can call the number and read out the code. You can do this in Connect (Facility profile, then Contact) and in CMS (Settings, then Profile).
- Find the number. Click "Verify".
- Click "Call me with the code". Kulcare calls the number. The call reads out the code digit by digit.
- Type the code from the call. The label changes to "Verified".
The code from a call is the same as a code from an SMS. It is valid for 10 minutes. After five wrong codes, get a new code.
To get a new code, wait 30 seconds. Then click "Call again" or "Send a new code".
The limits of the code calls:
- Your facility can call one number a maximum of three times each day.
- One number gets a maximum of six code calls each day and ten each week, from all facilities.
- Your practice can make a maximum of ten code calls each day.
If Kulcare cannot place the call, the panel shows "We could not call the number". Try again later, or send the code by SMS. If the call does not come in a few minutes, click "Call again" or send the code by SMS.
If a call limit stops the call, the panel shows "We cannot call this number again now". The SMS link stays on.
If you do not see "Call me with the code", Kulcare cannot call that number. Use the next section.
Kulcare support can verify a landline
Contact Kulcare support. Support calls the number and marks it verified. Support can also send a code to the facility. Then the "Verify" panel asks for that code with no new send.
When a value changes
A new email or a new number is not verified. Save the change, then verify the new value. A number that only changes its type (for example, from "Reception" to "OPD") stays verified.
If you save a facility email or phone that is the same as your own verified sign-in email or phone, Kulcare marks it verified at once.
Hide the phone numbers
Set "Public phone numbers" to hidden. Then patients see no facility phone number, verified or not.
Documents
A prescription or an invoice that Kulcare sends to a patient shows only verified contact. A document that you print or download shows the contact that you saved.
For Kulcare operators: set up the code call
The code call uses the MSG91 voice API (POST https://control.msg91.com/api/v5/voice/call/).
The SMS route already uses MSG91, so the call uses the same msg91_auth_key.
- In the MSG91 panel, open Voice. Get a caller ID for the account.
- Make a voice template for the code. Add one number variable with the name
var1. Set it to read the digits one at a time. Example text: "Your Kulcare verification code is {var1}." - Get the approval of the template. Write down the template ID.
- Add the two values to the Rails credentials of each environment:
msg91_voice_template: the template ID.msg91_voice_caller_id: the caller ID. The ENV variablesMSG91_VOICE_TEMPLATEandMSG91_VOICE_CALLER_IDoverride the credentials.
- Set the daily cap of code calls in India with
CODE_VOICE_DAILY_CAP_IN. The default is 500. Kulcare reports the first refusal over the cap each day, with the message "Code voice call daily cap reached for IN (voice): no code call goes out until 00:00 UTC". The cap is for all practices together. Kulcare does not report each refused call.CODE_VOICE_DAILY_CAP_USandCODE_VOICE_DAILY_CAP_AEare 0 by default, because Kulcare has no voice route for those countries. - On staging, verify a real landline in India with "Call me with the code". Use a number whose area code does not start with 4 or 5 (for example 011 Delhi, 022 Mumbai or 0172 Chandigarh). Outside production, Kulcare treats a national number that starts with 4 or 5 as a test number and does not call it. The editor shows no call button for it.
While a credential is missing, the editor shows no "Call me with the code" button. A request
for a call then answers CALL_NOT_SUPPORTED. On staging and production, the log line
[msg91_voice] tag=voice_not_configured missing=<key names> and one error report say which keys
are missing.
A call that fails answers CALL_FAILED (HTTP 502). The error report gives a reason, the HTTP
status and the error class, with no phone number: cap_daily_cap_reached,
cap_counter_unavailable, staging_route, provider_4xx, provider_5xx, provider_redirect,
provider_error_body, provider_unparsed or network. The call follows no redirect. A refusal of the voice cap is not reported each time. Kulcare
accepts a MSG91 answer only when it says success.
The answer also has error.extra, with no provider text:
retryable:truewhen a later try can help,falsewhen it cannot.reason_class:network,provider,configorcap.
When the request went out but MSG91 gave no clear answer (a read timeout, a write timeout, a
reset, a broken pipe, a TLS fault after the handshake, a bad answer), the call can still come.
Kulcare keeps the code, answers call_unconfirmed: true, and reports the call as unconfirmed.
Kulcare does not call a toll-free (1800, 1860), premium-rate (1900) or telemarketing (140) number. The editor shows no call button for it.
Each call attempt writes the log line facility_contact_code_call with the user, the practice,
the facility, a keyed digest of the number and the outcome. The line has no phone number and no
code. A trip of a per-number call limit goes to the error reporter.
Check the success answer of the MSG91 voice API on staging before the release. Kulcare reads
status or type with the value success.
Development makes no call. The code goes to the local outbox (/dev/notifications) and to
Slack, as an SMS code does. Set ENABLE_DEV_REAL_VOICE=true to make a real call from development.
The limits of a code call:
- The daily cap of each country counts calls in a budget of their own (
:voiceinShared::Notifications::CodeSmsCap). Calls do not use up the SMS budgets. - A call and an SMS to the same number share the other facility contact limits.
- The call limits:
call_facility_target:daily(3),call_target:daily(6),call_target:weekly(10) andcall_tenant:daily(10). The practice budget and then the global phone cap count last, so a call that a per-number limit refuses does not use them up. - A call that a call limit refuses answers HTTP 429 with
error.codeCALL_LIMIT_REACHED, noretry_afterand noRetry-Afterheader: the SMS to the number can still go. - A request that any other limit refuses answers HTTP 429 with
error.codeRATE_LIMIT_EXCEEDEDandretry_after(seconds).