diff --git a/src/apps/chatwoot/cli/program.messages.ts b/src/apps/chatwoot/cli/program.messages.ts index f02ebacc..81470a70 100644 --- a/src/apps/chatwoot/cli/program.messages.ts +++ b/src/apps/chatwoot/cli/program.messages.ts @@ -58,6 +58,10 @@ export function AddMessagesCommand( .option('--bc, --broadcast', l.r('cli.cmd.messages.pull.option.broadcast')) .option('-m, --media', l.r('cli.cmd.messages.pull.option.media')) .option('--pause', l.r('cli.cmd.messages.pull.option.pause')) + .option( + '--rc, --resolve-conversations', + l.r('cli.cmd.messages.pull.option.resolve-conversations'), + ) .option( '-b, --batch ', l.r('cli.cmd.messages.pull.option.batch'), @@ -113,7 +117,7 @@ export function AddMessagesCommand( }, media: opts.media, force: opts.force, - pause: !!opts.pause, + pause: opts.pause, timeout: { media: opts.timeoutMedia, }, @@ -125,6 +129,7 @@ export function AddMessagesCommand( channels: !opts.channels, broadcast: !opts.broadcast, }, + resolveConversations: opts.resolveConversations, }; const jobOptions: JobsOptions & JobDataTimeout = { attempts: opts.attempts, diff --git a/src/apps/chatwoot/client/Conversation.ts b/src/apps/chatwoot/client/Conversation.ts index 1e19385c..e25f056c 100644 --- a/src/apps/chatwoot/client/Conversation.ts +++ b/src/apps/chatwoot/client/Conversation.ts @@ -1,7 +1,6 @@ import ChatwootClient from '@figuro/chatwoot-sdk'; import type { conversation_message_create } from '@figuro/chatwoot-sdk/dist/models/conversation_message_create'; import { MessageType } from '@waha/apps/chatwoot/client/types'; -import { IsCommandsChat } from '@waha/apps/chatwoot/client/ids'; export class Conversation { public onError: (e: any) => void; diff --git a/src/apps/chatwoot/client/ConversationService.ts b/src/apps/chatwoot/client/ConversationService.ts index 0c3824ad..d9a233ed 100644 --- a/src/apps/chatwoot/client/ConversationService.ts +++ b/src/apps/chatwoot/client/ConversationService.ts @@ -75,4 +75,14 @@ export class ConversationService { throw error; } } + + async resolve(conversationId: number): Promise { + return this.accountAPI.conversations.toggleStatus({ + accountId: this.config.accountId, + conversationId: conversationId, + data: { + status: 'resolved', + }, + }); + } } diff --git a/src/apps/chatwoot/consumers/task/messages.pull.ts b/src/apps/chatwoot/consumers/task/messages.pull.ts index 55a773ff..24121aef 100644 --- a/src/apps/chatwoot/consumers/task/messages.pull.ts +++ b/src/apps/chatwoot/consumers/task/messages.pull.ts @@ -36,6 +36,7 @@ import { ErrorRenderer } from '@waha/apps/chatwoot/error/ErrorRenderer'; import { IsCommandsChat } from '@waha/apps/chatwoot/client/ids'; import { CommandPrefix } from '@waha/apps/chatwoot/cli'; import { QueueManager } from '@waha/apps/chatwoot/services/QueueManager'; +import { addUnique } from '@waha/utils/list'; export enum ChatID { ALL = 'all', @@ -57,6 +58,7 @@ export type MessagesPullOptions = { }; media: boolean; ignore: IgnoreJidConfig; + resolveConversations: boolean; }; interface Progress { @@ -65,7 +67,16 @@ interface Progress { ignored: number; errors: number; chats: string[]; - last?: number; + messages: { + first?: number; + last?: number; + }; + // Conversations + conversations: number[]; + conversationResolve: { + success: number; + error: number; + }; } const NullProgress: Progress = { @@ -74,6 +85,15 @@ const NullProgress: Progress = { ignored: 0, errors: 0, chats: [], + messages: { + first: 0, + last: 0, + }, + conversations: [], + conversationResolve: { + success: 0, + error: 0, + }, }; function total(progress: Progress) { @@ -154,13 +174,29 @@ class MessagesPullHandler { progress.exists += p.exists; progress.ignored += p.ignored; progress.errors += p.errors; + progress.conversationResolve.success += p.conversationResolve.success; + progress.conversationResolve.error += p.conversationResolve.error; } // Chats progress.chats = lodash.uniq(lodash.flatten(values.map((p) => p.chats))); - // Last timestamp - progress.last = lodash.max(values.map((p) => p.last || 0)); - if (progress.last === 0) { - progress.last = undefined; + + // Conversations + progress.conversations = lodash.uniq( + lodash.flatten(values.map((p) => p.conversations)), + ); + + // Messages timestamps + progress.messages.first = lodash.min( + values.map((p) => p.messages.first || Infinity), + ); + if (progress.messages.first === Infinity) { + progress.messages.first = undefined; + } + progress.messages.last = lodash.max( + values.map((p) => p.messages.last || 0), + ); + if (progress.messages.last === 0) { + progress.messages.last = undefined; } return progress; } @@ -181,21 +217,47 @@ class MessagesPullHandler { } } + /** + * Perform actions after all jobs are done + */ async end(options: MessagesPullOptions, job: Job) { if (job.parentKey) { + // Not end yet, have parent tasks to process return await this.summaryProgress(job); } - // Perform some actions after all jobs are done - const progress = await this.summaryProgress(job); - await job.updateProgress(progress); - await this.activity.completed(progress, options); + + // Resume queues if paused if (options.pause) { await this.queueManager.resume(); await this.activity.queue(false); } + // Progress summary + const progress = await this.summaryProgress(job); + await job.updateProgress(progress); + + // Resolve conversations + if (options.resolveConversations) { + await this.resolveConversations(progress); + await job.updateProgress(progress); + } + + // Report completed + await this.activity.completed(progress, options); return progress; } + protected async resolveConversations(progress: Progress) { + const service = this.container.ConversationService(); + for (const conversationId of progress.conversations) { + try { + await service.resolve(conversationId); + progress.conversationResolve.success += 1; + } catch (err) { + progress.conversationResolve.error += 1; + } + } + } + async handle(options: MessagesPullOptions, job: Job): Promise { if (options.chat === ChatID.SUMMARY) { // Do nothing for "summary" chat @@ -271,7 +333,8 @@ class MessagesPullHandler { // Process try { - progress.last = message.timestamp; + progress.messages.first = progress.messages.first || message.timestamp; + progress.messages.last = message.timestamp; if (all && !jids.include(EngineHelper.ChatID(message))) { progress.ignored += 1; continue; @@ -296,13 +359,14 @@ class MessagesPullHandler { } const chatwoot = await handler.handle(message); - progress.ok += chatwoot ? 1 : 0; - progress.exists += chatwoot ? 0 : 1; - if ( - chatwoot && - !progress.chats.includes(EngineHelper.ChatID(message)) - ) { - progress.chats.push(EngineHelper.ChatID(message)); + if (chatwoot) { + progress.ok += 1; + addUnique(progress.chats, EngineHelper.ChatID(message)); + if (info.conversationId) { + addUnique(progress.conversations, info.conversationId); + } + } else { + progress.exists += 1; } } catch (error) { const renderer = new ErrorRenderer(); @@ -370,7 +434,18 @@ export class TaskActivity { this.l.r('task.messages.progress', { progress: progress, chat: options.chat, - last: this.l.FormatTimestampOpts(progress.last, format, false), + messages: { + first: this.l.FormatTimestampOpts( + progress.messages.first, + format, + false, + ), + last: this.l.FormatTimestampOpts( + progress.messages.last, + format, + false, + ), + }, }), ); } @@ -442,6 +517,7 @@ export function MessagesPullStatusMessage( const details = JobLink(job); const options = job.data.options as MessagesPullOptions; const payload = { + options: options, chat: options.chat, chats: progress.chats.length, period: period(options), @@ -449,7 +525,10 @@ export function MessagesPullStatusMessage( state: lodash.capitalize(state ?? 'unknown'), progress: progress, details: details, - last: l.FormatTimestamp(progress.last, false), + messages: { + first: l.FormatTimestamp(progress.messages.first, false), + last: l.FormatTimestamp(progress.messages.last, false), + }, }; return l.r('task.messages.status', payload); diff --git a/src/apps/chatwoot/di/DIContainer.ts b/src/apps/chatwoot/di/DIContainer.ts index 066cba13..62e9947c 100644 --- a/src/apps/chatwoot/di/DIContainer.ts +++ b/src/apps/chatwoot/di/DIContainer.ts @@ -133,7 +133,7 @@ export class DIContainer { * @returns ConversationService instance */ @CacheSync() - private ConversationService(): ConversationService { + public ConversationService(): ConversationService { return new ConversationService( this.config, this.AccountAPI(), diff --git a/src/apps/chatwoot/i18n/locales/ar-AE.yaml b/src/apps/chatwoot/i18n/locales/ar-AE.yaml index f3eb34ed..46821455 100644 --- a/src/apps/chatwoot/i18n/locales/ar-AE.yaml +++ b/src/apps/chatwoot/i18n/locales/ar-AE.yaml @@ -564,6 +564,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: وضع مهمة سحب الرسائل في قائمة الانتظار وهي متوقفة مؤقتًا وإيقاف معالجة رسائل واتساب الجديدة حتى تكتمل. +cli.cmd.messages.pull.option.resolve-conversations: + وضع علامة على المحادثات كمحلولة بعد معالجة كل رسائل السجل. cli.cmd.messages.pull.error.pause-no-queue: ⛔ لا يمكن استخدام `--pause` لأن أمر **queue** معطَّل في هذا التكوين. cli.cmd.queue.description: إدارة قوائم الانتظار. @@ -618,21 +620,36 @@ task.messages.details: أرسل "{{{prefix}}}messages status" للاطلاع على المزيد من التفاصيل. task.messages.progress: '⏳ رسائل {{{chat}}}: 🆕 {{progress.ok}}، 🟢 {{progress.exists}}، ⚪ - {{progress.ignored}}، 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}، 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ رسائل {{{chat}}} خلال {{{period}}} → 🆕 {{progress.ok}}، 🟢 {{progress.exists}}، ⚪ {{progress.ignored}}، 🔴 {{progress.errors}} task.messages.status: |- - رسائل **{{{chat}}}** خلال الفترة ⏱️ **{{{period}}}**: - - ⚙️ حالة المهمة: **{{state}}** - {{#last}} - - 📅 آخر معالجة: **{{{last}}}** - {{/last}} - - 💬 تم إنشاؤها في: **{{{chats}}}** دردشات - - 🆕 تم إنشاؤها: **{{{progress.ok}}}** رسائل - - 🟢 موجودة مسبقًا: {{{progress.exists}}} رسائل - - ⚪ تم تجاهلها: {{{progress.ignored}}} رسائل - - 🔴 أخطاء: {{{progress.errors}}} رسائل + رسائل **{{{chat}}}** خلال الفترة ⏱️ **{{{period}}}**. ⚙️ حالة المهمة: **{{state}}**. - التفاصيل: + 🗨️ الرسائل: + - 🆕 تم الإنشاء: **{{{progress.ok}}}** + - 🟢 موجودة مسبقًا: {{{progress.exists}}} + - ⚪ تم تجاهلها: {{{progress.ignored}}} + - 🔴 أخطاء: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ الأقدم: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ الأحدث: **{{{messages.last}}}** + {{/messages.last}} + + 💬 دردشات واتساب: + - 🆕 رسائل جديدة في **{{{chats}}}** دردشات + {{#options.resolveConversations}} + + 🗣️ المحادثات: + - 🟢 تم حلها: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 أخطاء: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} + + التفاصيل: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/bn-BD.yaml b/src/apps/chatwoot/i18n/locales/bn-BD.yaml index 1eae3347..747e5257 100644 --- a/src/apps/chatwoot/i18n/locales/bn-BD.yaml +++ b/src/apps/chatwoot/i18n/locales/bn-BD.yaml @@ -569,6 +569,9 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: বার্তা টানার কাজটিকে বিরতি অবস্থায় কিউতে রাখে এবং শেষ না হওয়া পর্যন্ত নতুন WhatsApp বার্তার প্রসেসিং বন্ধ রাখে। +cli.cmd.messages.pull.option.resolve-conversations: + সমস্ত ইতিহাস বার্তা প্রক্রিয়ার পর কথোপকথনগুলোকে সমাধান হয়েছে হিসেবে চিহ্নিত + করে। cli.cmd.messages.pull.error.pause-no-queue: ⛔ `--pause` ব্যবহার করা যাবে না কারণ এই কনফিগারেশনে **queue** কমান্ড নিষ্ক্রিয়। @@ -620,21 +623,36 @@ task.messages.started: ⏳ বার্তা টানা হচ্ছে 💬 task.messages.details: আরও জানতে "{{{prefix}}}messages status" পাঠান। task.messages.progress: '⏳ বার্তা {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ বার্তা {{{chat}}} {{{period}}}-এ → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - **{{{chat}}}**-এর বার্তা ⏱️ **{{{period}}}** সময়ে: - - ⚙️ কাজের অবস্থা: **{{state}}** - {{#last}} - - 📅 শেষ প্রসেস করা: **{{{last}}}** - {{/last}} - - 💬 তৈরি হয়েছে: **{{{chats}}}** চ্যাটে - - 🆕 তৈরি: **{{{progress.ok}}}** বার্তা - - 🟢 আগেই ছিল: {{{progress.exists}}} বার্তা - - ⚪ উপেক্ষা: {{{progress.ignored}}} বার্তা - - 🔴 ত্রুটি: {{{progress.errors}}} বার্তা + **{{{chat}}}**-এর বার্তা ⏱️ **{{{period}}}** সময়ে। ⚙️ কাজের অবস্থা: **{{state}}**. + + 🗨️ বার্তা: + - 🆕 তৈরি: **{{{progress.ok}}}** + - 🟢 আগেই ছিল: {{{progress.exists}}} + - ⚪ উপেক্ষা: {{{progress.ignored}}} + - 🔴 ত্রুটি: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ প্রাচীনতম: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ সর্বশেষ: **{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp চ্যাট: + - 🆕 **{{{chats}}}** চ্যাটে নতুন বার্তা + {{#options.resolveConversations}} + + 🗣️ কথোপকথন: + - 🟢 সমাধান হয়েছে: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 ত্রুটি: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} বিস্তারিত: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/de-DE.yaml b/src/apps/chatwoot/i18n/locales/de-DE.yaml index 100e3a08..732c2610 100644 --- a/src/apps/chatwoot/i18n/locales/de-DE.yaml +++ b/src/apps/chatwoot/i18n/locales/de-DE.yaml @@ -584,6 +584,9 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Stellt den Nachrichtenabruf in der Warteschlange auf Pause und stoppt neue WhatsApp-Verarbeitung bis zum Abschluss. +cli.cmd.messages.pull.option.resolve-conversations: + Markiert die Gespräche nach Abschluss aller historischen Nachrichten als + erledigt. cli.cmd.messages.pull.error.pause-no-queue: ⛔ `--pause` kann nicht verwendet werden, weil der **queue**-Befehl in dieser Konfiguration deaktiviert ist. @@ -642,21 +645,36 @@ task.messages.details: Senden Sie "{{{prefix}}}messages status", um weitere Details zu sehen. task.messages.progress: '⏳ Nachrichten {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Nachrichten {{{chat}}} in {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Nachrichten **{{{chat}}}** im Zeitraum ⏱️ **{{{period}}}**: - - ⚙️ Jobstatus: **{{state}}** - {{#last}} - - 📅 Zuletzt verarbeitet: **{{{last}}}** - {{/last}} - - 💬 Erstellt in: **{{{chats}}}** Chats - - 🆕 Erstellt: **{{{progress.ok}}}** Nachrichten - - 🟢 Bereits vorhanden: {{{progress.exists}}} Nachrichten - - ⚪ Ignoriert: {{{progress.ignored}}} Nachrichten - - 🔴 Fehler: {{{progress.errors}}} Nachrichten + Nachrichten **{{{chat}}}** im Zeitraum ⏱️ **{{{period}}}**. ⚙️ Jobstatus: **{{state}}**. - Details: + 🗨️ Nachrichten: + - 🆕 Erstellt: **{{{progress.ok}}}** + - 🟢 Bereits vorhanden: {{{progress.exists}}} + - ⚪ Ignoriert: {{{progress.ignored}}} + - 🔴 Fehler: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Älteste: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Neueste: **{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp-Chats: + - 🆕 Neue Nachrichten in **{{{chats}}}** Chats + {{#options.resolveConversations}} + + 🗣️ Konversationen: + - 🟢 Aufgelöst: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Fehler: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} + + Details: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/en-US.yaml b/src/apps/chatwoot/i18n/locales/en-US.yaml index b85f8901..176df7f2 100644 --- a/src/apps/chatwoot/i18n/locales/en-US.yaml +++ b/src/apps/chatwoot/i18n/locales/en-US.yaml @@ -437,6 +437,9 @@ cli.cmd.messages.pull.option.media: |- cli.cmd.messages.pull.option.pause: |- Enqueue the messages pull job in a paused state, halting new WhatsApp message processing until the pull completes. +cli.cmd.messages.pull.option.resolve-conversations: |- + Mark the conversations as resolved after all history messages are processed. + cli.cmd.messages.pull.error.pause-no-queue: |- ⛔ Cannot use `--pause` because the **queue** command is disabled in this app configuration. @@ -600,22 +603,36 @@ task.messages.details: |- Send "{{{prefix}}}messages status" to see more details. task.messages.progress: |- - ⏳ Messages {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}} + ⏳ Messages {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 {{{messages.last}}}{{/messages.last}} task.messages.completed: |- ✅ Messages {{{chat}}} in {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Messages **{{{chat}}}** in ⏱️ **{{{period}}}** period: - - ⚙️ Job State: **{{state}}** - {{#last}} - - 📅 Last Processed: **{{{last}}}** - {{/last}} - - 💬 Created in: **{{{chats}}}** chats - - 🆕 Created: **{{{progress.ok}}}** messages - - 🟢 Already exists: {{{progress.exists}}} messages - - ⚪ Ignored: {{{progress.ignored}}} messages - - 🔴 Errors: {{{progress.errors}}} messages + Messages **{{{chat}}}** in ⏱️ **{{{period}}}** period. ⚙️ Job State: **{{state}}**. + + 🗨️ Messages: + - 🆕 Created: **{{{progress.ok}}}** + - 🟢 Already exists: {{{progress.exists}}} + - ⚪ Ignored: {{{progress.ignored}}} + - 🔴 Errors: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Earliest: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Latest: **{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp Chats: + - 🆕 New messages in **{{{chats}}}** chats + {{#options.resolveConversations}} + + 🗣️ Conversations: + - 🟢 Resolved: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Errors: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Details: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/es-ES.yaml b/src/apps/chatwoot/i18n/locales/es-ES.yaml index b6377d06..05d40ccc 100644 --- a/src/apps/chatwoot/i18n/locales/es-ES.yaml +++ b/src/apps/chatwoot/i18n/locales/es-ES.yaml @@ -581,6 +581,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Encola el trabajo de extracción de mensajes en estado pausado, deteniendo el procesamiento de nuevos mensajes de WhatsApp hasta que finalice. +cli.cmd.messages.pull.option.resolve-conversations: + Marca las conversaciones como resueltas después de procesar todo el historial. cli.cmd.messages.pull.error.pause-no-queue: ⛔ No se puede usar `--pause` porque el comando **queue** está deshabilitado en esta configuración de la aplicación. @@ -640,21 +642,36 @@ task.messages.details: Envía "{{{prefix}}}messages status" para ver más detalles. task.messages.progress: '⏳ Mensajes {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Mensajes {{{chat}}} en {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Mensajes **{{{chat}}}** en el periodo ⏱️ **{{{period}}}**: - - ⚙️ Estado del trabajo: **{{state}}** - {{#last}} - - 📅 Último procesado: **{{{last}}}** - {{/last}} - - 💬 Creados en: **{{{chats}}}** chats - - 🆕 Creados: **{{{progress.ok}}}** mensajes - - 🟢 Ya existen: {{{progress.exists}}} mensajes - - ⚪ Ignorados: {{{progress.ignored}}} mensajes - - 🔴 Errores: {{{progress.errors}}} mensajes + Mensajes **{{{chat}}}** en el periodo ⏱️ **{{{period}}}**. ⚙️ Estado del trabajo: **{{state}}**. + + 🗨️ Mensajes: + - 🆕 Creados: **{{{progress.ok}}}** + - 🟢 Ya existen: {{{progress.exists}}} + - ⚪ Ignorados: {{{progress.ignored}}} + - 🔴 Errores: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Más antiguo: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Más reciente: **{{{messages.last}}}** + {{/messages.last}} + + 💬 Chats de WhatsApp: + - 🆕 Nuevos mensajes en **{{{chats}}}** chats + {{#options.resolveConversations}} + + 🗣️ Conversaciones: + - 🟢 Resueltas: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Errores: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Detalles: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/fa-IR.yaml b/src/apps/chatwoot/i18n/locales/fa-IR.yaml index 50dbefd6..a34e20f3 100644 --- a/src/apps/chatwoot/i18n/locales/fa-IR.yaml +++ b/src/apps/chatwoot/i18n/locales/fa-IR.yaml @@ -572,6 +572,9 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: کار دریافت پیام‌ها را در حالت توقف در صف قرار می‌دهد و پردازش پیام‌های جدید واتساپ را تا پایان متوقف می‌کند. +cli.cmd.messages.pull.option.resolve-conversations: + پس از پردازش تمام پیام‌های تاریخچه، مکالمه‌ها را به‌عنوان حل‌شده علامت‌گذاری + می‌کند. cli.cmd.messages.pull.error.pause-no-queue: ⛔ امکان استفاده از `--pause` نیست زیرا فرمان **queue** در این پیکربندی غیرفعال است. @@ -626,21 +629,36 @@ task.messages.details: برای جزئیات بیشتر "{{{prefix}}}messages status" را ارسال کنید. task.messages.progress: '⏳ پیام‌های {{{chat}}}: 🆕 {{progress.ok}}، 🟢 {{progress.exists}}، ⚪ - {{progress.ignored}}، 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}، 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ پیام‌های {{{chat}}} در {{{period}}} → 🆕 {{progress.ok}}، 🟢 {{progress.exists}}، ⚪ {{progress.ignored}}، 🔴 {{progress.errors}} task.messages.status: |- - پیام‌های **{{{chat}}}** در بازه ⏱️ **{{{period}}}**: - - ⚙️ وضعیت کار: **{{state}}** - {{#last}} - - 📅 آخرین پردازش: **{{{last}}}** - {{/last}} - - 💬 ایجاد شده در: **{{{chats}}}** گفت‌وگو - - 🆕 ایجاد شده: **{{{progress.ok}}}** پیام - - 🟢 موجود: {{{progress.exists}}} پیام - - ⚪ نادیده گرفته شده: {{{progress.ignored}}} پیام - - 🔴 خطا: {{{progress.errors}}} پیام + پیام‌های **{{{chat}}}** در بازه ⏱️ **{{{period}}}**. ⚙️ وضعیت کار: **{{state}}**. + + 🗨️ پیام‌ها: + - 🆕 ایجاد شده: **{{{progress.ok}}}** + - 🟢 موجود: {{{progress.exists}}} + - ⚪ نادیده گرفته شده: {{{progress.ignored}}} + - 🔴 خطا: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ قدیمی‌ترین: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ جدیدترین: **{{{messages.last}}}** + {{/messages.last}} + + 💬 گفت‌وگوهای واتساپ: + - 🆕 پیام‌های جدید در **{{{chats}}}** گفت‌وگو + {{#options.resolveConversations}} + + 🗣️ مکالمه‌ها: + - 🟢 حل شد: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 خطا: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} جزئیات: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/fr-FR.yaml b/src/apps/chatwoot/i18n/locales/fr-FR.yaml index a357ee98..0b64a336 100644 --- a/src/apps/chatwoot/i18n/locales/fr-FR.yaml +++ b/src/apps/chatwoot/i18n/locales/fr-FR.yaml @@ -580,6 +580,9 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Met la tâche de récupération en file d’attente à l’arrêt, suspendant les nouveaux messages WhatsApp jusqu’à la fin. +cli.cmd.messages.pull.option.resolve-conversations: + Marque les conversations comme résolues après le traitement de tout + l’historique. cli.cmd.messages.pull.error.pause-no-queue: ⛔ Impossible d’utiliser `--pause` car la commande **queue** est désactivée dans cette configuration. @@ -639,21 +642,36 @@ task.messages.details: Envoyez "{{{prefix}}}messages status" pour plus de détails. task.messages.progress: '⏳ Messages {{{chat}}} : 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Messages {{{chat}}} pendant {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Messages **{{{chat}}}** sur la période ⏱️ **{{{period}}}** : - - ⚙️ État de la tâche : **{{state}}** - {{#last}} - - 📅 Dernier traité : **{{{last}}}** - {{/last}} - - 💬 Créés dans : **{{{chats}}}** conversations - - 🆕 Créés : **{{{progress.ok}}}** messages - - 🟢 Déjà existants : {{{progress.exists}}} messages - - ⚪ Ignorés : {{{progress.ignored}}} messages - - 🔴 Erreurs : {{{progress.errors}}} messages + Messages **{{{chat}}}** sur la période ⏱️ **{{{period}}}**. ⚙️ État de la tâche : **{{state}}**. + + 🗨️ Messages : + - 🆕 Créés : **{{{progress.ok}}}** + - 🟢 Déjà existants : {{{progress.exists}}} + - ⚪ Ignorés : {{{progress.ignored}}} + - 🔴 Erreurs : {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Plus ancien : **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Plus récent : **{{{messages.last}}}** + {{/messages.last}} + + 💬 Conversations WhatsApp : + - 🆕 Nouveaux messages dans **{{{chats}}}** conversations + {{#options.resolveConversations}} + + 🗣️ Conversations : + - 🟢 Résolues : **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Erreurs : **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Détails : [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/he-IL.yaml b/src/apps/chatwoot/i18n/locales/he-IL.yaml index b648b82f..7f0912df 100644 --- a/src/apps/chatwoot/i18n/locales/he-IL.yaml +++ b/src/apps/chatwoot/i18n/locales/he-IL.yaml @@ -564,6 +564,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: הכנסת משימת המשיכה לתור במצב מושהה ועצירת עיבוד הודעות WhatsApp חדשות עד לסיום. +cli.cmd.messages.pull.option.resolve-conversations: + מסמן את השיחות כפתורות לאחר שכל הודעות ההיסטוריה עובדו. cli.cmd.messages.pull.error.pause-no-queue: ⛔ לא ניתן להשתמש ב-`--pause` כי הפקודה **queue** מושבתת בתצורה זו. cli.cmd.queue.description: ניהול תורים. @@ -611,21 +613,36 @@ task.messages.started: ⏳ מושכים הודעות 💬 {{{chat}}} ⏱️ {{{p task.messages.details: שלחו "{{{prefix}}}messages status" לעוד פרטים. task.messages.progress: '⏳ הודעות {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ הודעות {{{chat}}} במהלך {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - הודעות **{{{chat}}}** בתקופה ⏱️ **{{{period}}}**: - - ⚙️ מצב המשימה: **{{state}}** - {{#last}} - - 📅 תאריך עיבוד אחרון: **{{{last}}}** - {{/last}} - - 💬 נוצרו ב-**{{{chats}}}** שיחות - - 🆕 נוצרו: **{{{progress.ok}}}** הודעות - - 🟢 קיימות כבר: {{{progress.exists}}} הודעות - - ⚪ הוזנחו: {{{progress.ignored}}} הודעות - - 🔴 שגיאות: {{{progress.errors}}} הודעות + הודעות **{{{chat}}}** בתקופה ⏱️ **{{{period}}}**. ⚙️ מצב המשימה: **{{state}}**. + + 🗨️ הודעות: + - 🆕 נוצרו: **{{{progress.ok}}}** + - 🟢 קיימות כבר: {{{progress.exists}}} + - ⚪ הוזנחו: {{{progress.ignored}}} + - 🔴 שגיאות: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ ישן ביותר: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ חדש ביותר: **{{{messages.last}}}** + {{/messages.last}} + + 💬 שיחות WhatsApp: + - 🆕 הודעות חדשות ב-**{{{chats}}}** שיחות + {{#options.resolveConversations}} + + 🗣️ שיחות: + - 🟢 נפתרו: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 שגיאות: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} פרטים: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/hi-IN.yaml b/src/apps/chatwoot/i18n/locales/hi-IN.yaml index 3db74c39..f44b4833 100644 --- a/src/apps/chatwoot/i18n/locales/hi-IN.yaml +++ b/src/apps/chatwoot/i18n/locales/hi-IN.yaml @@ -570,6 +570,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: संदेश खींचने के कार्य को रोके गए अवस्था में कतार में डालें और पूरा होने तक नए WhatsApp संदेशों की प्रोसेसिंग रोकें। +cli.cmd.messages.pull.option.resolve-conversations: + सभी इतिहास संदेश संसाधित होने के बाद बातचीत को हल किया हुआ चिह्नित करता है। cli.cmd.messages.pull.error.pause-no-queue: ⛔ `--pause` का उपयोग नहीं किया जा सकता क्योंकि इस कॉन्फ़िगरेशन में **queue** कमांड अक्षम है। @@ -624,21 +626,36 @@ task.messages.started: task.messages.details: और जानकारी के लिए "{{{prefix}}}messages status" भेजें। task.messages.progress: '⏳ संदेश {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ संदेश {{{chat}}} में {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - **{{{chat}}}** के संदेश ⏱️ **{{{period}}}** अवधि में: - - ⚙️ कार्य की स्थिति: **{{state}}** - {{#last}} - - 📅 अंतिम संसाधित: **{{{last}}}** - {{/last}} - - 💬 बनाए गए चैट: **{{{chats}}}** - - 🆕 बनाए गए: **{{{progress.ok}}}** संदेश - - 🟢 पहले से मौजूद: {{{progress.exists}}} संदेश - - ⚪ अनदेखा: {{{progress.ignored}}} संदेश - - 🔴 त्रुटियाँ: {{{progress.errors}}} संदेश + **{{{chat}}}** के संदेश ⏱️ **{{{period}}}** अवधि में। ⚙️ कार्य की स्थिति: **{{state}}**. + + 🗨️ संदेश: + - 🆕 बनाए गए: **{{{progress.ok}}}** + - 🟢 पहले से मौजूद: {{{progress.exists}}} + - ⚪ अनदेखा: {{{progress.ignored}}} + - 🔴 त्रुटियाँ: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ सबसे पुराना: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ नवीनतम: **{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp चैट: + - 🆕 **{{{chats}}}** चैट में नए संदेश + {{#options.resolveConversations}} + + 🗣️ बातचीत: + - 🟢 हल हुईं: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 त्रुटियाँ: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} विवरण: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/id-ID.yaml b/src/apps/chatwoot/i18n/locales/id-ID.yaml index 58ecc750..a5b2fc9c 100644 --- a/src/apps/chatwoot/i18n/locales/id-ID.yaml +++ b/src/apps/chatwoot/i18n/locales/id-ID.yaml @@ -570,6 +570,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Masukkan pekerjaan penarikan pesan ke antrian dalam keadaan jeda dan hentikan pemrosesan pesan WhatsApp baru sampai selesai. +cli.cmd.messages.pull.option.resolve-conversations: + Menandai percakapan sebagai selesai setelah semua pesan riwayat diproses. cli.cmd.messages.pull.error.pause-no-queue: ⛔ Tidak dapat menggunakan `--pause` karena perintah **queue** dinonaktifkan pada konfigurasi ini. @@ -624,21 +626,36 @@ task.messages.details: Kirim "{{{prefix}}}messages status" untuk melihat rincian. task.messages.progress: '⏳ Pesan {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Pesan {{{chat}}} selama {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Pesan **{{{chat}}}** dalam periode ⏱️ **{{{period}}}**: - - ⚙️ Status pekerjaan: **{{state}}** - {{#last}} - - 📅 Terakhir diproses: **{{{last}}}** - {{/last}} - - 💬 Dibuat di: **{{{chats}}}** percakapan - - 🆕 Dibuat: **{{{progress.ok}}}** pesan - - 🟢 Sudah ada: {{{progress.exists}}} pesan - - ⚪ Diabaikan: {{{progress.ignored}}} pesan - - 🔴 Kesalahan: {{{progress.errors}}} pesan + Pesan **{{{chat}}}** dalam periode ⏱️ **{{{period}}}**. ⚙️ Status pekerjaan: **{{state}}**. + + 🗨️ Pesan: + - 🆕 Dibuat: **{{{progress.ok}}}** + - 🟢 Sudah ada: {{{progress.exists}}} + - ⚪ Diabaikan: {{{progress.ignored}}} + - 🔴 Kesalahan: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Paling awal: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Terbaru: **{{{messages.last}}}** + {{/messages.last}} + + 💬 Chat WhatsApp: + - 🆕 Pesan baru di **{{{chats}}}** chat + {{#options.resolveConversations}} + + 🗣️ Percakapan: + - 🟢 Selesai: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Kesalahan: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Detail: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/pa-PK.yaml b/src/apps/chatwoot/i18n/locales/pa-PK.yaml index 2244e0ce..8d4e9262 100644 --- a/src/apps/chatwoot/i18n/locales/pa-PK.yaml +++ b/src/apps/chatwoot/i18n/locales/pa-PK.yaml @@ -570,6 +570,9 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: ਸੁਨੇਹੇ ਖਿੱਚਣ ਦਾ ਕੰਮ ਠਹਿਰੇ ਹੋਏ ਹਾਲਤ ਵਿੱਚ ਕਤਾਰ ਵਿੱਚ ਪਾਓ ਅਤੇ ਮੁਕੰਮਲ ਹੋਣ ਤੱਕ ਨਵੇਂ WhatsApp ਸੁਨੇਹਿਆਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਰੋਕੋ। +cli.cmd.messages.pull.option.resolve-conversations: + ਸਾਰੇ ਇਤਿਹਾਸਿਕ ਸੁਨੇਹੇ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਤੋਂ ਬਾਅਦ ਗੱਲਬਾਤਾਂ ਨੂੰ ਹੱਲ ਹੋਇਆ ਚਿੰਨ੍ਹਤ ਕਰਦਾ + ਹੈ। cli.cmd.messages.pull.error.pause-no-queue: ⛔ `--pause` ਵਰਤ ਨਹੀਂ ਸਕਦੇ ਕਿਉਂਕਿ ਇਸ ਸੰਰਚਨਾ ਵਿੱਚ **queue** ਹੁਕਮ ਅਸਮਰੱਥ ਹੈ। cli.cmd.queue.description: ਕਤਾਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ। @@ -622,21 +625,36 @@ task.messages.started: task.messages.details: ਵਧੇਰੇ ਵੇਰਵਿਆਂ ਲਈ "{{{prefix}}}messages status" ਭੇਜੋ। task.messages.progress: '⏳ ਸੁਨੇਹੇ {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ ਸੁਨੇਹੇ {{{chat}}} ਵਿਚ {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - **{{{chat}}}** ਦੇ ਸੁਨੇਹੇ ⏱️ **{{{period}}}** ਸਮੇਂ ਵਿੱਚ: - - ⚙️ ਕੰਮ ਦੀ ਸਥਿਤੀ: **{{state}}** - {{#last}} - - 📅 ਆਖ਼ਰੀ ਪ੍ਰਕਿਰਿਆ: **{{{last}}}** - {{/last}} - - 💬 ਬਣਾਇਆ ਗਿਆ: **{{{chats}}}** ਚੈਟਾਂ ਵਿੱਚ - - 🆕 ਬਣਾਇਆ: **{{{progress.ok}}}** ਸੁਨੇਹੇ - - 🟢 ਪਹਿਲਾਂ ਤੋਂ ਮੌਜੂਦ: {{{progress.exists}}} ਸੁਨੇਹੇ - - ⚪ ਅਣਦੇਖੇ: {{{progress.ignored}}} ਸੁਨੇਹੇ - - 🔴 ਗਲਤੀਆਂ: {{{progress.errors}}} ਸੁਨੇਹੇ + **{{{chat}}}** ਦੇ ਸੁਨੇਹੇ ⏱️ **{{{period}}}** ਸਮੇਂ ਵਿੱਚ। ⚙️ ਕੰਮ ਦੀ ਸਥਿਤੀ: **{{state}}**। + + 🗨️ ਸੁਨੇਹੇ: + - 🆕 ਬਣਾਇਆ: **{{{progress.ok}}}** + - 🟢 ਪਹਿਲਾਂ ਤੋਂ ਮੌਜੂਦ: {{{progress.exists}}} + - ⚪ ਅਣਦੇਖੇ: {{{progress.ignored}}} + - 🔴 ਗਲਤੀਆਂ: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ ਸਭ ਤੋਂ ਪੁਰਾਣਾ: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ ਸਭ ਤੋਂ ਨਵਾਂ: **{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp ਚੈਟ: + - 🆕 **{{{chats}}}** ਚੈਟਾਂ ਵਿੱਚ ਨਵੇਂ ਸੁਨੇਹੇ + {{#options.resolveConversations}} + + 🗣️ ਗੱਲਬਾਤਾਂ: + - 🟢 ਹੱਲ ਹੋਈਆਂ: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 ਗਲਤੀਆਂ: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} ਵੇਰਵੇ: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/pt-BR.yaml b/src/apps/chatwoot/i18n/locales/pt-BR.yaml index 02f0b480..443783de 100644 --- a/src/apps/chatwoot/i18n/locales/pt-BR.yaml +++ b/src/apps/chatwoot/i18n/locales/pt-BR.yaml @@ -578,6 +578,9 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Enfileira o trabalho de busca de mensagens em estado pausado, interrompendo o processamento de novos WhatsApp até finalizar. +cli.cmd.messages.pull.option.resolve-conversations: + Marca as conversas como resolvidas depois que todas as mensagens do histórico + forem processadas. cli.cmd.messages.pull.error.pause-no-queue: ⛔ Não é possível usar `--pause` porque o comando **queue** está desabilitado nesta configuração. @@ -634,21 +637,36 @@ task.messages.details: Envie "{{{prefix}}}messages status" para ver mais detalhes. task.messages.progress: '⏳ Mensagens {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Mensagens {{{chat}}} em {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Mensagens **{{{chat}}}** no período ⏱️ **{{{period}}}**: - - ⚙️ Estado do trabalho: **{{state}}** - {{#last}} - - 📅 Último processado: **{{{last}}}** - {{/last}} - - 💬 Criadas em: **{{{chats}}}** conversas - - 🆕 Criadas: **{{{progress.ok}}}** mensagens - - 🟢 Já existem: {{{progress.exists}}} mensagens - - ⚪ Ignoradas: {{{progress.ignored}}} mensagens - - 🔴 Erros: {{{progress.errors}}} mensagens + Mensagens **{{{chat}}}** no período ⏱️ **{{{period}}}**. ⚙️ Estado do trabalho: **{{state}}**. + + 🗨️ Mensagens: + - 🆕 Criadas: **{{{progress.ok}}}** + - 🟢 Já existem: {{{progress.exists}}} + - ⚪ Ignoradas: {{{progress.ignored}}} + - 🔴 Erros: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Mais antiga: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Mais recente: **{{{messages.last}}}** + {{/messages.last}} + + 💬 Conversas do WhatsApp: + - 🆕 Novas mensagens em **{{{chats}}}** conversas + {{#options.resolveConversations}} + + 🗣️ Conversas: + - 🟢 Resolvidas: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Erros: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Detalhes: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/ru-RU.yaml b/src/apps/chatwoot/i18n/locales/ru-RU.yaml index be495f18..871463fa 100644 --- a/src/apps/chatwoot/i18n/locales/ru-RU.yaml +++ b/src/apps/chatwoot/i18n/locales/ru-RU.yaml @@ -570,6 +570,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Поставить задачу загрузки сообщений в очередь на паузу и остановить обработку новых сообщений WhatsApp до завершения. +cli.cmd.messages.pull.option.resolve-conversations: + Отмечает беседы как завершённые после обработки всей истории сообщений. cli.cmd.messages.pull.error.pause-no-queue: ⛔ Невозможно использовать `--pause`, потому что команда **queue** отключена в этой конфигурации. @@ -626,21 +628,36 @@ task.messages.details: Отправьте "{{{prefix}}}messages status", чтобы увидеть подробности. task.messages.progress: '⏳ Сообщения {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Сообщения {{{chat}}} за {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Сообщения **{{{chat}}}** за период ⏱️ **{{{period}}}**: - - ⚙️ Статус задачи: **{{state}}** - {{#last}} - - 📅 Последняя обработка: **{{{last}}}** - {{/last}} - - 💬 Создано в: **{{{chats}}}** чатах - - 🆕 Создано: **{{{progress.ok}}}** сообщений - - 🟢 Уже есть: {{{progress.exists}}} сообщений - - ⚪ Пропущено: {{{progress.ignored}}} сообщений - - 🔴 Ошибки: {{{progress.errors}}} сообщений + Сообщения **{{{chat}}}** за период ⏱️ **{{{period}}}**. ⚙️ Статус задачи: **{{state}}**. + + 🗨️ Сообщения: + - 🆕 Создано: **{{{progress.ok}}}** + - 🟢 Уже есть: {{{progress.exists}}} + - ⚪ Пропущено: {{{progress.ignored}}} + - 🔴 Ошибки: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Самое раннее: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Самое позднее: **{{{messages.last}}}** + {{/messages.last}} + + 💬 Чаты WhatsApp: + - 🆕 Новые сообщения в **{{{chats}}}** чатах + {{#options.resolveConversations}} + + 🗣️ Беседы: + - 🟢 Закрыто: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Ошибки: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Подробности: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/tr-TR.yaml b/src/apps/chatwoot/i18n/locales/tr-TR.yaml index 0e5df5b0..57bf8e33 100644 --- a/src/apps/chatwoot/i18n/locales/tr-TR.yaml +++ b/src/apps/chatwoot/i18n/locales/tr-TR.yaml @@ -569,6 +569,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Mesaj çekme işini duraklatılmış olarak kuyruklar ve tamamlanana kadar yeni WhatsApp mesajlarının işlenmesini durdurur. +cli.cmd.messages.pull.option.resolve-conversations: + Tüm geçmiş mesajlar işlendiğinde konuşmaları çözüldü olarak işaretler. cli.cmd.messages.pull.error.pause-no-queue: ⛔ `--pause` kullanılamaz çünkü **queue** komutu bu yapılandırmada devre dışı. cli.cmd.queue.description: Kuyrukları yönetin. @@ -625,21 +627,36 @@ task.messages.details: Daha fazla ayrıntı için "{{{prefix}}}messages status" gönderin. task.messages.progress: '⏳ Mesajlar {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Mesajlar {{{chat}}} {{{period}}} içinde → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - **{{{chat}}}** sohbetinin mesajları ⏱️ **{{{period}}}** döneminde: - - ⚙️ İş durumu: **{{state}}** - {{#last}} - - 📅 Son işlenen: **{{{last}}}** - {{/last}} - - 💬 Şu sohbetlerde oluşturuldu: **{{{chats}}}** - - 🆕 Oluşturulan: **{{{progress.ok}}}** mesaj - - 🟢 Zaten mevcut: {{{progress.exists}}} mesaj - - ⚪ Yok sayılan: {{{progress.ignored}}} mesaj - - 🔴 Hatalar: {{{progress.errors}}} mesaj + **{{{chat}}}** sohbetinin mesajları ⏱️ **{{{period}}}** döneminde. ⚙️ İş durumu: **{{state}}**. + + 🗨️ Mesajlar: + - 🆕 Oluşturulan: **{{{progress.ok}}}** + - 🟢 Zaten mevcut: {{{progress.exists}}} + - ⚪ Yok sayılan: {{{progress.ignored}}} + - 🔴 Hatalar: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ En eski: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ En yeni: **{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp sohbetleri: + - 🆕 **{{{chats}}}** sohbette yeni mesajlar + {{#options.resolveConversations}} + + 🗣️ Konuşmalar: + - 🟢 Çözüldü: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Hatalar: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Detaylar: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/uk-UA.yaml b/src/apps/chatwoot/i18n/locales/uk-UA.yaml index e568710d..ca70b21e 100644 --- a/src/apps/chatwoot/i18n/locales/uk-UA.yaml +++ b/src/apps/chatwoot/i18n/locales/uk-UA.yaml @@ -570,6 +570,8 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: Поставити завдання отримання повідомлень у чергу на паузі й зупинити обробку нових WhatsApp до завершення. +cli.cmd.messages.pull.option.resolve-conversations: + Позначає розмови як завершені після обробки всієї історії повідомлень. cli.cmd.messages.pull.error.pause-no-queue: ⛔ Неможливо використати `--pause`, оскільки команда **queue** вимкнена для цієї конфігурації. @@ -625,21 +627,36 @@ task.messages.details: Надішліть "{{{prefix}}}messages status", щоб побачити деталі. task.messages.progress: '⏳ Повідомлення {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ Повідомлення {{{chat}}} за {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - Повідомлення **{{{chat}}}** у період ⏱️ **{{{period}}}**: - - ⚙️ Стан завдання: **{{state}}** - {{#last}} - - 📅 Остання обробка: **{{{last}}}** - {{/last}} - - 💬 Створено в: **{{{chats}}}** чатах - - 🆕 Створено: **{{{progress.ok}}}** повідомлень - - 🟢 Уже є: {{{progress.exists}}} повідомлень - - ⚪ Пропущено: {{{progress.ignored}}} повідомлень - - 🔴 Помилки: {{{progress.errors}}} повідомлень + Повідомлення **{{{chat}}}** у період ⏱️ **{{{period}}}**. ⚙️ Стан завдання: **{{state}}**. + + 🗨️ Повідомлення: + - 🆕 Створено: **{{{progress.ok}}}** + - 🟢 Уже є: {{{progress.exists}}} + - ⚪ Пропущено: {{{progress.ignored}}} + - 🔴 Помилки: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ Найраніше: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ Найпізніше: **{{{messages.last}}}** + {{/messages.last}} + + 💬 Чати WhatsApp: + - 🆕 Нові повідомлення в **{{{chats}}}** чатах + {{#options.resolveConversations}} + + 🗣️ Розмови: + - 🟢 Закрито: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 Помилки: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} Деталі: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/ur-PK.yaml b/src/apps/chatwoot/i18n/locales/ur-PK.yaml index 1d502cec..e388868d 100644 --- a/src/apps/chatwoot/i18n/locales/ur-PK.yaml +++ b/src/apps/chatwoot/i18n/locales/ur-PK.yaml @@ -569,6 +569,9 @@ cli.cmd.messages.pull.option.media: cli.cmd.messages.pull.option.pause: پیغامات کھینچنے کے کام کو معطل حالت میں قطار میں ڈالیں اور مکمل ہونے تک نئے WhatsApp پیغامات کی پروسیسنگ روک دیں۔ +cli.cmd.messages.pull.option.resolve-conversations: + تمام تاریخی پیغامات کے پراسیس ہونے کے بعد گفتگوؤں کو حل شدہ کے طور پر نشان زد + کرتا ہے۔ cli.cmd.messages.pull.error.pause-no-queue: ⛔ `--pause` استعمال نہیں کیا جا سکتا کیونکہ اس ترتیب میں **queue** کمانڈ غیر فعال ہے۔ @@ -622,21 +625,36 @@ task.messages.started: task.messages.details: مزید تفصیلات کے لیے "{{{prefix}}}messages status" بھیجیں۔ task.messages.progress: '⏳ پیغامات {{{chat}}}: 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ - {{progress.ignored}}, 🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}}' + {{progress.ignored}}, 🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}}' task.messages.completed: ✅ پیغامات {{{chat}}} میں {{{period}}} → 🆕 {{progress.ok}}, 🟢 {{progress.exists}}, ⚪ {{progress.ignored}}, 🔴 {{progress.errors}} task.messages.status: |- - **{{{chat}}}** کے پیغامات ⏱️ **{{{period}}}** کے دوران: - - ⚙️ کام کی حالت: **{{state}}** - {{#last}} - - 📅 آخری پراسیسنگ: **{{{last}}}** - {{/last}} - - 💬 بنائے گئے چیٹس: **{{{chats}}}** - - 🆕 بنے: **{{{progress.ok}}}** پیغامات - - 🟢 پہلے سے موجود: {{{progress.exists}}} پیغامات - - ⚪ نظر انداز: {{{progress.ignored}}} پیغامات - - 🔴 خامیاں: {{{progress.errors}}} پیغامات + **{{{chat}}}** کے پیغامات ⏱️ **{{{period}}}** کے دوران۔ ⚙️ کام کی حالت: **{{state}}**۔ + + 🗨️ پیغامات: + - 🆕 بنے: **{{{progress.ok}}}** + - 🟢 پہلے سے موجود: {{{progress.exists}}} + - ⚪ نظر انداز: {{{progress.ignored}}} + - 🔴 خامیاں: {{{progress.errors}}} + {{#messages.first}} + - 🗓️ قدیم ترین: **{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ تازہ ترین: **{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp چیٹس: + - 🆕 **{{{chats}}}** چیٹس میں نئے پیغامات + {{#options.resolveConversations}} + + 🗣️ گفتگوئیں: + - 🟢 حل شدہ: **{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 خامیاں: **{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} تفصیلات: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/apps/chatwoot/i18n/locales/zh-CN.yaml b/src/apps/chatwoot/i18n/locales/zh-CN.yaml index 2e0f41e8..e7d62462 100644 --- a/src/apps/chatwoot/i18n/locales/zh-CN.yaml +++ b/src/apps/chatwoot/i18n/locales/zh-CN.yaml @@ -560,6 +560,7 @@ cli.cmd.messages.pull.option.broadcast: 拉取历史时包含群发列表。 cli.cmd.messages.pull.option.media: 拉取历史时下载媒体附件(图片、视频、文件)。 cli.cmd.messages.pull.option.pause: 将拉取任务以暂停状态加入队列,并在完成前暂停新的 WhatsApp 消息处理。 +cli.cmd.messages.pull.option.resolve-conversations: 在处理完所有历史消息后将会话标记为已解决。 cli.cmd.messages.pull.error.pause-no-queue: ⛔ 无法使用 `--pause`,因为此配置中 **queue** 命令已禁用。 cli.cmd.queue.description: 管理队列。 @@ -602,21 +603,36 @@ task.messages.started: ⏳ 正在拉取消息 💬 {{{chat}}} ⏱️ {{{period}} task.messages.details: 发送 "{{{prefix}}}messages status" 查看更多详情。 task.messages.progress: ⏳ 消息 {{{chat}}}:🆕 {{progress.ok}},🟢 {{progress.exists}},⚪ - {{progress.ignored}},🔴 {{progress.errors}}{{#last}} | 📅 {{{last}}}{{/last}} + {{progress.ignored}},🔴 {{progress.errors}}{{#messages.last}} | 📅 + {{{messages.last}}}{{/messages.last}} task.messages.completed: ✅ 消息 {{{chat}}} 于 {{{period}}} → 🆕 {{progress.ok}},🟢 {{progress.exists}},⚪ {{progress.ignored}},🔴 {{progress.errors}} task.messages.status: |- - **{{{chat}}}** 的消息在 ⏱️ **{{{period}}}** 内: - - ⚙️ 任务状态:**{{state}}** - {{#last}} - - 📅 上次处理:**{{{last}}}** - {{/last}} - - 💬 创建于:**{{{chats}}}** 个会话 - - 🆕 新建:**{{{progress.ok}}}** 条消息 - - 🟢 已存在:{{{progress.exists}}} 条消息 - - ⚪ 忽略:{{{progress.ignored}}} 条消息 - - 🔴 错误:{{{progress.errors}}} 条消息 + **{{{chat}}}** 的消息在 ⏱️ **{{{period}}}** 内。⚙️ 任务状态:**{{state}}**。 + + 🗨️ 消息: + - 🆕 新建:**{{{progress.ok}}}** + - 🟢 已存在:{{{progress.exists}}} + - ⚪ 忽略:{{{progress.ignored}}} + - 🔴 错误:{{{progress.errors}}} + {{#messages.first}} + - 🗓️ 最早:**{{{messages.first}}}** + {{/messages.first}} + {{#messages.last}} + - 🗓️ 最新:**{{{messages.last}}}** + {{/messages.last}} + + 💬 WhatsApp 会话: + - 🆕 **{{{chats}}}** 个会话出现新消息 + {{#options.resolveConversations}} + + 🗣️ 会话: + - 🟢 已解决:**{{{progress.conversationResolve.success}}}** + {{#progress.conversationResolve.error}} + - 🔴 错误:**{{{progress.conversationResolve.error}}}** + {{/progress.conversationResolve.error}} + {{/options.resolveConversations}} 详情: [{{{details.text}}}]({{{details.url}}}) diff --git a/src/utils/list.ts b/src/utils/list.ts new file mode 100644 index 00000000..c608973a --- /dev/null +++ b/src/utils/list.ts @@ -0,0 +1,5 @@ +export function addUnique(list: T[], item: T): void { + if (!list.includes(item)) { + list.push(item); + } +}