Kulcare Docs
User

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

  1. Open Connect, then Facility profile, then Contact.
  2. Find the email. Click "Verify".
  3. Click "Send code". Kulcare sends a code to the facility email.
  4. 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

  1. Find the number in Contact. Click "Verify".
  2. Click "Send code". Kulcare sends the code by SMS to that number.
  3. 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).

  1. Find the number. Click "Verify".
  2. Click "Call me with the code". Kulcare calls the number. The call reads out the code digit by digit.
  3. 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.

  1. In the MSG91 panel, open Voice. Get a caller ID for the account.
  2. 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}."
  3. Get the approval of the template. Write down the template ID.
  4. 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 variables MSG91_VOICE_TEMPLATE and MSG91_VOICE_CALLER_ID override the credentials.
  5. 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_US and CODE_VOICE_DAILY_CAP_AE are 0 by default, because Kulcare has no voice route for those countries.
  6. 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: true when a later try can help, false when it cannot.
  • reason_class: network, provider, config or cap.

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 (:voice in Shared::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) and call_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.code CALL_LIMIT_REACHED, no retry_after and no Retry-After header: the SMS to the number can still go.
  • A request that any other limit refuses answers HTTP 429 with error.code RATE_LIMIT_EXCEEDED and retry_after (seconds).

On this page