Atualizações de integração e opções de configuração

This commit is contained in:
Gabriel Pastori 2024-03-20 18:31:44 -03:00
parent d4b344d2c1
commit a34aeea649
5 changed files with 95 additions and 53 deletions

View File

@ -85,18 +85,18 @@
]" ]"
/> />
</div> </div>
<div class="flex-grow-1"> <div class="flex-grow-1">
<v-text-field <v-text-field
v-model.number="chatwootData.days_limit_import_messages" v-model.number="chatwootData.days_limit_import_messages"
:label="$t('chatwoot.dayslimitimportmessages')" :label="$t('chatwoot.dayslimitimportmessages')"
:disabled="loading" :disabled="loading"
outlined outlined
dense dense
hide-details="auto" hide-details="auto"
class="mb-3" class="mb-3"
/> />
</div>
</div> </div>
</div>
<div class="d-flex align-center gap-4 flex-wrap"> <div class="d-flex align-center gap-4 flex-wrap">
<v-checkbox <v-checkbox
class="flex-grow-0 flex-shrink-0" class="flex-grow-0 flex-shrink-0"
@ -113,7 +113,11 @@
<v-text-field <v-text-field
class="flex-grow-1 flex-shrink-0" class="flex-grow-1 flex-shrink-0"
v-model="chatwootData.sign_delimiter" v-model="chatwootData.sign_delimiter"
:disabled="loading || !chatwootData.sign_msg || !AppStore.versionSatisfies('>=1.6.1')" :disabled="
loading ||
!chatwootData.sign_msg ||
!AppStore.versionSatisfies('>=1.6.1')
"
:label="$t('chatwoot.signDelimiter')" :label="$t('chatwoot.signDelimiter')"
:hint=" :hint="
!AppStore.versionSatisfies('>=1.6.0') !AppStore.versionSatisfies('>=1.6.0')
@ -164,10 +168,16 @@
<div> <div>
<v-checkbox <v-checkbox
v-model="chatwootData.import_contacts" v-model="chatwootData.import_contacts"
:disabled="loading" hide-details="auto"
hide-details
class="mb-3" class="mb-3"
density="compact" density="compact"
:disabled="loading || !AppStore.versionSatisfies('>=1.7.0')"
:hint="
!AppStore.versionSatisfies('>=1.7.0')
? $t('version.availableFrom', { version: '1.7.0' })
: undefined
"
:persistent-hint="!AppStore.versionSatisfies('>=1.7.0')"
> >
<template v-slot:label> <template v-slot:label>
<span>{{ $t("chatwoot.importcontacts") }}</span> <span>{{ $t("chatwoot.importcontacts") }}</span>
@ -181,10 +191,16 @@
<div> <div>
<v-checkbox <v-checkbox
v-model="chatwootData.import_messages" v-model="chatwootData.import_messages"
:disabled="loading" hide-details="auto"
hide-details
class="mb-3" class="mb-3"
density="compact" density="compact"
:disabled="loading || !AppStore.versionSatisfies('>=1.7.0')"
:hint="
!AppStore.versionSatisfies('>=1.7.0')
? $t('version.availableFrom', { version: '1.7.0' })
: undefined
"
:persistent-hint="!AppStore.versionSatisfies('>=1.7.0')"
> >
<template v-slot:label> <template v-slot:label>
<span>{{ $t("chatwoot.importmessages") }}</span> <span>{{ $t("chatwoot.importmessages") }}</span>
@ -227,7 +243,7 @@
hide-details hide-details
></v-switch> ></v-switch>
<v-btn variant="text" @click="chatwootConfig" size="small"> <v-btn variant="text" @click="chatwootConfig" size="small">
{{ $t("chatwoot.config.btn") }} {{ $t("chatwoot.config.btn") }}
</v-btn> </v-btn>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn <v-btn

View File

@ -84,10 +84,16 @@
<v-checkbox <v-checkbox
class="flex-grow-0" class="flex-grow-0"
v-model="optionsData.sync_full_history" v-model="optionsData.sync_full_history"
:disabled="loading"
:label="$t('options.syncfullhistory')" :label="$t('options.syncfullhistory')"
hide-details hide-details="auto"
density="compact" density="compact"
:disabled="loading || !AppStore.versionSatisfies('>=1.7.0')"
:hint="
!AppStore.versionSatisfies('>=1.7.0')
? $t('version.availableFrom', { version: '1.7.0' })
: undefined
"
:persistent-hint="!AppStore.versionSatisfies('>=1.7.0')"
></v-checkbox> ></v-checkbox>
</div> </div>
</v-form> </v-form>
@ -112,6 +118,7 @@
<script> <script>
import instanceController from "@/services/instanceController"; import instanceController from "@/services/instanceController";
import { useAppStore } from "@/store/app";
const defaultOptions = () => ({ const defaultOptions = () => ({
reject_call: false, reject_call: false,
@ -132,6 +139,7 @@ export default {
}, },
}, },
data: () => ({ data: () => ({
AppStore: useAppStore(),
expanded: false, expanded: false,
loading: false, loading: false,
error: false, error: false,

View File

@ -20,7 +20,8 @@
<v-dialog v-model="dialog" max-width="350px" :persistent="loading"> <v-dialog v-model="dialog" max-width="350px" :persistent="loading">
<v-card :loading="loading && qrCode"> <v-card :loading="loading && qrCode">
<v-card-text class="pt-6"> <v-card-text class="pt-6">
<v-btn-toggle v-model="connectType" class="d-flex mb-4" color="primary"> <!-- Not finished -->
<!-- <v-btn-toggle v-model="connectType" class="d-flex mb-4" color="primary">
<v-btn text value="qr" class="flex-grow-1"> <v-btn text value="qr" class="flex-grow-1">
<v-icon start>mdi-qrcode-scan</v-icon> <v-icon start>mdi-qrcode-scan</v-icon>
{{ $t("connectPhone.qr") }} {{ $t("connectPhone.qr") }}
@ -29,7 +30,7 @@
<v-icon start>mdi-key</v-icon> <v-icon start>mdi-key</v-icon>
{{ $t("connectPhone.code") }} {{ $t("connectPhone.code") }}
</v-btn> </v-btn>
</v-btn-toggle> </v-btn-toggle> -->
<template v-if="connectType == 'qr'"> <template v-if="connectType == 'qr'">
<v-img v-if="qrCode" :src="qrCode" width="300px" height="300px" /> <v-img v-if="qrCode" :src="qrCode" width="300px" height="300px" />
<v-card <v-card

View File

@ -18,8 +18,9 @@
]" ]"
/> />
<v-select <v-select
v-if="AppStore.versionSatisfies('>=1.7.0')"
v-model="instance.integration" v-model="instance.integration"
:items="['WHATSAPP-BAILEYS', 'WHATSAPP-BUSINESS']" :items="integrationItens"
:label="$t('createInstance.integration')" :label="$t('createInstance.integration')"
required required
outlined outlined
@ -89,6 +90,10 @@ export default {
data: () => ({ data: () => ({
dialog: false, dialog: false,
valid: false, valid: false,
integrationItens: [
{ title: "Cloud API (Meta)", value: "WHATSAPP-BUSINESS" },
{ title: "Baileys", value: "WHATSAPP-BAILEYS" },
],
instance: { instance: {
instanceName: "", instanceName: "",
token: "", token: "",

View File

@ -1,5 +1,5 @@
// src/i18n/pt.js // src/i18n/pt.js
import { pt } from 'vuetify/locale' import { pt } from "vuetify/locale";
export default { export default {
$vuetify: { ...pt }, $vuetify: { ...pt },
@ -19,7 +19,7 @@ export default {
noInstances: "Nenhuma instância encontrada", noInstances: "Nenhuma instância encontrada",
unknown: "Desconhecido", unknown: "Desconhecido",
required: "{field} é obrigatório", required: "{field} é obrigatório",
maxLength: "{field} deve ter no máximo {length} caracteres", maxLength: "{field} deve ter no máximo {length} caracteres",
https: "{field} deve começar com https://", https: "{field} deve começar com https://",
httpHttps: "{field} deve começar com http:// ou https://", httpHttps: "{field} deve começar com http:// ou https://",
enabled: "Habilitado", enabled: "Habilitado",
@ -39,19 +39,23 @@ export default {
}, },
about: { about: {
title: "Sobre", title: "Sobre",
description: "O Evolution Manager facilita a gestão de suas APIs com uma interface intuitiva. Ele foi criado por desenvolvedores independentes, focando em melhorar a experiência do usuário e a administração das funcionalidades da API.", description:
"O Evolution Manager facilita a gestão de suas APIs com uma interface intuitiva. Ele foi criado por desenvolvedores independentes, focando em melhorar a experiência do usuário e a administração das funcionalidades da API.",
contribute: "Contribua com o projeto", contribute: "Contribua com o projeto",
dataProcess: { dataProcess: {
title: "Processamento de dados", title: "Processamento de dados",
description: "O processamento e armazenamento de dados ocorre <b>localmente</b> no seu navegador, sem uso de um backend centralizado. Isso reforça a segurança e privacidade, mantendo suas informações confidenciais e protegidas.", description:
https: "Por conta de todo o processamento ser realizado no navegador, é necessário que o servidor da Evolution API seja acessado através de uma conexão segura (HTTPS)." "O processamento e armazenamento de dados ocorre <b>localmente</b> no seu navegador, sem uso de um backend centralizado. Isso reforça a segurança e privacidade, mantendo suas informações confidenciais e protegidas.",
https:
"Por conta de todo o processamento ser realizado no navegador, é necessário que o servidor da Evolution API seja acessado através de uma conexão segura (HTTPS).",
}, },
version: "Versão", version: "Versão",
}, },
createInstance: { createInstance: {
title: "Criar instância", title: "Criar instância",
name: "Nome da instância", name: "Nome da instância",
configInfo: "O WebHook, WebSocket, RabbitMQ, Chatwoot e Typebot poderão ser configurados após a criação da instância.", configInfo:
"O WebHook, WebSocket, RabbitMQ, Chatwoot e Typebot poderão ser configurados após a criação da instância.",
integration: "Integração", integration: "Integração",
number: "Identificador de número de telefone", number: "Identificador de número de telefone",
}, },
@ -72,7 +76,8 @@ export default {
}, },
connectPhone: { connectPhone: {
title: "Telefone não conectado", title: "Telefone não conectado",
apiGenericError: "Não foi possível carregar o QR Code, se o erro persistir, reinicie a API e tente novamente.", apiGenericError:
"Não foi possível carregar o QR Code, se o erro persistir, reinicie a API e tente novamente.",
qr: "QR Code", qr: "QR Code",
code: "Código", code: "Código",
}, },
@ -84,14 +89,15 @@ export default {
alwaysOnline: "Sempre online", alwaysOnline: "Sempre online",
readMessages: "Marcar mensagens como lidas", readMessages: "Marcar mensagens como lidas",
readStatus: "Marcar status como visto", readStatus: "Marcar status como visto",
syncfullhistory: "Sincronizar el historial completo", syncfullhistory: "Sinconizar histórico completo",
}, },
webhook: { webhook: {
byEvents: "Webhook por eventos", byEvents: "Webhook por eventos",
byEventsHelp: "Adiciona o nome do evento no final da URL (ex: /webhook/event_name )", byEventsHelp:
"Adiciona o nome do evento no final da URL (ex: /webhook/event_name )",
}, },
rabbitmq: { rabbitmq: {
info: "O RabbitMQ é utilizado pela API para o enfileiramento das notificações. Ele NÃO é utilizado para o envio de mensagens." info: "O RabbitMQ é utilizado pela API para o enfileiramento das notificações. Ele NÃO é utilizado para o envio de mensagens.",
}, },
chatwoot: { chatwoot: {
account_id: "ID da conta", account_id: "ID da conta",
@ -100,29 +106,33 @@ export default {
signMsg: "Assinar mensagens", signMsg: "Assinar mensagens",
signMsgHelp: "Adiciona o nome do atendente na primeira linha da mensagem", signMsgHelp: "Adiciona o nome do atendente na primeira linha da mensagem",
signDelimiter: "Separador da assinatura da mensagem", signDelimiter: "Separador da assinatura da mensagem",
signDelimiterHelp: "Delimitador utilizado para separar a assinatura da mensagem (\\n para quebra de linha)", signDelimiterHelp:
"Delimitador utilizado para separar a assinatura da mensagem (\\n para quebra de linha)",
reopenConversation: "Reabrir conversa", reopenConversation: "Reabrir conversa",
reopenConversationHelp: "Reabre a conversa do cliente quando ele inicia uma nova conversa em vez de criar uma nova conversa", reopenConversationHelp:
"Reabre a conversa do cliente quando ele inicia uma nova conversa em vez de criar uma nova conversa",
conversationPending: "Iniciar conversa como pendente", conversationPending: "Iniciar conversa como pendente",
conversationPendingHelp: "Inicia a conversa como pendente ao invés de aberta", conversationPendingHelp:
"Inicia a conversa como pendente ao invés de aberta",
autoCreate: "Criar Caixa de Entrada", autoCreate: "Criar Caixa de Entrada",
autoCreateHelp: "Cria a caixa de entrada no Chatwoot caso ela não exista", autoCreateHelp: "Cria a caixa de entrada no Chatwoot caso ela não exista",
importcontacts: "Importar contatos", importcontacts: "Importar contatos",
importcontactsHelp: "Importar contatos para o Chatwoot", importcontactsHelp: "Importar contatos para o Chatwoot",
importmessages: "Importar mensagens", importmessages: "Importar mensagens",
importmessagesHelp: "Importar mensagens do histórico de mensagens para o Chatwoot", importmessagesHelp:
"Importar mensagens do histórico de mensagens para o Chatwoot",
config: { config: {
btn: "Como configurar o chatwoot?", btn: "Como configurar o chatwoot?",
title: "Como configurar a caixa de entrada do Chatwoot?", title: "Como configurar a caixa de entrada do Chatwoot?",
fullDoc: "Ver documentação completa", fullDoc: "Ver documentação completa",
steps: { steps: {
"1": "Acesse as configurações > Caixa de Entrada e \"Adicionar Caixa\"", 1: 'Acesse as configurações > Caixa de Entrada e "Adicionar Caixa"',
"2": "Selecione \"API\" como tipo de caixa", 2: 'Selecione "API" como tipo de caixa',
"3": "Preencha nome da caixa e webhook. Os valores devem ser exatamente os seguintes:", 3: "Preencha nome da caixa e webhook. Os valores devem ser exatamente os seguintes:",
"4": "Adicione os agentes à caixa de entrada.", 4: "Adicione os agentes à caixa de entrada.",
"5": "Pronto! Agora você pode receber mensagens.", 5: "Pronto! Agora você pode receber mensagens.",
} },
} },
}, },
typebot: { typebot: {
typebot: "Nome do fluxo do Typebot", typebot: "Nome do fluxo do Typebot",
@ -135,10 +145,12 @@ export default {
delayMessageUnit: "em milisegundos", delayMessageUnit: "em milisegundos",
delayMessageHelp: "Tempo de simulação de digitação", delayMessageHelp: "Tempo de simulação de digitação",
unknownMessage: "Mensagem formato desconhecido", unknownMessage: "Mensagem formato desconhecido",
unknownMessageHelp: "Mensagem enviada quando o formato da mensagem não é reconhecido", unknownMessageHelp:
"Mensagem enviada quando o formato da mensagem não é reconhecido",
unknownMessagePlaceholder: "Deixe em branco para não enviar mensagem", unknownMessagePlaceholder: "Deixe em branco para não enviar mensagem",
listeningFromMe: "Ouvir mensagens enviadas por mim", listeningFromMe: "Ouvir mensagens enviadas por mim",
listeningFromMeHelp: "Envia as mensagens enviadas por você para o fluxo do Typebot", listeningFromMeHelp:
"Envia as mensagens enviadas por você para o fluxo do Typebot",
session: { session: {
title: "Sessões do Typebot", title: "Sessões do Typebot",
btn: "Ver 0 sessões | Ver uma sessão | Ver {count} sessões", btn: "Ver 0 sessões | Ver uma sessão | Ver {count} sessões",
@ -147,13 +159,13 @@ export default {
variables: "Variáveis", variables: "Variáveis",
createdAt: "Iniciada em", createdAt: "Iniciada em",
updatedAt: "Última mensagem", updatedAt: "Última mensagem",
} },
}, },
status: { status: {
opened: "Aberto", opened: "Aberto",
paused: "Pausado", paused: "Pausado",
closed: "Fechado", closed: "Fechado",
} },
}, },
sendMessage: { sendMessage: {
title: "Enviar mensagem", title: "Enviar mensagem",
@ -179,16 +191,16 @@ export default {
}, },
groups: { groups: {
title: "Meus grupos", title: "Meus grupos",
headers: { creation: "Criado em", } headers: { creation: "Criado em" },
}, },
chats: { chats: {
title: "Minhas conversas", title: "Minhas conversas",
headers: { lastMsgTimestamp: "Última mensagem", } headers: { lastMsgTimestamp: "Última mensagem" },
}, },
profile: { profile: {
title: "Nome e Recado", title: "Nome e Recado",
name: "Name", name: "Name",
status: "Recado (status)" status: "Recado (status)",
}, },
profilePicture: { profilePicture: {
title: "Foto de perfil", title: "Foto de perfil",
@ -210,6 +222,6 @@ export default {
contactBlacklist: "Meus contatos, exceto os da lista negra", contactBlacklist: "Meus contatos, exceto os da lista negra",
matchLastSeen: "Igual ao visto por último", matchLastSeen: "Igual ao visto por último",
none: "Ninguém", none: "Ninguém",
} },
} },
} };