mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
fix(i18n): a ficha Anti-ban traduz as duas janelas e o disparo diz o que rege
Rotulos sem caixa alta ("Janela de resposta" / "Janela de disparo"),
entradas es e zh-CN para os textos novos, e a ajuda da janela de disparo
deixa de dizer "a resposta fica agendada", que agora e falso. O catalogo
de recursos opcionais nomeia as duas janelas.
Co-authored-by: suporteubere99-coder <267519567+suporteubere99-coder@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
suporteubere99-coder
Claude Opus 5.5
parent
b740def16f
commit
172509f3e1
@@ -38,8 +38,8 @@ interface FormState {
|
||||
window_start_hour: string;
|
||||
window_end_hour: string;
|
||||
/** Janela da RESPOSTA do agente (0495). '' = herda a janela de disparo. */
|
||||
reengajar_start_hour: string;
|
||||
reengajar_end_hour: string;
|
||||
resposta_start_hour: string;
|
||||
resposta_end_hour: string;
|
||||
throttle_s: string;
|
||||
jitter_s: string;
|
||||
daily_message_limit: string;
|
||||
@@ -55,8 +55,8 @@ function fromItem(item: PacingKnobsItem): FormState {
|
||||
return {
|
||||
window_start_hour: o?.window_start_hour != null ? String(o.window_start_hour) : "",
|
||||
window_end_hour: o?.window_end_hour != null ? String(o.window_end_hour) : "",
|
||||
reengajar_start_hour: o?.reengajar_start_hour != null ? String(o.reengajar_start_hour) : "",
|
||||
reengajar_end_hour: o?.reengajar_end_hour != null ? String(o.reengajar_end_hour) : "",
|
||||
resposta_start_hour: o?.resposta_start_hour != null ? String(o.resposta_start_hour) : "",
|
||||
resposta_end_hour: o?.resposta_end_hour != null ? String(o.resposta_end_hour) : "",
|
||||
throttle_s: o?.throttle_ms != null ? String(o.throttle_ms / 1000) : "",
|
||||
jitter_s: o?.jitter_max_ms != null ? String(o.jitter_max_ms / 1000) : "",
|
||||
daily_message_limit:
|
||||
@@ -143,8 +143,8 @@ export function AntiBanSheet({ item, canWrite, onClose }: Props) {
|
||||
channel_session_id: item.channel_session.id,
|
||||
window_start_hour: intOrNull(form.window_start_hour),
|
||||
window_end_hour: intOrNull(form.window_end_hour),
|
||||
reengajar_start_hour: intOrNull(form.reengajar_start_hour),
|
||||
reengajar_end_hour: intOrNull(form.reengajar_end_hour),
|
||||
resposta_start_hour: intOrNull(form.resposta_start_hour),
|
||||
resposta_end_hour: intOrNull(form.resposta_end_hour),
|
||||
throttle_ms: msOrNull(form.throttle_s),
|
||||
jitter_max_ms: msOrNull(form.jitter_s),
|
||||
// `null` quando o Switch está no default: salvar esta ficha por outro
|
||||
@@ -229,16 +229,16 @@ export function AntiBanSheet({ item, canWrite, onClose }: Props) {
|
||||
</fieldset>
|
||||
|
||||
<fieldset className="flex flex-col gap-2">
|
||||
<Label>{t("Janela de RESPOSTA (horário local)")}</Label>
|
||||
<Label>{t("Janela de resposta (horário local)")}</Label>
|
||||
<div className="flex items-center gap-2">
|
||||
<Input
|
||||
type="number"
|
||||
min={0}
|
||||
max={23}
|
||||
inputMode="numeric"
|
||||
placeholder={String(eff.reengajarStartHour)}
|
||||
value={form.reengajar_start_hour}
|
||||
onChange={(e) => set({ reengajar_start_hour: e.target.value })}
|
||||
placeholder={String(eff.respostaStartHour)}
|
||||
value={form.resposta_start_hour}
|
||||
onChange={(e) => set({ resposta_start_hour: e.target.value })}
|
||||
disabled={!canWrite}
|
||||
aria-label={t("Hora de início da janela de resposta")}
|
||||
className="w-20"
|
||||
@@ -249,9 +249,9 @@ export function AntiBanSheet({ item, canWrite, onClose }: Props) {
|
||||
min={1}
|
||||
max={24}
|
||||
inputMode="numeric"
|
||||
placeholder={String(eff.reengajarEndHour)}
|
||||
value={form.reengajar_end_hour}
|
||||
onChange={(e) => set({ reengajar_end_hour: e.target.value })}
|
||||
placeholder={String(eff.respostaEndHour)}
|
||||
value={form.resposta_end_hour}
|
||||
onChange={(e) => set({ resposta_end_hour: e.target.value })}
|
||||
disabled={!canWrite}
|
||||
aria-label={t("Hora de fim da janela de resposta")}
|
||||
className="w-20"
|
||||
@@ -260,13 +260,13 @@ export function AntiBanSheet({ item, canWrite, onClose }: Props) {
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t(
|
||||
"Quando o cliente escreve, o agente responde nesta janela. Use 0 e 24 para responder a qualquer hora — o limite anti-ban (teto diário e intervalo entre envios) continua valendo.",
|
||||
"Quando o cliente escreve, o agente responde nesta janela. Em branco, segue a janela de disparo. Use 0 e 24 para responder a qualquer hora — o teto diário e o intervalo entre envios continuam valendo.",
|
||||
)}
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
<fieldset className="flex flex-col gap-2">
|
||||
<Label>{t("Janela de DISPARO (horário local)")}</Label>
|
||||
<Label>{t("Janela de disparo (horário local)")}</Label>
|
||||
<div className="flex items-center gap-2">
|
||||
<Input
|
||||
type="number"
|
||||
@@ -297,7 +297,7 @@ export function AntiBanSheet({ item, canWrite, onClose }: Props) {
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{t(
|
||||
"O assistente só envia mensagens dentro desta janela. Fora dela, a resposta fica agendada para a próxima abertura — você vê o motivo na conversa.",
|
||||
"Disparos em massa, prospecção e mensagens que retomam conversa parada só saem nesta janela. Fora dela, o envio fica agendado para a próxima abertura — você vê o motivo na conversa.",
|
||||
)}
|
||||
</p>
|
||||
</fieldset>
|
||||
|
||||
+10
-4
@@ -5233,12 +5233,18 @@ export const DICIONARIO: Traducoes = {
|
||||
"dia(s) de uso. Enquanto esse número for menor que o teto diário, é ELE que limita, e mexer no teto diário não muda nada.": {
|
||||
es: "día(s) de uso. Mientras ese número sea menor que el tope diario, es ÉL quien limita, y cambiar el tope diario no cambia nada.",
|
||||
},
|
||||
"Janela de envio (horário local)": { es: "Ventana de envío (horario local)" },
|
||||
"Janela de resposta (horário local)": { es: "Ventana de respuesta (horario local)" },
|
||||
"Janela de disparo (horário local)": { es: "Ventana de envíos proactivos (horario local)" },
|
||||
"Hora de início da janela de resposta": { es: "Hora de inicio de la ventana de respuesta" },
|
||||
"Hora de fim da janela de resposta": { es: "Hora de fin de la ventana de respuesta" },
|
||||
"Hora de início da janela": { es: "Hora de inicio de la ventana" },
|
||||
"h até": { es: "h hasta" },
|
||||
"Hora de fim da janela": { es: "Hora de fin de la ventana" },
|
||||
"O assistente só envia mensagens dentro desta janela. Fora dela, a resposta fica agendada para a próxima abertura — você vê o motivo na conversa.": {
|
||||
es: "El asistente solo envía mensajes dentro de esta ventana. Fuera de ella, la respuesta queda programada para cuando se abra de nuevo, y el motivo aparece en la conversación.",
|
||||
"Quando o cliente escreve, o agente responde nesta janela. Em branco, segue a janela de disparo. Use 0 e 24 para responder a qualquer hora — o teto diário e o intervalo entre envios continuam valendo.": {
|
||||
es: "Cuando el cliente escribe, el agente responde dentro de esta ventana. En blanco, sigue la ventana de envíos proactivos. Usa 0 y 24 para responder a cualquier hora: el tope diario y el intervalo entre envíos siguen valiendo.",
|
||||
},
|
||||
"Disparos em massa, prospecção e mensagens que retomam conversa parada só saem nesta janela. Fora dela, o envio fica agendado para a próxima abertura — você vê o motivo na conversa.": {
|
||||
es: "Los envíos masivos, la prospección y los mensajes que retoman una conversación detenida solo salen dentro de esta ventana. Fuera de ella, el envío queda programado para cuando se abra de nuevo, y el motivo aparece en la conversación.",
|
||||
},
|
||||
"Enviar aos domingos": { es: "Enviar los domingos" },
|
||||
"Ligado por padrão: quem escreve no domingo espera resposta no domingo. Desligue se você faz prospecção ativa e prefere não incomodar no fim de semana.": {
|
||||
@@ -13429,7 +13435,7 @@ export const DICIONARIO: Traducoes = {
|
||||
"Acesso da IA por número": { es: "Acceso de la IA por número" },
|
||||
"Em cada número, a IA atende todo mundo, só números de teste, ninguém, ou só quem veio de uma origem.": { es: "En cada número, la IA atiende a todos, solo a números de prueba, a nadie, o solo a quien vino de un origen." },
|
||||
"Proteção de envio por número": { es: "Protección de envío por número" },
|
||||
"Janela, ritmo, teto diário, envio aos domingos e aquecimento de cada número.": { es: "Horario, ritmo, tope diario, envío los domingos y calentamiento de cada número." },
|
||||
"Janelas de resposta e de disparo, ritmo, teto diário, envio aos domingos e aquecimento de cada número.": { es: "Horarios de respuesta y de envíos proactivos, ritmo, tope diario, envío los domingos y calentamiento de cada número." },
|
||||
"Grupos na caixa de entrada": { es: "Grupos en la bandeja de entrada" },
|
||||
"Em cada número, escolhe quais grupos do WhatsApp aparecem nas conversas.": { es: "En cada número, elige qué grupos de WhatsApp aparecen en las conversaciones." },
|
||||
"Verificação em duas etapas obrigatória": { es: "Verificación en dos pasos obligatoria" },
|
||||
|
||||
@@ -2213,11 +2213,15 @@
|
||||
"Hoje o aquecimento libera": "今天预热可释放",
|
||||
"envio(s) — o número tem": "次发送——该号码有",
|
||||
"dia(s) de uso. Enquanto esse número for menor que o teto diário, é ELE que limita, e mexer no teto diário não muda nada.": "使用天数。只要这个数字小于每日上限,起限制作用的就是它,调整每日上限没有任何作用。",
|
||||
"Janela de envio (horário local)": "发送时间窗口(本地时间)",
|
||||
"Janela de resposta (horário local)": "回复时间窗口(本地时间)",
|
||||
"Janela de disparo (horário local)": "主动发送时间窗口(本地时间)",
|
||||
"Hora de início da janela de resposta": "回复窗口开始时间",
|
||||
"Hora de fim da janela de resposta": "回复窗口结束时间",
|
||||
"Hora de início da janela": "窗口开始时间",
|
||||
"h até": "时 至",
|
||||
"Hora de fim da janela": "窗口结束时间",
|
||||
"O assistente só envia mensagens dentro desta janela. Fora dela, a resposta fica agendada para a próxima abertura — você vê o motivo na conversa.": "助手仅在此时间窗口内发送消息。窗口外,回复会安排到下次窗口开启时发送——你可以在会话中看到原因。",
|
||||
"Quando o cliente escreve, o agente responde nesta janela. Em branco, segue a janela de disparo. Use 0 e 24 para responder a qualquer hora — o teto diário e o intervalo entre envios continuam valendo.": "客户发来消息时,智能体在此时间窗口内回复。留空则沿用主动发送窗口。填 0 和 24 表示任何时间都回复——每日上限和发送间隔仍然有效。",
|
||||
"Disparos em massa, prospecção e mensagens que retomam conversa parada só saem nesta janela. Fora dela, o envio fica agendado para a próxima abertura — você vê o motivo na conversa.": "群发、拓客以及重新激活停滞会话的消息只在此窗口内发出。窗口外,发送会安排到下次窗口开启时——你可以在会话中看到原因。",
|
||||
"Enviar aos domingos": "周日发送",
|
||||
"Ligado por padrão: quem escreve no domingo espera resposta no domingo. Desligue se você faz prospecção ativa e prefere não incomodar no fim de semana.": "默认开启:周日发消息的人期望周日收到回复。如果你做主动拓客且不想在周末打扰对方,请关闭。",
|
||||
"Ritmo entre envios (segundos)": "发送间隔节奏(秒)",
|
||||
|
||||
@@ -444,7 +444,7 @@ const DA_EMPRESA: RecursoOpcional[] = [
|
||||
{
|
||||
id: "protecao_de_envio",
|
||||
nome: "Proteção de envio por número",
|
||||
oQueFaz: "Janela, ritmo, teto diário, envio aos domingos e aquecimento de cada número.",
|
||||
oQueFaz: "Janelas de resposta e de disparo, ritmo, teto diário, envio aos domingos e aquecimento de cada número.",
|
||||
nivel: "organizacao",
|
||||
padrao: "varia",
|
||||
quemDecide: "admin",
|
||||
|
||||
Reference in New Issue
Block a user