Salesforce Use case · Service · Language

Text customers in their own language, without agents deciding which one.

Language is a field, not a judgement call. Store it, keep one template set per language behind each message moment, and route by it. Salesforce drives the process instead of agent memory.

ObjectContact and Case
Fires onLanguage set, or a case created with none
Reply landsThe matching language queue, or triage
ChannelSMS or WhatsApp, same template set
01 · What quietly breaks

Language becomes manual work, even when you have the right people.

There is no preferred language stored anywhere, so agents guess from a name or a country code. Templates drift, because the Spanish version was updated in March and the French one was not, and now the two say different things about the same policy.

Messages land with the wrong team and get forwarded around, which the customer experiences as repeating themselves. And there is no clean reporting, because the language of a conversation was never captured in a field.

When nothing is stored, there is also no fallback rule, so an unknown language produces either a mixed-language reply or a long silence.

02 · The idea

Treat language like a data point. Store it on the record, keep one template set per language under each message moment, and route on the field. Never on what the agent assumes.

03 · The pattern

Three parts, and none of them is a translation project.

Decide where language comes from, keep the template sets in step, and route predictably. The hard part is the fallback, which is what stops work getting stuck.

01

Decide where language comes from, and what happens when it is missing

Pick one main source and define the fallback in order: the contact's preferred language when you have it, otherwise the language already on the case, otherwise your default marked as unconfirmed.

One rule matters more than the order: do not let it flip back and forth. If it is unknown, route once to somewhere that can confirm it, then stop asking.

In Salesforce FieldsContact.Preferred_Language__c, Case.Language__cOrderContact → Case → default, flagged Needs_Confirmation__cSet onCase created, and on first inbound messageNeverRe-derive language on every message
02

Group templates by moment, not by language

Think in message moments and translate each one: first reply, ask for detail, update, resolution, closing, stop confirmation. Six moments covers most service orgs.

Hold one meaning per moment and one version per language beneath it. When the policy wording changes in one language, the others are visibly out of date rather than silently wrong.

In Salesforce MomentsAcknowledge, Ask, Update, Resolve, Close, StopNamingCase_Acknowledge_EN, _ES, _FR under one folderFoldersOne per moment, access by teamWhatsAppEach language is its own approved template
03

Route on the field, and always have somewhere for unknown

Queues by language is the version most orgs should build: Support English, Support Spanish, Support French, and Support Language Triage. Salesforce assigns on the language field, and anything unknown goes to triage.

If you already route by skills, add language as a skill instead. Either way, define the fallback first. The fallback is the whole design.

In Salesforce Option AQueues by language, assignment on Case.Language__cOption BLanguage as an Omni-Channel routing skillFallbackSupport Language Triage, always staffedRuleUnknown routes once, then the language is set
Fig 01 · 00002114 · Sofía Márquez
Hemos recibido su solicitud (Caso 00002114). Nuestro equipo la revisará y le informaremos por aquí.
Sent 09:12 · template Case_Acknowledge · ES
Gracias. ¿Puedo enviar una foto del error?
Received 09:20 · Case Comment · Language__c = es
Sí, puede responder a este mensaje con la foto. Queda añadida al caso.
Sent 09:21 · template Case_Attach_Request · ES
04 · Replies and exceptions

The reply confirms the language you guessed.

The first inbound message is the best evidence of what someone actually speaks, and it is worth writing to the field.

ReplyWhat happensWhere it lands
Reply in the same language Confirms the field. Needs_Confirmation__c is cleared and the case stays in its queue. Case.Language__c
Reply in another language Raises a Task in triage rather than switching automatically. A single message is thin evidence and a flip-flopping language field is worse than a wrong one. Task, triage queue
Unknown language The case sits in triage until a person sets it. It is the one path that must stay staffed. Support Language Triage
STOP Opt-out honoured in whatever language it arrives in, and the confirmation goes out in the language on the record. Contact.SMS_Opt_Out__c
05 · Guardrails

Four, and the third one is the one people skip.

ConsentChecked before every send, in the shared subflow, regardless of language.
Quiet hoursLanguage is not a time zone. Keep them as separate fields, or you will text Madrid on Mexico City's clock.
Templates in stepA moment with a missing language version fails the send rather than falling back to English silently. The failure is the signal that a translation is outstanding.
Opt-out linePresent in every language version. A stop instruction someone cannot read is not an opt-out.
06 · Reporting afterwards

Because language is a field, it is finally a column.

Group any case report by language and the gaps appear: which queue is slow, which language is missing a template, how much work triage is really absorbing.

Support · by languageCases
LanguageCasesFirst replyIn triage
English2,4106m0
Spanish6849m31
French29511m22
Unknown11248m112
FIRST REPLYMedian time to the first outbound message per language. A slow language is a staffing question, and now it is one you can show.
IN TRIAGECases that landed in the fallback queue. A high count is a data capture problem at the form, not a routing problem.
MISSING TEMPLATESends blocked because a language version did not exist. This should be zero, and it tells you when it is not.
07 · Implementation note

Where ValueText fits.

ValueText is where the template sets live and the send action that Flow calls. Folders map to message moments, and access levels keep each team to the sets it owns. Every inbound message writes back to the case with its language stamped, which is what makes the reporting possible. The fields, the queues, the routing and the reports are standard Salesforce and stay if you leave.

Professional edition or above · Works with queue routing or Omni-Channel skills · WhatsApp needs one approved template per language
AppExchange review

“It's pretty user-friendly, has a good cost, and many features (live-chats, workflows, dynamic templates, dashboards, etc). We expending this solution to multiple countries now.”

Michail Berdinskiy Michail BerdinskiySalesforce Lead · AppExchange
This page sits underSMS for SalesforceThe channel page: how sending, receiving and billing work for SMS.
In the docs
01 Access Level or Template FoldersGrouping template sets and controlling who can use them → 02 SMS Template CreationBuilding one template per moment with merge fields → 03 Omni-Channel Message Routing in SalesforceRouting inbound work by queue or by skill →

Run your messaging inside your CRM.

Rated 4.98 on Salesforce AppExchange
Salesforce Use case · Service · Language

Text customers in their own language, without agents deciding which one.

Language is a field, not a judgement call. Store it, keep one template set per language behind each message moment, and route by it. Salesforce drives the process instead of agent memory.

ObjectContact and Case
Fires onLanguage set, or a case created with none
Reply landsThe matching language queue, or triage
ChannelSMS or WhatsApp, same template set
01 · What quietly breaks

Language becomes manual work, even when you have the right people.

There is no preferred language stored anywhere, so agents guess from a name or a country code. Templates drift, because the Spanish version was updated in March and the French one was not, and now the two say different things about the same policy.

Messages land with the wrong team and get forwarded around, which the customer experiences as repeating themselves. And there is no clean reporting, because the language of a conversation was never captured in a field.

When nothing is stored, there is also no fallback rule, so an unknown language produces either a mixed-language reply or a long silence.

02 · The idea

Treat language like a data point. Store it on the record, keep one template set per language under each message moment, and route on the field. Never on what the agent assumes.

03 · The pattern

Three parts, and none of them is a translation project.

Decide where language comes from, keep the template sets in step, and route predictably. The hard part is the fallback, which is what stops work getting stuck.

01

Decide where language comes from, and what happens when it is missing

Pick one main source and define the fallback in order: the contact's preferred language when you have it, otherwise the language already on the case, otherwise your default marked as unconfirmed.

One rule matters more than the order: do not let it flip back and forth. If it is unknown, route once to somewhere that can confirm it, then stop asking.

In Salesforce FieldsContact.Preferred_Language__c, Case.Language__cOrderContact → Case → default, flagged Needs_Confirmation__cSet onCase created, and on first inbound messageNeverRe-derive language on every message
02

Group templates by moment, not by language

Think in message moments and translate each one: first reply, ask for detail, update, resolution, closing, stop confirmation. Six moments covers most service orgs.

Hold one meaning per moment and one version per language beneath it. When the policy wording changes in one language, the others are visibly out of date rather than silently wrong.

In Salesforce MomentsAcknowledge, Ask, Update, Resolve, Close, StopNamingCase_Acknowledge_EN, _ES, _FR under one folderFoldersOne per moment, access by teamWhatsAppEach language is its own approved template
03

Route on the field, and always have somewhere for unknown

Queues by language is the version most orgs should build: Support English, Support Spanish, Support French, and Support Language Triage. Salesforce assigns on the language field, and anything unknown goes to triage.

If you already route by skills, add language as a skill instead. Either way, define the fallback first. The fallback is the whole design.

In Salesforce Option AQueues by language, assignment on Case.Language__cOption BLanguage as an Omni-Channel routing skillFallbackSupport Language Triage, always staffedRuleUnknown routes once, then the language is set
Fig 01 · 00002114 · Sofía Márquez
Hemos recibido su solicitud (Caso 00002114). Nuestro equipo la revisará y le informaremos por aquí.
Sent 09:12 · template Case_Acknowledge · ES
Gracias. ¿Puedo enviar una foto del error?
Received 09:20 · Case Comment · Language__c = es
Sí, puede responder a este mensaje con la foto. Queda añadida al caso.
Sent 09:21 · template Case_Attach_Request · ES
04 · Replies and exceptions

The reply confirms the language you guessed.

The first inbound message is the best evidence of what someone actually speaks, and it is worth writing to the field.

ReplyWhat happensWhere it lands
Reply in the same language Confirms the field. Needs_Confirmation__c is cleared and the case stays in its queue. Case.Language__c
Reply in another language Raises a Task in triage rather than switching automatically. A single message is thin evidence and a flip-flopping language field is worse than a wrong one. Task, triage queue
Unknown language The case sits in triage until a person sets it. It is the one path that must stay staffed. Support Language Triage
STOP Opt-out honoured in whatever language it arrives in, and the confirmation goes out in the language on the record. Contact.SMS_Opt_Out__c
05 · Guardrails

Four, and the third one is the one people skip.

ConsentChecked before every send, in the shared subflow, regardless of language.
Quiet hoursLanguage is not a time zone. Keep them as separate fields, or you will text Madrid on Mexico City's clock.
Templates in stepA moment with a missing language version fails the send rather than falling back to English silently. The failure is the signal that a translation is outstanding.
Opt-out linePresent in every language version. A stop instruction someone cannot read is not an opt-out.
06 · Reporting afterwards

Because language is a field, it is finally a column.

Group any case report by language and the gaps appear: which queue is slow, which language is missing a template, how much work triage is really absorbing.

Support · by languageCases
LanguageCasesFirst replyIn triage
English2,4106m0
Spanish6849m31
French29511m22
Unknown11248m112
FIRST REPLYMedian time to the first outbound message per language. A slow language is a staffing question, and now it is one you can show.
IN TRIAGECases that landed in the fallback queue. A high count is a data capture problem at the form, not a routing problem.
MISSING TEMPLATESends blocked because a language version did not exist. This should be zero, and it tells you when it is not.
07 · Implementation note

Where ValueText fits.

ValueText is where the template sets live and the send action that Flow calls. Folders map to message moments, and access levels keep each team to the sets it owns. Every inbound message writes back to the case with its language stamped, which is what makes the reporting possible. The fields, the queues, the routing and the reports are standard Salesforce and stay if you leave.

Professional edition or above · Works with queue routing or Omni-Channel skills · WhatsApp needs one approved template per language
AppExchange review

“It's pretty user-friendly, has a good cost, and many features (live-chats, workflows, dynamic templates, dashboards, etc). We expending this solution to multiple countries now.”

Michail Berdinskiy Michail BerdinskiySalesforce Lead · AppExchange
This page sits underSMS for SalesforceThe channel page: how sending, receiving and billing work for SMS.
In the docs
01 Access Level or Template FoldersGrouping template sets and controlling who can use them → 02 SMS Template CreationBuilding one template per moment with merge fields → 03 Omni-Channel Message Routing in SalesforceRouting inbound work by queue or by skill →

Run your messaging inside your CRM.

Rated 4.98 on Salesforce AppExchange
Salesforce Use case · Service · Language

Text customers in their own language, without agents deciding which one.

Language is a field, not a judgement call. Store it, keep one template set per language behind each message moment, and route by it. Salesforce drives the process instead of agent memory.

ObjectContact and Case
Fires onLanguage set, or a case created with none
Reply landsThe matching language queue, or triage
ChannelSMS or WhatsApp, same template set
01 · What quietly breaks

Language becomes manual work, even when you have the right people.

There is no preferred language stored anywhere, so agents guess from a name or a country code. Templates drift, because the Spanish version was updated in March and the French one was not, and now the two say different things about the same policy.

Messages land with the wrong team and get forwarded around, which the customer experiences as repeating themselves. And there is no clean reporting, because the language of a conversation was never captured in a field.

When nothing is stored, there is also no fallback rule, so an unknown language produces either a mixed-language reply or a long silence.

02 · The idea

Treat language like a data point. Store it on the record, keep one template set per language under each message moment, and route on the field. Never on what the agent assumes.

03 · The pattern

Three parts, and none of them is a translation project.

Decide where language comes from, keep the template sets in step, and route predictably. The hard part is the fallback, which is what stops work getting stuck.

01

Decide where language comes from, and what happens when it is missing

Pick one main source and define the fallback in order: the contact's preferred language when you have it, otherwise the language already on the case, otherwise your default marked as unconfirmed.

One rule matters more than the order: do not let it flip back and forth. If it is unknown, route once to somewhere that can confirm it, then stop asking.

In Salesforce FieldsContact.Preferred_Language__c, Case.Language__cOrderContact → Case → default, flagged Needs_Confirmation__cSet onCase created, and on first inbound messageNeverRe-derive language on every message
02

Group templates by moment, not by language

Think in message moments and translate each one: first reply, ask for detail, update, resolution, closing, stop confirmation. Six moments covers most service orgs.

Hold one meaning per moment and one version per language beneath it. When the policy wording changes in one language, the others are visibly out of date rather than silently wrong.

In Salesforce MomentsAcknowledge, Ask, Update, Resolve, Close, StopNamingCase_Acknowledge_EN, _ES, _FR under one folderFoldersOne per moment, access by teamWhatsAppEach language is its own approved template
03

Route on the field, and always have somewhere for unknown

Queues by language is the version most orgs should build: Support English, Support Spanish, Support French, and Support Language Triage. Salesforce assigns on the language field, and anything unknown goes to triage.

If you already route by skills, add language as a skill instead. Either way, define the fallback first. The fallback is the whole design.

In Salesforce Option AQueues by language, assignment on Case.Language__cOption BLanguage as an Omni-Channel routing skillFallbackSupport Language Triage, always staffedRuleUnknown routes once, then the language is set
Fig 01 · 00002114 · Sofía Márquez
Hemos recibido su solicitud (Caso 00002114). Nuestro equipo la revisará y le informaremos por aquí.
Sent 09:12 · template Case_Acknowledge · ES
Gracias. ¿Puedo enviar una foto del error?
Received 09:20 · Case Comment · Language__c = es
Sí, puede responder a este mensaje con la foto. Queda añadida al caso.
Sent 09:21 · template Case_Attach_Request · ES
04 · Replies and exceptions

The reply confirms the language you guessed.

The first inbound message is the best evidence of what someone actually speaks, and it is worth writing to the field.

ReplyWhat happensWhere it lands
Reply in the same language Confirms the field. Needs_Confirmation__c is cleared and the case stays in its queue. Case.Language__c
Reply in another language Raises a Task in triage rather than switching automatically. A single message is thin evidence and a flip-flopping language field is worse than a wrong one. Task, triage queue
Unknown language The case sits in triage until a person sets it. It is the one path that must stay staffed. Support Language Triage
STOP Opt-out honoured in whatever language it arrives in, and the confirmation goes out in the language on the record. Contact.SMS_Opt_Out__c
05 · Guardrails

Four, and the third one is the one people skip.

ConsentChecked before every send, in the shared subflow, regardless of language.
Quiet hoursLanguage is not a time zone. Keep them as separate fields, or you will text Madrid on Mexico City's clock.
Templates in stepA moment with a missing language version fails the send rather than falling back to English silently. The failure is the signal that a translation is outstanding.
Opt-out linePresent in every language version. A stop instruction someone cannot read is not an opt-out.
06 · Reporting afterwards

Because language is a field, it is finally a column.

Group any case report by language and the gaps appear: which queue is slow, which language is missing a template, how much work triage is really absorbing.

Support · by languageCases
LanguageCasesFirst replyIn triage
English2,4106m0
Spanish6849m31
French29511m22
Unknown11248m112
FIRST REPLYMedian time to the first outbound message per language. A slow language is a staffing question, and now it is one you can show.
IN TRIAGECases that landed in the fallback queue. A high count is a data capture problem at the form, not a routing problem.
MISSING TEMPLATESends blocked because a language version did not exist. This should be zero, and it tells you when it is not.
07 · Implementation note

Where ValueText fits.

ValueText is where the template sets live and the send action that Flow calls. Folders map to message moments, and access levels keep each team to the sets it owns. Every inbound message writes back to the case with its language stamped, which is what makes the reporting possible. The fields, the queues, the routing and the reports are standard Salesforce and stay if you leave.

Professional edition or above · Works with queue routing or Omni-Channel skills · WhatsApp needs one approved template per language
AppExchange review

“It's pretty user-friendly, has a good cost, and many features (live-chats, workflows, dynamic templates, dashboards, etc). We expending this solution to multiple countries now.”

Michail Berdinskiy Michail BerdinskiySalesforce Lead · AppExchange
This page sits underSMS for SalesforceThe channel page: how sending, receiving and billing work for SMS.
In the docs
01 Access Level or Template FoldersGrouping template sets and controlling who can use them → 02 SMS Template CreationBuilding one template per moment with merge fields → 03 Omni-Channel Message Routing in SalesforceRouting inbound work by queue or by skill →

Run your messaging inside your CRM.

Rated 4.98 on Salesforce AppExchange
Salesforce Use case · Service · Language

Text customers in their own language, without agents deciding which one.

Language is a field, not a judgement call. Store it, keep one template set per language behind each message moment, and route by it. Salesforce drives the process instead of agent memory.

ObjectContact and Case
Fires onLanguage set, or a case created with none
Reply landsThe matching language queue, or triage
ChannelSMS or WhatsApp, same template set
01 · What quietly breaks

Language becomes manual work, even when you have the right people.

There is no preferred language stored anywhere, so agents guess from a name or a country code. Templates drift, because the Spanish version was updated in March and the French one was not, and now the two say different things about the same policy.

Messages land with the wrong team and get forwarded around, which the customer experiences as repeating themselves. And there is no clean reporting, because the language of a conversation was never captured in a field.

When nothing is stored, there is also no fallback rule, so an unknown language produces either a mixed-language reply or a long silence.

02 · The idea

Treat language like a data point. Store it on the record, keep one template set per language under each message moment, and route on the field. Never on what the agent assumes.

03 · The pattern

Three parts, and none of them is a translation project.

Decide where language comes from, keep the template sets in step, and route predictably. The hard part is the fallback, which is what stops work getting stuck.

01

Decide where language comes from, and what happens when it is missing

Pick one main source and define the fallback in order: the contact's preferred language when you have it, otherwise the language already on the case, otherwise your default marked as unconfirmed.

One rule matters more than the order: do not let it flip back and forth. If it is unknown, route once to somewhere that can confirm it, then stop asking.

In Salesforce FieldsContact.Preferred_Language__c, Case.Language__cOrderContact → Case → default, flagged Needs_Confirmation__cSet onCase created, and on first inbound messageNeverRe-derive language on every message
02

Group templates by moment, not by language

Think in message moments and translate each one: first reply, ask for detail, update, resolution, closing, stop confirmation. Six moments covers most service orgs.

Hold one meaning per moment and one version per language beneath it. When the policy wording changes in one language, the others are visibly out of date rather than silently wrong.

In Salesforce MomentsAcknowledge, Ask, Update, Resolve, Close, StopNamingCase_Acknowledge_EN, _ES, _FR under one folderFoldersOne per moment, access by teamWhatsAppEach language is its own approved template
03

Route on the field, and always have somewhere for unknown

Queues by language is the version most orgs should build: Support English, Support Spanish, Support French, and Support Language Triage. Salesforce assigns on the language field, and anything unknown goes to triage.

If you already route by skills, add language as a skill instead. Either way, define the fallback first. The fallback is the whole design.

In Salesforce Option AQueues by language, assignment on Case.Language__cOption BLanguage as an Omni-Channel routing skillFallbackSupport Language Triage, always staffedRuleUnknown routes once, then the language is set
Fig 01 · 00002114 · Sofía Márquez
Hemos recibido su solicitud (Caso 00002114). Nuestro equipo la revisará y le informaremos por aquí.
Sent 09:12 · template Case_Acknowledge · ES
Gracias. ¿Puedo enviar una foto del error?
Received 09:20 · Case Comment · Language__c = es
Sí, puede responder a este mensaje con la foto. Queda añadida al caso.
Sent 09:21 · template Case_Attach_Request · ES
04 · Replies and exceptions

The reply confirms the language you guessed.

The first inbound message is the best evidence of what someone actually speaks, and it is worth writing to the field.

ReplyWhat happensWhere it lands
Reply in the same language Confirms the field. Needs_Confirmation__c is cleared and the case stays in its queue. Case.Language__c
Reply in another language Raises a Task in triage rather than switching automatically. A single message is thin evidence and a flip-flopping language field is worse than a wrong one. Task, triage queue
Unknown language The case sits in triage until a person sets it. It is the one path that must stay staffed. Support Language Triage
STOP Opt-out honoured in whatever language it arrives in, and the confirmation goes out in the language on the record. Contact.SMS_Opt_Out__c
05 · Guardrails

Four, and the third one is the one people skip.

ConsentChecked before every send, in the shared subflow, regardless of language.
Quiet hoursLanguage is not a time zone. Keep them as separate fields, or you will text Madrid on Mexico City's clock.
Templates in stepA moment with a missing language version fails the send rather than falling back to English silently. The failure is the signal that a translation is outstanding.
Opt-out linePresent in every language version. A stop instruction someone cannot read is not an opt-out.
06 · Reporting afterwards

Because language is a field, it is finally a column.

Group any case report by language and the gaps appear: which queue is slow, which language is missing a template, how much work triage is really absorbing.

Support · by languageCases
LanguageCasesFirst replyIn triage
English2,4106m0
Spanish6849m31
French29511m22
Unknown11248m112
FIRST REPLYMedian time to the first outbound message per language. A slow language is a staffing question, and now it is one you can show.
IN TRIAGECases that landed in the fallback queue. A high count is a data capture problem at the form, not a routing problem.
MISSING TEMPLATESends blocked because a language version did not exist. This should be zero, and it tells you when it is not.
07 · Implementation note

Where ValueText fits.

ValueText is where the template sets live and the send action that Flow calls. Folders map to message moments, and access levels keep each team to the sets it owns. Every inbound message writes back to the case with its language stamped, which is what makes the reporting possible. The fields, the queues, the routing and the reports are standard Salesforce and stay if you leave.

Professional edition or above · Works with queue routing or Omni-Channel skills · WhatsApp needs one approved template per language
AppExchange review

“It's pretty user-friendly, has a good cost, and many features (live-chats, workflows, dynamic templates, dashboards, etc). We expending this solution to multiple countries now.”

Michail Berdinskiy Michail BerdinskiySalesforce Lead · AppExchange
This page sits underSMS for SalesforceThe channel page: how sending, receiving and billing work for SMS.
In the docs
01 Access Level or Template FoldersGrouping template sets and controlling who can use them → 02 SMS Template CreationBuilding one template per moment with merge fields → 03 Omni-Channel Message Routing in SalesforceRouting inbound work by queue or by skill →

Run your messaging inside your CRM.

Rated 4.98 on Salesforce AppExchange