SMS MFA message template always uses 'multifactor.otpmessage' instead of 'MultiFactor.OTPMessage'

kack l
Tera Expert

Hi all,

I'm working on configuring SMS MFA using Twilio in our ServiceNow instance (Yokohama release).

In the MFA provider configuration, I have specified the message key as `MultiFactor.OTPMessage`, and it works well in English.
However, when the user's language is set to Japanese, the message sent via Twilio always uses the translation from `multifactor.otpmessage` (lowercase key), instead of the expected `MultiFactor.OTPMessage`.

Here’s what I’ve confirmed:
- The MFA Provider is correctly configured to use `MultiFactor.OTPMessage` as the message key.
- `sys_translated_text` contains a valid Japanese translation for `MultiFactor.OTPMessage`.
- There is also an old/legacy translation with the key `multifactor.otpmessage`, which was accidentally being picked up and used in the SMS message.

It seems like the system is ignoring the case-sensitive key when resolving translations for non-English languages.

### Question:
Is this a known behavior?
Does ServiceNow fallback to lowercase keys (`multifactor.otpmessage`) even when I explicitly configure `MultiFactor.OTPMessage`?

What is the recommended way to safely prevent the system from using the wrong key without deleting system translation records?

Thanks in advance!

2 REPLIES 2

Hi all,

I'm working on configuring SMS-based Multi-Factor Authentication (MFA) using Twilio in a Yokohama instance.

Currently, I have the following 3 records in the `sys_ui_message` table:

1. `MultiFactor.OTPMessage` (English):
Message = `Your 6-digit verification code is {0}, ...`

2. `multifactor.otpmessage` (Japanese):
Message = `6 桁の検証コードは {0} で、{1} 分後に無効になります。...`

3. `multifactor.otpmessage` (Japanese):
Message = `MultiFactor.OTPMessage {0}` ← This message is currently being sent via Twilio.

I already removed the **Code** value from the first record (`MultiFactor.OTPMessage`, English), as suggested in the known issue workaround. However, Twilio still sends the message from record ③ (`multifactor.otpmessage`, Japanese) which just says `MultiFactor.OTPMessage {0}` and does not get parsed.

---

### Questions:

1. Why is the system still referencing `multifactor.otpmessage` instead of `MultiFactor.OTPMessage`?
2. Is this fallback behavior (case-insensitive key matching?) expected in the current version?
3. Is it safe to delete the incorrect `multifactor.otpmessage` (Japanese) record with `MultiFactor.OTPMessage {0}`?

I’ve already cleared the cache via `/cache.do`, but the behavior persists.

Any insight would be appreciated. Thank you!