diff --git a/mail_gateway/README.rst b/mail_gateway/README.rst index 72f951211..094db0e34 100644 --- a/mail_gateway/README.rst +++ b/mail_gateway/README.rst @@ -53,6 +53,8 @@ Configuration - Go to ``Settings / Technical / Email / Gateway`` - Create a gateway. Follow the instruction of the specific tab in order to integrate it. +- The Webhook User processes the incoming messages. Keep the default + user (OdooBot) or choose a user of the ``Gateway / User`` group. - Start receiving notifications Usage diff --git a/mail_gateway/controllers/gateway.py b/mail_gateway/controllers/gateway.py index a7acd954c..8e7909176 100644 --- a/mail_gateway/controllers/gateway.py +++ b/mail_gateway/controllers/gateway.py @@ -34,9 +34,11 @@ def post_update(self, usage, token, *args, **kwargs): ("Content-Type", "application/json"), ], ) + # Use update_env and not with_user: the ORM checks some accesses + # with the transaction user (e.g. res.partner forbids sudo commands) + request.update_env(user=bot_data["webhook_user_id"]) return ( request.env[f"mail.gateway.{usage}"] - .with_user(bot_data["webhook_user_id"]) .with_company(bot_data["company_id"]) ._receive_get_update(bot_data, request, **kwargs) ) @@ -61,10 +63,9 @@ def post_update(self, usage, token, *args, **kwargs): or "utf-8" ) jsonrequest = json.loads(request.httprequest.get_data().decode(charset)) - dispatcher = ( - request.env[f"mail.gateway.{usage}"] - .with_user(bot_data["webhook_user_id"]) - .with_context(no_gateway_notification=True) + request.update_env(user=bot_data["webhook_user_id"]) + dispatcher = request.env[f"mail.gateway.{usage}"].with_context( + no_gateway_notification=True ) if not dispatcher._verify_update(bot_data, jsonrequest): _logger.warning( diff --git a/mail_gateway/models/mail_gateway.py b/mail_gateway/models/mail_gateway.py index 58e3f307a..453268f90 100644 --- a/mail_gateway/models/mail_gateway.py +++ b/mail_gateway/models/mail_gateway.py @@ -26,7 +26,10 @@ class MailGateway(models.Model): webhook_user_id = fields.Many2one( "res.users", default=lambda self: self.env.ref("base.user_root"), - help="User that will create the messages", + domain=lambda self: [ + ("all_group_ids", "in", self.env.ref("mail_gateway.gateway_user").ids) + ], + help="User that will create the messages. It must be a gateway user.", ) member_ids = fields.Many2many("res.users") company_id = fields.Many2one( diff --git a/mail_gateway/readme/CONFIGURE.md b/mail_gateway/readme/CONFIGURE.md index e3bd3066d..da8e374b6 100644 --- a/mail_gateway/readme/CONFIGURE.md +++ b/mail_gateway/readme/CONFIGURE.md @@ -2,4 +2,6 @@ - Go to `Settings / Technical / Email / Gateway` - Create a gateway. Follow the instruction of the specific tab in order to integrate it. +- The Webhook User processes the incoming messages. Keep the default + user (OdooBot) or choose a user of the `Gateway / User` group. - Start receiving notifications diff --git a/mail_gateway/static/description/index.html b/mail_gateway/static/description/index.html index e660582ca..8aef89dd1 100644 --- a/mail_gateway/static/description/index.html +++ b/mail_gateway/static/description/index.html @@ -405,6 +405,8 @@

Configuration

  • Go to Settings / Technical / Email / Gateway
  • Create a gateway. Follow the instruction of the specific tab in order to integrate it.
  • +
  • The Webhook User processes the incoming messages. Keep the default +user (OdooBot) or choose a user of the Gateway / User group.
  • Start receiving notifications
  • diff --git a/mail_gateway_whatsapp/README.rst b/mail_gateway_whatsapp/README.rst new file mode 100644 index 000000000..49d55d520 --- /dev/null +++ b/mail_gateway_whatsapp/README.rst @@ -0,0 +1,159 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +===================== +Mail Whatsapp Gateway +===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:bab45b25e75f6aa13fc1517b883ac07ff3195d4b05611041681af9f9f1a6ad11 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmail-lightgray.png?logo=github + :target: https://github.com/OCA/mail/tree/19.0/mail_gateway_whatsapp + :alt: OCA/mail +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/mail-19-0/mail-19-0-mail_gateway_whatsapp + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/mail&target_branch=19.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to respond whatsapp chats. + +This way, a group of users can respond customers or any other set of +partners in an integrated way. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +First steps +----------- + +You need to create a WhatsApp Business Account (WABA), a Meta App and +define a phone number. You can follow this +`steps `__. + +If you create a test Business Account, passwords will change every 24 +hours. + +In order to make the webhook accessible, the system must be public. + +Configure the gateway +--------------------- + +Once you have created the Meta App, you need to add the gateway and +webhook. In order to make it you must follow this steps: + +- Access Settings > Emails > Mail Gateway +- Create a Gateway of type WhatsApp + +.. + + - Use the Meta App authentication key as Token field + - Use the Meta App Phone Number ID as Whatsapp from Phone field + - Use the Meta Account Business ID as Whatsapp account field (only if + you need sync templates) + - Write your own Webhook key + - Use the Application Secret Key on Whatsapp Security Key. It will be + used in order to validate the data + - Press the Integrate Webhook Key. In this case, it will not + integrate it, we need to make it manually + - Copy the webhook URL + +- Access `Facebook Apps + website `__ +- Access your App then Whatsapp > Configuration +- Create your webhook using your URL and put the Whatsapp Security Key + as validation Key +- Administer the Webhook and activate the messages webhook + +Usage +===== + +1. Access Gateway +2. Wait until someone starts a conversation. +3. Now you will be able to respond and receive messages to this person. + +The delivery status reported by WhatsApp (sent, delivered or read) is +shown in the message notification popover. Failed messages are marked as +errors with the reason returned by WhatsApp. + +Known issues / Roadmap +====================== + +**WhatsApp templates** + +- Add support for Variables +- Add support for Buttons + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Creu Blanca +* Dixmit + +Contributors +------------ + +- Olga Marco + +- Enric Tobella + +- `Tecnativa `__: + + - Carlos Lopez + +Other credits +------------- + +This work has been funded by AEOdoo (Asociación Española de Odoo - +https://www.aeodoo.org) + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/mail `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_gateway_whatsapp/__init__.py b/mail_gateway_whatsapp/__init__.py new file mode 100644 index 000000000..8f73a7901 --- /dev/null +++ b/mail_gateway_whatsapp/__init__.py @@ -0,0 +1,5 @@ +from . import models +from . import tools + +# from . import services +from . import wizards diff --git a/mail_gateway_whatsapp/__manifest__.py b/mail_gateway_whatsapp/__manifest__.py new file mode 100644 index 000000000..7f2c6b8a7 --- /dev/null +++ b/mail_gateway_whatsapp/__manifest__.py @@ -0,0 +1,28 @@ +# Copyright 2022 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Mail Whatsapp Gateway", + "summary": "Set a gateway for WhatsApp", + "version": "19.0.1.0.0", + "license": "AGPL-3", + "author": "Creu Blanca, Dixmit, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/mail", + "depends": ["mail_gateway", "phone_validation"], + "external_dependencies": {"python": ["requests_toolbelt"]}, + "data": [ + "security/security.xml", + "security/ir.model.access.csv", + "views/ir_actions_server_views.xml", + "wizards/whatsapp_composer.xml", + "wizards/mail_compose_gateway_message.xml", + "views/mail_whatsapp_template_views.xml", + "views/mail_gateway.xml", + ], + "assets": { + "web.assets_backend": [ + "mail_gateway_whatsapp/static/src/components/**/*", + "mail_gateway_whatsapp/static/src/models/**/*", + ], + }, +} diff --git a/mail_gateway_whatsapp/i18n/es.po b/mail_gateway_whatsapp/i18n/es.po new file mode 100644 index 000000000..4e82c8956 --- /dev/null +++ b/mail_gateway_whatsapp/i18n/es.po @@ -0,0 +1,1539 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_gateway_whatsapp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-05-07 19:36+0000\n" +"Last-Translator: Ed-Spain \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Define the values of the fields Webhook Key and Whatsapp Security Key.\n" +" You should set some random value of your choice for this fields.\n" +" Ensure that facebook will be able to comunicate with your server." +msgstr "" +"Escriba los valores en los campo Clave Webhook y Clave de seguridad de Whatsapp\n" +" Deberá poner los valores de su elección en estos campos.\n" +" Asegúrese de que Facebook podrá contactar con su servidor." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 1 Call Number button is allowed." +msgstr "Se permite un máximo de 1 botón de Llamar al Número." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 10 buttons is allowed." +msgstr "Se permite un máximo de 10 botones." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 2 URL buttons is allowed." +msgstr "Se permite un máximo de 2 botones de URL." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access" +msgstr "Acceda" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Advanced Options." +msgstr "Acceda al menú Configuración / Opciones Avanzadas." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Basic information." +msgstr "Acceda al menú Configuración / Información básica." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your" +msgstr "Accede a su" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your business settings menu" +msgstr "Acceda a su menú de ajustes" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "Action Needed" +msgstr "Acción requerida" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Add a new number." +msgstr "Añada un número nuevo." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__af +msgid "Afrikaans" +msgstr "Afrikaans" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sq +msgid "Albanian" +msgstr "Albanés" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "All dynamic urls must have a placeholder." +msgstr "Todas las URL dinámicas deben tener un marcador de posición." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model_id +msgid "Applies to" +msgstr "Se aplica a" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__approved +msgid "Approved" +msgstr "Aprobado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ar +msgid "Arabic" +msgstr "Árabe" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__archived +msgid "Archived" +msgstr "Archivado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_attachment_count +msgid "Attachment Count" +msgstr "Recuento de archivos adjuntos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__authentication +msgid "Authentication" +msgstr "Autenticación" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__az +msgid "Azerbaijani" +msgstr "Azerbaiyano" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Back to draft" +msgstr "Volver a borrador" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bn +msgid "Bengali" +msgstr "Bengalí" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "Blacklisted Phone is Phone" +msgstr "El teléfono de la lista negra en un teléfono" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__body +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__body +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Body" +msgstr "Cuerpo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/wizards/whatsapp_composer.py:0 +msgid "Body is required" +msgstr "El cuerpo es requerido" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Body variables should start at 1 and not skip any number, missing %d" +msgstr "" +"Las variables del cuerpo deben comenzar en 1 y no omitir ningún número, " +"falta %d" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bg +msgid "Bulgarian" +msgstr "Búlgaro" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__button_id +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__button +msgid "Button" +msgstr "Botón" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__name +msgid "Button Text" +msgstr "Texto del botón" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_button_unique_name_per_template +msgid "Button name must be unique by template" +msgstr "El nombre del botón debe ser único por plantilla" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__button_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Buttons" +msgstr "Botones" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Buttons may only contain one placeholder." +msgstr "Los botones solo pueden contener un marcador de posición." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__call_number +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__phone_number +msgid "Call Number" +msgstr "Llamar al Número" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ca +msgid "Catalan" +msgstr "Catalán" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__category +msgid "Category" +msgstr "Categoría" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_cn +msgid "Chinese (CHN)" +msgstr "Chino (CHN)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_hk +msgid "Chinese (HKG)" +msgstr "Chino (HKG)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_tw +msgid "Chinese (TAI)" +msgstr "Chino (TAI)" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Click on Edit Button on the webhook area." +msgstr "Pulsa en Editaren el área del webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__company_id +msgid "Company" +msgstr "Empresa" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_whatsapp_composer +msgid "Compose a whatsapp message" +msgstr "Redacte un mensaje de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the API Version on the Whastapp Version field." +msgstr "Copia la versión de la API en el campoVersión de Whatsapp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Copy the phone identification number to the field Whastapp From phone" +" field." +msgstr "" +"Copie el identificador del número de teléfono en el campo Whatsapp desde " +"el teléfono." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the token value to token field in this page." +msgstr "Copie el valor del token en el campo \"token\" de esta página." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Create a new application." +msgstr "Cree una nueva aplicación." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating a permanent token" +msgstr "Creando un token permanente" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating the Application from meta developer" +msgstr "Creando la aplicación desde el desarrollador de meta" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hr +msgid "Croatian" +msgstr "Croata" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__cs +msgid "Czech" +msgstr "Checo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__da +msgid "Danish" +msgstr "Danés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__deleted +msgid "Deleted" +msgstr "Eliminado" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__delivered +msgid "Delivered" +msgstr "Entregado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__disabled +msgid "Disabled" +msgstr "Deshabilitado" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_discuss_channel +msgid "Discussion Channel" +msgstr "Canal de conversaciones" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__display_name +msgid "Display Name" +msgstr "Mostrar nombre" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_id +msgid "Document ID" +msgstr "ID (Identificación)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_model +msgid "Document Model Name" +msgstr "Nombre del Documento del Modelo" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Download Templates" +msgstr "Descargar Plantillas" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__draft +msgid "Draft" +msgstr "Borrador" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_unique_name_gateway_id +msgid "Duplicate name is not allowed for Gateway." +msgstr "No se permite el nombre duplicado para Gateway." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nl +msgid "Dutch" +msgstr "Neerlandés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__dynamic +msgid "Dynamic" +msgstr "Dinámico" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_thread +msgid "Email Thread" +msgstr "Correo electrónico" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en +msgid "English" +msgstr "Inglés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_gb +msgid "English (UK)" +msgstr "Inglés (UK)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_us +msgid "English (US)" +msgstr "Inglés (US)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__et +msgid "Estonian" +msgstr "Estonio" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Export Template" +msgstr "Exportar Plantilla" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__field_name +msgid "Field" +msgstr "Campo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Field template variables %(variables)s must be associated with a field." +msgstr "" +"Las variables de plantilla de campo %(variables)s deben estar asociadas con " +"un campo." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "" +"Field used to store sanitized phone number. Helps speeding up searches and " +"comparisons." +msgstr "" +"Campo utilizado para almacenar el número de teléfono saneado. Ayuda a " +"acelerar las búsquedas y las comparaciones." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fil +msgid "Filipino" +msgstr "Filipino" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__find_gateway +msgid "Find Gateway" +msgstr "Buscar Gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fi +msgid "Finnish" +msgstr "Finés" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "First steps" +msgstr "Primeros pasos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (Partners)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__footer +msgid "Footer" +msgstr "Pie de página" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fr +msgid "French" +msgstr "Francés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__gateway_id +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Gateway" +msgstr "Gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__gateway_type +msgid "Gateway Type" +msgstr "Tipo de Gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ka +msgid "Georgian" +msgstr "Georgiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__de +msgid "German" +msgstr "Alemán" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Go to Users / System Users and create a new one with administrator" +msgstr "" +"Vaya a Usuarios / Usuarios del sistema y cree uno nuevo como " +"administrador" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Go to Whatsapp / API Configuration menú." +msgstr "Vaya a Whatsapp / Configuración API." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__el +msgid "Greek" +msgstr "Griego" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__gu +msgid "Gujarati" +msgstr "Gujarati" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__has_message +msgid "Has Message" +msgstr "Tiene mensajes" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ha +msgid "Hausa" +msgstr "Hausa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__header +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__header +msgid "Header" +msgstr "Encabezado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__he +msgid "Hebrew" +msgstr "Hebreo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hi +msgid "Hindi" +msgstr "Hindi" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hu +msgid "Hungarian" +msgstr "Húngaro" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__id +msgid "ID" +msgstr "ID" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Si está marcado, nuevos mensajes requieren su atención." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si está marcado, algunos mensajes tienen un error de envío." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"If no error is raised, refresh this gateway data, and you should see that it is integrated.\n" +" You should be able to receive and send messages.\n" +" If an error is raised, check that the fields are filled properly and that facebook server is able to access your server." +msgstr "" +"Si no se produce ningún error, actualice los datos del Gateway y verá que está integrada. \n" +" Deberías poder enviar y recibir mensajes\n" +" Si se produce un error, compruebe que los campos se han rellenado correctamente y que el servidor de facebook puede acceder a su servidor." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "" +"If the sanitized phone number is on the blacklist, the contact won't receive" +" mass mailing sms anymore, from any list" +msgstr "" +"Si el número de teléfono saneado está en la blacklist, el contacto no " +"recibirá el envío masivo de sms nunca mñas, de ninguna lista" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__in_appeal +msgid "In Appeal" +msgstr "En Apelación" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "" +"Indicates if a blacklisted sanitized phone number is a phone number. Helps " +"distinguish which number is blacklisted when there is both a " +"mobile and phone field in a model." +msgstr "" +"Indica si un teléfono saneado es un número de teléfono. Ayuda a diferenciar " +"que número de teléfono está en una lista negra cuando hay tanto un número de" +" teléfono como de móvil." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__id +msgid "Indonesian" +msgstr "Indonesio" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Insert here the Jinja expression to get the partner ID" +msgstr "Inserte aquí la expresión Jinja para obtener el ID del socio" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ga +msgid "Irish" +msgstr "Irlandés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_is_follower +msgid "Is Follower" +msgstr "Es seguidor" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__is_required_template +msgid "Is Required Template" +msgstr "Es Plantilla Requerida" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__is_supported +msgid "Is Supported" +msgstr "Es Compatible" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__it +msgid "Italian" +msgstr "Italiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ja +msgid "Japanese" +msgstr "Japonés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kn +msgid "Kannada" +msgstr "Kannada" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kk +msgid "Kazakh" +msgstr "Kazajo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__rw_rw +msgid "Kinyarwanda" +msgstr "Kinyarwanda" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ko +msgid "Korean" +msgstr "Coreano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ky_kg +msgid "Kyrgyz (Kyrgyzstan)" +msgstr "Kirguís (Kirguistán)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__language +msgid "Language" +msgstr "Idioma" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lo +msgid "Lao" +msgstr "Laosiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_date +msgid "Last Updated on" +msgstr "Última modificación el" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Last delivery status reported by WhatsApp for this message." +msgstr "Último estado de entrega notificado por WhatsApp para este mensaje." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lv +msgid "Latvian" +msgstr "Letón" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__limit_exceeded +msgid "Limit Exceeded" +msgstr "Límite Excedido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__line_type +msgid "Line Type" +msgstr "Tipo de Línea" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lt +msgid "Lithuanian" +msgstr "Lituano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mk +msgid "Macedonian" +msgstr "Macedonio" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_compose_gateway_message +msgid "Mail Compose Gateway Message" +msgstr "Redactar Mensaje de Gateway de Correo" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway +msgid "Mail Gateway" +msgstr "Gateway de correo" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template +msgid "Mail WhatsApp template" +msgstr "Plantilla de WhatsApp de Correo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ms +msgid "Malay" +msgstr "Malayo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ml +msgid "Malayalam" +msgstr "Malayalam" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mr +msgid "Marathi" +msgstr "Maratí" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__marketing +msgid "Marketing" +msgstr "Marketing" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__body +msgid "Message" +msgstr "Mensaje" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "Message Delivery error" +msgstr "Error en la entrega del mensaje" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_notification +msgid "Message Notifications" +msgstr "Notificaciones de mensajes" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_ids +msgid "Messages" +msgstr "Mensajes" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Meta developer platform" +msgstr "Plataforma de desarrolladores de Meta" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Mimetype is not valid" +msgstr "Mimetype no es válido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__model +msgid "Model Name" +msgstr "Nombre del modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__name +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Name" +msgstr "Nombre" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nb +msgid "Norwegian" +msgstr "Noruego" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__number_field_name +msgid "Number Field Name" +msgstr "Número nombre del campo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de acciones" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of errors" +msgstr "Número de errores" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Número de mensajes que requieren una acción" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensajes con error de envío" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On Facebook Develpment, return to the app menu and go to Whatsapp / " +"Configuration." +msgstr "" +"En desarrolladores de Facebook, vuelva al menú de la app y vaya a " +"Whatsapp / Configuración." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On the wizard, fill the URL field with Webhook URL field of the " +"gateway. For the verification identifier, use the Whatsapp Security " +"Key field." +msgstr "" +"En el wizard, rellene el campo URL con el campo Webhook URL del " +"Gateway. Para la verificación de identidad, use el campo clave de " +"seguridad de Whatsapp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Once it is created, Generate a new token related to the created app with no " +"expiry and give access to all whatsapp permissions." +msgstr "" +"Una vez esté creado, genere un nuevo token relacionado con la aplicación " +"creada de manera permanente para dar acceso a todos los permisos de " +"Whatsapp." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Only dynamic urls may have a placeholder." +msgstr "Solo las URLs dinámicas pueden tener un marcador de posición." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Partner" +msgstr "Empresa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__paused +msgid "Paused" +msgstr "Pausado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending +msgid "Pending" +msgstr "Pendiente" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending_deletion +msgid "Pending Deletion" +msgstr "Pendiente de eliminación" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fa +msgid "Persian" +msgstr "Persa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "Phone Blacklisted" +msgstr "Blacklist de móvil" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_mobile_search +msgid "Phone Number" +msgstr "Número de teléfono" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_thread.py:0 +msgid "Phone cannot be sanitized" +msgstr "El móvil no puede ser saneado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__name +msgid "Placeholder" +msgstr "Marcador de posición" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Please enter a valid URL in the format 'https://www.example.com'." +msgstr "" +"Por favor, introduzca una URL válida con el formato " +"'https://www.example.com'." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pl +msgid "Polish" +msgstr "Polaco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_br +msgid "Portuguese (BR)" +msgstr "Portugués (Brasil)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_pt +msgid "Portuguese (POR)" +msgstr "Portugués (Portugal)" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Press the button Integrate webhook." +msgstr "Pulse el botón de integrar webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pa +msgid "Punjabi" +msgstr "Punjabi" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__quick_reply +msgid "Quick Reply" +msgstr "Respuesta rápida" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__read +msgid "Read" +msgstr "Leído" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__rejected +msgid "Rejected" +msgstr "Rechazado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model +msgid "Related model" +msgstr "Modelo relacionado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ro +msgid "Romanian" +msgstr "Rumano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ru +msgid "Russian" +msgstr "Ruso" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__sample_value +msgid "Sample Value" +msgstr "Valor de muestra" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "Sanitized Number" +msgstr "Número saneado" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Save this record. All the values have been filled" +msgstr "Guarde este registro. Se han rellenado todos los valores" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select a name and create it" +msgstr "Elija un nombre y creelo" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Select the Other option, then Business in order to create " +"Whatsapp manager" +msgstr "" +"Seleccione la otraopción, después Negociopara crear un manager" +" de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the Whatsapp API on the products of the application" +msgstr "" +"Seleccione los productos de la aplicación en Whatsapp > Configuración de la " +"API" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the business that you will use" +msgstr "Elija el negocio que usará" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Send" +msgstr "Enviar" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.whatsapp_composer_act_window +msgid "Send Whatsapp Message" +msgstr "Envíe un mensaje de Whatsapp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/ir_actions_server.py:0 +msgid "" +"Sending WhatsApp message can only be done on a non transient mail.thread " +"model" +msgstr "" +"El envío de mensajes de WhatsApp solo puede realizarse en un modelo " +"mail.thread no transitorio" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__sent +msgid "Sent" +msgstr "Enviado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sr +msgid "Serbian" +msgstr "Serbio" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_ir_actions_server +msgid "Server Action" +msgstr "Acción del servidor" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Setting webhook and version" +msgstr "Configuración de webhook y versión" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Show Chat" +msgstr "Mostrar chat" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Show the secret key of the application and copy it to the Webhook " +"secret field." +msgstr "" +"Pulse en clave secreta de la aplicación y copiela en el campoWebhook " +"secret." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sk +msgid "Slovak" +msgstr "Eslovaco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sl +msgid "Slovenian" +msgstr "Esloveno" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es +msgid "Spanish" +msgstr "Español" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_ar +msgid "Spanish (ARG)" +msgstr "Español (Argentina)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_mx +msgid "Spanish (MEX)" +msgstr "Español (México)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_es +msgid "Spanish (SPA)" +msgstr "Español (España)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__state +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_search +msgid "State" +msgstr "Estado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__static +msgid "Static" +msgstr "Estático" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sw +msgid "Swahili" +msgstr "Suajili" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sv +msgid "Swedish" +msgstr "Sueco" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Sync Template" +msgstr "Sincronizar plantilla" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "Synchronization successfully." +msgstr "Sincronización realizada correctamente." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ta +msgid "Tamil" +msgstr "Tamil" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__te +msgid "Telugu" +msgstr "Telugu" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__template_id +msgid "Template" +msgstr "Plantilla" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_name +msgid "Template Name" +msgstr "Nombre de plantilla" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_uid +msgid "Template Uid" +msgstr "UID de plantilla" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Template variable should be in format {{number}}. Cannot parse " +"'%(placeholder)s'" +msgstr "" +"La variable de plantilla debe tener el formato {{número}}. No se puede " +"analizar '%(placeholder)s'" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Templates" +msgstr "Plantillas" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__th +msgid "Thai" +msgstr "Tailandés" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "The placeholder for a button can only be {{1}}." +msgstr "El marcador de posición para un botón solo puede ser {{1}}." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "There should be exactly 1 variable in the header." +msgstr "Debe haber exactamente 1 variable en el encabezado." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "" +"This template is not supported because has variables or " +"buttons." +msgstr "" +"Esta plantilla no está soportada porque tiene variables o " +"botones." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__tr +msgid "Turkish" +msgstr "Turco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__button_type +msgid "Type" +msgstr "Tipo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Update a Record': update the values of a record\n" +"- 'Create Activity': create an activity (Discuss)\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +"- 'Create Record': create a new record with new values\n" +"- 'Execute Code': a block of Python code that will be executed\n" +"- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +"- 'Multi Actions': define an action that triggers several other server actions\n" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uk +msgid "Ukrainian" +msgstr "Ucraniano" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Unable to send the whatsapp message" +msgstr "No es posible enviar este mensaje de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ur +msgid "Urdu" +msgstr "Urdu" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__url_type +msgid "Url Type" +msgstr "Tipo de URL" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__utility +msgid "Utility" +msgstr "Utilidad" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uz +msgid "Uzbek" +msgstr "Uzbeko" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__variable_ids +msgid "Variable" +msgstr "Variable" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Variable in the header should be used as {{1}}" +msgstr "La variable en el encabezado debe utilizarse como {{1}}" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_variable_name_type_template_unique +msgid "Variable names must be unique by template" +msgstr "Los nombres de variables deben ser únicos por plantilla" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__variable_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Variables" +msgstr "Variables" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Variables %(field_names)s do not seem to be valid field path for model " +"%(model_name)s." +msgstr "" +"Las variables %(field_names)s no parecen ser una ruta de campo válida para " +"el modelo %(model_name)s." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Verify and save the wizard." +msgstr "Verifique y guarde este wizard." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__vi +msgid "Vietnamese" +msgstr "Vietnamita" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__url +msgid "Visit Website" +msgstr "Visitar sitio web" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "We were not able to fetch value of field: %(field)s" +msgstr "No pudimos obtener el valor del campo: %(field)s" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__website_url +msgid "Website Url" +msgstr "URL del sitio web" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_gateway__gateway_type__whatsapp +msgid "WhatsApp" +msgstr "WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "WhatsApp Account is required to import templates." +msgstr "Se requiere una cuenta de WhatsApp para importar plantillas." + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_button +msgid "WhatsApp Template Button" +msgstr "Botón de plantilla de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_variable +msgid "WhatsApp Template Variable" +msgstr "Variable de plantilla de WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.action_mail_whatsapp_template_gateway +msgid "WhatsApp Templates" +msgstr "Plantillas de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__ir_actions_server__state__whatsapp +msgid "WhatsApp message" +msgstr "Mensaje de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "WhatsApp template" +msgstr "Plantilla de WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml:0 +msgid "Whatsapp" +msgstr "WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_account_id +msgid "Whatsapp Account" +msgstr "Cuenta de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Whatsapp Composer" +msgstr "Compositor de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_from_phone +msgid "Whatsapp From Phone" +msgstr "Teléfono origen de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_gateway_id +msgid "Whatsapp Gateway" +msgstr "Pasarela de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway_whatsapp +msgid "Whatsapp Gateway services" +msgstr "Servicios de gateway de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_partner +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_partner +msgid "Whatsapp Partner" +msgstr "Empresa de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_security_key +msgid "Whatsapp Security Key" +msgstr "Clave de seguridad de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Whatsapp Status" +msgstr "Estado de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_ids +msgid "Whatsapp Template" +msgstr "Plantilla de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_count +msgid "Whatsapp Template Count" +msgstr "Recuento de plantillas de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_version +msgid "Whatsapp Version" +msgstr "Versión de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Whatsapp configuration info" +msgstr "Configuración de información de Whatsapp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "You can not select field of %(model)s." +msgstr "No puede seleccionar el campo de %(model)s." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zu +msgid "Zulu" +msgstr "Zulú" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "e.g. https://www.example.com" +msgstr "p.ej. https://www.example.com" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "meta business site." +msgstr "sitio de negocio de meta." + +#~ msgid "Blacklisted Phone Is Mobile" +#~ msgstr "El teléfono de la lista negra es un móvil" + +#~ msgid "" +#~ "Indicates if a blacklisted sanitized phone number is a mobile number. Helps " +#~ "distinguish which number is blacklisted when there is both a " +#~ "mobile and phone field in a model." +#~ msgstr "" +#~ "Indica si un número de teléfono saneado de la lista negra es un número de " +#~ "móvil. Ayuda a distinguir qué número está en la lista negra cuando hay tanto" +#~ " un número de móvil como de teléfono en un modelo." + +#~ msgid "Phone/Mobile" +#~ msgstr "Teléfono/Móvil" + +#~ msgid "" +#~ "Type of server action. The following values are available:\n" +#~ "- 'Update a Record': update the values of a record\n" +#~ "- 'Create Activity': create an activity (Discuss)\n" +#~ "- 'Send Email': post a message, a note or send an email (Discuss)\n" +#~ "- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +#~ "- 'Create Record': create a new record with new values\n" +#~ "- 'Execute Code': a block of Python code that will be executed\n" +#~ "- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +#~ "- 'Execute Existing Actions': define an action that triggers several other server actions\n" +#~ msgstr "" +#~ "Tipo de acción del servidor. Los siguientes valores están disponibles:\n" +#~ "- 'Actualizar un registro': actualiza los valores de un registro\n" +#~ "- 'Crear actividad': crea una actividad (Discuss)\n" +#~ "- 'Enviar correo electrónico': publica un mensaje, una nota o envía un correo electrónico (Discuss)\n" +#~ "- 'Enviar SMS': envía SMS, regístralos en documentos (SMS)\n" +#~ "- 'Añadir/Eliminar seguidores': añade o elimina seguidores de un registro (Discuss)\n" +#~ "- 'Crear registro': crea un nuevo registro con nuevos valores\n" +#~ "- 'Ejecutar código': un bloque de código Python que se ejecutará\n" +#~ "- 'Enviar notificación webhook': envía una solicitud POST a un sistema externo, también conocido como Webhook\n" +#~ "- 'Ejecutar acciones existentes': define una acción que desencadena varias otras acciones del servidor\n" + +#~ msgid "Failed Messages" +#~ msgstr "Mensajes fallidos" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación el" + +#~ msgid "Main Attachment" +#~ msgstr "Adjunto principal" + +#~ msgid "Message Content" +#~ msgstr "Contenido del mensaje" + +#~ msgid "Message content, to be used only in searches" +#~ msgstr "Contenido del mensaje, que sólo se utilizará en las búsquedas" + +#~ msgid "Website Messages" +#~ msgstr "Mensajes del website" + +#~ msgid "Website communication history" +#~ msgstr "Histórico de comunicación del website" diff --git a/mail_gateway_whatsapp/i18n/gl.po b/mail_gateway_whatsapp/i18n/gl.po new file mode 100644 index 000000000..142688833 --- /dev/null +++ b/mail_gateway_whatsapp/i18n/gl.po @@ -0,0 +1,1452 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_gateway_whatsapp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-05-29 23:46+0000\n" +"Last-Translator: Marcos Chavarría Teijeiro \n" +"Language-Team: none\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Define the values of the fields Webhook Key and Whatsapp Security Key.\n" +" You should set some random value of your choice for this fields.\n" +" Ensure that facebook will be able to comunicate with your server." +msgstr "" +"Define os valores dos campos Clave do webhook e Clave de seguridade de WhatsApp.\n" +" Deberías establecer algún valor aleatorio da túa elección para estes campos.\n" +" Asegúrate de que Facebook poida comunicarse co teu servidor." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 1 Call Number button is allowed." +msgstr "Permítense como máximo un botón de Chamar ao Número." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 10 buttons is allowed." +msgstr "Permítese como máximo 10 botóns." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 2 URL buttons is allowed." +msgstr "Permítense como máximo 2 botóns de URL." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access" +msgstr "Acceso" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Advanced Options." +msgstr "Acceda ao menú Configuración/Opcións Avanzadas." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Basic information." +msgstr "Acceda ao menú Configuración / Información Básica." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your" +msgstr "Acceder ao seu" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your business settings menu" +msgstr "Acceda ao seu menú de axustes para empresas" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "Action Needed" +msgstr "Precísase Acción" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Add a new number." +msgstr "Engada un novo número." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__af +msgid "Afrikaans" +msgstr "Africáner" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sq +msgid "Albanian" +msgstr "Albanés" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "All dynamic urls must have a placeholder." +msgstr "Todas as URL dinámicas deben ter un comodín." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model_id +msgid "Applies to" +msgstr "Aplica a" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__approved +msgid "Approved" +msgstr "Aprobada" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ar +msgid "Arabic" +msgstr "Árabe" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__archived +msgid "Archived" +msgstr "Arquivado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_attachment_count +msgid "Attachment Count" +msgstr "Número de anexos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__authentication +msgid "Authentication" +msgstr "Autenticación" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__az +msgid "Azerbaijani" +msgstr "Azerí" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Back to draft" +msgstr "Volver a bosquexo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bn +msgid "Bengali" +msgstr "Bengalí" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "Blacklisted Phone is Phone" +msgstr "O teléfono bloqueado é un teléfono fixo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__body +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__body +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Body" +msgstr "Corpo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/wizards/whatsapp_composer.py:0 +msgid "Body is required" +msgstr "O corpo é requerido" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Body variables should start at 1 and not skip any number, missing %d" +msgstr "" +"As variables do corpo teñen que empezar por 1 e non saltar ningún número, " +"falta o %d" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bg +msgid "Bulgarian" +msgstr "Búlgaro" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__button_id +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__button +msgid "Button" +msgstr "Botón" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__name +msgid "Button Text" +msgstr "Texto do botón" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_button_unique_name_per_template +msgid "Button name must be unique by template" +msgstr "O nome do botón debe ser único para cada modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__button_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Buttons" +msgstr "Botóns" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Buttons may only contain one placeholder." +msgstr "Os botóns só poden conter un comodín." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__call_number +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__phone_number +msgid "Call Number" +msgstr "Chamar ao Número" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ca +msgid "Catalan" +msgstr "Catalán" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__category +msgid "Category" +msgstr "Categoría" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_cn +msgid "Chinese (CHN)" +msgstr "Chino(CHN)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_hk +msgid "Chinese (HKG)" +msgstr "Chinés (HKG)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_tw +msgid "Chinese (TAI)" +msgstr "Chinés (TAI)" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Click on Edit Button on the webhook area." +msgstr "Preme no Botón Editar na zona do webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__company_id +msgid "Company" +msgstr "Empresa" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_whatsapp_composer +msgid "Compose a whatsapp message" +msgstr "Compoñer unha mensaxe de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the API Version on the Whastapp Version field." +msgstr "Copia a versión da API no campo Versión de Whatsapp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Copy the phone identification number to the field Whastapp From phone" +" field." +msgstr "" +"Copia o número de identificación do teléfono no campo Whatsapp dende " +"Teléfono." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the token value to token field in this page." +msgstr "Copia o valor do token no campo token desta páxina." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Create a new application." +msgstr "Crea unha nova aplicación." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_date +msgid "Created on" +msgstr "Criado o" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating a permanent token" +msgstr "Creando un token permanente" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating the Application from meta developer" +msgstr "Creando a Aplicación dende Desenvolvedor Meta" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hr +msgid "Croatian" +msgstr "Croata" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__cs +msgid "Czech" +msgstr "Checo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__da +msgid "Danish" +msgstr "Dinamarqués" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__deleted +msgid "Deleted" +msgstr "Eliminado" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__delivered +msgid "Delivered" +msgstr "Entregado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__disabled +msgid "Disabled" +msgstr "Desactivados" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_discuss_channel +msgid "Discussion Channel" +msgstr "Canle de Conversas" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__display_name +msgid "Display Name" +msgstr "Nome a amosar" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_id +msgid "Document ID" +msgstr "ID do documento" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_model +msgid "Document Model Name" +msgstr "Nome do Modelo de Documento" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Download Templates" +msgstr "Descargar Modelos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__draft +msgid "Draft" +msgstr "Bosquexo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_unique_name_gateway_id +msgid "Duplicate name is not allowed for Gateway." +msgstr "Non se permite nomes duplicados para as pasarelas." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nl +msgid "Dutch" +msgstr "Neerlandés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__dynamic +msgid "Dynamic" +msgstr "Dinámico" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_thread +msgid "Email Thread" +msgstr "Fío de Email" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en +msgid "English" +msgstr "Inglés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_gb +msgid "English (UK)" +msgstr "Inglés (reino unido)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_us +msgid "English (US)" +msgstr "Inglés (US)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__et +msgid "Estonian" +msgstr "Estonio" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Export Template" +msgstr "Exportar o modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__field_name +msgid "Field" +msgstr "Campo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Field template variables %(variables)s must be associated with a field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "" +"Field used to store sanitized phone number. Helps speeding up searches and " +"comparisons." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fil +msgid "Filipino" +msgstr "Filipino" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__find_gateway +msgid "Find Gateway" +msgstr "Buscar Pasarela" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fi +msgid "Finnish" +msgstr "Finlandés" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "First steps" +msgstr "Primeiros pasos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_follower_ids +msgid "Followers" +msgstr "Seguidoras" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidoras (Contactos)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__footer +msgid "Footer" +msgstr "Pé de páxina" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fr +msgid "French" +msgstr "Francés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__gateway_id +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Gateway" +msgstr "Pasarela" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__gateway_type +msgid "Gateway Type" +msgstr "Tipo de Pasarela" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ka +msgid "Georgian" +msgstr "Xeorxiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__de +msgid "German" +msgstr "Alemán" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Go to Users / System Users and create a new one with administrator" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Go to Whatsapp / API Configuration menú." +msgstr "Vai ao menú Whatsapp / Configuración API." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__el +msgid "Greek" +msgstr "Grego" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__gu +msgid "Gujarati" +msgstr "Guxaratí" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__has_message +msgid "Has Message" +msgstr "Ten Mensaxe" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ha +msgid "Hausa" +msgstr "Hausa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__header +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__header +msgid "Header" +msgstr "Cabeceira" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__he +msgid "Hebrew" +msgstr "Hebreu" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hi +msgid "Hindi" +msgstr "Hindi" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hu +msgid "Hungarian" +msgstr "Húngaro" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__id +msgid "ID" +msgstr "ID" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se está marcado, as novas mensaxes requirirán da túa atención." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se está marcado, algúns mensaxes tiveron erros ao entregarse." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"If no error is raised, refresh this gateway data, and you should see that it is integrated.\n" +" You should be able to receive and send messages.\n" +" If an error is raised, check that the fields are filled properly and that facebook server is able to access your server." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "" +"If the sanitized phone number is on the blacklist, the contact won't receive" +" mass mailing sms anymore, from any list" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__in_appeal +msgid "In Appeal" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "" +"Indicates if a blacklisted sanitized phone number is a phone number. Helps " +"distinguish which number is blacklisted when there is both a " +"mobile and phone field in a model." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__id +msgid "Indonesian" +msgstr "Indonesio" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Insert here the Jinja expression to get the partner ID" +msgstr "Insire aquí a expresión Jinja para conseguir o ID de contacto" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ga +msgid "Irish" +msgstr "Irlandés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_is_follower +msgid "Is Follower" +msgstr "É Seguidor" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__is_required_template +msgid "Is Required Template" +msgstr "Este modelo é obrigatorio" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__is_supported +msgid "Is Supported" +msgstr "É Compatible" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__it +msgid "Italian" +msgstr "Italiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ja +msgid "Japanese" +msgstr "Xaponés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kn +msgid "Kannada" +msgstr "Kannada" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kk +msgid "Kazakh" +msgstr "Cazaxo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__rw_rw +msgid "Kinyarwanda" +msgstr "Quiñaruanda" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ko +msgid "Korean" +msgstr "Coreano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ky_kg +msgid "Kyrgyz (Kyrgyzstan)" +msgstr "Quirguiz (Quirguicistán)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__language +msgid "Language" +msgstr "Lingua" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lo +msgid "Lao" +msgstr "Lao" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_date +msgid "Last Updated on" +msgstr "Última actualización o" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Last delivery status reported by WhatsApp for this message." +msgstr "Último estado de entrega notificado por WhatsApp para esta mensaxe." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lv +msgid "Latvian" +msgstr "Letón" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__limit_exceeded +msgid "Limit Exceeded" +msgstr "Límite Excedido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__line_type +msgid "Line Type" +msgstr "Tipo de Liña" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lt +msgid "Lithuanian" +msgstr "Lituano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mk +msgid "Macedonian" +msgstr "Macedonio" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_compose_gateway_message +msgid "Mail Compose Gateway Message" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway +msgid "Mail Gateway" +msgstr "Pasarela de Mensaxes" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template +msgid "Mail WhatsApp template" +msgstr "Modelo de Mensaxe Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ms +msgid "Malay" +msgstr "Malaio" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ml +msgid "Malayalam" +msgstr "Malayalam" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mr +msgid "Marathi" +msgstr "Maratí" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__marketing +msgid "Marketing" +msgstr "Marketing" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__body +msgid "Message" +msgstr "Mensaxe" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "Message Delivery error" +msgstr "Erro na entrega da Mensaxe" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_notification +msgid "Message Notifications" +msgstr "Notificacións de mensaxes" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_ids +msgid "Messages" +msgstr "Mensaxes" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Meta developer platform" +msgstr "Plataforma de desenvolvedores Meta" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Mimetype is not valid" +msgstr "O Mimetype non é válido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__model +msgid "Model Name" +msgstr "Nome do modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__name +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Name" +msgstr "Nome" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nb +msgid "Norwegian" +msgstr "Noruego" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__number_field_name +msgid "Number Field Name" +msgstr "Nome do Campo Número" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de Accións" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of errors" +msgstr "Número de erros" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Número de mensaxes que requiren atención" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensaxes cun erro de entrega" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On Facebook Develpment, return to the app menu and go to Whatsapp / " +"Configuration." +msgstr "" +"En Desenvolvedores de Facebook, volve ao menú da aplicación e vai a " +"Whatsapp / Configuración." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On the wizard, fill the URL field with Webhook URL field of the " +"gateway. For the verification identifier, use the Whatsapp Security " +"Key field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Once it is created, Generate a new token related to the created app with no " +"expiry and give access to all whatsapp permissions." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Only dynamic urls may have a placeholder." +msgstr "Só as URLs dinámicas poden ter un comodín." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Partner" +msgstr "Contacto" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__paused +msgid "Paused" +msgstr "En pausa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending +msgid "Pending" +msgstr "Pendente" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending_deletion +msgid "Pending Deletion" +msgstr "Pendente de Borrado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fa +msgid "Persian" +msgstr "Persa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "Phone Blacklisted" +msgstr "Móbil Bloqueado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_mobile_search +msgid "Phone Number" +msgstr "Número de teléfono" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_thread.py:0 +msgid "Phone cannot be sanitized" +msgstr "O teléfono non pode ser saneado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__name +msgid "Placeholder" +msgstr "Comodín" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Please enter a valid URL in the format 'https://www.example.com'." +msgstr "" +"Por favor, introduza unha URL válida no formato 'https://www.exemplo.com'." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pl +msgid "Polish" +msgstr "Polaco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_br +msgid "Portuguese (BR)" +msgstr "Portugués (Brasil)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_pt +msgid "Portuguese (POR)" +msgstr "Portugués (Portugal)" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Press the button Integrate webhook." +msgstr "Preme no botón Integrar Webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pa +msgid "Punjabi" +msgstr "Punxabi" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__quick_reply +msgid "Quick Reply" +msgstr "Resposta rápida" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__read +msgid "Read" +msgstr "Lido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__rejected +msgid "Rejected" +msgstr "Rexeitado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model +msgid "Related model" +msgstr "Modelo Relacionado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ro +msgid "Romanian" +msgstr "Romanés" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ru +msgid "Russian" +msgstr "Ruso" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__sample_value +msgid "Sample Value" +msgstr "Valor de exemplo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "Sanitized Number" +msgstr "Número saneado" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Save this record. All the values have been filled" +msgstr "Garda este rexistro. Completáronse todos os valores" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select a name and create it" +msgstr "Seleccione un nome e creao" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Select the Other option, then Business in order to create " +"Whatsapp manager" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the Whatsapp API on the products of the application" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the business that you will use" +msgstr "Elixe o negocio que empregarás" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Send" +msgstr "Enviar" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.whatsapp_composer_act_window +msgid "Send Whatsapp Message" +msgstr "Enviar Mensaxe de Whatsapp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/ir_actions_server.py:0 +msgid "" +"Sending WhatsApp message can only be done on a non transient mail.thread " +"model" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__sent +msgid "Sent" +msgstr "Enviado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sr +msgid "Serbian" +msgstr "Serbio" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_ir_actions_server +msgid "Server Action" +msgstr "Acción de Servidor" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Setting webhook and version" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Show Chat" +msgstr "Amosar Chat" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Show the secret key of the application and copy it to the Webhook " +"secret field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sk +msgid "Slovak" +msgstr "Eslovaco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sl +msgid "Slovenian" +msgstr "Esloveno" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es +msgid "Spanish" +msgstr "Español" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_ar +msgid "Spanish (ARG)" +msgstr "Español (Argentina)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_mx +msgid "Spanish (MEX)" +msgstr "Español (México)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_es +msgid "Spanish (SPA)" +msgstr "Español (España)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__state +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_search +msgid "State" +msgstr "Estado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__static +msgid "Static" +msgstr "Estático" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sw +msgid "Swahili" +msgstr "Suahili" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sv +msgid "Swedish" +msgstr "Sueco" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Sync Template" +msgstr "Sincronizar Modelo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "Synchronization successfully." +msgstr "A sincronización realizouse con éxito." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ta +msgid "Tamil" +msgstr "Tamil" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__te +msgid "Telugu" +msgstr "Telugu" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__template_id +msgid "Template" +msgstr "Modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_name +msgid "Template Name" +msgstr "Nome do modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_uid +msgid "Template Uid" +msgstr "UID do modelo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Template variable should be in format {{number}}. Cannot parse " +"'%(placeholder)s'" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Templates" +msgstr "Modelos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__th +msgid "Thai" +msgstr "Tailandés" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "The placeholder for a button can only be {{1}}." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "There should be exactly 1 variable in the header." +msgstr "Debería haber exactamente 1 variable no cabeceiro." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "" +"This template is not supported because has variables or " +"buttons." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__tr +msgid "Turkish" +msgstr "Turco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__button_type +msgid "Type" +msgstr "Tipo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Update a Record': update the values of a record\n" +"- 'Create Activity': create an activity (Discuss)\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +"- 'Create Record': create a new record with new values\n" +"- 'Execute Code': a block of Python code that will be executed\n" +"- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +"- 'Multi Actions': define an action that triggers several other server actions\n" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uk +msgid "Ukrainian" +msgstr "Ucraíno" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Unable to send the whatsapp message" +msgstr "Non é posible enviar esta mensaxe de whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ur +msgid "Urdu" +msgstr "Urdú" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__url_type +msgid "Url Type" +msgstr "Tipo de URL" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__utility +msgid "Utility" +msgstr "Utilidade" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uz +msgid "Uzbek" +msgstr "Uzbeko" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__variable_ids +msgid "Variable" +msgstr "Variábel" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Variable in the header should be used as {{1}}" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_variable_name_type_template_unique +msgid "Variable names must be unique by template" +msgstr "Os nomes das variables teñen que ser únicos en cada modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__variable_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Variables" +msgstr "Variables" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Variables %(field_names)s do not seem to be valid field path for model " +"%(model_name)s." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Verify and save the wizard." +msgstr "Verifica e garda o asistente." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__vi +msgid "Vietnamese" +msgstr "Vietnamita" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__url +msgid "Visit Website" +msgstr "Visitar sitio web" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "We were not able to fetch value of field: %(field)s" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__website_url +msgid "Website Url" +msgstr "URL do sitio web" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_gateway__gateway_type__whatsapp +msgid "WhatsApp" +msgstr "WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "WhatsApp Account is required to import templates." +msgstr "Precísase unha conta de WhatsApp para importar os modelos." + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_button +msgid "WhatsApp Template Button" +msgstr "Botón do Modelo de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_variable +msgid "WhatsApp Template Variable" +msgstr "Variable do Modelo de WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.action_mail_whatsapp_template_gateway +msgid "WhatsApp Templates" +msgstr "Modelos de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__ir_actions_server__state__whatsapp +msgid "WhatsApp message" +msgstr "Mensaxe de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "WhatsApp template" +msgstr "Modelo de WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml:0 +msgid "Whatsapp" +msgstr "WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_account_id +msgid "Whatsapp Account" +msgstr "Conta de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Whatsapp Composer" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_from_phone +msgid "Whatsapp From Phone" +msgstr "Télefono Dende de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_gateway_id +msgid "Whatsapp Gateway" +msgstr "Pasarela WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway_whatsapp +msgid "Whatsapp Gateway services" +msgstr "Servizos de Pasarela de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_partner +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_partner +msgid "Whatsapp Partner" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_security_key +msgid "Whatsapp Security Key" +msgstr "Clave de Seguridade de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Whatsapp Status" +msgstr "Estado de Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_ids +msgid "Whatsapp Template" +msgstr "Modelo de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_count +msgid "Whatsapp Template Count" +msgstr "Número de Modelos de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_version +msgid "Whatsapp Version" +msgstr "Versión de WhatsApp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Whatsapp configuration info" +msgstr "Información da configuración de WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "You can not select field of %(model)s." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zu +msgid "Zulu" +msgstr "Zulú" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "e.g. https://www.example.com" +msgstr "p. ex. https://www.exemplo.gal" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "meta business site." +msgstr "" + +#~ msgid "Blacklisted Phone Is Mobile" +#~ msgstr "O teléfono bloqueado é un móbil" + +#~ msgid "Phone/Mobile" +#~ msgstr "Teléfono/móbil" diff --git a/mail_gateway_whatsapp/i18n/it.po b/mail_gateway_whatsapp/i18n/it.po new file mode 100644 index 000000000..a202d648d --- /dev/null +++ b/mail_gateway_whatsapp/i18n/it.po @@ -0,0 +1,1533 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_gateway_whatsapp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-03-02 18:45+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Define the values of the fields Webhook Key and Whatsapp Security Key.\n" +" You should set some random value of your choice for this fields.\n" +" Ensure that facebook will be able to comunicate with your server." +msgstr "" +"Definire i valori dei campi Chiave webhook e Chiave di sicurezza Whatsapp.\n" +" Si dovrebbero impostare alcuni valori casuali di propria scelta in questi campi.\n" +" Assicurarsi che Facebook sia abile di comunicare con il proprio server." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 1 Call Number button is allowed." +msgstr "È consentito al massimo un solo pulsante di chiamata numero." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 10 buttons is allowed." +msgstr "È consentito un massimo di 10 pulsanti." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 2 URL buttons is allowed." +msgstr "È consentito un massimo di due pulsanti URL." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access" +msgstr "Accesso" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Advanced Options." +msgstr "Accesso al menu Configurazione / Opzioni avanzate." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Basic information." +msgstr "Accesso al menu Configurazione / Informazioni base." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your" +msgstr "Accedi al tuo" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your business settings menu" +msgstr "Accedi al tuo menu impostazioni business" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "Action Needed" +msgstr "Azione richiesta" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Add a new number." +msgstr "Aggiungi nuovo numero." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__af +msgid "Afrikaans" +msgstr "Afrikaans" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sq +msgid "Albanian" +msgstr "Albanese" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "All dynamic urls must have a placeholder." +msgstr "Tutti gli URL dinamici devono avere un segnaposto." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model_id +msgid "Applies to" +msgstr "Si applica a" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__approved +msgid "Approved" +msgstr "Approvato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ar +msgid "Arabic" +msgstr "Arabo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__archived +msgid "Archived" +msgstr "In archivio" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_attachment_count +msgid "Attachment Count" +msgstr "Conteggio allegati" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__authentication +msgid "Authentication" +msgstr "Autenticazione" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__az +msgid "Azerbaijani" +msgstr "Azerbaigiano" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Back to draft" +msgstr "Ritorna a bozza" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bn +msgid "Bengali" +msgstr "Bengalese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "Blacklisted Phone is Phone" +msgstr "Il numero in blacklist è un telefono fisso" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__body +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__body +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Body" +msgstr "Corpo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/wizards/whatsapp_composer.py:0 +msgid "Body is required" +msgstr "Richiesto il contenuto" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Body variables should start at 1 and not skip any number, missing %d" +msgstr "" +"Le variabili del corpo devono iniziare da 1 e non saltare numeri, manca %d" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bg +msgid "Bulgarian" +msgstr "Bulgaro" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__button_id +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__button +msgid "Button" +msgstr "Pulsante" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__name +msgid "Button Text" +msgstr "Testo pulsante" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_button_unique_name_per_template +msgid "Button name must be unique by template" +msgstr "Il nome pulsante deve essere univoco per modello" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__button_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Buttons" +msgstr "Pulsanti" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Buttons may only contain one placeholder." +msgstr "I pulsanti possono contenere un solo segnaposto." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__call_number +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__phone_number +msgid "Call Number" +msgstr "Numero chiamata" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Cancel" +msgstr "Annulla" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ca +msgid "Catalan" +msgstr "Catalano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__category +msgid "Category" +msgstr "Categoria" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_cn +msgid "Chinese (CHN)" +msgstr "Cinese (CHN)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_hk +msgid "Chinese (HKG)" +msgstr "Cinese (HKG)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_tw +msgid "Chinese (TAI)" +msgstr "Cinese (TAI)" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Click on Edit Button on the webhook area." +msgstr "Fare clic su Modifica pulsante nell'area webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__company_id +msgid "Company" +msgstr "Azienda" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_whatsapp_composer +msgid "Compose a whatsapp message" +msgstr "Componi un messaggio Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_res_partner +msgid "Contact" +msgstr "Contatto" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the API Version on the Whastapp Version field." +msgstr "Copia la versione API nel campo Versione Whatsapp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Copy the phone identification number to the field Whastapp From phone" +" field." +msgstr "" +"Copia il numero identificativo del telefono nel campo Telefono modulo " +"Whatsapp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the token value to token field in this page." +msgstr "Copia il valore del token nel campo token in questa pagina." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Create a new application." +msgstr "Crea nua nuova applicazione." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating a permanent token" +msgstr "Creazione token permanente" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating the Application from meta developer" +msgstr "Creazione dell'allplicazione dal meta sviluppatore" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hr +msgid "Croatian" +msgstr "Croato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__cs +msgid "Czech" +msgstr "Ceco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__da +msgid "Danish" +msgstr "Danese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__deleted +msgid "Deleted" +msgstr "Cancellato" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__delivered +msgid "Delivered" +msgstr "Consegnato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__disabled +msgid "Disabled" +msgstr "Disabilitato" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_discuss_channel +msgid "Discussion Channel" +msgstr "Canale discussione" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_id +msgid "Document ID" +msgstr "ID documento" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_model +msgid "Document Model Name" +msgstr "Nome modello documento" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Download Templates" +msgstr "Scarica modelli" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__draft +msgid "Draft" +msgstr "Bozza" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_unique_name_gateway_id +msgid "Duplicate name is not allowed for Gateway." +msgstr "Per i gateway non sono consentiti nomi duplicati." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nl +msgid "Dutch" +msgstr "Olandese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__dynamic +msgid "Dynamic" +msgstr "Dinamico" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_thread +msgid "Email Thread" +msgstr "Discussione e-mail" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en +msgid "English" +msgstr "Inglese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_gb +msgid "English (UK)" +msgstr "Inglese (UK)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_us +msgid "English (US)" +msgstr "Inglese (US)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__et +msgid "Estonian" +msgstr "Estone" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Export Template" +msgstr "Esporta modello" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__field_name +msgid "Field" +msgstr "Campo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Field template variables %(variables)s must be associated with a field." +msgstr "" +"Le variabili modello campo %(variables)s devono essere associate con un " +"campo." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "" +"Field used to store sanitized phone number. Helps speeding up searches and " +"comparisons." +msgstr "" +"Campo utilizzato per salvare il numero di telefono ripulito. Aiuta ad " +"accelerare ricerche e comparazioni." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fil +msgid "Filipino" +msgstr "Filippino" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__find_gateway +msgid "Find Gateway" +msgstr "Trova il gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fi +msgid "Finnish" +msgstr "Finlandese" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "First steps" +msgstr "Primo passo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_follower_ids +msgid "Followers" +msgstr "Seguito da" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguito da (partner)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__footer +msgid "Footer" +msgstr "Piè pagina" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fr +msgid "French" +msgstr "Francese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__gateway_id +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Gateway" +msgstr "Gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__gateway_type +msgid "Gateway Type" +msgstr "Tipo gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ka +msgid "Georgian" +msgstr "Georgiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__de +msgid "German" +msgstr "Tedesco" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Go to Users / System Users and create a new one with administrator" +msgstr "" +"Accedere a Utenti / Utenti di sistema e creare un nuovo " +"amministratore con" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Go to Whatsapp / API Configuration menú." +msgstr "Accedere al menu Whatsapp / Configurazione." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__el +msgid "Greek" +msgstr "Greco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__gu +msgid "Gujarati" +msgstr "Gujarati" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__has_message +msgid "Has Message" +msgstr "Ha un messaggio" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ha +msgid "Hausa" +msgstr "Hausa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__header +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__header +msgid "Header" +msgstr "Intestazione" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__he +msgid "Hebrew" +msgstr "Ebraico" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hi +msgid "Hindi" +msgstr "Hindi" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hu +msgid "Hungarian" +msgstr "Ungherese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__id +msgid "ID" +msgstr "ID" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"If no error is raised, refresh this gateway data, and you should see that it is integrated.\n" +" You should be able to receive and send messages.\n" +" If an error is raised, check that the fields are filled properly and that facebook server is able to access your server." +msgstr "" +"Se non si generano errori, agiornare questi dati gateway e si dovrebbe vedere che è integrato.\n" +" Si dovrebbe essere in grado di ricevere e inviare messaggi.\n" +" Se si genera un errore, controllare che i campi siano compliatai correttamente e il server Facebook sia in grado di accedere al vostro server." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "" +"If the sanitized phone number is on the blacklist, the contact won't receive" +" mass mailing sms anymore, from any list" +msgstr "" +"Se il numero di telefono ripulito è nella blacklist, il contatto non " +"riceverà più SMS di massa, da qualsiasi lista" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__in_appeal +msgid "In Appeal" +msgstr "In richiesta" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "" +"Indicates if a blacklisted sanitized phone number is a phone number. Helps " +"distinguish which number is blacklisted when there is both a " +"mobile and phone field in a model." +msgstr "" +"Indica se un numero di telefono ripulito è un numero di telefono. Aiuta a " +"distinguere quale numero è in blacklist quando ci sono campi " +"telefono per il fisso e il cellulare nel modello." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__id +msgid "Indonesian" +msgstr "Indonesiano" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Insert here the Jinja expression to get the partner ID" +msgstr "Inserire qui l'espressione Jinja per ottenere l'ID del partner" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ga +msgid "Irish" +msgstr "Irlandese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_is_follower +msgid "Is Follower" +msgstr "Segue" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__is_required_template +msgid "Is Required Template" +msgstr "Richiede il modello" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__is_supported +msgid "Is Supported" +msgstr "Supportato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__it +msgid "Italian" +msgstr "Italiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ja +msgid "Japanese" +msgstr "Giapponese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kn +msgid "Kannada" +msgstr "Canarese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kk +msgid "Kazakh" +msgstr "Kazako" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__rw_rw +msgid "Kinyarwanda" +msgstr "Kinyarwanda" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ko +msgid "Korean" +msgstr "Coreano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ky_kg +msgid "Kyrgyz (Kyrgyzstan)" +msgstr "Kirghiso (Kirghizistan)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__language +msgid "Language" +msgstr "Lingua" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lo +msgid "Lao" +msgstr "Laotiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Last delivery status reported by WhatsApp for this message." +msgstr "Ultimo stato di consegna segnalato da WhatsApp per questo messaggio." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lv +msgid "Latvian" +msgstr "Lettone" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__limit_exceeded +msgid "Limit Exceeded" +msgstr "Limite superato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__line_type +msgid "Line Type" +msgstr "Tipo riga" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lt +msgid "Lithuanian" +msgstr "Lituano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mk +msgid "Macedonian" +msgstr "Macedone" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_compose_gateway_message +msgid "Mail Compose Gateway Message" +msgstr "Messaggio gateway composizione e-mail" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway +msgid "Mail Gateway" +msgstr "Gateway e-mail" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template +msgid "Mail WhatsApp template" +msgstr "Modello e-mail WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ms +msgid "Malay" +msgstr "Malese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ml +msgid "Malayalam" +msgstr "Malayalam" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mr +msgid "Marathi" +msgstr "Malayalam" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__marketing +msgid "Marketing" +msgstr "Marketing" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__body +msgid "Message" +msgstr "Messaggio" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "Message Delivery error" +msgstr "Errore di consegna messaggio" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_notification +msgid "Message Notifications" +msgstr "Notifiche messaggi" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_ids +msgid "Messages" +msgstr "Messaggi" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Meta developer platform" +msgstr "Piattaforma meta sviluppatore" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Mimetype is not valid" +msgstr "Il tipo MIME no è valido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__model +msgid "Model Name" +msgstr "Nome modello" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__name +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Name" +msgstr "Nome" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nb +msgid "Norwegian" +msgstr "Norvegese" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__number_field_name +msgid "Number Field Name" +msgstr "Nome campo numeo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of Actions" +msgstr "Numero di azioni" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of errors" +msgstr "Numero di errori" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Numero di messaggi che richiedono un'azione" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero di messaggi con errore di consegna" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On Facebook Develpment, return to the app menu and go to Whatsapp / " +"Configuration." +msgstr "" +"In Facebook Development, tornare al menu app e accedere a Whatsapp / " +"Configurazione." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On the wizard, fill the URL field with Webhook URL field of the " +"gateway. For the verification identifier, use the Whatsapp Security " +"Key field." +msgstr "" +"Nella procedura guidata, compilare il campo URL con il campo URL " +"webhook del gateway. Per l'identificatore di verifica, utilizzare il " +"campo Chiave di sicurezza Whatsapp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Once it is created, Generate a new token related to the created app with no " +"expiry and give access to all whatsapp permissions." +msgstr "" +"Una volta creato, generare un nuovo token relativo all'app creata senza " +"scadenza e dare l'accesso a tutti i permessi Whatsapp." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Only dynamic urls may have a placeholder." +msgstr "Solo gli URL dinamici devono avere un segnaposto." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Partner" +msgstr "Partner" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__paused +msgid "Paused" +msgstr "In pausa" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending +msgid "Pending" +msgstr "In sospeso" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending_deletion +msgid "Pending Deletion" +msgstr "Cancellazione in sospeso" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fa +msgid "Persian" +msgstr "Persiano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "Phone Blacklisted" +msgstr "Telefoni in blacklist" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_mobile_search +msgid "Phone Number" +msgstr "Numero di telefono" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_thread.py:0 +msgid "Phone cannot be sanitized" +msgstr "Il telefono non può essere ripulito" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__name +msgid "Placeholder" +msgstr "Segnaposto" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Please enter a valid URL in the format 'https://www.example.com'." +msgstr "Inserire un URL valido nel formato 'https://www.example.com'." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pl +msgid "Polish" +msgstr "Polacco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_br +msgid "Portuguese (BR)" +msgstr "Portoghese (BR)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_pt +msgid "Portuguese (POR)" +msgstr "Portoghese (POR)" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Press the button Integrate webhook." +msgstr "Fare clic sul pulsante Integra webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pa +msgid "Punjabi" +msgstr "Punjabi" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__quick_reply +msgid "Quick Reply" +msgstr "Risposta rapida" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__read +msgid "Read" +msgstr "Letto" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__rejected +msgid "Rejected" +msgstr "Respinto" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model +msgid "Related model" +msgstr "Modello correlato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ro +msgid "Romanian" +msgstr "Rumeno" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ru +msgid "Russian" +msgstr "Russo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__sample_value +msgid "Sample Value" +msgstr "Valore esempio" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "Sanitized Number" +msgstr "Numero ripulito" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Save this record. All the values have been filled" +msgstr "Salva il record. Tutti i valori sono stati salvati" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select a name and create it" +msgstr "Selezionare un nome e crearlo" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Select the Other option, then Business in order to create " +"Whatsapp manager" +msgstr "" +"Selezionare l'opzione Altro, quindi Business per creare il " +"gestore Whatsapp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the Whatsapp API on the products of the application" +msgstr "Selezionare l'API Whatsapp nel prodotto dell'applicazione" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the business that you will use" +msgstr "Selezionare il business che utilizzerà" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Send" +msgstr "Invia" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.whatsapp_composer_act_window +msgid "Send Whatsapp Message" +msgstr "Invia messaggio Whatsapp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/ir_actions_server.py:0 +msgid "" +"Sending WhatsApp message can only be done on a non transient mail.thread " +"model" +msgstr "" +"L'invio di un messaggio WhatsApp può essere fatto solo in un modello " +"mail.thread non transitorio" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__sent +msgid "Sent" +msgstr "Inviato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sr +msgid "Serbian" +msgstr "Serbo" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_ir_actions_server +msgid "Server Action" +msgstr "Azione server" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Setting webhook and version" +msgstr "Impostazione webhook e versione" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Show Chat" +msgstr "Visualizza discussione" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Show the secret key of the application and copy it to the Webhook " +"secret field." +msgstr "" +"Visualizzare la chiave segreta dell'applicazione e copiarla nel campo " +"Codice segreto webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sk +msgid "Slovak" +msgstr "Slovacco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sl +msgid "Slovenian" +msgstr "Sloveno" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es +msgid "Spanish" +msgstr "Spagnolo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_ar +msgid "Spanish (ARG)" +msgstr "Spagnolo (ARG)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_mx +msgid "Spanish (MEX)" +msgstr "Spagnolo (MEX)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_es +msgid "Spanish (SPA)" +msgstr "Spagnolo (SPA)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__state +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_search +msgid "State" +msgstr "Stato" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__static +msgid "Static" +msgstr "Statica" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sw +msgid "Swahili" +msgstr "Swahili" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sv +msgid "Swedish" +msgstr "Svedese" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Sync Template" +msgstr "Sincronizza modello" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "Synchronization successfully." +msgstr "Sincronizzazione riuscita." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ta +msgid "Tamil" +msgstr "Tamil" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__te +msgid "Telugu" +msgstr "Tèlugu" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__template_id +msgid "Template" +msgstr "Modello" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_name +msgid "Template Name" +msgstr "Nome modello" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_uid +msgid "Template Uid" +msgstr "UID modello" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Template variable should be in format {{number}}. Cannot parse " +"'%(placeholder)s'" +msgstr "" +"La variabile modello dovrebbe essere nel formato {{number}}. Impossibile " +"decodificare '%(placeholder)s'" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Templates" +msgstr "Modelli" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__th +msgid "Thai" +msgstr "Tailandese" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "The placeholder for a button can only be {{1}}." +msgstr "Il segnaposto per un pulsante può essere solo {{1}}." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "There should be exactly 1 variable in the header." +msgstr "Deve esserci solo una variabile nella testata." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "" +"This template is not supported because has variables or " +"buttons." +msgstr "" +"Questo modello non è supportato perché ha variabili o " +"pulsanti." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__tr +msgid "Turkish" +msgstr "Turco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__button_type +msgid "Type" +msgstr "Tipo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Update a Record': update the values of a record\n" +"- 'Create Activity': create an activity (Discuss)\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +"- 'Create Record': create a new record with new values\n" +"- 'Execute Code': a block of Python code that will be executed\n" +"- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +"- 'Multi Actions': define an action that triggers several other server actions\n" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uk +msgid "Ukrainian" +msgstr "Ucraino" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Unable to send the whatsapp message" +msgstr "Impossibile inviare il messaggio Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ur +msgid "Urdu" +msgstr "Urdu" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__url_type +msgid "Url Type" +msgstr "Tipo URL" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__utility +msgid "Utility" +msgstr "Utilità" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uz +msgid "Uzbek" +msgstr "Uzbeco" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__variable_ids +msgid "Variable" +msgstr "Variabile" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Variable in the header should be used as {{1}}" +msgstr "La variabile in testata dovrebbe essere usata come {{1}}" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_variable_name_type_template_unique +msgid "Variable names must be unique by template" +msgstr "I nomi delle variabili devono essere univoci per modello" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__variable_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Variables" +msgstr "Variabili" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Variables %(field_names)s do not seem to be valid field path for model " +"%(model_name)s." +msgstr "" +"Le variabili %(field_names)s non sembrano essere percorsi campo validi per " +"il modello %(model_name)s." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Verify and save the wizard." +msgstr "Verifica e salva la procedura guidata." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__vi +msgid "Vietnamese" +msgstr "Vietnamita" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__url +msgid "Visit Website" +msgstr "Visita sito web" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "We were not able to fetch value of field: %(field)s" +msgstr "Non si è riusciti a ottenere il valore del campo: %(field)s" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__website_url +msgid "Website Url" +msgstr "URL sito web" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_gateway__gateway_type__whatsapp +msgid "WhatsApp" +msgstr "Whatsapp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "WhatsApp Account is required to import templates." +msgstr "Per importare i modelli è richiesto l'account WathsApp." + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_button +msgid "WhatsApp Template Button" +msgstr "Pulsante modello WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_variable +msgid "WhatsApp Template Variable" +msgstr "Variabile modello WhatsApp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.action_mail_whatsapp_template_gateway +msgid "WhatsApp Templates" +msgstr "Modelli WathsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__ir_actions_server__state__whatsapp +msgid "WhatsApp message" +msgstr "Messaggio WhatsApp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "WhatsApp template" +msgstr "Modello WathsApp" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml:0 +msgid "Whatsapp" +msgstr "Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_account_id +msgid "Whatsapp Account" +msgstr "Account WathsApp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Whatsapp Composer" +msgstr "Compositore Whattsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_from_phone +msgid "Whatsapp From Phone" +msgstr "Whatsapp da telefono" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_gateway_id +msgid "Whatsapp Gateway" +msgstr "Gateway WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway_whatsapp +msgid "Whatsapp Gateway services" +msgstr "Servizi gateway Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_partner +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_partner +msgid "Whatsapp Partner" +msgstr "Partner WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_security_key +msgid "Whatsapp Security Key" +msgstr "Chiave sicurezza Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Whatsapp Status" +msgstr "Stato Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_ids +msgid "Whatsapp Template" +msgstr "Modello WathsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_count +msgid "Whatsapp Template Count" +msgstr "Conteggio modelli WathsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_version +msgid "Whatsapp Version" +msgstr "Versione Whatsapp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Whatsapp configuration info" +msgstr "Informazioni configurazione Whatsapp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "You can not select field of %(model)s." +msgstr "Non si può selezionare il campo del modello %(model)s." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zu +msgid "Zulu" +msgstr "Zulu" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "e.g. https://www.example.com" +msgstr "es. https://www.example.com" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "meta business site." +msgstr "sito meta business." + +#~ msgid "Blacklisted Phone Is Mobile" +#~ msgstr "Il numero in blacklist è un cellulare" + +#~ msgid "" +#~ "Indicates if a blacklisted sanitized phone number is a mobile number. Helps " +#~ "distinguish which number is blacklisted when there is both a " +#~ "mobile and phone field in a model." +#~ msgstr "" +#~ "Indica se un numero di telefono ripulito della blacklist è di un cellulare. " +#~ "Aiuta a distinguere quali numeri sono in blacklist quando ci sono " +#~ "campi telefono per il fisso e il cellulare nel modello." + +#~ msgid "Phone/Mobile" +#~ msgstr "Telefono/cellulare" + +#~ msgid "" +#~ "Type of server action. The following values are available:\n" +#~ "- 'Update a Record': update the values of a record\n" +#~ "- 'Create Activity': create an activity (Discuss)\n" +#~ "- 'Send Email': post a message, a note or send an email (Discuss)\n" +#~ "- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +#~ "- 'Create Record': create a new record with new values\n" +#~ "- 'Execute Code': a block of Python code that will be executed\n" +#~ "- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +#~ "- 'Execute Existing Actions': define an action that triggers several other server actions\n" +#~ msgstr "" +#~ "Tipi si azioni server. Sono disponibili i seguenti valori:\n" +#~ "- 'Aggiorna record': aggiorna il valore di un record\n" +#~ "- 'Crea attività': crea una attività (Discussione)\n" +#~ "- 'Invia e.mail': inserisce un messaggio, una nota o invia una e-mail (Discussione)\n" +#~ "- 'Invia SMS': invia SMS, ne tiene traccia nei documenti (SMS)\n" +#~ "- 'Aggiungi/rimuovi chi segue': aggiunge o rimuove chi segue un record (Discussione)\n" +#~ "- 'Crea record': crea un nuovo record con valori nuovi\n" +#~ "- 'Esegui codice': un blocco di codice Python che verrà eseguito\n" +#~ "- 'Invia notifica webhook': invia una richiesta POST ad un sistema esterno, conosciuto come un webhook\n" +#~ "- 'Esegue azioni esistenti': definisce una azione che esegue diverse altre azioni\n" + +#~ msgid "Failed Messages" +#~ msgstr "Messaggi falliti" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + +#~ msgid "Main Attachment" +#~ msgstr "Allegato principale" + +#~ msgid "Message Content" +#~ msgstr "Contenuto messaggio" + +#~ msgid "Message content, to be used only in searches" +#~ msgstr "Contenuto messaggio, da utilizzare solo nelle ricerche" + +#~ msgid "Website Messages" +#~ msgstr "Messaggi sito web" + +#~ msgid "Website communication history" +#~ msgstr "Cronologia comunicazioni sito web" diff --git a/mail_gateway_whatsapp/i18n/mail_gateway_whatsapp.pot b/mail_gateway_whatsapp/i18n/mail_gateway_whatsapp.pot new file mode 100644 index 000000000..f6f023b69 --- /dev/null +++ b/mail_gateway_whatsapp/i18n/mail_gateway_whatsapp.pot @@ -0,0 +1,1433 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_gateway_whatsapp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Define the values of the fields Webhook Key and Whatsapp Security Key.\n" +" You should set some random value of your choice for this fields.\n" +" Ensure that facebook will be able to comunicate with your server." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 1 Call Number button is allowed." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 10 buttons is allowed." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 2 URL buttons is allowed." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Advanced Options." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Basic information." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your business settings menu" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Add a new number." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__af +msgid "Afrikaans" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sq +msgid "Albanian" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "All dynamic urls must have a placeholder." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model_id +msgid "Applies to" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__approved +msgid "Approved" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ar +msgid "Arabic" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__archived +msgid "Archived" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__authentication +msgid "Authentication" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__az +msgid "Azerbaijani" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Back to draft" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bn +msgid "Bengali" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "Blacklisted Phone is Phone" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__body +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__body +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Body" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/wizards/whatsapp_composer.py:0 +msgid "Body is required" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Body variables should start at 1 and not skip any number, missing %d" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bg +msgid "Bulgarian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__button_id +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__button +msgid "Button" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__name +msgid "Button Text" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_button_unique_name_per_template +msgid "Button name must be unique by template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__button_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Buttons" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Buttons may only contain one placeholder." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__call_number +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__phone_number +msgid "Call Number" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Cancel" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ca +msgid "Catalan" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__category +msgid "Category" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_cn +msgid "Chinese (CHN)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_hk +msgid "Chinese (HKG)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_tw +msgid "Chinese (TAI)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Click on Edit Button on the webhook area." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__company_id +msgid "Company" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_whatsapp_composer +msgid "Compose a whatsapp message" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_res_partner +msgid "Contact" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the API Version on the Whastapp Version field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Copy the phone identification number to the field Whastapp From phone" +" field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the token value to token field in this page." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Create a new application." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_uid +msgid "Created by" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_date +msgid "Created on" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating a permanent token" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating the Application from meta developer" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hr +msgid "Croatian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__cs +msgid "Czech" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__da +msgid "Danish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__deleted +msgid "Deleted" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__delivered +msgid "Delivered" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__disabled +msgid "Disabled" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_discuss_channel +msgid "Discussion Channel" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__display_name +msgid "Display Name" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_id +msgid "Document ID" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_model +msgid "Document Model Name" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Download Templates" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__draft +msgid "Draft" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_unique_name_gateway_id +msgid "Duplicate name is not allowed for Gateway." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nl +msgid "Dutch" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__dynamic +msgid "Dynamic" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en +msgid "English" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_gb +msgid "English (UK)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_us +msgid "English (US)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__et +msgid "Estonian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Export Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__field_name +msgid "Field" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Field template variables %(variables)s must be associated with a field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "" +"Field used to store sanitized phone number. Helps speeding up searches and " +"comparisons." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fil +msgid "Filipino" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__find_gateway +msgid "Find Gateway" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fi +msgid "Finnish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "First steps" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__footer +msgid "Footer" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fr +msgid "French" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__gateway_id +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Gateway" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__gateway_type +msgid "Gateway Type" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ka +msgid "Georgian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__de +msgid "German" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Go to Users / System Users and create a new one with administrator" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Go to Whatsapp / API Configuration menú." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__el +msgid "Greek" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__gu +msgid "Gujarati" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__has_message +msgid "Has Message" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ha +msgid "Hausa" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__header +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__header +msgid "Header" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__he +msgid "Hebrew" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hi +msgid "Hindi" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hu +msgid "Hungarian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__id +msgid "ID" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"If no error is raised, refresh this gateway data, and you should see that it is integrated.\n" +" You should be able to receive and send messages.\n" +" If an error is raised, check that the fields are filled properly and that facebook server is able to access your server." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "" +"If the sanitized phone number is on the blacklist, the contact won't receive" +" mass mailing sms anymore, from any list" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__in_appeal +msgid "In Appeal" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "" +"Indicates if a blacklisted sanitized phone number is a phone number. Helps " +"distinguish which number is blacklisted when there is both a " +"mobile and phone field in a model." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__id +msgid "Indonesian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Insert here the Jinja expression to get the partner ID" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ga +msgid "Irish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__is_required_template +msgid "Is Required Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__is_supported +msgid "Is Supported" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__it +msgid "Italian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ja +msgid "Japanese" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kn +msgid "Kannada" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kk +msgid "Kazakh" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__rw_rw +msgid "Kinyarwanda" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ko +msgid "Korean" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ky_kg +msgid "Kyrgyz (Kyrgyzstan)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__language +msgid "Language" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lo +msgid "Lao" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_date +msgid "Last Updated on" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Last delivery status reported by WhatsApp for this message." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lv +msgid "Latvian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__limit_exceeded +msgid "Limit Exceeded" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__line_type +msgid "Line Type" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lt +msgid "Lithuanian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mk +msgid "Macedonian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_compose_gateway_message +msgid "Mail Compose Gateway Message" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway +msgid "Mail Gateway" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template +msgid "Mail WhatsApp template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ms +msgid "Malay" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ml +msgid "Malayalam" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mr +msgid "Marathi" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__marketing +msgid "Marketing" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__body +msgid "Message" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_notification +msgid "Message Notifications" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_ids +msgid "Messages" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Meta developer platform" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Mimetype is not valid" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__model +msgid "Model Name" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__name +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Name" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nb +msgid "Norwegian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__number_field_name +msgid "Number Field Name" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On Facebook Develpment, return to the app menu and go to Whatsapp / " +"Configuration." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On the wizard, fill the URL field with Webhook URL field of the " +"gateway. For the verification identifier, use the Whatsapp Security " +"Key field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Once it is created, Generate a new token related to the created app with no " +"expiry and give access to all whatsapp permissions." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Only dynamic urls may have a placeholder." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Partner" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__paused +msgid "Paused" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending +msgid "Pending" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending_deletion +msgid "Pending Deletion" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fa +msgid "Persian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "Phone Blacklisted" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_mobile_search +msgid "Phone Number" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_thread.py:0 +msgid "Phone cannot be sanitized" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__name +msgid "Placeholder" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Please enter a valid URL in the format 'https://www.example.com'." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pl +msgid "Polish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_br +msgid "Portuguese (BR)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_pt +msgid "Portuguese (POR)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Press the button Integrate webhook." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pa +msgid "Punjabi" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__quick_reply +msgid "Quick Reply" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__read +msgid "Read" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__rejected +msgid "Rejected" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model +msgid "Related model" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ro +msgid "Romanian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ru +msgid "Russian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__sample_value +msgid "Sample Value" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "Sanitized Number" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Save this record. All the values have been filled" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select a name and create it" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Select the Other option, then Business in order to create " +"Whatsapp manager" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the Whatsapp API on the products of the application" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the business that you will use" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Send" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.whatsapp_composer_act_window +msgid "Send Whatsapp Message" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/ir_actions_server.py:0 +msgid "" +"Sending WhatsApp message can only be done on a non transient mail.thread " +"model" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__sent +msgid "Sent" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__sequence +msgid "Sequence" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sr +msgid "Serbian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_ir_actions_server +msgid "Server Action" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Setting webhook and version" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Show Chat" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Show the secret key of the application and copy it to the Webhook " +"secret field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sk +msgid "Slovak" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sl +msgid "Slovenian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es +msgid "Spanish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_ar +msgid "Spanish (ARG)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_mx +msgid "Spanish (MEX)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_es +msgid "Spanish (SPA)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__state +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_search +msgid "State" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__static +msgid "Static" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sw +msgid "Swahili" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sv +msgid "Swedish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Sync Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "Synchronization successfully." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ta +msgid "Tamil" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__te +msgid "Telugu" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__template_id +msgid "Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_name +msgid "Template Name" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_uid +msgid "Template Uid" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Template variable should be in format {{number}}. Cannot parse " +"'%(placeholder)s'" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Templates" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__th +msgid "Thai" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "The placeholder for a button can only be {{1}}." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "There should be exactly 1 variable in the header." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "" +"This template is not supported because has variables or " +"buttons." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__tr +msgid "Turkish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__button_type +msgid "Type" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Update a Record': update the values of a record\n" +"- 'Create Activity': create an activity (Discuss)\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +"- 'Create Record': create a new record with new values\n" +"- 'Execute Code': a block of Python code that will be executed\n" +"- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +"- 'Multi Actions': define an action that triggers several other server actions\n" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uk +msgid "Ukrainian" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Unable to send the whatsapp message" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ur +msgid "Urdu" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__url_type +msgid "Url Type" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__utility +msgid "Utility" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uz +msgid "Uzbek" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__variable_ids +msgid "Variable" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Variable in the header should be used as {{1}}" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_variable_name_type_template_unique +msgid "Variable names must be unique by template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__variable_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Variables" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Variables %(field_names)s do not seem to be valid field path for model " +"%(model_name)s." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Verify and save the wizard." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__vi +msgid "Vietnamese" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__url +msgid "Visit Website" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "We were not able to fetch value of field: %(field)s" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__website_url +msgid "Website Url" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_gateway__gateway_type__whatsapp +msgid "WhatsApp" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "WhatsApp Account is required to import templates." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_button +msgid "WhatsApp Template Button" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_variable +msgid "WhatsApp Template Variable" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.action_mail_whatsapp_template_gateway +msgid "WhatsApp Templates" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__ir_actions_server__state__whatsapp +msgid "WhatsApp message" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "WhatsApp template" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml:0 +msgid "Whatsapp" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_account_id +msgid "Whatsapp Account" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Whatsapp Composer" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_from_phone +msgid "Whatsapp From Phone" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_gateway_id +msgid "Whatsapp Gateway" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway_whatsapp +msgid "Whatsapp Gateway services" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_partner +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_partner +msgid "Whatsapp Partner" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_security_key +msgid "Whatsapp Security Key" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Whatsapp Status" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_ids +msgid "Whatsapp Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_count +msgid "Whatsapp Template Count" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_version +msgid "Whatsapp Version" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Whatsapp configuration info" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "You can not select field of %(model)s." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zu +msgid "Zulu" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "e.g. https://www.example.com" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "meta business site." +msgstr "" diff --git a/mail_gateway_whatsapp/i18n/pt_BR.po b/mail_gateway_whatsapp/i18n/pt_BR.po new file mode 100644 index 000000000..5c4785bc4 --- /dev/null +++ b/mail_gateway_whatsapp/i18n/pt_BR.po @@ -0,0 +1,1504 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_gateway_whatsapp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2026-05-19 02:46+0000\n" +"Last-Translator: \"Rodrigo A. Madureira\" \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.15.2\n" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Define the values of the fields Webhook Key and Whatsapp Security Key.\n" +" You should set some random value of your choice for this fields.\n" +" Ensure that facebook will be able to comunicate with your server." +msgstr "" +"Defina os valores dos campos Chave do Webhook e Chave de Segurança do WhatsApp.\n" +" Você deve definir um valor aleatório de sua escolha para esses campos.\n" +" Certifique-se de que o Facebook poderá se comunicar com o seu servidor." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 1 Call Number button is allowed." +msgstr "É permitido, no máximo, 1 botão de chamada." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 10 buttons is allowed." +msgstr "O máximo de 10 botões permitidos." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "A maximum of 2 URL buttons is allowed." +msgstr "O máximo de 2 botões de URL é permitido." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access" +msgstr "Acesso" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Advanced Options." +msgstr "Acesse o menu Configuração / Opções Avançadas." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access the menu Configuration / Basic information." +msgstr "Acesse o menu Configuração / Informação Básica." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your" +msgstr "Seu acesso" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Access your business settings menu" +msgstr "Acesse seu menu de configurações de negócios" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "Action Needed" +msgstr "Ação requerida" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Add a new number." +msgstr "Adicione um novo número." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__af +msgid "Afrikaans" +msgstr "Africano" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sq +msgid "Albanian" +msgstr "Albanês" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "All dynamic urls must have a placeholder." +msgstr "Todas as URLs dinâmicas devem ter um marcador de posição." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model_id +msgid "Applies to" +msgstr "Aplica-se a" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__approved +msgid "Approved" +msgstr "Aprovado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ar +msgid "Arabic" +msgstr "Árabe" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__archived +msgid "Archived" +msgstr "Arquivado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_attachment_count +msgid "Attachment Count" +msgstr "Contagem de Anexos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__authentication +msgid "Authentication" +msgstr "Autenticação" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__az +msgid "Azerbaijani" +msgstr "Azerbaijano" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Back to draft" +msgstr "Voltar para rascunho" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bn +msgid "Bengali" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "Blacklisted Phone is Phone" +msgstr "Telefone bloqueado é telefone" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__body +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__body +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Body" +msgstr "Corpo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/wizards/whatsapp_composer.py:0 +msgid "Body is required" +msgstr "Corpo é requerido" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Body variables should start at 1 and not skip any number, missing %d" +msgstr "" +"As variáveis do corpo devem começar em 1 e não pular nenhum número, faltando" +" %d" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__bg +msgid "Bulgarian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__button_id +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__button +msgid "Button" +msgstr "Botão" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__name +msgid "Button Text" +msgstr "Texto do Botão" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_button_unique_name_per_template +msgid "Button name must be unique by template" +msgstr "O nome do botão deve ser único por modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__button_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Buttons" +msgstr "Botões" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Buttons may only contain one placeholder." +msgstr "Os botões podem conter apenas um marcador de posição." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__call_number +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__phone_number +msgid "Call Number" +msgstr "Número de chamada" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ca +msgid "Catalan" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__category +msgid "Category" +msgstr "Categoria" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_cn +msgid "Chinese (CHN)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_hk +msgid "Chinese (HKG)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zh_tw +msgid "Chinese (TAI)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Click on Edit Button on the webhook area." +msgstr "Clique em Botão Editar na area do webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__company_id +msgid "Company" +msgstr "Empresa" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_whatsapp_composer +msgid "Compose a whatsapp message" +msgstr "Escreva uma mensagem no WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_res_partner +msgid "Contact" +msgstr "Contato" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the API Version on the Whastapp Version field." +msgstr "Copie a Versão da API no campo Versão do Whatsapp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Copy the phone identification number to the field Whastapp From phone" +" field." +msgstr "" +"Copie o número de identificação do telefone para o campo Telefone do " +"WhatsApp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Copy the token value to token field in this page." +msgstr "Copie o token para o campo de token nesta página." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Create a new application." +msgstr "Criar um novo aplicativo." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__create_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating a permanent token" +msgstr "Criando um token permanente" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Creating the Application from meta developer" +msgstr "Criando a Aplicação do desenvolvedor meta" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hr +msgid "Croatian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__cs +msgid "Czech" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__da +msgid "Danish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__deleted +msgid "Deleted" +msgstr "Apagado" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__delivered +msgid "Delivered" +msgstr "Entregue" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__disabled +msgid "Disabled" +msgstr "Desabilitado" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_discuss_channel +msgid "Discussion Channel" +msgstr "Canal de Discussão" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__display_name +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__display_name +msgid "Display Name" +msgstr "Nome Exibido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_id +msgid "Document ID" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__res_model +msgid "Document Model Name" +msgstr "Nome do Modelo de Documento" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Download Templates" +msgstr "Download Modelos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__draft +msgid "Draft" +msgstr "Rascunho" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_unique_name_gateway_id +msgid "Duplicate name is not allowed for Gateway." +msgstr "Nome duplicado não é permitido para o Gateway." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nl +msgid "Dutch" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__dynamic +msgid "Dynamic" +msgstr "Dinâmica" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_thread +msgid "Email Thread" +msgstr "Tópico de e-mail" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en +msgid "English" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_gb +msgid "English (UK)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__en_us +msgid "English (US)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__et +msgid "Estonian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Export Template" +msgstr "Exportar Modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__field_name +msgid "Field" +msgstr "Campo" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Field template variables %(variables)s must be associated with a field." +msgstr "" +"As variáveis de modelo de campo %(variáveis) devem ser associadas a um " +"campo." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "" +"Field used to store sanitized phone number. Helps speeding up searches and " +"comparisons." +msgstr "" +"Campo usado para armazenar número de telefone. Ajuda a acelerar as buscas e " +"comparações." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fil +msgid "Filipino" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__find_gateway +msgid "Find Gateway" +msgstr "Procurar Gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fi +msgid "Finnish" +msgstr "Terminar" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "First steps" +msgstr "Primeiros passos" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (Parceiros)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__footer +msgid "Footer" +msgstr "Rodapé" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fr +msgid "French" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__gateway_id +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Gateway" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__gateway_type +msgid "Gateway Type" +msgstr "Tipo de Gateway" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ka +msgid "Georgian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__de +msgid "German" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Go to Users / System Users and create a new one with administrator" +msgstr "" +"Acesse Usuários / Usuários do Sistema e crie um novo usuário com " +"privilégios de administrador" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Go to Whatsapp / API Configuration menú." +msgstr "Vá para Whatsapp / API Configuration menu." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__el +msgid "Greek" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__gu +msgid "Gujarati" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__has_message +msgid "Has Message" +msgstr "Tem Mensagem" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ha +msgid "Hausa" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__header +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_variable__line_type__header +msgid "Header" +msgstr "Cabeçalho" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__he +msgid "Hebrew" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hi +msgid "Hindi" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__hu +msgid "Hungarian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_discuss_channel__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway_whatsapp__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_thread__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__id +msgid "ID" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se marcado, novas mensagens solicitarão sua atenção." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Se marcado, algumas mensagens tem erro de entrega." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"If no error is raised, refresh this gateway data, and you should see that it is integrated.\n" +" You should be able to receive and send messages.\n" +" If an error is raised, check that the fields are filled properly and that facebook server is able to access your server." +msgstr "" +"Se nenhum erro for exibido, atualize os dados do gateway e você deverá ver que ele está integrado.\n" +" Você deverá conseguir enviar e receber mensagens.\n" +" Se ocorrer um erro, verifique se os campos foram preenchidos corretamente e se o servidor do Facebook consegue acessar o seu servidor." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "" +"If the sanitized phone number is on the blacklist, the contact won't receive" +" mass mailing sms anymore, from any list" +msgstr "" +"Se o número de telefone sanitizado estiver na lista negra, o contato não " +"receberá mais SMS em massa, de nenhuma lista" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__in_appeal +msgid "In Appeal" +msgstr "Em apelação" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__phone_blacklisted +msgid "" +"Indicates if a blacklisted sanitized phone number is a phone number. Helps " +"distinguish which number is blacklisted when there is both a " +"mobile and phone field in a model." +msgstr "" +"Indica se o número telefônico higienizado é um número fixo. Ajuda a " +"distinguir qual número está na lista negra quando o fixo e o " +"móvel estão em um modelo." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__id +msgid "Indonesian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Insert here the Jinja expression to get the partner ID" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ga +msgid "Irish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_is_follower +msgid "Is Follower" +msgstr "É Seguidor" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__is_required_template +msgid "Is Required Template" +msgstr "É Modelo Requerido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__is_supported +msgid "Is Supported" +msgstr "É Suportado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__it +msgid "Italian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ja +msgid "Japanese" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kn +msgid "Kannada" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__kk +msgid "Kazakh" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__rw_rw +msgid "Kinyarwanda" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ko +msgid "Korean" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ky_kg +msgid "Kyrgyz (Kyrgyzstan)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__language +msgid "Language" +msgstr "Idioma" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lo +msgid "Lao" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_uid +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__write_date +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__write_date +msgid "Last Updated on" +msgstr "Última Atualização Feita em" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Last delivery status reported by WhatsApp for this message." +msgstr "Último status de entrega informado pelo WhatsApp para esta mensagem." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lv +msgid "Latvian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__limit_exceeded +msgid "Limit Exceeded" +msgstr "Limite Excedido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__line_type +msgid "Line Type" +msgstr "Tipo de Linha" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__lt +msgid "Lithuanian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mk +msgid "Macedonian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_compose_gateway_message +msgid "Mail Compose Gateway Message" +msgstr "Mensagem do Gateway de Composição de E-mail" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway +msgid "Mail Gateway" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template +msgid "Mail WhatsApp template" +msgstr "Modelo de mensagem do Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ms +msgid "Malay" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ml +msgid "Malayalam" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__mr +msgid "Marathi" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__marketing +msgid "Marketing" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__body +msgid "Message" +msgstr "Mensagem" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error +msgid "Message Delivery error" +msgstr "Erro de entrega de Mensagem" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_notification +msgid "Message Notifications" +msgstr "Notificações de mensagens" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_ids +msgid "Messages" +msgstr "Mensagens" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Meta developer platform" +msgstr "Plataforma de desenvolvedor da Meta" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Mimetype is not valid" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__model +msgid "Model Name" +msgstr "Nome do Modelo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__name +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Name" +msgstr "Nome" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__nb +msgid "Norwegian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__number_field_name +msgid "Number Field Name" +msgstr "Nome do campo numérico" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de Ações" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of errors" +msgstr "Número de erros" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Número de mensagens que exigem ação" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_res_partner__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero de mensagens com um erro de entrega" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On Facebook Develpment, return to the app menu and go to Whatsapp / " +"Configuration." +msgstr "" +"Em Desenvolvedor do Facebook, retorne para o menu de aplicações e vá para " +"Whatsapp / Configuration." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"On the wizard, fill the URL field with Webhook URL field of the " +"gateway. For the verification identifier, use the Whatsapp Security " +"Key field." +msgstr "" +"No assistente, preencha o campo URL com o campo URL do Webhook do " +"gateway. Para o identificador de verificação, use o campo Chave de " +"Segurança do WhatsApp." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Once it is created, Generate a new token related to the created app with no " +"expiry and give access to all whatsapp permissions." +msgstr "" +"Após a criação, gere um novo token relacionado ao aplicativo criado, sem " +"prazo de validade, e conceda acesso a todas as permissões do WhatsApp." + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Only dynamic urls may have a placeholder." +msgstr "Somente URLs dinâmicas podem ter um marcador de posição." + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "Partner" +msgstr "Parceiro" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__paused +msgid "Paused" +msgstr "Pausado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending +msgid "Pending" +msgstr "Pendente" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__pending_deletion +msgid "Pending Deletion" +msgstr "Exclusão pendente" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__fa +msgid "Persian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized_blacklisted +msgid "Phone Blacklisted" +msgstr "Telefones Bloqueados" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_mobile_search +msgid "Phone Number" +msgstr "Número de telefone" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_thread.py:0 +msgid "Phone cannot be sanitized" +msgstr "Telefone não pode ser sanitizado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__name +msgid "Placeholder" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Please enter a valid URL in the format 'https://www.example.com'." +msgstr "" +"Por favor entre com uma URL válida no formato 'https://www.example.com'." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pl +msgid "Polish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_br +msgid "Portuguese (BR)" +msgstr "Português (BR)" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pt_pt +msgid "Portuguese (POR)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Press the button Integrate webhook." +msgstr "Pressione o botão Integrar webhook." + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__pa +msgid "Punjabi" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__quick_reply +msgid "Quick Reply" +msgstr "Resposta Rápida" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__read +msgid "Read" +msgstr "Lido" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__state__rejected +msgid "Rejected" +msgstr "Rejeitado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__model +msgid "Related model" +msgstr "Modelo relacionado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ro +msgid "Romanian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ru +msgid "Russian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__sample_value +msgid "Sample Value" +msgstr "Valor de exemplo" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_res_partner__phone_sanitized +msgid "Sanitized Number" +msgstr "Número Sanitizado" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Save this record. All the values have been filled" +msgstr "Salvar este registro. Todos os valores foram preenchidos" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select a name and create it" +msgstr "Selecione um nome e crie isto" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Select the Other option, then Business in order to create " +"Whatsapp manager" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the Whatsapp API on the products of the application" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Select the business that you will use" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Send" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.whatsapp_composer_act_window +msgid "Send Whatsapp Message" +msgstr "Enviar Mensagem de Whatsapp" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/ir_actions_server.py:0 +msgid "" +"Sending WhatsApp message can only be done on a non transient mail.thread " +"model" +msgstr "" +"O envio de mensagens do WhatsApp só pode ser feito em um modelo de thread de" +" e-mail não transitório" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js:0 +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_notification__whatsapp_status__sent +msgid "Sent" +msgstr "Enviado" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__sequence +msgid "Sequence" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sr +msgid "Serbian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_ir_actions_server +msgid "Server Action" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Setting webhook and version" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Show Chat" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "" +"Show the secret key of the application and copy it to the Webhook " +"secret field." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sk +msgid "Slovak" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sl +msgid "Slovenian" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es +msgid "Spanish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_ar +msgid "Spanish (ARG)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_mx +msgid "Spanish (MEX)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__es_es +msgid "Spanish (SPA)" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__state +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_search +msgid "State" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__url_type__static +msgid "Static" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sw +msgid "Swahili" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__sv +msgid "Swedish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Sync Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "Synchronization successfully." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ta +msgid "Tamil" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__te +msgid "Telugu" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_variable__template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_whatsapp_composer__template_id +msgid "Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_name +msgid "Template Name" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__template_uid +msgid "Template Uid" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Template variable should be in format {{number}}. Cannot parse " +"'%(placeholder)s'" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Templates" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__th +msgid "Thai" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "The placeholder for a button can only be {{1}}." +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "There should be exactly 1 variable in the header." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "" +"This template is not supported because has variables or " +"buttons." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__tr +msgid "Turkish" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__state +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__button_type +msgid "Type" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_actions_server__state +#: model:ir.model.fields,help:mail_gateway_whatsapp.field_ir_cron__state +msgid "" +"Type of server action. The following values are available:\n" +"- 'Update a Record': update the values of a record\n" +"- 'Create Activity': create an activity (Discuss)\n" +"- 'Send Email': post a message, a note or send an email (Discuss)\n" +"- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +"- 'Create Record': create a new record with new values\n" +"- 'Execute Code': a block of Python code that will be executed\n" +"- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +"- 'Multi Actions': define an action that triggers several other server actions\n" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uk +msgid "Ukrainian" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py:0 +msgid "Unable to send the whatsapp message" +msgstr "Não foi possível enviar a mensagem do WhatsApp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__ur +msgid "Urdu" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__url_type +msgid "Url Type" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__category__utility +msgid "Utility" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__uz +msgid "Uzbek" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__variable_ids +msgid "Variable" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "Variable in the header should be used as {{1}}" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.constraint,message:mail_gateway_whatsapp.constraint_mail_whatsapp_template_variable_name_type_template_unique +msgid "Variable names must be unique by template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template__variable_ids +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "Variables" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "" +"Variables %(field_names)s do not seem to be valid field path for model " +"%(model_name)s." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Verify and save the wizard." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__vi +msgid "Vietnamese" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template_button__button_type__url +msgid "Visit Website" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "We were not able to fetch value of field: %(field)s" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_whatsapp_template_button__website_url +msgid "Website Url" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_gateway__gateway_type__whatsapp +msgid "WhatsApp" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +msgid "WhatsApp Account is required to import templates." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_button +msgid "WhatsApp Template Button" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_whatsapp_template_variable +msgid "WhatsApp Template Variable" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_gateway.py:0 +#: model:ir.actions.act_window,name:mail_gateway_whatsapp.action_mail_whatsapp_template_gateway +msgid "WhatsApp Templates" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__ir_actions_server__state__whatsapp +msgid "WhatsApp message" +msgstr "Mensagem Whatsapp" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.ir_actions_server_view_form +msgid "WhatsApp template" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-javascript +#: code:addons/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml:0 +msgid "Whatsapp" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_account_id +msgid "Whatsapp Account" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.whatsapp_composer_form_view +msgid "Whatsapp Composer" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_from_phone +msgid "Whatsapp From Phone" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_gateway_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_gateway_id +msgid "Whatsapp Gateway" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model,name:mail_gateway_whatsapp.model_mail_gateway_whatsapp +msgid "Whatsapp Gateway services" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_partner +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_partner +msgid "Whatsapp Partner" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_security_key +msgid "Whatsapp Security Key" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_notification__whatsapp_status +msgid "Whatsapp Status" +msgstr "Status do Whatsapp" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_actions_server__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_ir_cron__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_compose_gateway_message__whatsapp_template_id +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_ids +msgid "Whatsapp Template" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_template_count +msgid "Whatsapp Template Count" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields,field_description:mail_gateway_whatsapp.field_mail_gateway__whatsapp_version +msgid "Whatsapp Version" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "Whatsapp configuration info" +msgstr "" + +#. module: mail_gateway_whatsapp +#. odoo-python +#: code:addons/mail_gateway_whatsapp/models/mail_whatsapp_template.py:0 +msgid "You can not select field of %(model)s." +msgstr "" + +#. module: mail_gateway_whatsapp +#: model:ir.model.fields.selection,name:mail_gateway_whatsapp.selection__mail_whatsapp_template__language__zu +msgid "Zulu" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.view_mail_whatsapp_template_form +msgid "e.g. https://www.example.com" +msgstr "" + +#. module: mail_gateway_whatsapp +#: model_terms:ir.ui.view,arch_db:mail_gateway_whatsapp.mail_gateway_form_view +msgid "meta business site." +msgstr "" + +#~ msgid "Blacklisted Phone Is Mobile" +#~ msgstr "Telefone bloqueado é celular" + +#~ msgid "" +#~ "Indicates if a blacklisted sanitized phone number is a mobile number. Helps " +#~ "distinguish which number is blacklisted when there is both a " +#~ "mobile and phone field in a model." +#~ msgstr "" +#~ "Indica se o número telefônico higienizado é um número móvel. Ajuda a " +#~ "distinguir qual número está na lista negra quando tanto o fixo " +#~ "como o móvel estão em um modelo." + +#~ msgid "Phone/Mobile" +#~ msgstr "Telefone/Celular" + +#~ msgid "" +#~ "Type of server action. The following values are available:\n" +#~ "- 'Update a Record': update the values of a record\n" +#~ "- 'Create Activity': create an activity (Discuss)\n" +#~ "- 'Send Email': post a message, a note or send an email (Discuss)\n" +#~ "- 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss)\n" +#~ "- 'Create Record': create a new record with new values\n" +#~ "- 'Execute Code': a block of Python code that will be executed\n" +#~ "- 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook\n" +#~ "- 'Execute Existing Actions': define an action that triggers several other server actions\n" +#~ msgstr "" +#~ "Tipo de ação do servidor. Os seguintes valores estão disponíveis:\n" +#~ "- 'Atualizar um Registro': atualiza os valores de um registro\n" +#~ "- 'Criar Atividade': cria uma atividade (Discussão)\n" +#~ "- 'Enviar E-mail': publica uma mensagem, uma nota ou envia um e-mail (Discussão)\n" +#~ "- 'Enviar SMS': envia SMS e os registra em documentos (SMS)\n" +#~ "- 'Adicionar/Remover Seguidores': adiciona ou remove seguidores de um registro (Discussão)\n" +#~ "- 'Criar Registro': cria um novo registro com novos valores\n" +#~ "- 'Executar Código': um bloco de código Python que será executado\n" +#~ "- 'Enviar Notificação Webhook': envia uma solicitação POST para um sistema externo, também conhecido como Webhook\n" +#~ "- 'Executar Ações Existentes': define uma ação que aciona várias outras ações do servidor\n" diff --git a/mail_gateway_whatsapp/models/__init__.py b/mail_gateway_whatsapp/models/__init__.py new file mode 100644 index 000000000..6de8a21b4 --- /dev/null +++ b/mail_gateway_whatsapp/models/__init__.py @@ -0,0 +1,8 @@ +from . import ir_actions_server +from . import mail_gateway +from . import mail_thread +from . import mail_gateway_whatsapp +from . import discuss_channel +from . import res_partner +from . import mail_whatsapp_template +from . import mail_notification diff --git a/mail_gateway_whatsapp/models/discuss_channel.py b/mail_gateway_whatsapp/models/discuss_channel.py new file mode 100644 index 000000000..01e3fc1a1 --- /dev/null +++ b/mail_gateway_whatsapp/models/discuss_channel.py @@ -0,0 +1,22 @@ +# Copyright 2024 Dixmit +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models +from odoo.tools.misc import file_path + +from odoo.addons.base.models.avatar_mixin import get_hsl_from_seed + + +class DiscussChannel(models.Model): + _inherit = "discuss.channel" + + def _generate_avatar_gateway(self): + if self.gateway_id.gateway_type == "whatsapp": + path = file_path("mail_gateway_whatsapp/static/description/icon.svg") + with open(path) as f: + avatar = f.read() + + bgcolor = get_hsl_from_seed(self.uuid) + avatar = avatar.replace("fill:#875a7b", f"fill:{bgcolor}") + return avatar + return super()._generate_avatar_gateway() diff --git a/mail_gateway_whatsapp/models/ir_actions_server.py b/mail_gateway_whatsapp/models/ir_actions_server.py new file mode 100644 index 000000000..574ef094f --- /dev/null +++ b/mail_gateway_whatsapp/models/ir_actions_server.py @@ -0,0 +1,90 @@ +# Copyright 2025 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import markupsafe + +from odoo import api, exceptions, fields, models + + +class IrServerAction(models.Model): + _inherit = "ir.actions.server" + + state = fields.Selection( + selection_add=[("whatsapp", "WhatsApp message")], + ondelete={"whatsapp": "cascade"}, + ) + whatsapp_gateway_id = fields.Many2one( + comodel_name="mail.gateway", domain=[("gateway_type", "=", "whatsapp")] + ) + whatsapp_partner = fields.Char() + whatsapp_template_id = fields.Many2one( + comodel_name="mail.whatsapp.template", + domain="[('gateway_id', '=', whatsapp_gateway_id),('model_id', '=', model_id)]", + ) + + @api.depends("state") + def _compute_available_model_ids(self): + gateway_based = self.filtered(lambda action: action.state == "whatsapp") + if gateway_based: + mail_models = self.env["ir.model"].search( + [("is_mail_thread", "=", True), ("transient", "=", False)] + ) + gateway_based.available_model_ids = mail_models.ids + return super( + IrServerAction, self - gateway_based + )._compute_available_model_ids() + + @api.constrains("state", "model_id") + def _check_whatsapp_model_coherency(self): + for action in self: + if action.state == "whatsapp" and ( + action.model_id.transient or not action.model_id.is_mail_thread + ): + raise exceptions.ValidationError( + self.env._( + "Sending WhatsApp message can only be done on a non transient " + "mail.thread model" + ) + ) + + def _run_action_whatsapp_multi(self, eval_context=None): + # Method called by upstream in ir.actions~_get_runner() using naming convention + context = self.env.context + if ( + not self.whatsapp_template_id + or (not context.get("active_ids") and not context.get("active_id")) + or self._is_recompute() + ): + return False + res_ids = context.get("active_ids", [context.get("active_id")]) + for record in self.env[self.model_id.model].browse(res_ids): + partner_id = int( + self.env["mail.render.mixin"]._render_template( + self.whatsapp_partner, record._name, [record.id] + )[record.id] + ) + partner = self.env["res.partner"].browse(partner_id) + partner._whatsapp_get_channel("phone", self.whatsapp_gateway_id) + gateway_channel = partner.gateway_channel_ids.filtered( + lambda x: x.gateway_id == self.whatsapp_gateway_id + ) + body = markupsafe.Markup( + self.whatsapp_template_id.with_context( + default_res_id=record.id + ).render_body_message() + ) + # pylint: disable=translation-required + record.with_context( + whatsapp_template_id=self.whatsapp_template_id.id, res_id=record.id + ).message_post( + body=body, + subtype_xmlid="mail.mt_comment", + message_type="comment", + gateway_notifications=[ + { + "channel_type": "gateway", + "gateway_channel_id": gateway_channel.id, + "partner_id": partner_id, + } + ], + ) + return False diff --git a/mail_gateway_whatsapp/models/mail_gateway.py b/mail_gateway_whatsapp/models/mail_gateway.py new file mode 100644 index 000000000..c91202f2a --- /dev/null +++ b/mail_gateway_whatsapp/models/mail_gateway.py @@ -0,0 +1,77 @@ +# Copyright 2022 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import requests + +from odoo import api, fields, models +from odoo.exceptions import UserError +from odoo.tools.urls import urljoin + +BASE_URL = "https://graph.facebook.com/" + + +class MailGateway(models.Model): + _inherit = "mail.gateway" + + whatsapp_security_key = fields.Char() + gateway_type = fields.Selection( + selection_add=[("whatsapp", "WhatsApp")], ondelete={"whatsapp": "cascade"} + ) + whatsapp_from_phone = fields.Char() + whatsapp_version = fields.Char(default="23.0") + whatsapp_account_id = fields.Char() + whatsapp_template_ids = fields.One2many("mail.whatsapp.template", "gateway_id") + whatsapp_template_count = fields.Integer(compute="_compute_whatsapp_template_count") + + @api.depends("whatsapp_template_ids") + def _compute_whatsapp_template_count(self): + for gateway in self: + gateway.whatsapp_template_count = len(gateway.whatsapp_template_ids) + + def button_import_whatsapp_template(self): + self.ensure_one() + WhatsappTemplate = self.env["mail.whatsapp.template"] + if not self.whatsapp_account_id: + raise UserError( + self.env._("WhatsApp Account is required to import templates.") + ) + meta_info = {} + template_url = urljoin( + BASE_URL, + f"v{self.whatsapp_version}/{self.whatsapp_account_id}/message_templates", + ) + try: + meta_request = requests.get( + template_url, + headers={"Authorization": f"Bearer {self.token}"}, + timeout=10, + ) + meta_request.raise_for_status() + meta_info = meta_request.json() + except Exception as err: + raise UserError(str(err)) from err + current_templates = WhatsappTemplate.with_context(active_test=False).search( + [("gateway_id", "=", self.id)] + ) + templates_by_id = {t.template_uid: t for t in current_templates} + create_vals = [] + for template_data in meta_info.get("data", []): + ws_template = templates_by_id.get(template_data["id"]) + if ws_template: + ws_template.write( + ws_template._prepare_values_to_import(self, template_data) + ) + else: + create_vals.append( + WhatsappTemplate._prepare_values_to_import(self, template_data) + ) + WhatsappTemplate.create(create_vals) + return { + "type": "ir.actions.client", + "tag": "display_notification", + "params": { + "title": self.env._("WhatsApp Templates"), + "type": "success", + "message": self.env._("Synchronization successfully."), + "next": {"type": "ir.actions.act_window_close"}, + }, + } diff --git a/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py b/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py new file mode 100644 index 000000000..b90ef6a59 --- /dev/null +++ b/mail_gateway_whatsapp/models/mail_gateway_whatsapp.py @@ -0,0 +1,496 @@ +# Copyright 2024 Dixmit +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import hashlib +import hmac +import logging +import mimetypes +import re +import traceback +from datetime import datetime +from io import StringIO + +import requests +import requests_toolbelt +from markupsafe import Markup + +from odoo import models +from odoo.exceptions import UserError +from odoo.http import request +from odoo.tools import html2plaintext, plaintext2html + +from odoo.addons.base.models.ir_mail_server import MailDeliveryException +from odoo.addons.mail.tools.discuss import Store + +_logger = logging.getLogger(__name__) + +# Text formatting of the whatsapp clients, and its html counterpart. +WHATSAPP_MARKERS = {"*": "strong", "_": "em", "~": "s", "```": "code"} +HTML_TAGS = { + "b": "*", + "strong": "*", + "i": "_", + "em": "_", + "s": "~", + "del": "~", + "code": "```", +} +# Statuses sent by the webhook that are reflected on the notifications. +STATUSES_TO_PROCESS = {"sent", "delivered", "read", "failed"} +MARKED_TEXT = r"(?]*>.*?|<[^>]+>)", re.DOTALL) + + +class MailGatewayWhatsappService(models.AbstractModel): + _inherit = "mail.gateway.abstract" + _name = "mail.gateway.whatsapp" + _description = "Whatsapp Gateway services" + + def _receive_get_update(self, bot_data, req, **kwargs): + self._verify_update(bot_data, {}) + gateway = self.env["mail.gateway"].sudo().browse(bot_data["id"]) + if kwargs.get("hub.verify_token") != gateway.whatsapp_security_key: + return None + gateway.integrated_webhook_state = "integrated" + response = request.make_response(kwargs.get("hub.challenge")) + response.status_code = 200 + return response + + def _set_webhook(self, gateway): + gateway.integrated_webhook_state = "pending" + + def _verify_update(self, bot_data, kwargs): + signature = request.httprequest.headers.get("x-hub-signature-256") + if not signature: + return False + hex_dig = hmac.new( + bot_data["webhook_secret"].encode(), + request.httprequest.data, + hashlib.sha256, + ).hexdigest() + return f"sha256={hex_dig}" == signature + + def _get_channel_vals(self, gateway, token, update): + result = super()._get_channel_vals(gateway, token, update) + for contact in update.get("contacts", []): + if contact["wa_id"] == token: + result["name"] = contact["profile"]["name"] + continue + return result + + def _receive_update(self, gateway, update): + if update: + for entry in update["entry"]: + for change in entry["changes"]: + if change["field"] != "messages": + continue + for message in change["value"].get("messages", []): + chat = self._get_channel( + gateway, message["from"], change["value"], force_create=True + ) + if not chat: + continue + self._process_update(chat, message, change["value"]) + for status_info in change["value"].get("statuses", []): + chat_id = gateway._get_channel_id(status_info["recipient_id"]) + if ( + status_info.get("status") not in STATUSES_TO_PROCESS + or not chat_id + ): + continue + self._process_update_status(chat_id, status_info) + + def _process_update_status(self, chat_id, status_info): + notification = ( + self.env["mail.notification"] + .sudo() + .search( + [ + ("gateway_message_id", "=", status_info["id"]), + ("gateway_channel_id", "=", chat_id), + ] + ) + ) + if not notification: + return + if status_info["status"] != "failed": + if notification._set_whatsapp_status(status_info["status"]): + notification.mail_message_id._notify_message_notification_update() + return + errors = [ + f"[{error['code']}] {error['error_data']['details']}" + for error in status_info.get("errors", []) + ] + notification.write( + { + "failure_type": "unknown", + "notification_status": "exception", + "failure_reason": "\n".join(errors), + } + ) + # notify user that we have a failure + notification.mail_message_id._notify_message_notification_update() + + def _whatsapp_to_html(self, body): + """Turn the text markers of an incoming body into html tags.""" + parts = HTML_TAG.split(plaintext2html(body)) + for index in range(0, len(parts), 2): + for marker, tag in WHATSAPP_MARKERS.items(): + parts[index] = re.sub( + MARKED_TEXT.format(re.escape(marker)), + rf"<{tag}>\1", + parts[index], + flags=re.DOTALL, + ) + return Markup("".join(parts)) + + def _process_update(self, chat, message, value): + chat.ensure_one() + body = "" + attachments = [] + if message.get("text"): + body = message.get("text").get("body") + for key in ["image", "audio", "video", "document", "sticker"]: + if message.get(key): + image_id = message.get(key).get("id") + if image_id: + image_info_request = requests.get( + f"https://graph.facebook.com/" + f"v{chat.gateway_id.whatsapp_version}/{image_id}", + headers={ + "Authorization": f"Bearer {chat.gateway_id.token}", + }, + timeout=10, + proxies=self._get_proxies(), + ) + image_info_request.raise_for_status() + image_info = image_info_request.json() + image_url = image_info["url"] + else: + # The media data already holds the url and the mimetype + image_info = message.get(key) + image_url = image_info.get("url") + if not image_url: + continue + image_request = requests.get( + image_url, + headers={ + "Authorization": f"Bearer {chat.gateway_id.token}", + }, + timeout=10, + proxies=self._get_proxies(), + ) + image_request.raise_for_status() + attachment_info = {} + if "audio/" in image_info["mime_type"]: + # Tell discuss to treat this attachment as voice. + attachment_info["voice"] = True + body += message.get(key).get("caption", "") + attachments.append( + ( + "{}{}".format( + image_id or key, + mimetypes.guess_extension(image_info["mime_type"]), + ), + image_request.content, + attachment_info, + ) + ) + body = self._whatsapp_to_html(body) if body else Markup() + if message.get("location"): + body += Markup( + 'Location' + ) % (message["location"]["latitude"], message["location"]["longitude"]) + if message.get("contacts"): + pass + if len(body) > 0 or attachments: + author = self._get_author(chat.gateway_id, value) + if author._name == "mail.guest": + chat = chat.with_user(self.env.ref("base.public_user").id).with_context( + guest=author + ) + # TODO: Check the sudo... + new_message = chat.sudo().message_post( + body=body, + author_id=author and author._name == "res.partner" and author.id, + gateway_type="whatsapp", + date=datetime.fromtimestamp(int(message["timestamp"])), + # message_id=update.message.message_id, + subtype_xmlid="mail.mt_comment", + message_type="comment", + attachments=attachments, + ) + self._post_process_message(new_message, chat) + related_message_id = message.get("context", {}).get("id", False) + if related_message_id: + related_message = ( + self.env["mail.notification"] + .search( + [ + ("gateway_channel_id", "=", chat.id), + ("gateway_message_id", "=", related_message_id), + ] + ) + .mail_message_id + ) + new_message.parent_id = related_message.id + if related_message and related_message.gateway_message_id: + new_related_message = ( + self.env[related_message.gateway_message_id.model] + .browse(related_message.gateway_message_id.res_id) + .sudo() + .message_post( + body=body, + author_id=author + and author._name == "res.partner" + and author.id, + gateway_type="whatsapp", + date=datetime.fromtimestamp(int(message["timestamp"])), + # message_id=update.message.message_id, + subtype_xmlid="mail.mt_comment", + message_type="comment", + attachments=attachments, + ) + ) + self._post_process_reply(related_message) + new_message.gateway_message_id = new_related_message + gateway_thread_data = new_message.sudo().gateway_thread_data + Store(bus_channel=new_message._bus_channel()).add( + new_message, + {"gateway_thread_data": gateway_thread_data}, + ).bus_send() + + def _send( + self, + gateway, + record, + auto_commit=False, + raise_exception=False, + parse_mode=False, + ): + message = False + try: + attachment_mimetype_map = self._get_whatsapp_mimetype_kind() + for attachment in record.mail_message_id.attachment_ids: + if attachment.mimetype not in attachment_mimetype_map: + raise UserError(self.env._("Mimetype is not valid")) + attachment_type = attachment_mimetype_map[attachment.mimetype] + m = requests_toolbelt.multipart.encoder.MultipartEncoder( + fields={ + "file": ( + attachment.name, + attachment.raw, + attachment.mimetype, + ), + "messaging_product": "whatsapp", + # "type": attachment_type + }, + ) + + response = requests.post( + f"https://graph.facebook.com/" + f"v{gateway.whatsapp_version}/{gateway.whatsapp_from_phone}/media", + headers={ + "Authorization": f"Bearer {gateway.token}", + "content-type": m.content_type, + }, + data=m, + timeout=10, + proxies=self._get_proxies(), + ) + response.raise_for_status() + response = requests.post( + f"https://graph.facebook.com/" + f"v{gateway.whatsapp_version}/{gateway.whatsapp_from_phone}/messages", + headers={"Authorization": f"Bearer {gateway.token}"}, + json=self._send_payload( + record.gateway_channel_id, + media_id=response.json()["id"], + media_type=attachment_type, + media_name=attachment.name, + ), + timeout=10, + proxies=self._get_proxies(), + ) + response.raise_for_status() + message = response.json() + body = self._get_message_body(record) + if body: + response = requests.post( + f"https://graph.facebook.com/" + f"v{gateway.whatsapp_version}/{gateway.whatsapp_from_phone}/messages", + headers={"Authorization": f"Bearer {gateway.token}"}, + json=self._send_payload(record.gateway_channel_id, body=body), + timeout=10, + proxies=self._get_proxies(), + ) + response.raise_for_status() + message = response.json() + except Exception as exc: + buff = StringIO() + traceback.print_exc(file=buff) + _logger.error(buff.getvalue()) + if raise_exception: + raise MailDeliveryException( + self.env._("Unable to send the whatsapp message") + ) from exc + else: + _logger.warning(f"Issue sending message with id {record.id}: {exc}") + record.sudo().write( + { + "notification_status": "exception", + "failure_reason": exc, + "failure_type": "unknown", + } + ) + if message: + record.sudo().write( + { + "notification_status": "sent", + "failure_reason": False, + "gateway_message_id": message["messages"][0]["id"], + } + ) + if auto_commit is True: + # pylint: disable=invalid-commit + self.env.cr.commit() + + def _html_to_whatsapp(self, body): + """Turn the html formatting of an outgoing body into text markers.""" + pattern = rf"]*>" + return html2plaintext( + re.sub(pattern, lambda tag: HTML_TAGS[tag.group(1).lower()], body) + ) + + def _send_payload( + self, channel, body=False, media_id=False, media_type=False, media_name=False + ): + whatsapp_template = self.env["mail.whatsapp.template"] + if self.env.context.get("whatsapp_template_id"): + whatsapp_template = self.env["mail.whatsapp.template"].browse( + self.env.context.get("whatsapp_template_id") + ) + if body: + payload = { + "messaging_product": "whatsapp", + "recipient_type": "individual", + "to": channel.gateway_channel_token, + } + if whatsapp_template: + payload.update( + { + "type": "template", + "template": { + "name": whatsapp_template.template_name, + "language": {"code": whatsapp_template.language}, + "components": whatsapp_template.prepare_value_to_send(), + }, + } + ) + else: + payload.update( + { + "type": "text", + "text": { + "preview_url": False, + "body": self._html_to_whatsapp(body), + }, + } + ) + return payload + if media_id: + media_data = {"id": media_id} + if media_type == "document": + media_data["filename"] = media_name + return { + "messaging_product": "whatsapp", + "recipient_type": "individual", + "to": channel.gateway_channel_token, + "type": media_type, + media_type: media_data, + } + + def _get_whatsapp_mimetype_kind(self): + return { + "text/plain": "document", + "application/pdf": "document", + "application/vnd.ms-powerpoint": "document", + "application/msword": "document", + "application/vnd.ms-excel": "document", + "application/vnd.openxmlformats-officedocument." + "wordprocessingml.document": "document", + "application/vnd.openxmlformats-officedocument." + "presentationml.presentation": "document", + "application/vnd.openxmlformats-officedocument." + "spreadsheetml.sheet": "document", + "audio/aac": "audio", + "audio/mp4": "audio", + "audio/mpeg": "audio", + "audio/amr": "audio", + "audio/ogg": "audio", + "image/jpeg": "image", + "image/png": "image", + "video/mp4": "video", + "video/3gp": "video", + "image/webp": "sticker", + } + + def _get_author(self, gateway, update): + author_id = update.get("messages")[0].get("from") + if author_id: + gateway_partner = ( + self.env["res.partner.gateway.channel"] + .sudo() + .search( + [ + ("gateway_id", "=", gateway.id), + ("gateway_token", "=", str(author_id)), + ], + limit=1, + ) + ) + if gateway_partner: + return gateway_partner.partner_id + partner = self.env["res.partner"].search( + [("phone_sanitized", "=", "+" + str(author_id))], limit=1 + ) + if partner: + self.env["res.partner.gateway.channel"].create( + { + "name": gateway.name, + "partner_id": partner.id, + "gateway_id": gateway.id, + "gateway_token": str(author_id), + } + ) + return partner + guest = self.env["mail.guest"].search( + [ + ("gateway_id", "=", gateway.id), + ("gateway_token", "=", str(author_id)), + ], + limit=1, + ) + if guest: + return guest + author_vals = self._get_author_vals(gateway, author_id, update) + if author_vals: + # Guests are technical records that the webhook user may not + # be allowed to create + return self.env["mail.guest"].sudo().create(author_vals).sudo(False) + + return False + + def _get_author_vals(self, gateway, author_id, update): + for contact in update.get("contacts", []): + if contact["wa_id"] == author_id: + return { + "name": contact.get("profile", {}).get("name", "Anonymous"), + "gateway_id": gateway.id, + "gateway_token": str(author_id), + } + + def _get_proxies(self): + # This hook has been created in order to add a proxy if needed. + # By default, it does nothing. + return {} diff --git a/mail_gateway_whatsapp/models/mail_notification.py b/mail_gateway_whatsapp/models/mail_notification.py new file mode 100644 index 000000000..137526058 --- /dev/null +++ b/mail_gateway_whatsapp/models/mail_notification.py @@ -0,0 +1,34 @@ +# Copyright 2026 Tecnativa - Carlos Roca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + +# WhatsApp delivery statuses, from the least to the most advanced one. +WHATSAPP_STATUSES = ["sent", "delivered", "read"] + + +class MailNotification(models.Model): + _inherit = "mail.notification" + + whatsapp_status = fields.Selection( + selection=[("sent", "Sent"), ("delivered", "Delivered"), ("read", "Read")], + readonly=True, + help="Last delivery status reported by WhatsApp for this message.", + ) + + def _to_store_defaults(self, target): + return super()._to_store_defaults(target) + ["whatsapp_status"] + + def _set_whatsapp_status(self, status): + """Store the status only when it is more advanced than the current one, + as WhatsApp doesn't guarantee the order of the status webhooks.""" + rank = WHATSAPP_STATUSES.index(status) + to_update = self.filtered( + lambda n: n.notification_status == "sent" + and ( + not n.whatsapp_status + or WHATSAPP_STATUSES.index(n.whatsapp_status) < rank + ) + ) + to_update.write({"whatsapp_status": status}) + return to_update diff --git a/mail_gateway_whatsapp/models/mail_thread.py b/mail_gateway_whatsapp/models/mail_thread.py new file mode 100644 index 000000000..b427f0a01 --- /dev/null +++ b/mail_gateway_whatsapp/models/mail_thread.py @@ -0,0 +1,61 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models +from odoo.exceptions import UserError + + +class MailThread(models.AbstractModel): + _inherit = "mail.thread" + + def _get_whatsapp_channel_vals(self, token, gateway, partner): + result = { + "gateway_channel_token": token, + "gateway_id": gateway.id, + } + if partner: + result["partner_id"] = partner.id + result["name"] = partner.display_name + return result + + def _whatsapp_get_channel(self, field_name, gateway): + sanitized_number = self._phone_format(number=self[field_name]) + if not sanitized_number: + raise UserError(self.env._("Phone cannot be sanitized")) + # Avoid the plus sign prefix to match the whatsapp token + sanitized_number = sanitized_number.replace("+", "") + partner = self._whatsapp_get_partner() + if not self.env["res.partner.gateway.channel"].search( + [ + ("partner_id", "=", partner.id), + ("gateway_id", "=", gateway.id), + ("gateway_token", "=", sanitized_number), + ] + ): + self.env["res.partner.gateway.channel"].create( + { + "name": gateway.name, + "partner_id": partner.id, + "gateway_id": gateway.id, + "gateway_token": sanitized_number, + } + ) + return self.env["mail.gateway.whatsapp"]._get_channel( + gateway, + sanitized_number, + { + "contacts": [ + { + "wa_id": sanitized_number, + "profile": {"name": partner.display_name}, + } + ], + "messages": [{"from": sanitized_number}], + }, + force_create=True, + ) + + def _whatsapp_get_partner(self): + if "partner_id" in self._fields: + return self.partner_id + return None diff --git a/mail_gateway_whatsapp/models/mail_whatsapp_template.py b/mail_gateway_whatsapp/models/mail_whatsapp_template.py new file mode 100644 index 000000000..1d59a7625 --- /dev/null +++ b/mail_gateway_whatsapp/models/mail_whatsapp_template.py @@ -0,0 +1,714 @@ +# Copyright 2024 Tecnativa - Carlos López +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import re +from urllib.parse import urlparse + +import requests + +from odoo import Command, api, fields, models +from odoo.exceptions import UserError, ValidationError +from odoo.tools.urls import urljoin + +from odoo.addons.phone_validation.tools import phone_validation + +from ..tools.const import REG_VARIABLE, supported_languages +from .mail_gateway import BASE_URL + + +class MailWhatsAppTemplate(models.Model): + _name = "mail.whatsapp.template" + _description = "Mail WhatsApp template" + + name = fields.Char(required=True) + body = fields.Text(required=True) + header = fields.Char() + footer = fields.Char() + template_name = fields.Char( + compute="_compute_template_name", store=True, copy=False + ) + is_supported = fields.Boolean(copy=False) + template_uid = fields.Char(readonly=True, copy=False) + category = fields.Selection( + [ + ("authentication", "Authentication"), + ("marketing", "Marketing"), + ("utility", "Utility"), + ], + required=True, + ) + state = fields.Selection( + [ + ("draft", "Draft"), + ("pending", "Pending"), + ("approved", "Approved"), + ("in_appeal", "In Appeal"), + ("rejected", "Rejected"), + ("pending_deletion", "Pending Deletion"), + ("deleted", "Deleted"), + ("disabled", "Disabled"), + ("paused", "Paused"), + ("limit_exceeded", "Limit Exceeded"), + ("archived", "Archived"), + ], + default="draft", + required=True, + ) + language = fields.Selection(supported_languages, required=True) + gateway_id = fields.Many2one( + "mail.gateway", + domain=[("gateway_type", "=", "whatsapp")], + required=True, + ondelete="cascade", + ) + company_id = fields.Many2one( + "res.company", related="gateway_id.company_id", store=True + ) + model_id = fields.Many2one( + string="Applies to", + comodel_name="ir.model", + default=lambda self: self.env["ir.model"]._get_id("res.partner"), + required=True, + ondelete="cascade", + ) + model = fields.Char(string="Related model", related="model_id.model", store=True) + variable_ids = fields.One2many( + "mail.whatsapp.template.variable", + "template_id", + string="Variables", + store=True, + compute="_compute_variable_ids", + precompute=True, + readonly=False, + ) + button_ids = fields.One2many( + "mail.whatsapp.template.button", "template_id", string="Buttons" + ) + + _unique_name_gateway_id = models.Constraint( + "unique(name, language, gateway_id)", + "Duplicate name is not allowed for Gateway.", + ) + + @api.constrains("button_ids") + def _check_buttons(self): + for template in self: + if len(template.button_ids) > 10: + raise ValidationError(self.env._("A maximum of 10 buttons is allowed.")) + url_buttons = template.button_ids.filtered( + lambda button: button.button_type == "url" + ) + phone_number_buttons = template.button_ids.filtered( + lambda button: button.button_type == "phone_number" + ) + if len(url_buttons) > 2: + raise ValidationError( + self.env._("A maximum of 2 URL buttons is allowed.") + ) + if len(phone_number_buttons) > 1: + raise ValidationError( + self.env._("A maximum of 1 Call Number button is allowed.") + ) + + @api.constrains("variable_ids") + def _check_variables(self): + for template in self: + body_variables = template.variable_ids.filtered( + lambda var: var.line_type == "body" + ) + header_variables = template.variable_ids.filtered( + lambda var: var.line_type == "header" + ) + if len(header_variables) > 1: + raise ValidationError( + self.env._("There should be exactly 1 variable in the header.") + ) + if header_variables and header_variables._extract_variable_index() != 1: + raise ValidationError( + self.env._("Variable in the header should be used as {{1}}") + ) + variable_indices = sorted( + var._extract_variable_index() for var in body_variables + ) + if len(variable_indices) > 0 and ( + variable_indices[0] != 1 or variable_indices[-1] != len(body_variables) + ): + missing = ( + next( + ( + index + for index in range(1, len(body_variables)) + if variable_indices[index - 1] + 1 + != variable_indices[index] + ), + 0, + ) + + 1 + ) + raise ValidationError( + self.env._( + "Body variables should start at 1 and not skip any number, " + "missing %d", + missing, + ) + ) + + @api.depends("name", "state", "template_uid") + def _compute_template_name(self): + for template in self: + if not template.template_name or ( + template.state == "draft" and not template.template_uid + ): + template.template_name = re.sub( + r"\W+", "_", self.env["ir.http"]._slugify(template.name or "") + ) + + @api.depends("header", "body") + def _compute_variable_ids(self): + for template in self: + to_remove = self.env["mail.whatsapp.template.variable"] + to_keep = self.env["mail.whatsapp.template.variable"] + new_values = [] + header_variables = list(re.findall(REG_VARIABLE, template.header or "")) + body_variables = set(re.findall(REG_VARIABLE, template.body or "")) + # header + current_header_variable = template.variable_ids.filtered( + lambda line: line.line_type == "header" + ) + if header_variables and not current_header_variable: + new_values.append( + { + "name": header_variables[0], + "line_type": "header", + "template_id": template.id, + } + ) + elif not header_variables and current_header_variable: + to_remove += current_header_variable + elif current_header_variable: + to_keep += current_header_variable + # body + current_body_variables = template.variable_ids.filtered( + lambda line: line.line_type == "body" + ) + new_body_variable_names = [ + var_name + for var_name in body_variables + if var_name not in current_body_variables.mapped("name") + ] + deleted_variables = current_body_variables.filtered( + lambda var, body_variables=body_variables: var.name + not in body_variables + ) + + new_values += [ + {"name": var_name, "line_type": "body", "template_id": template.id} + for var_name in set(new_body_variable_names) + ] + to_remove += deleted_variables + to_keep += current_body_variables - deleted_variables + template.variable_ids = [ + Command.unlink(to_remove.id) for to_remove in to_remove + ] + [Command.create(vals) for vals in new_values] + + def button_back2draft(self): + self.write({"state": "draft"}) + + def button_export_template(self): + self.ensure_one() + gateway = self.gateway_id + template_url = urljoin( + BASE_URL, + f"v{gateway.whatsapp_version}/{gateway.whatsapp_account_id}/message_templates", + ) + try: + payload = self._prepare_values_to_export() + response = requests.post( + template_url, + headers={"Authorization": f"Bearer {gateway.token}"}, + json=payload, + timeout=10, + ) + response.raise_for_status() + json_data = response.json() + self.write( + { + "template_uid": json_data.get("id"), + "state": json_data.get("status").lower(), + "is_supported": True, + } + ) + except requests.exceptions.HTTPError as ex: + msj = f"{ex} \n{ex.response.text}" + raise UserError(msj) from ex + except Exception as err: + raise UserError(str(err)) from err + + def _prepare_values_to_export(self): + components = self._prepare_components_to_export() + return { + "name": self.template_name, + "category": self.category.upper(), + "language": self.language, + "components": components, + } + + def _prepare_components_to_export(self): + body_component = {"type": "BODY", "text": self.body} + body_params = self.variable_ids.filtered(lambda line: line.line_type == "body") + if body_params: + body_component["example"] = { + "body_text": [body_params.mapped("sample_value")] + } + components = [body_component] + if self.header: + header_component = {"type": "HEADER", "format": "TEXT", "text": self.header} + header_params = self.variable_ids.filtered( + lambda line: line.line_type == "header" + ) + if header_params: + header_component["example"] = { + "header_text": header_params.mapped("sample_value") + } + components.append(header_component) + if self.footer: + components.append({"type": "FOOTER", "text": self.footer}) + buttons = [] + for button in self.button_ids: + button_data = {"type": button.button_type.upper(), "text": button.name} + if button.button_type == "url": + button_data["url"] = button.website_url + if button.url_type == "dynamic": + button_data["url"] += "{{1}}" + button_data["example"] = button.variable_ids[0].sample_value + elif button.button_type == "phone_number": + button_data["phone_number"] = button.call_number + buttons.append(button_data) + if buttons: + components.append({"type": "BUTTONS", "buttons": buttons}) + # TODO: add more components(location, etc) + return components + + def button_sync_template(self): + self.ensure_one() + gateway = self.gateway_id + template_url = urljoin( + BASE_URL, + f"{self.template_uid}", + ) + try: + response = requests.get( + template_url, + headers={"Authorization": f"Bearer {gateway.token}"}, + timeout=10, + ) + response.raise_for_status() + json_data = response.json() + vals = self._prepare_values_to_import(gateway, json_data) + self.write(vals) + except Exception as err: + raise UserError(str(err)) from err + return { + "type": "ir.actions.client", + "tag": "reload", + } + + @api.model + def _prepare_values_to_import(self, gateway, json_data): + vals = { + "name": json_data.get("name").replace("_", " ").title(), + "template_name": json_data.get("name"), + "category": json_data.get("category").lower(), + "language": json_data.get("language"), + "state": json_data.get("status").lower(), + "template_uid": json_data.get("id"), + "gateway_id": gateway.id, + } + is_supported = True + for component in json_data.get("components", []): + if component["type"] == "HEADER" and component["format"] == "TEXT": + vals["header"] = component["text"] + elif component["type"] == "BODY": + vals["body"] = component["text"] + elif component["type"] == "FOOTER": + vals["footer"] = component["text"] + elif component["type"] == "BUTTONS": + for index, button in enumerate(component["buttons"]): + if button["type"] in ("URL", "PHONE_NUMBER", "QUICK_REPLY"): + button_vals = { + "sequence": index, + "name": button["text"], + "button_type": button["type"].lower(), + "call_number": button.get("phone_number"), + "website_url": button.get("url"), + } + vals.setdefault("button_ids", []) + button = self.button_ids.filtered( + lambda btn, button=button: btn.name == button["text"] + ) + if button: + vals["button_ids"].append( + Command.update(button.id, button_vals) + ) + else: + vals["button_ids"].append(Command.create(button_vals)) + else: + is_supported = False + vals["is_supported"] = is_supported + return vals + + def _prepare_header_component(self, variable_ids_value): + header = [] + if self.header and variable_ids_value.get("header-{{1}}"): + value = variable_ids_value.get("header-{{1}}") or (self.header or {}) or "" + header = {"type": "header", "parameters": [{"type": "text", "text": value}]} + return header + + def _prepare_body_components(self, variable_ids_value): + if not self.variable_ids: + return None + parameters = [] + for body_val in self.variable_ids.filtered( + lambda line: line.line_type == "body" + ): + parameters.append( + { + "type": "text", + "text": variable_ids_value.get( + f"{body_val.line_type}-{body_val.name}" + ) + or " ", + } + ) + return {"type": "body", "parameters": parameters} + + def _prepare_button_components(self, variable_ids_value): + components = [] + dynamic_buttons = self.button_ids.filtered( + lambda line: line.url_type == "dynamic" + ) + index = {button: i for i, button in enumerate(self.button_ids)} + for button in dynamic_buttons: + dynamic_url = button.website_url + value = variable_ids_value.get(f"button-{button.name}") or " " + value = value.replace(dynamic_url, "").lstrip("/") + components.append( + { + "type": "button", + "sub_type": "url", + "index": index.get(button), + "parameters": [{"type": "text", "text": value}], + } + ) + return components + + def prepare_value_to_send(self): + self.ensure_one() + model_name = self.model_id.model + rec_id = self.env.context.get("default_res_id") + if rec_id is None: + rec_ids = self.env.context.get("res_id") + if rec_ids: + rec_id = rec_ids + else: + rec_id = None + record = None + if model_name and rec_id: + record = self.env[model_name].browse(int(rec_id)) + components = [] + variable_ids_value = self.variable_ids._get_variables_value(record) + # generate components + header = self._prepare_header_component(variable_ids_value=variable_ids_value) + body = self._prepare_body_components(variable_ids_value=variable_ids_value) + buttons = self._prepare_button_components(variable_ids_value=variable_ids_value) + if header: + components.append(header) + if body: + components.append(body) + components.extend(buttons) + return components + + def render_body_message(self): + self.ensure_one() + model_name = self.model_id.model + rec_id = self.env.context.get("default_res_id") + if rec_id is None: + rec_ids = self.env.context.get("default_res_ids") + if isinstance(rec_ids, list) and rec_ids: + rec_id = rec_ids[0] + else: + rec_id = None + record = None + if model_name and rec_id: + record = self.env[model_name].browse(int(rec_id)) + header = "" + if self.header: + header = self.header + header_vars = self.variable_ids.filtered(lambda v: v.line_type == "header") + for i, var in enumerate(header_vars, start=1): + placeholder = f"{{{{{i}}}}}" + value = var._get_variables_value(record).get( + f"header-{placeholder}", "" + ) + header = header.replace(placeholder, str(value)) + body = self.body or "" + body_vars = self.variable_ids.filtered(lambda v: v.line_type == "body") + for i, var in enumerate(body_vars, start=1): + placeholder = f"{{{{{i}}}}}" + value = var._get_variables_value(record).get(f"body-{placeholder}", "") + body = body.replace(placeholder, str(value)) + message = f"*{header}*\n\n{body}" if header else body + return message + + +class MailWhatsAppTemplateVariable(models.Model): + _name = "mail.whatsapp.template.variable" + _description = "WhatsApp Template Variable" + _order = "line_type desc, name, id" + + name = fields.Char(string="Placeholder", required=True) + template_id = fields.Many2one( + comodel_name="mail.whatsapp.template", required=True, ondelete="cascade" + ) + model = fields.Char(string="Model Name", related="template_id.model") + line_type = fields.Selection( + [("header", "Header"), ("body", "Body"), ("button", "Button")], required=True + ) + field_name = fields.Char(string="Field") + sample_value = fields.Char(default="Sample Value", required=True) + button_id = fields.Many2one("mail.whatsapp.template.button", ondelete="cascade") + + _name_type_template_unique = models.Constraint( + "UNIQUE(name, line_type, template_id,button_id)", + "Variable names must be unique by template", + ) + + @api.constrains("field_name") + def _check_field_name(self): + failing = self.browse() + missing = self.filtered(lambda variable: not variable.field_name) + if missing: + raise ValidationError( + self.env._( + "Field template variables %(variables)s " + "must be associated with a field.", + variables=", ".join(missing.mapped("name")), + ) + ) + for variable in self: + model = self.env[variable.model] + if not model.has_access("read"): + model_description = ( + self.env["ir.model"]._get(variable.model).display_name + ) + raise ValidationError( + self.env._( + "You can not select field of %(model)s.", + model=model_description, + ) + ) + try: + variable._extract_value_from_field_path(model) + except UserError: + failing += variable + if failing: + model_description = ( + self.env["ir.model"]._get(failing.mapped("model")[0]).display_name + ) + raise ValidationError( + self.env._( + "Variables %(field_names)s do not seem to be valid field path " + "for model %(model_name)s.", + field_names=", ".join(failing.mapped("field_name")), + model_name=model_description, + ) + ) + + @api.constrains("name") + def _check_name(self): + for variable in self: + if not variable._extract_variable_index(): + raise ValidationError( + self.env._( + "Template variable should be in format {{number}}. " + "Cannot parse '%(placeholder)s'", + placeholder=variable.name, + ) + ) + + @api.depends("line_type", "name") + def _compute_display_name(self): + type_names = dict(self._fields["line_type"]._description_selection(self.env)) + for variable in self: + type_name = type_names[variable.line_type or "body"] + variable.display_name = ( + type_name + if variable.line_type == "header" + else f"{type_name} - {variable.name}" + ) + + @api.onchange("model") + def _onchange_model_id(self): + self.field_name = False + + def _get_variables_value(self, record): + value_by_name = {} + for variable in self: + value = variable._extract_value_from_field_path(record) + value_str = value and str(value) or "" + value_key = f"{variable.line_type}-{variable.name}" + value_by_name[value_key] = value_str + return value_by_name + + def _extract_variable_index(self): + """Extract variable index, located between '{{}}' markers.""" + self.ensure_one() + try: + return int(self.name.replace("{{", "").replace("}}", "")) + except ValueError: + return None + + def _extract_value_from_field_path(self, record): + field_path = self.field_name + if not field_path or record is None: + return "" + try: + field_value = record.mapped(field_path) + except Exception as err: + raise UserError( + self.env._( + "We were not able to fetch value of field: %(field)s", + field=field_path, + ) + ) from err + if isinstance(field_value, models.Model): + return " ".join((value.display_name or "") for value in field_value) + # find last field / last model when having chained fields + # e.g. 'partner_id.country_id.state' -> ['partner_id.country_id', 'state'] + field_path_models = field_path.rsplit(".", 1) + if len(field_path_models) > 1: + last_model_path, last_fname = field_path_models + last_model = record.mapped(last_model_path) + else: + last_model, last_fname = record, field_path + last_field = last_model._fields[last_fname] + # return value instead of the key + if last_field.type == "selection": + return " ".join( + last_field.convert_to_export(value, last_model) for value in field_value + ) + return " ".join( + str(value if value is not False and value is not None else "") + for value in field_value + ) + + +class MailWhatsAppTemplateButton(models.Model): + _name = "mail.whatsapp.template.button" + _description = "WhatsApp Template Button" + _order = "sequence,id" + + sequence = fields.Integer() + name = fields.Char(string="Button Text", size=25) + template_id = fields.Many2one( + comodel_name="mail.whatsapp.template", required=True, ondelete="cascade" + ) + button_type = fields.Selection( + [ + ("quick_reply", "Quick Reply"), + ("url", "Visit Website"), + ("phone_number", "Call Number"), + ], + string="Type", + required=True, + default="quick_reply", + ) + url_type = fields.Selection( + [("static", "Static"), ("dynamic", "Dynamic")], + default="static", + ) + website_url = fields.Char() + call_number = fields.Char() + variable_ids = fields.One2many( + "mail.whatsapp.template.variable", + "button_id", + compute="_compute_variable_ids", + precompute=True, + store=True, + copy=True, + ) + + _unique_name_per_template = models.Constraint( + "UNIQUE(name, template_id)", + "Button name must be unique by template", + ) + + @api.constrains("button_type", "url_type", "website_url") + def _validate_website_url(self): + for button in self.filtered(lambda button: button.button_type == "url"): + parsed_url = urlparse(button.website_url) + if not (parsed_url.scheme in {"http", "https"} and parsed_url.netloc): + raise ValidationError( + self.env._( + "Please enter a valid URL in the format 'https://www.example.com'." + ) + ) + + @api.constrains("call_number") + def _validate_call_number(self): + for button in self: + if button.button_type == "phone_number": + phone_validation.phone_format(button.call_number, False, False) + + @api.depends("button_type", "url_type", "website_url", "name") + def _compute_variable_ids(self): + dynamic_urls = self.filtered( + lambda button: button.button_type == "url" and button.url_type == "dynamic" + ) + to_clear = self - dynamic_urls + for button in dynamic_urls: + if button.variable_ids: + button.variable_ids = [ + Command.update( + button.variable_ids[0].id, + { + "sample_value": button.website_url, + "line_type": "button", + "name": button.name, + "button_id": button.id, + "template_id": button.template_id.id, + }, + ), + ] + else: + button.variable_ids = [ + Command.create( + { + "sample_value": button.website_url, + "line_type": "button", + "name": button.name, + "button_id": button.id, + "template_id": button.template_id.id, + }, + ), + ] + if to_clear: + to_clear.variable_ids = [Command.clear()] + + def check_variable_ids(self): + for button in self: + if len(button.variable_ids) > 1: + raise ValidationError( + self.env._("Buttons may only contain one placeholder.") + ) + if button.variable_ids and button.url_type != "dynamic": + raise ValidationError( + self.env._("Only dynamic urls may have a placeholder.") + ) + elif button.url_type == "dynamic" and not button.variable_ids: + raise ValidationError( + self.env._("All dynamic urls must have a placeholder.") + ) + if button.variable_ids.name != "{{1}}": + raise ValidationError( + self.env._("The placeholder for a button can only be {{1}}.") + ) diff --git a/mail_gateway_whatsapp/models/res_partner.py b/mail_gateway_whatsapp/models/res_partner.py new file mode 100644 index 000000000..57cd03046 --- /dev/null +++ b/mail_gateway_whatsapp/models/res_partner.py @@ -0,0 +1,19 @@ +# Copyright 2024 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class ResPartner(models.Model): + _name = "res.partner" + _inherit = ["mail.thread.phone", "res.partner"] + + def _whatsapp_get_partner(self): + return self + + def _phone_get_number_fields(self): + """This method returns the fields to use to find the number to use to + send an SMS on a record.""" + result = set(super()._phone_get_number_fields()) + result.add("phone") + return list(result) diff --git a/mail_gateway_whatsapp/pyproject.toml b/mail_gateway_whatsapp/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/mail_gateway_whatsapp/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/mail_gateway_whatsapp/readme/CONFIGURE.md b/mail_gateway_whatsapp/readme/CONFIGURE.md new file mode 100644 index 000000000..df3b8b5a7 --- /dev/null +++ b/mail_gateway_whatsapp/readme/CONFIGURE.md @@ -0,0 +1,35 @@ +## First steps + +You need to create a WhatsApp Business Account (WABA), a Meta App and +define a phone number. You can follow this +[steps](https://developers.facebook.com/micro_site/url/?click_from_context_menu=true&country=ES&destination=https%3A%2F%2Fwww.facebook.com%2Fbusiness%2Fhelp%2F2087193751603668&event_type=click&last_nav_impression_id=0m3TRxrxOlly1eRmB&max_percent_page_viewed=22&max_viewport_height_px=1326&max_viewport_width_px=2560&orig_http_referrer=https%3A%2F%2Fdevelopers.facebook.com%2Fdocs%2Fwhatsapp%2Fcloud-api%2Fget-started-for-bsps%3Flocale%3Den_US&orig_request_uri=https%3A%2F%2Fdevelopers.facebook.com%2Fajax%2Fpagelet%2Fgeneric.php%2FDeveloperNotificationsPayloadPagelet%3Ffb_dtsg_ag%3D--sanitized--%26data%3D%257B%2522businessUserID%2522%253Anull%252C%2522cursor%2522%253Anull%252C%2522length%2522%253A15%252C%2522clientRequestID%2522%253A%2522js_k6%2522%257D%26__usid%3D6-Trd7hi4itpm%253APrd7ifiub2tvy%253A0-Ard7g9twdm0p1-RV%253D6%253AF%253D%26locale%3Den_US%26jazoest%3D24920®ion=emea&scrolled=false&session_id=1jLoVJNU6iVMaw3ml&site=developers). + +If you create a test Business Account, passwords will change every 24 +hours. + +In order to make the webhook accessible, the system must be public. + +## Configure the gateway + +Once you have created the Meta App, you need to add the gateway and +webhook. In order to make it you must follow this steps: + +- Access Settings \> Emails \> Mail Gateway +- Create a Gateway of type WhatsApp + +> - Use the Meta App authentication key as Token field +> - Use the Meta App Phone Number ID as Whatsapp from Phone field +> - Use the Meta Account Business ID as Whatsapp account field (only if +> you need sync templates) +> - Write your own Webhook key +> - Use the Application Secret Key on Whatsapp Security Key. It will be +> used in order to validate the data +> - Press the Integrate Webhook Key. In this case, it will not integrate +> it, we need to make it manually +> - Copy the webhook URL + +- Access [Facebook Apps website](https://developers.facebook.com/apps/) +- Access your App then Whatsapp \> Configuration +- Create your webhook using your URL and put the Whatsapp Security Key + as validation Key +- Administer the Webhook and activate the messages webhook diff --git a/mail_gateway_whatsapp/readme/CONTRIBUTORS.md b/mail_gateway_whatsapp/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..d6bd292cf --- /dev/null +++ b/mail_gateway_whatsapp/readme/CONTRIBUTORS.md @@ -0,0 +1,7 @@ +- Olga Marco \<\> + +- Enric Tobella \<\> + +- [Tecnativa](https://www.tecnativa.com): + + > - Carlos Lopez diff --git a/mail_gateway_whatsapp/readme/CREDITS.md b/mail_gateway_whatsapp/readme/CREDITS.md new file mode 100644 index 000000000..618c841c1 --- /dev/null +++ b/mail_gateway_whatsapp/readme/CREDITS.md @@ -0,0 +1,2 @@ +This work has been funded by AEOdoo (Asociación Española de Odoo - +) diff --git a/mail_gateway_whatsapp/readme/DESCRIPTION.md b/mail_gateway_whatsapp/readme/DESCRIPTION.md new file mode 100644 index 000000000..257a3ce65 --- /dev/null +++ b/mail_gateway_whatsapp/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +This module allows to respond whatsapp chats. + +This way, a group of users can respond customers or any other set of +partners in an integrated way. diff --git a/mail_gateway_whatsapp/readme/ROADMAP.md b/mail_gateway_whatsapp/readme/ROADMAP.md new file mode 100644 index 000000000..f7a24f2f0 --- /dev/null +++ b/mail_gateway_whatsapp/readme/ROADMAP.md @@ -0,0 +1,4 @@ +**WhatsApp templates** + +- Add support for Variables +- Add support for Buttons diff --git a/mail_gateway_whatsapp/readme/USAGE.md b/mail_gateway_whatsapp/readme/USAGE.md new file mode 100644 index 000000000..637a66b56 --- /dev/null +++ b/mail_gateway_whatsapp/readme/USAGE.md @@ -0,0 +1,7 @@ +1. Access Gateway +2. Wait until someone starts a conversation. +3. Now you will be able to respond and receive messages to this person. + +The delivery status reported by WhatsApp (sent, delivered or read) is shown +in the message notification popover. Failed messages are marked as errors with +the reason returned by WhatsApp. diff --git a/mail_gateway_whatsapp/security/ir.model.access.csv b/mail_gateway_whatsapp/security/ir.model.access.csv new file mode 100644 index 000000000..41ae7f726 --- /dev/null +++ b/mail_gateway_whatsapp/security/ir.model.access.csv @@ -0,0 +1,8 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_whatsapp_composer,access.whatsapp.composer,model_whatsapp_composer,base.group_user,1,1,1,0 +access_mail_whatsapp_template_group_system,mail_whatsapp_template_group_system,model_mail_whatsapp_template,base.group_system,1,1,1,1 +access_mail_whatsapp_template_group_user,mail_whatsapp_template_group_user,model_mail_whatsapp_template,base.group_user,1,0,0,0 +access_mail_whatsapp_template_button_group_system,access_mail_whatsapp_template_button_group_system,model_mail_whatsapp_template_button,base.group_system,1,1,1,1 +access_mail_whatsapp_template_button_group_user,access_mail_whatsapp_template_button_group_user,model_mail_whatsapp_template_button,base.group_user,1,0,0,0 +access_mail_whatsapp_template_variable_group_system,access_mail_whatsapp_template_variable_group_system,model_mail_whatsapp_template_variable,base.group_system,1,1,1,1 +access_mail_whatsapp_template_variable_group_user,access_mail_whatsapp_template_variable_group_user,model_mail_whatsapp_template_variable,base.group_user,1,0,0,0 diff --git a/mail_gateway_whatsapp/security/security.xml b/mail_gateway_whatsapp/security/security.xml new file mode 100644 index 000000000..d34fa3a64 --- /dev/null +++ b/mail_gateway_whatsapp/security/security.xml @@ -0,0 +1,8 @@ + + + + WhatsApp template: multicompany + + [('company_id', 'in', company_ids + [False])] + + diff --git a/mail_gateway_whatsapp/static/description/icon.png b/mail_gateway_whatsapp/static/description/icon.png new file mode 100644 index 000000000..dea8a38ec Binary files /dev/null and b/mail_gateway_whatsapp/static/description/icon.png differ diff --git a/mail_gateway_whatsapp/static/description/icon.svg b/mail_gateway_whatsapp/static/description/icon.svg new file mode 100644 index 000000000..5f34debbe --- /dev/null +++ b/mail_gateway_whatsapp/static/description/icon.svg @@ -0,0 +1,48 @@ + + + + + + + + diff --git a/mail_gateway_whatsapp/static/description/index.html b/mail_gateway_whatsapp/static/description/index.html new file mode 100644 index 000000000..f0607d749 --- /dev/null +++ b/mail_gateway_whatsapp/static/description/index.html @@ -0,0 +1,518 @@ + + + + + +Mail Whatsapp Gateway + + + +
    + + + +Odoo Community Association + +
    +

    Mail Whatsapp Gateway

    + +

    Beta License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

    +

    This module allows to respond whatsapp chats.

    +

    This way, a group of users can respond customers or any other set of +partners in an integrated way.

    +

    Table of contents

    + +
    +

    Configuration

    +
    +

    First steps

    +

    You need to create a WhatsApp Business Account (WABA), a Meta App and +define a phone number. You can follow this +steps.

    +

    If you create a test Business Account, passwords will change every 24 +hours.

    +

    In order to make the webhook accessible, the system must be public.

    +
    +
    +

    Configure the gateway

    +

    Once you have created the Meta App, you need to add the gateway and +webhook. In order to make it you must follow this steps:

    +
      +
    • Access Settings > Emails > Mail Gateway
    • +
    • Create a Gateway of type WhatsApp
    • +
    + +
    +
      +
    • Use the Meta App authentication key as Token field
    • +
    • Use the Meta App Phone Number ID as Whatsapp from Phone field
    • +
    • Use the Meta Account Business ID as Whatsapp account field (only if +you need sync templates)
    • +
    • Write your own Webhook key
    • +
    • Use the Application Secret Key on Whatsapp Security Key. It will be +used in order to validate the data
    • +
    • Press the Integrate Webhook Key. In this case, it will not +integrate it, we need to make it manually
    • +
    • Copy the webhook URL
    • +
    +
    +
      +
    • Access Facebook Apps +website
    • +
    • Access your App then Whatsapp > Configuration
    • +
    • Create your webhook using your URL and put the Whatsapp Security Key +as validation Key
    • +
    • Administer the Webhook and activate the messages webhook
    • +
    +
    +
    +
    +

    Usage

    +
      +
    1. Access Gateway
    2. +
    3. Wait until someone starts a conversation.
    4. +
    5. Now you will be able to respond and receive messages to this person.
    6. +
    +

    The delivery status reported by WhatsApp (sent, delivered or read) is +shown in the message notification popover. Failed messages are marked as +errors with the reason returned by WhatsApp.

    +
    +
    +

    Known issues / Roadmap

    +

    WhatsApp templates

    +
      +
    • Add support for Variables
    • +
    • Add support for Buttons
    • +
    +
    +
    +

    Bug Tracker

    +

    Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

    +

    Do not contact contributors directly about support or help with technical issues.

    +
    +
    +

    Credits

    +
    +

    Authors

    +
      +
    • Creu Blanca
    • +
    • Dixmit
    • +
    +
    +
    +

    Contributors

    + +
    +
    +

    Other credits

    +

    This work has been funded by AEOdoo (Asociación Española de Odoo - +https://www.aeodoo.org)

    +
    +
    +

    Maintainers

    +

    This module is maintained by the OCA.

    + +Odoo Community Association + +

    OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

    +

    This module is part of the OCA/mail project on GitHub.

    +

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    +
    +
    +
    +
    + + diff --git a/mail_gateway_whatsapp/static/src/components/message/message.xml b/mail_gateway_whatsapp/static/src/components/message/message.xml new file mode 100644 index 000000000..2d81cb10b --- /dev/null +++ b/mail_gateway_whatsapp/static/src/components/message/message.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/mail_gateway_whatsapp/static/src/components/message/message_patch.esm.js b/mail_gateway_whatsapp/static/src/components/message/message_patch.esm.js new file mode 100644 index 000000000..1f59e7c4c --- /dev/null +++ b/mail_gateway_whatsapp/static/src/components/message/message_patch.esm.js @@ -0,0 +1,16 @@ +import {Message} from "@mail/core/common/message"; +import {patch} from "@web/core/utils/patch"; +import {url} from "@web/core/utils/urls"; + +patch(Message.prototype, { + get authorAvatarUrl() { + if ( + this.message.gateway_type && + this.message.gateway_type.includes("whatsapp") && + !["partner", "guest"].includes(this.message.author?.type) + ) { + return url("/mail_gateway_whatsapp/static/description/icon.png"); + } + return super.authorAvatarUrl; + }, +}); diff --git a/mail_gateway_whatsapp/static/src/components/phone_field/phone_field.esm.js b/mail_gateway_whatsapp/static/src/components/phone_field/phone_field.esm.js new file mode 100644 index 000000000..f2192fb5a --- /dev/null +++ b/mail_gateway_whatsapp/static/src/components/phone_field/phone_field.esm.js @@ -0,0 +1,24 @@ +import {PhoneField} from "@web/views/fields/phone/phone_field"; +import {SendWhatsappButton} from "../send_whatsapp_button/send_whatsapp_button.esm"; +import {patch} from "@web/core/utils/patch"; + +patch(PhoneField, { + components: { + ...PhoneField.components, + SendWhatsappButton, + }, + defaultProps: { + ...PhoneField.defaultProps, + enableButton: true, + }, + props: { + ...PhoneField.props, + enableButton: {type: Boolean, optional: true}, + }, + extractProps: ({attrs}) => { + return { + enableButton: attrs.options.enable_sms, + placeholder: attrs.placeholder, + }; + }, +}); diff --git a/mail_gateway_whatsapp/static/src/components/phone_field/phone_field.xml b/mail_gateway_whatsapp/static/src/components/phone_field/phone_field.xml new file mode 100644 index 000000000..090c5476d --- /dev/null +++ b/mail_gateway_whatsapp/static/src/components/phone_field/phone_field.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js b/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js new file mode 100644 index 000000000..b4483f0e0 --- /dev/null +++ b/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.esm.js @@ -0,0 +1,42 @@ +import {Component, status} from "@odoo/owl"; +import {_t} from "@web/core/l10n/translation"; +import {useService} from "@web/core/utils/hooks"; +import {user} from "@web/core/user"; + +export class SendWhatsappButton extends Component { + setup() { + this.action = useService("action"); + this.title = _t("Send Whatsapp Message"); + } + get phoneHref() { + return "sms:" + this.props.record.data[this.props.name].replace(/\s+/g, ""); + } + async onClick() { + await this.props.record.save(); + this.action.doAction( + { + type: "ir.actions.act_window", + target: "new", + name: this.title, + res_model: "whatsapp.composer", + views: [[false, "form"]], + context: { + ...user.context, + default_res_model: this.props.record.resModel, + default_res_id: this.props.record.resId, + default_number_field_name: this.props.name, + default_composition_mode: "comment", + }, + }, + { + onClose: () => { + if (status(this) !== "destroyed") { + this.props.record.load(); + this.props.record.model.notify(); + } + }, + } + ); + } +} +SendWhatsappButton.template = "mail_gateway_whatsapp.SendWhatsappButton"; diff --git a/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml b/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml new file mode 100644 index 000000000..0be4f5b3d --- /dev/null +++ b/mail_gateway_whatsapp/static/src/components/send_whatsapp_button/send_whatsapp_button.xml @@ -0,0 +1,16 @@ + + + + + + + Whatsapp + + + + diff --git a/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js b/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js new file mode 100644 index 000000000..c81e602aa --- /dev/null +++ b/mail_gateway_whatsapp/static/src/models/notification_model_patch.esm.js @@ -0,0 +1,33 @@ +import {Notification} from "@mail/core/common/notification_model"; +import {_t} from "@web/core/l10n/translation"; +import {patch} from "@web/core/utils/patch"; + +const WHATSAPP_STATUS_ICONS = { + sent: "fa fa-whatsapp text-muted", + delivered: "fa fa-whatsapp text-success", + read: "fa fa-whatsapp text-info", +}; + +patch(Notification.prototype, { + get isWhatsappSent() { + return this.gateway_type === "whatsapp" && this.notification_status === "sent"; + }, + get statusIcon() { + if (this.isWhatsappSent && this.whatsapp_status) { + return WHATSAPP_STATUS_ICONS[this.whatsapp_status]; + } + return super.statusIcon; + }, + get statusTitle() { + if (!this.isWhatsappSent) { + return super.statusTitle; + } + switch (this.whatsapp_status) { + case "delivered": + return _t("Delivered"); + case "read": + return _t("Read"); + } + return _t("Sent"); + }, +}); diff --git a/mail_gateway_whatsapp/tests/__init__.py b/mail_gateway_whatsapp/tests/__init__.py new file mode 100644 index 000000000..ffbc8278d --- /dev/null +++ b/mail_gateway_whatsapp/tests/__init__.py @@ -0,0 +1,3 @@ +from . import test_mail_gateway_whatsapp +from . import test_mail_whatsapp_template +from . import test_mail_whatsapp_coverage diff --git a/mail_gateway_whatsapp/tests/test_mail_gateway_whatsapp.py b/mail_gateway_whatsapp/tests/test_mail_gateway_whatsapp.py new file mode 100644 index 000000000..3850c96d0 --- /dev/null +++ b/mail_gateway_whatsapp/tests/test_mail_gateway_whatsapp.py @@ -0,0 +1,768 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import copy +import hashlib +import hmac +import json +from unittest.mock import MagicMock, patch + +from markupsafe import Markup + +from odoo import Command +from odoo.exceptions import UserError +from odoo.tests import Form, HttpCase, RecordCapturer +from odoo.tests.common import new_test_user, tagged +from odoo.tools import mute_logger + +from odoo.addons.mail_gateway.tests.common import MailGatewayTestCase + + +@tagged("-at_install", "post_install") +class TestMailGatewayWhatsApp(MailGatewayTestCase, HttpCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.webhook = "demo_hook" + cls.user = new_test_user( + cls.env, + login="gateway_test_user", + groups="base.group_user,mail_gateway.gateway_user", + ) + cls.webhook_user = new_test_user( + cls.env, login="webhook_test_user", groups="base.group_user" + ) + cls.gateway = cls.env["mail.gateway"].create( + { + "name": "gateway", + "gateway_type": "whatsapp", + "token": "token", + "whatsapp_security_key": "key", + "webhook_secret": "MY-SECRET", + "webhook_user_id": cls.user.id, + "member_ids": [(4, cls.user.id)], + } + ) + cls.ws_template = cls.env["mail.whatsapp.template"].create( + { + "name": "New template", + "category": "marketing", + "language": "es", + "body": "Demo template", + "state": "approved", + "is_supported": True, + "gateway_id": cls.gateway.id, + } + ) + cls.partner = cls.env["res.partner"].create( + {"name": "Partner", "phone": "+34 600 000 000"} + ) + cls.password = "my_new_password" + cls.message_01 = { + "object": "whatsapp_business_account", + "entry": [ + { + "id": "WHATSAPP_BUSINESS_ACCOUNT_ID", + "changes": [ + { + "value": { + "messaging_product": "whatsapp", + "metadata": { + "display_phone_number": "1234", + "phone_number_id": "34699999999", + }, + "contacts": [ + { + "profile": {"name": "NAME"}, + "wa_id": "34699999999", + } + ], + "messages": [ + { + "from": "34699999999", + "id": "wamid.ID", + "timestamp": "1234", + "text": {"body": "MESSAGE_BODY"}, + "type": "text", + } + ], + }, + "field": "messages", + } + ], + } + ], + } + cls.message_02 = { + "object": "whatsapp_business_account", + "entry": [ + { + "id": "WHATSAPP_BUSINESS_ACCOUNT_ID", + "changes": [ + { + "value": { + "messaging_product": "whatsapp", + "metadata": { + "display_phone_number": "1234", + "phone_number_id": "1234", + }, + "contacts": [ + {"profile": {"name": "NAME"}, "wa_id": "1234"} + ], + "messages": [ + { + "from": "1234", + "id": "wamid.ID", + "timestamp": "1234", + "type": "image", + "image": { + "caption": "CAPTION", + "mime_type": "image/jpeg", + "sha256": "IMAGE_HASH", + "id": "12356", + }, + } + ], + }, + "field": "messages", + } + ], + } + ], + } + cls.audio_message = { + "object": "whatsapp_business_account", + "entry": [ + { + "id": "WHATSAPP_BUSINESS_ACCOUNT_ID", + "changes": [ + { + "value": { + "messaging_product": "whatsapp", + "metadata": { + "display_phone_number": "1234", + "phone_number_id": "1234", + }, + "contacts": [ + {"profile": {"name": "NAME"}, "wa_id": "1234"} + ], + "messages": [ + { + "from": "1234", + "id": "wamid.ID", + "timestamp": "1234", + "type": "audio", + "audio": { + "mime_type": "audio/oga", + "sha256": "IMAGE_HASH", + "id": "12356", + }, + } + ], + }, + "field": "messages", + } + ], + } + ], + } + + def test_webhook_management(self): + self.gateway.webhook_key = self.webhook + self.assertTrue(self.gateway.can_set_webhook) + self.gateway.set_webhook() + self.assertEqual(self.gateway.integrated_webhook_state, "pending") + self.gateway.remove_webhook() + self.assertFalse(self.gateway.integrated_webhook_state) + self.gateway.set_webhook() + self.assertEqual(self.gateway.integrated_webhook_state, "pending") + self.url_open( + "/gateway/{}/{}/update?hub.verify_token={}&hub.challenge={}".format( + self.gateway.gateway_type, + self.webhook, + self.gateway.whatsapp_security_key + "12", + "22", + ), + ).raise_for_status() + self.assertEqual(self.gateway.integrated_webhook_state, "pending") + self.integrate_webhook() + self.assertEqual(self.gateway.integrated_webhook_state, "integrated") + self.gateway.remove_webhook() + self.assertFalse(self.gateway.integrated_webhook_state) + + def integrate_webhook(self): + self.url_open( + "/gateway/{}/{}/update?hub.verify_token={}&hub.challenge={}".format( + self.gateway.gateway_type, + self.webhook, + self.gateway.whatsapp_security_key, + "22", + ), + ).raise_for_status() + + def set_message(self, message, webhook, headers=True): + data = json.dumps(message) + headers_dict = {"Content-Type": "application/json"} + if headers: + hex_dig = hmac.new( + self.gateway.webhook_secret.encode(), + data.encode(), + hashlib.sha256, + ).hexdigest() + headers_dict["x-hub-signature-256"] = f"sha256={hex_dig}" + self.url_open( + f"/gateway/{self.gateway.gateway_type}/{webhook}/update", + data=data, + headers=headers_dict, + ).raise_for_status() + + def receive_message(self, message): + self.gateway.webhook_key = self.webhook + self.gateway.set_webhook() + self.integrate_webhook() + self.set_message(message, self.webhook) + chat = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + self.assertTrue(chat) + self.assertTrue(chat.message_ids) + return chat.message_ids + + def test_receive_message_01(self): + message = self.receive_message(self.message_01) + self.assertFalse(message.author_id) + self.assertFalse(message.parent_id) + + def test_receive_message_02(self): + # Check that the partner is assigned automatically + partner = self.env["res.partner"].create( + {"name": "DEMO", "phone": "+34699999999"} + ) + message = self.receive_message(self.message_01) + self.assertEqual(message.author_id, partner) + self.assertFalse(message.parent_id) + + def test_receive_message_internal_webhook_user(self): + # A regular internal user must be able to create the channel of a new + # contact, even if the HTTP request starts as the public user + self.gateway.webhook_user_id = self.env.ref("base.user_admin") + message = self.receive_message(self.message_01) + self.assertFalse(message.author_id) + + def test_receive_message_gateway_webhook_user(self): + # A gateway user that is not an administrator can process the webhook: + # create the guest of a new contact and copy a reply on a linked record + self.gateway.webhook_user_id = self.env["res.users"].create( + { + "name": "Webhook user", + "login": "webhook_user", + "group_ids": [ + Command.set( + [ + self.env.ref("base.group_user").id, + self.env.ref("mail_gateway.gateway_user").id, + ] + ) + ], + } + ) + message = self.receive_message(self.message_01) + self.assertTrue(message.author_guest_id) + chat = self.env["discuss.channel"].browse(message.res_id) + response = MagicMock() + response.json.return_value = {"messages": [{"id": "wamid.SENT"}]} + with patch("requests.post", return_value=response): + sent = chat.message_post( + body="Question", + message_type="comment", + subtype_xmlid="mail.mt_comment", + ) + sent.gateway_message_id = self.partner.message_post( + body="Question", message_type="comment" + ) + reply = copy.deepcopy(self.message_01) + reply_value = reply["entry"][0]["changes"][0]["value"]["messages"][0] + reply_value["id"] = "wamid.REPLY" + reply_value["context"] = {"id": "wamid.SENT"} + self.set_message(reply, self.webhook) + reply_message = chat.message_ids.filtered(lambda m: m.parent_id == sent) + self.assertTrue(reply_message) + self.assertEqual(reply_message.gateway_message_id.res_id, self.partner.id) + + def test_receive_related_message(self): + """ + Send outgoing message, and then receive a reply message + with reference to the original. + """ + # Send outgoing + partner = self.env["res.partner"].create( + {"name": "DEMO", "phone": "+34699999999"} + ) + ctx = { + "default_res_model": partner._name, + "default_res_id": partner.id, + "default_number_field_name": "phone", + "default_composition_mode": "comment", + "default_gateway_id": self.gateway.id, + } + self.gateway.whatsapp_account_id = "123456" + form_composer = Form(self.env["whatsapp.composer"].with_context(**ctx)) + form_composer.body = "Body test" + form_composer.template_id = self.ws_template + composer = form_composer.save() + channel = partner._whatsapp_get_channel( + composer.number_field_name, composer.gateway_id + ) + message_domain = [ + ("gateway_type", "=", "whatsapp"), + ("model", "=", channel._name), + ("res_id", "=", channel.id), + ] + ID_WHATSAPP = "wamid.TEST_UNIQUE_ID_123" + with ( + RecordCapturer(self.env["mail.message"], message_domain) as capture, + patch("requests.post") as post_mock, + ): + response_mock = MagicMock() + response_mock.status_code = 200 + # Mock the response of whatsapp to include an assigned ID + response_mock.json.return_value = {"messages": [{"id": ID_WHATSAPP}]} + post_mock.return_value = response_mock + composer.action_send_whatsapp() + message = capture.records + # Check that the sent message notification contains the received Whatsapp ID + self.assertTrue( + message.notification_ids.filtered( + lambda msg: msg.gateway_message_id == ID_WHATSAPP + ) + ) + # Receive message 01 with related id set. + reply_message = self.message_01 + reply_message["entry"][0]["changes"][0]["value"]["messages"][0]["context"] = { + "id": ID_WHATSAPP + } + received_reply = self.receive_message(reply_message) + self.assertEqual(message.id, received_reply.parent_id.id) + + def test_receive_message_03(self): + class GetImageResponse: + def raise_for_status(self): + pass + + def json(self): + return {"url": "http://demo.url", "mime_type": "image/png"} + + content = b"binary_data" + + with patch("requests.get") as get_mock: + get_mock.return_value = GetImageResponse() + message = self.receive_message(self.message_02) + self.assertEqual(message.body, "

    CAPTION

    ") + + def test_receive_audio_message(self): + class GetAudioResponse: + def raise_for_status(self): + pass + + def json(self): + return {"url": "http://demo.url", "mime_type": "audio/oga"} + + content = b"binary_data" + + with patch("requests.get") as get_mock: + get_mock.return_value = GetAudioResponse() + message = self.receive_message(self.audio_message) + # Check that the attachment is marked as voice + self.assertTrue(message.attachment_ids.voice_ids) + + def test_receive_message_keeps_layout(self): + """Text keeps its layout, markup stays literal, location stays a link.""" + message = copy.deepcopy(self.message_01) + content = message["entry"][0]["changes"][0]["value"]["messages"][0] + # Plain text, brackets included: what a sender typing "" really sends. + content["text"] = { + "body": "Line 1\nbold\n\nSection 2 https://example.com/track" + } + content["location"] = {"latitude": "41.3851", "longitude": "2.1734"} + body = self.receive_message(message).body + self.assertIn("Line 1

    ", body) + self.assertIn('href="https://example.com/track"', body) + self.assertIn("<b>bold</b>", body) + self.assertIn("41.3851,2.1734", body) + self.assertNotIn("<a", body) + + def test_receive_message_formatting(self): + """Whatsapp text markers are rendered as html.""" + message = copy.deepcopy(self.message_01) + content = message["entry"][0]["changes"][0]["value"]["messages"][0] + content["text"] = {"body": "*bold* _italic_ https://example.com/a_b_c"} + body = self.receive_message(message).body + self.assertIn("bold", body) + self.assertIn("italic", body) + # The markers of a link belong to the link. + self.assertIn('href="https://example.com/a_b_c"', body) + + @mute_logger("odoo.addons.mail_gateway.controllers.gateway") + def test_post_no_signature_no_message(self): + self.gateway.webhook_key = self.webhook + self.gateway.set_webhook() + self.integrate_webhook() + self.set_message(self.message_01, self.webhook, False) + self.assertFalse( + self.env["discuss.channel"].search([("gateway_id", "=", self.gateway.id)]) + ) + + @mute_logger("odoo.addons.mail_gateway.controllers.gateway") + def test_post_wrong_signature_no_message(self): + self.gateway.webhook_key = self.webhook + self.gateway.set_webhook() + self.integrate_webhook() + data = json.dumps(self.message_01) + hex_dig = hmac.new( + self.gateway.webhook_secret.encode(), + data.encode(), + hashlib.sha256, + ).hexdigest() + headers = { + "Content-Type": "application/json", + "x-hub-signature-256": f"sha256=1234{hex_dig}", + } + self.url_open( + f"/gateway/{self.gateway.gateway_type}/{self.webhook}/update", + data=data, + headers=headers, + ).raise_for_status() + self.assertFalse( + self.env["discuss.channel"].search([("gateway_id", "=", self.gateway.id)]) + ) + + def test_send_image(self): + self.gateway.webhook_key = self.webhook + self.gateway.set_webhook() + self.integrate_webhook() + composer = self.env["whatsapp.composer"].create( + { + "res_model": self.partner._name, + "res_id": self.partner.id, + "number_field_name": "phone", + "gateway_id": self.gateway.id, + } + ) + composer.action_view_whatsapp() + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + + with patch("requests.post") as post_mock: + post_mock.return_value = MagicMock() + channel.message_post( + attachments=[("demo.png", b"IMAGE")], + subtype_xmlid="mail.mt_comment", + message_type="comment", + ) + post_mock.assert_called() + self.assertEqual(post_mock.call_count, 2) + + def test_send_message_formatting(self): + """Html formatting is sent as whatsapp text markers.""" + self.gateway.webhook_key = self.webhook + self.gateway.set_webhook() + self.integrate_webhook() + composer = self.env["whatsapp.composer"].create( + { + "res_model": self.partner._name, + "res_id": self.partner.id, + "number_field_name": "phone", + "gateway_id": self.gateway.id, + } + ) + composer.action_view_whatsapp() + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + with patch("requests.post") as post_mock: + post_mock.return_value = MagicMock() + channel.message_post( + body=Markup("

    bold and italic

    "), + subtype_xmlid="mail.mt_comment", + message_type="comment", + ) + payload = post_mock.call_args.kwargs["json"] + self.assertEqual(payload["text"]["body"], "*bold* and _italic_") + + def test_send_document_error(self): + self.gateway.webhook_key = self.webhook + self.gateway.set_webhook() + self.integrate_webhook() + composer = self.env["whatsapp.composer"].create( + { + "res_model": self.partner._name, + "res_id": self.partner.id, + "number_field_name": "phone", + "gateway_id": self.gateway.id, + } + ) + composer.action_view_whatsapp() + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + with mute_logger( + "odoo.addons.mail_gateway_whatsapp.models.mail_gateway_whatsapp" + ): + message = channel.message_post( + attachments=[("demo.xml", b"IMAGE")], + subtype_xmlid="mail.mt_comment", + message_type="comment", + ) + self.assertEqual(message.notification_ids.notification_status, "exception") + + def test_send_message_text(self): + """ + Test that the message is sent correctly + - First message need a template + - Second message does not need a template + """ + ctx = { + "default_res_model": self.partner._name, + "default_res_id": self.partner.id, + "default_number_field_name": "phone", + "default_composition_mode": "comment", + "default_gateway_id": self.gateway.id, + } + self.gateway.whatsapp_account_id = "123456" + form_composer = Form(self.env["whatsapp.composer"].with_context(**ctx)) + form_composer.body = "Body test" + self.assertTrue(form_composer.is_required_template) + self.assertTrue(form_composer._get_modifier("template_id", "required")) + form_composer.template_id = self.ws_template + composer = form_composer.save() + self.assertEqual(composer.body, "Demo template") + channel = self.partner._whatsapp_get_channel( + composer.number_field_name, composer.gateway_id + ) + message_domain = [ + ("gateway_type", "=", "whatsapp"), + ("model", "=", channel._name), + ("res_id", "=", channel.id), + ] + with ( + RecordCapturer(self.env["mail.message"], message_domain) as capture, + patch("requests.post") as post_mock, + ): + post_mock.return_value = MagicMock() + composer.action_send_whatsapp() + self.assertEqual(len(capture.records), 1) + self.assertEqual(capture.records.body, Markup("

    Demo template

    ")) + # second message + form_composer = Form(self.env["whatsapp.composer"].with_context(**ctx)) + form_composer.body = "Body test" + self.assertFalse(form_composer.is_required_template) + self.assertFalse(form_composer._get_modifier("template_id", "required")) + composer = form_composer.save() + self.assertEqual(composer.body, "Body test") + channel = self.partner._whatsapp_get_channel( + composer.number_field_name, composer.gateway_id + ) + message_domain = [ + ("gateway_type", "=", "whatsapp"), + ("model", "=", channel._name), + ("res_id", "=", channel.id), + ] + with ( + RecordCapturer(self.env["mail.message"], message_domain) as capture, + patch("requests.post") as post_mock, + ): + post_mock.return_value = MagicMock() + composer.action_send_whatsapp() + self.assertEqual(len(capture.records), 1) + self.assertEqual(capture.records.body, Markup("

    Body test

    ")) + + def test_compose(self): + self.gateway.webhook_key = self.webhook + self.gateway.set_webhook() + self.integrate_webhook() + composer = self.env["whatsapp.composer"].create( + { + "res_model": self.partner._name, + "res_id": self.partner.id, + "number_field_name": "phone", + "gateway_id": self.gateway.id, + } + ) + composer.action_view_whatsapp() + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + self.assertTrue(channel) + self.assertFalse(channel.message_ids) + with self.assertRaises(UserError): + composer.action_send_whatsapp() + composer.body = "DEMO" + with patch("requests.post") as post_mock: + post_mock.return_value = MagicMock() + composer.action_send_whatsapp() + post_mock.assert_called() + channel.invalidate_recordset() + self.assertTrue(channel.message_ids) + + def test_send_message_with_variable(self): + ctx = { + "default_res_model": self.partner._name, + "default_res_id": self.partner.id, + "default_number_field_name": "phone", + "default_composition_mode": "comment", + "default_gateway_id": self.gateway.id, + } + tmpl_with_vars = self.env["mail.whatsapp.template"].create( + { + "name": "Partner Vars", + "category": "utility", + "language": "es", + "header": "Hi {{1}}", + "body": "Name: {{1}} · Tel: {{2}}", + "gateway_id": self.gateway.id, + "variable_ids": [Command.clear()], + "state": "approved", + "is_supported": True, + "model_id": self.env["ir.model"]._get("res.partner").id, + } + ) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{1}}", + "line_type": "header", + "template_id": tmpl_with_vars.id, + "field_name": "name", + } + ) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{1}}", + "line_type": "body", + "template_id": tmpl_with_vars.id, + "field_name": "name", + } + ) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{2}}", + "line_type": "body", + "template_id": tmpl_with_vars.id, + "field_name": "phone", + } + ) + self.env["mail.whatsapp.template.button"].create( + { + "name": "phone", + "button_type": "phone_number", + "template_id": tmpl_with_vars.id, + "call_number": "+34666555444", + } + ) + self.assertEqual(len(tmpl_with_vars.variable_ids), 3) + self.assertEqual(len(tmpl_with_vars.button_ids), 1) + self.gateway.whatsapp_account_id = "123456" + form_composer = Form(self.env["whatsapp.composer"].with_context(**ctx)) + form_composer.template_id = tmpl_with_vars + self.assertTrue(form_composer.is_required_template) + self.assertTrue(form_composer._get_modifier("template_id", "required")) + composer = form_composer.save() + channel = self.partner._whatsapp_get_channel( + composer.number_field_name, composer.gateway_id + ) + message_domain = [ + ("gateway_type", "=", "whatsapp"), + ("model", "=", channel._name), + ("res_id", "=", channel.id), + ] + with ( + RecordCapturer(self.env["mail.message"], message_domain) as capture, + patch("requests.post") as post_mock, + ): + post_mock.return_value = MagicMock() + composer.action_send_whatsapp() + # Assertions + self.assertEqual(len(capture.records), 1) + channel.invalidate_recordset() + self.assertTrue(channel.message_ids) + + def test_send_message_with_dynamic_button(self): + ctx = { + "default_res_model": self.partner._name, + "default_res_id": self.partner.id, + "default_number_field_name": "phone", + "default_composition_mode": "comment", + "default_gateway_id": self.gateway.id, + } + tmpl_with_vars_dynamic = self.env["mail.whatsapp.template"].create( + { + "name": "Dynamic Button", + "category": "utility", + "language": "es", + "body": "Name: {{1}} · Tel: {{2}}", + "gateway_id": self.gateway.id, + "variable_ids": [Command.clear()], + "state": "approved", + "is_supported": True, + "model_id": self.env["ir.model"]._get("res.partner").id, + } + ) + self.assertEqual(len(tmpl_with_vars_dynamic.variable_ids), 0) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{1}}", + "line_type": "body", + "template_id": tmpl_with_vars_dynamic.id, + "field_name": "name", + } + ) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{2}}", + "line_type": "body", + "template_id": tmpl_with_vars_dynamic.id, + "field_name": "phone", + } + ) + self.env["mail.whatsapp.template.button"].create( + { + "name": "1", + "button_type": "url", + "url_type": "dynamic", + "template_id": tmpl_with_vars_dynamic.id, + "website_url": "https://www.odoo.com", + } + ) + self.assertEqual(len(tmpl_with_vars_dynamic.variable_ids), 3) + button = tmpl_with_vars_dynamic.variable_ids.search( + [ + ("line_type", "=", "button"), + ("template_id", "=", tmpl_with_vars_dynamic.id), + ] + ) + button.field_name = "name" + self.gateway.whatsapp_account_id = "123456" + form_composer = Form(self.env["whatsapp.composer"].with_context(**ctx)) + form_composer.template_id = tmpl_with_vars_dynamic + self.assertTrue(form_composer.is_required_template) + self.assertTrue(form_composer._get_modifier("template_id", "required")) + composer = form_composer.save() + channel = self.partner._whatsapp_get_channel( + composer.number_field_name, composer.gateway_id + ) + message_domain = [ + ("gateway_type", "=", "whatsapp"), + ("model", "=", channel._name), + ("res_id", "=", channel.id), + ] + with ( + RecordCapturer(self.env["mail.message"], message_domain) as capture, + patch("requests.post") as post_mock, + ): + post_mock.return_value = MagicMock() + composer.action_send_whatsapp() + # Assertions + self.assertEqual(len(capture.records), 1) + channel.invalidate_recordset() + self.assertTrue(channel.message_ids) diff --git a/mail_gateway_whatsapp/tests/test_mail_whatsapp_coverage.py b/mail_gateway_whatsapp/tests/test_mail_whatsapp_coverage.py new file mode 100644 index 000000000..e943d4ca4 --- /dev/null +++ b/mail_gateway_whatsapp/tests/test_mail_whatsapp_coverage.py @@ -0,0 +1,1154 @@ +# Copyright 2025 Komit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import json +from unittest.mock import MagicMock, patch + +import requests + +from odoo import Command +from odoo.exceptions import UserError, ValidationError +from odoo.tests.common import tagged +from odoo.tools import mute_logger + +from odoo.addons.base.models.ir_mail_server import MailDeliveryException +from odoo.addons.mail_gateway.tests.common import MailGatewayTestCase + + +@tagged("-at_install", "post_install") +class TestMailWhatsAppCoverage(MailGatewayTestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.gateway = cls.env["mail.gateway"].create( + { + "name": "gateway", + "gateway_type": "whatsapp", + "token": "token", + "whatsapp_security_key": "key", + "whatsapp_account_id": "123456", + "whatsapp_from_phone": "111", + "webhook_secret": "MY-SECRET", + "member_ids": [(4, cls.env.user.id)], + } + ) + cls.partner = cls.env["res.partner"].create( + {"name": "Ada Lovelace", "phone": "+34900111222"} + ) + + def _create_template(self, **kwargs): + vals = { + "name": "Template", + "category": "utility", + "language": "es", + "body": "Body", + "gateway_id": self.gateway.id, + "state": "approved", + "is_supported": True, + } + vals.update(kwargs) + return self.env["mail.whatsapp.template"].create(vals) + + # ------------------------------------------------------------------ + # Template constraints + # ------------------------------------------------------------------ + def test_check_buttons_max_total(self): + tmpl = self._create_template() + with self.assertRaisesRegex(ValidationError, "maximum of 10 buttons"): + tmpl.write( + { + "button_ids": [ + Command.create({"name": f"B{i}", "button_type": "quick_reply"}) + for i in range(11) + ] + } + ) + + def test_check_buttons_max_url(self): + tmpl = self._create_template() + with self.assertRaisesRegex(ValidationError, "maximum of 2 URL buttons"): + tmpl.write( + { + "button_ids": [ + Command.create( + { + "name": f"U{i}", + "button_type": "url", + "website_url": "https://example.com", + } + ) + for i in range(3) + ] + } + ) + + def test_check_buttons_max_phone(self): + tmpl = self._create_template() + with self.assertRaisesRegex(ValidationError, "maximum of 1 Call Number"): + tmpl.write( + { + "button_ids": [ + Command.create( + { + "name": f"P{i}", + "button_type": "phone_number", + "call_number": "+34600000000", + } + ) + for i in range(2) + ] + } + ) + + def test_check_variables_two_headers(self): + with self.assertRaisesRegex( + ValidationError, "exactly 1 variable in the header" + ): + self._create_template( + header="{{1}} {{2}}", + variable_ids=[ + Command.create( + {"name": "{{1}}", "line_type": "header", "field_name": "name"} + ), + Command.create( + {"name": "{{2}}", "line_type": "header", "field_name": "phone"} + ), + ], + ) + + def test_check_variables_header_index(self): + with self.assertRaisesRegex(ValidationError, r"header should be used as"): + self._create_template( + header="{{2}}", + variable_ids=[ + Command.create( + {"name": "{{2}}", "line_type": "header", "field_name": "name"} + ), + ], + ) + + def test_check_variables_body_gap(self): + with self.assertRaisesRegex(ValidationError, "should start at 1"): + self._create_template( + body="{{1}} {{3}}", + variable_ids=[ + Command.create( + {"name": "{{1}}", "line_type": "body", "field_name": "name"} + ), + Command.create( + {"name": "{{3}}", "line_type": "body", "field_name": "phone"} + ), + ], + ) + + def test_variable_check_name_invalid(self): + tmpl = self._create_template() + with self.assertRaisesRegex(ValidationError, "format"): + self.env["mail.whatsapp.template.variable"].create( + { + "name": "not-a-var", + "line_type": "body", + "template_id": tmpl.id, + "field_name": "name", + } + ) + + def test_variable_check_field_name_missing(self): + tmpl = self._create_template() + with self.assertRaisesRegex(ValidationError, "associated with a field"): + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{1}}", + "line_type": "body", + "template_id": tmpl.id, + "field_name": False, + } + ) + + def test_variable_check_field_name_invalid_path(self): + tmpl = self._create_template() + with self.assertRaisesRegex(ValidationError, "valid field path"): + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{1}}", + "line_type": "body", + "template_id": tmpl.id, + "field_name": "not_a_real_field", + } + ) + + # ------------------------------------------------------------------ + # Button constraints + # ------------------------------------------------------------------ + def test_button_invalid_url(self): + tmpl = self._create_template() + with self.assertRaisesRegex(ValidationError, "valid URL"): + self.env["mail.whatsapp.template.button"].create( + { + "name": "Web", + "button_type": "url", + "website_url": "not-a-url", + "template_id": tmpl.id, + } + ) + + def test_button_check_variable_ids(self): + tmpl = self._create_template() + static_button = self.env["mail.whatsapp.template.button"].create( + { + "name": "Static", + "button_type": "url", + "url_type": "static", + "website_url": "https://example.com", + "template_id": tmpl.id, + } + ) + # A dynamic url auto-creates its placeholder variable + dynamic_button = self.env["mail.whatsapp.template.button"].create( + { + "name": "{{1}}", + "button_type": "url", + "url_type": "dynamic", + "website_url": "https://example.com/", + "template_id": tmpl.id, + } + ) + self.assertTrue(dynamic_button.variable_ids) + dynamic_button.check_variable_ids() + # A static url with a placeholder variable is invalid + static_button.variable_ids = [ + Command.create( + { + "name": "{{1}}", + "line_type": "button", + "template_id": tmpl.id, + "field_name": "name", + } + ) + ] + with self.assertRaises(ValidationError): + static_button.check_variable_ids() + + # ------------------------------------------------------------------ + # Export / import component building + # ------------------------------------------------------------------ + def test_prepare_components_to_export(self): + tmpl = self._create_template( + header="Hello {{1}}", + footer="Bye", + body="Body {{1}}", + variable_ids=[ + Command.create( + {"name": "{{1}}", "line_type": "header", "field_name": "name"} + ), + Command.create( + {"name": "{{1}}", "line_type": "body", "field_name": "name"} + ), + ], + ) + self.env["mail.whatsapp.template.button"].create( + { + "name": "{{1}}", + "button_type": "url", + "url_type": "dynamic", + "website_url": "https://example.com/", + "template_id": tmpl.id, + } + ) + self.env["mail.whatsapp.template.button"].create( + { + "name": "Call", + "button_type": "phone_number", + "call_number": "+34600000000", + "template_id": tmpl.id, + } + ) + components = tmpl._prepare_components_to_export() + types = {c["type"] for c in components} + self.assertEqual(types, {"BODY", "HEADER", "FOOTER", "BUTTONS"}) + buttons = next(c for c in components if c["type"] == "BUTTONS")["buttons"] + button_types = {b["type"] for b in buttons} + self.assertEqual(button_types, {"URL", "PHONE_NUMBER"}) + + def test_prepare_values_to_import_button_update_and_unsupported(self): + tmpl = self._create_template(template_uid="999") + existing = self.env["mail.whatsapp.template.button"].create( + { + "name": "Existing", + "button_type": "quick_reply", + "template_id": tmpl.id, + } + ) + json_data = { + "name": "imported_tmpl", + "category": "MARKETING", + "language": "es", + "status": "APPROVED", + "id": "999", + "components": [ + {"type": "BODY", "text": "Body"}, + { + "type": "BUTTONS", + "buttons": [{"type": "QUICK_REPLY", "text": "Existing"}], + }, + {"type": "CAROUSEL"}, # unsupported -> is_supported False + ], + } + vals = tmpl._prepare_values_to_import(self.gateway, json_data) + self.assertFalse(vals["is_supported"]) + # button update command referencing the existing button + button_cmds = vals["button_ids"] + self.assertTrue( + any( + cmd[0] == Command.UPDATE and cmd[1] == existing.id + for cmd in button_cmds + ) + ) + + def test_button_export_template_http_error(self): + tmpl = self._create_template() + + def _bad_response(*args, **kwargs): + response = requests.Response() + response.status_code = 400 + response._content = b'{"error": "bad"}' + response.url = args[0] if args else "" + return response + + with patch.object(requests, "post", _bad_response): + with self.assertRaises(UserError): + tmpl.button_export_template() + + # a non-HTTP error is also wrapped into a UserError + def _raise(*args, **kwargs): + raise ValueError("boom") + + with patch.object(requests, "post", _raise): + with self.assertRaises(UserError): + tmpl.button_export_template() + + def test_sync_template_error(self): + tmpl = self._create_template(template_uid="123") + + def _raise(*args, **kwargs): + raise ValueError("boom") + + with patch.object(requests, "get", _raise): + with self.assertRaises(UserError): + tmpl.button_sync_template() + + def test_import_template_request_error(self): + self.gateway.whatsapp_account_id = "123456" + + def _raise(*args, **kwargs): + raise ValueError("network down") + + with patch.object(requests, "get", _raise): + with self.assertRaises(UserError): + self.gateway.button_import_whatsapp_template() + + def test_button_dynamic_placeholder_name(self): + tmpl = self._create_template() + button = self.env["mail.whatsapp.template.button"].create( + { + "name": "{{2}}", + "button_type": "url", + "url_type": "dynamic", + "website_url": "https://example.com/", + "template_id": tmpl.id, + } + ) + # the auto-generated placeholder is not named {{1}} + with self.assertRaisesRegex(ValidationError, r"can only be"): + button.check_variable_ids() + + # ------------------------------------------------------------------ + # Rendering / value extraction + # ------------------------------------------------------------------ + def test_render_body_message_default_res_ids(self): + tmpl = self._create_template( + header="Hi {{1}}", + body="Name {{1}}", + variable_ids=[ + Command.create( + {"name": "{{1}}", "line_type": "header", "field_name": "name"} + ), + Command.create( + {"name": "{{1}}", "line_type": "body", "field_name": "name"} + ), + ], + ) + rendered = tmpl.with_context( + default_res_ids=[self.partner.id] + ).render_body_message() + self.assertIn(self.partner.name, rendered) + + def test_extract_value_from_field_path_variants(self): + parent = self.env["res.partner"].create({"name": "Parent Co"}) + self.partner.parent_id = parent + tmpl = self._create_template( + body="{{1}}", + variable_ids=[ + Command.create( + {"name": "{{1}}", "line_type": "body", "field_name": "parent_id"} + ), + ], + ) + var = tmpl.variable_ids + # relational field -> display name of the related record + self.assertEqual( + var._get_variables_value(self.partner), {"body-{{1}}": "Parent Co"} + ) + # chained path -> last model + last field name + var.field_name = "parent_id.name" + self.assertEqual(var._extract_value_from_field_path(self.partner), "Parent Co") + # selection field -> exported label + var.field_name = "type" + self.assertTrue(var._extract_value_from_field_path(self.partner)) + + def test_variable_display_name_and_onchange(self): + tmpl = self._create_template() + Variable = self.env["mail.whatsapp.template.variable"] + # display name: header variant vs body variant + header_var = Variable.new( + {"name": "{{1}}", "line_type": "header", "template_id": tmpl.id} + ) + body_var = Variable.new( + {"name": "{{1}}", "line_type": "body", "template_id": tmpl.id} + ) + self.assertTrue(header_var.display_name) + self.assertIn("{{1}}", body_var.display_name) + # onchange resets the field on an in-memory record (no constraint flush) + onchange_var = Variable.new( + { + "name": "{{1}}", + "line_type": "body", + "template_id": tmpl.id, + "field_name": "name", + } + ) + onchange_var._onchange_model_id() + self.assertFalse(onchange_var.field_name) + + def test_button_back2draft(self): + tmpl = self._create_template() + tmpl.button_back2draft() + self.assertEqual(tmpl.state, "draft") + + # ------------------------------------------------------------------ + # discuss.channel avatar + # ------------------------------------------------------------------ + def test_generate_avatar_gateway_whatsapp(self): + channel = self.partner._whatsapp_get_channel("phone", self.gateway) + avatar = channel._generate_avatar_gateway() + self.assertIn(" no channel, skipped + { + "recipient_id": "0000", + "id": "wamid.TEST", + "status": "failed", + }, + # failed status without a matching notification + { + "recipient_id": token, + "id": "wamid.UNKNOWN", + "status": "failed", + }, + # failed status updating our notification + { + "recipient_id": token, + "id": "wamid.TEST", + "status": "failed", + "errors": [ + { + "code": 131, + "error_data": {"details": "Boom"}, + } + ], + }, + ] + }, + } + ] + } + ] + } + service._receive_update(self.gateway, update) + self.assertEqual(notification.notification_status, "exception") + self.assertIn("Boom", notification.failure_reason) + + def test_receive_update_status_delivery(self): + service = self.env["mail.gateway.whatsapp"] + channel = self.partner._whatsapp_get_channel("phone", self.gateway) + token = channel.gateway_channel_token + channel_message = channel.with_context( + no_gateway_notification=True + ).message_post( + body="hi", message_type="comment", subtype_xmlid="mail.mt_comment" + ) + document_message = self.partner.message_post( + body="hi", message_type="comment", subtype_xmlid="mail.mt_comment" + ) + notifications = self.env["mail.notification"] + # The channel and the document notifications share the same wamid + for message in channel_message | document_message: + notifications |= self.env["mail.notification"].create( + { + "mail_message_id": message.id, + "notification_type": "gateway", + "notification_status": "sent", + "gateway_channel_id": channel.id, + "gateway_message_id": "wamid.TEST", + "res_partner_id": self.partner.id, + } + ) + + def receive(status): + service._receive_update( + self.gateway, + { + "entry": [ + { + "changes": [ + { + "field": "messages", + "value": { + "statuses": [ + { + "recipient_id": token, + "id": "wamid.TEST", + "status": status, + } + ] + }, + } + ] + } + ] + }, + ) + + receive("sent") + self.assertEqual(set(notifications.mapped("whatsapp_status")), {"sent"}) + receive("delivered") + self.assertEqual(set(notifications.mapped("whatsapp_status")), {"delivered"}) + receive("read") + self.assertEqual(set(notifications.mapped("whatsapp_status")), {"read"}) + # Webhooks may arrive out of order: a late status doesn't go back + receive("delivered") + self.assertEqual(set(notifications.mapped("whatsapp_status")), {"read"}) + # Unknown statuses are ignored + receive("deleted") + self.assertEqual(set(notifications.mapped("whatsapp_status")), {"read"}) + self.assertEqual(set(notifications.mapped("notification_status")), {"sent"}) + + def test_receive_update_image_and_location(self): + service = self.env["mail.gateway.whatsapp"] + token = self.partner.phone.replace("+", "").replace(" ", "") + + def fake_get(url, *args, **kwargs): + response = requests.Response() + response.status_code = 200 + if "cdn" in url: + response._content = b"IMAGEBYTES" + else: + response._content = json.dumps( + {"url": "https://cdn.example.com/img", "mime_type": "image/png"} + ).encode() + return response + + value = { + "messaging_product": "whatsapp", + "contacts": [{"wa_id": token, "profile": {"name": "Ada"}}], + "messages": [ + { + "from": token, + "id": "wamid.IMG", + "timestamp": "1700000000", + "type": "image", + "image": {"id": "IMG_ID", "caption": "Nice pic"}, + }, + { + "from": token, + "id": "wamid.LOC", + "timestamp": "1700000001", + "type": "location", + "location": {"latitude": "1.23", "longitude": "4.56"}, + }, + ], + } + update = {"entry": [{"changes": [{"field": "messages", "value": value}]}]} + # The controller processes inbound updates with ``no_gateway_notification`` + # so incoming messages are not echoed back to the Meta API. + gateway = self.gateway.with_context(no_gateway_notification=True) + with patch.object(requests, "get", fake_get): + service._receive_update(gateway, update) + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + self.assertTrue(channel.message_ids) + self.assertTrue(channel.message_ids.attachment_ids) + + def test_receive_update_ignores_other_fields(self): + service = self.env["mail.gateway.whatsapp"] + token = self.partner.phone.replace("+", "") + value = { + "messages": [ + { + "from": token, + "id": "wamid.OTHER", + "timestamp": "1700000000", + "text": {"body": "ignored"}, + } + ] + } + update = {"entry": [{"changes": [{"field": "account_update", "value": value}]}]} + service._receive_update(self.gateway, update) + self.assertFalse( + self.env["discuss.channel"].search([("gateway_id", "=", self.gateway.id)]) + ) + + def test_send_payload_document(self): + service = self.env["mail.gateway.whatsapp"] + channel = self.partner._whatsapp_get_channel("phone", self.gateway) + payload = service._send_payload( + channel, + media_id="MEDIA_ID", + media_type="document", + media_name="invoice.pdf", + ) + self.assertEqual(payload["type"], "document") + self.assertEqual( + payload["document"], {"id": "MEDIA_ID", "filename": "invoice.pdf"} + ) + payload = service._send_payload( + channel, media_id="MEDIA_ID", media_type="image" + ) + self.assertEqual(payload["image"], {"id": "MEDIA_ID"}) + + # ------------------------------------------------------------------ + # mail.thread helpers + # ------------------------------------------------------------------ + def test_get_whatsapp_channel_vals(self): + Partner = self.env["res.partner"] + vals = Partner._get_whatsapp_channel_vals("3412345", self.gateway, self.partner) + self.assertEqual(vals["gateway_channel_token"], "3412345") + self.assertEqual(vals["partner_id"], self.partner.id) + vals_no_partner = Partner._get_whatsapp_channel_vals( + "3412345", self.gateway, Partner.browse() + ) + self.assertNotIn("partner_id", vals_no_partner) + + def test_whatsapp_get_channel_creates_gateway_channel(self): + channel = self.partner._whatsapp_get_channel("phone", self.gateway) + self.assertTrue(channel) + gateway_channel = self.env["res.partner.gateway.channel"].search( + [ + ("partner_id", "=", self.partner.id), + ("gateway_id", "=", self.gateway.id), + ] + ) + self.assertTrue(gateway_channel) + # a second call reuses the existing gateway channel + self.partner._whatsapp_get_channel("phone", self.gateway) + self.assertEqual( + self.env["res.partner.gateway.channel"].search_count( + [ + ("partner_id", "=", self.partner.id), + ("gateway_id", "=", self.gateway.id), + ] + ), + 1, + ) + + def test_whatsapp_get_partner_without_partner_field(self): + self.assertIsNone(self.env["mail.blacklist"]._whatsapp_get_partner()) + + def test_whatsapp_get_channel_no_phone(self): + partner = self.env["res.partner"].create({"name": "No Phone"}) + with self.assertRaisesRegex(UserError, "Phone cannot be sanitized"): + partner._whatsapp_get_channel("phone", self.gateway) + + # ------------------------------------------------------------------ + # ir.actions.server + # ------------------------------------------------------------------ + def test_server_action_model_coherency(self): + with self.assertRaisesRegex(ValidationError, "non transient mail.thread"): + self.env["ir.actions.server"].create( + { + "name": "WA transient", + "model_id": self.env["ir.model"]._get_id("res.users.settings"), + "state": "whatsapp", + "whatsapp_gateway_id": self.gateway.id, + } + ) + + def test_server_action_run_whatsapp(self): + tmpl = self._create_template( + model_id=self.env["ir.model"]._get_id("res.partner"), + ) + action = self.env["ir.actions.server"].create( + { + "name": "WA action", + "model_id": self.env["ir.model"]._get_id("res.partner"), + "state": "whatsapp", + "whatsapp_gateway_id": self.gateway.id, + "whatsapp_partner": "{{ object.id }}", + "whatsapp_template_id": tmpl.id, + } + ) + self.assertTrue(action.available_model_ids) + service_cls = type(self.env["mail.gateway.whatsapp"]) + with patch.object(service_cls, "_send", return_value=None): + action.with_context( + active_model="res.partner", + active_ids=self.partner.ids, + active_id=self.partner.id, + ).run() + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + self.assertTrue(channel) + + def test_server_action_run_whatsapp_no_active_ids(self): + tmpl = self._create_template( + model_id=self.env["ir.model"]._get_id("res.partner"), + ) + action = self.env["ir.actions.server"].create( + { + "name": "WA action noctx", + "model_id": self.env["ir.model"]._get_id("res.partner"), + "state": "whatsapp", + "whatsapp_gateway_id": self.gateway.id, + "whatsapp_partner": "{{ object.id }}", + "whatsapp_template_id": tmpl.id, + } + ) + # No active_ids/active_id -> action does nothing + self.assertFalse(action._run_action_whatsapp_multi()) + + # ------------------------------------------------------------------ + # Wizards + # ------------------------------------------------------------------ + def test_whatsapp_composer(self): + composer = ( + self.env["whatsapp.composer"] + .with_context( + active_model="res.partner", + active_id=self.partner.id, + ) + .create( + { + "res_model": "res.partner", + "res_id": self.partner.id, + "number_field_name": "phone", + "gateway_id": self.gateway.id, + } + ) + ) + # is_required_template computed with no previous message -> True + self.assertTrue(composer.is_required_template) + composer.onchange_gateway_id() + self.assertFalse(composer.template_id) + # Sending without body raises + with self.assertRaisesRegex(UserError, "Body is required"): + composer.action_send_whatsapp() + # With body -> posts a message on the channel + composer.body = "Hello" + service_cls = type(self.env["mail.gateway.whatsapp"]) + with patch.object(service_cls, "_send", return_value=None): + composer.action_send_whatsapp() + action = composer.action_view_whatsapp() + self.assertEqual(action["tag"], "mail.action_discuss") + + def test_whatsapp_composer_missing_record(self): + composer = self.env["whatsapp.composer"].create( + { + "res_model": "res.partner", + "gateway_id": self.gateway.id, + "body": "Hello", + } + ) + self.assertFalse(composer.action_view_whatsapp()) + self.assertFalse(composer.action_send_whatsapp()) + self.assertFalse( + self.env["discuss.channel"].search([("gateway_id", "=", self.gateway.id)]) + ) + + def test_whatsapp_composer_not_required_template(self): + # Missing number_field_name -> template is not required + composer = self.env["whatsapp.composer"].create( + { + "res_model": "res.partner", + "res_id": self.partner.id, + "gateway_id": self.gateway.id, + } + ) + self.assertFalse(composer.is_required_template) + + def test_whatsapp_composer_default_get_multiple(self): + # A second whatsapp gateway -> the wizard cannot auto-pick one + self.env["mail.gateway"].create( + { + "name": "gateway 2", + "gateway_type": "whatsapp", + "token": "token2", + "whatsapp_security_key": "key2", + "webhook_secret": "SECRET-2", + } + ) + defaults = self.env["whatsapp.composer"].default_get( + ["find_gateway", "gateway_id"] + ) + self.assertTrue(defaults["find_gateway"]) + + def test_prepare_value_to_send_res_id_context(self): + tmpl = self._create_template( + body="Hi {{1}}", + model_id=self.env["ir.model"]._get_id("res.partner"), + variable_ids=[ + Command.create( + {"name": "{{1}}", "line_type": "body", "field_name": "name"} + ), + ], + ) + # prepare_value_to_send resolves the record from the ``res_id`` context + components = tmpl.with_context(res_id=self.partner.id).prepare_value_to_send() + body = next(c for c in components if c["type"] == "body") + self.assertEqual(body["parameters"][0]["text"], self.partner.name) + + def test_whatsapp_composer_default_get(self): + defaults = self.env["whatsapp.composer"].default_get( + ["find_gateway", "gateway_id"] + ) + # Only one whatsapp gateway exists -> auto-selected + self.assertFalse(defaults["find_gateway"]) + self.assertEqual(defaults["gateway_id"], self.gateway.id) + + def test_compose_gateway_message_template(self): + tmpl = self._create_template( + body="Hello world", + model_id=self.env["ir.model"]._get_id("res.partner"), + ) + composer = self.env["mail.compose.gateway.message"].create( + { + "model": "res.partner", + "res_ids": f"[{self.partner.id}]", + "whatsapp_template_id": tmpl.id, + } + ) + composer.onchange_whatsapp_template_id() + self.assertTrue(composer.body) + # sending applies the whatsapp template context branch + service_cls = type(self.env["mail.gateway.whatsapp"]) + with patch.object(service_cls, "_send", return_value=None): + composer._action_send_mail() + + # ------------------------------------------------------------------ + # Inbound edge cases + # ------------------------------------------------------------------ + def _new_message_value(self, token, **message): + message_vals = { + "from": token, + "id": "wamid.IN", + "timestamp": "1700000000", + "text": {"body": "Hello"}, + } + message_vals.update(message) + return { + "messaging_product": "whatsapp", + "contacts": [{"wa_id": token, "profile": {"name": "Ada"}}], + "messages": [message_vals], + } + + def test_receive_update_empty_and_no_channel(self): + service = self.env["mail.gateway.whatsapp"] + service._receive_update(self.gateway, {}) + value = self._new_message_value("34900111333") + update = {"entry": [{"changes": [{"field": "messages", "value": value}]}]} + with patch.object(type(service), "_get_channel", return_value=False): + service._receive_update(self.gateway, update) + self.assertFalse( + self.env["discuss.channel"].search([("gateway_id", "=", self.gateway.id)]) + ) + + def test_receive_update_media_without_url_and_contacts(self): + service = self.env["mail.gateway.whatsapp"] + value = self._new_message_value( + "34900111333", + sticker={"mime_type": "image/webp"}, + contacts=[{"name": {"formatted_name": "Bob"}}], + ) + update = {"entry": [{"changes": [{"field": "messages", "value": value}]}]} + gateway = self.gateway.with_context(no_gateway_notification=True) + service._receive_update(gateway, update) + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + self.assertEqual(len(channel.message_ids), 1) + self.assertFalse(channel.message_ids.attachment_ids) + + def test_receive_update_reply_to_record_message(self): + service = self.env["mail.gateway.whatsapp"] + channel = self.partner._whatsapp_get_channel("phone", self.gateway) + token = channel.gateway_channel_token + sent = channel.with_context(no_gateway_notification=True).message_post( + body="Question", message_type="comment", subtype_xmlid="mail.mt_comment" + ) + record_message = self.partner.message_post( + body="Question", message_type="comment", subtype_xmlid="mail.mt_comment" + ) + sent.gateway_message_id = record_message + self.env["mail.notification"].create( + { + "mail_message_id": sent.id, + "notification_type": "gateway", + "gateway_channel_id": channel.id, + "gateway_message_id": "wamid.SENT", + "res_partner_id": self.partner.id, + } + ) + value = self._new_message_value( + token, text={"body": "Answer"}, context={"id": "wamid.SENT"} + ) + update = {"entry": [{"changes": [{"field": "messages", "value": value}]}]} + gateway = self.gateway.with_context(no_gateway_notification=True) + service._receive_update(gateway, update) + reply = channel.message_ids.filtered(lambda m: m.parent_id == sent) + self.assertTrue(reply) + self.assertEqual(reply.gateway_message_id.model, "res.partner") + self.assertEqual(reply.gateway_message_id.res_id, self.partner.id) + self.assertIn("Answer", reply.gateway_message_id.body) + + def test_get_author_and_channel_vals_without_contact(self): + service = self.env["mail.gateway.whatsapp"] + update = { + "messages": [{"from": "34900111333"}], + "contacts": [{"wa_id": "34900111444", "profile": {"name": "Other"}}], + } + self.assertFalse(service._get_author(self.gateway, update)) + self.assertFalse(service._get_author(self.gateway, {"messages": [{}]})) + vals = service._get_channel_vals(self.gateway, "34900111333", update) + self.assertEqual(vals["name"], "34900111333") + + # ------------------------------------------------------------------ + # Outbound edge cases + # ------------------------------------------------------------------ + def _new_gateway_notification(self): + channel = self.partner._whatsapp_get_channel("phone", self.gateway) + message = channel.with_context(no_gateway_notification=True).message_post( + body="Hello", message_type="comment", subtype_xmlid="mail.mt_comment" + ) + return self.env["mail.notification"].create( + { + "mail_message_id": message.id, + "notification_type": "gateway", + "gateway_channel_id": channel.id, + "res_partner_id": self.partner.id, + } + ) + + def test_send_raise_exception(self): + service = self.env["mail.gateway.whatsapp"] + notification = self._new_gateway_notification() + with ( + patch.object(requests, "post", side_effect=requests.ConnectionError), + mute_logger( + "odoo.addons.mail_gateway_whatsapp.models.mail_gateway_whatsapp" + ), + self.assertRaises(MailDeliveryException), + ): + service._send(self.gateway, notification, raise_exception=True) + + def test_send_auto_commit(self): + service = self.env["mail.gateway.whatsapp"] + notification = self._new_gateway_notification() + response = MagicMock() + response.json.return_value = {"messages": [{"id": "wamid.OUT"}]} + with ( + patch.object(requests, "post", return_value=response), + patch.object(self.env.cr, "commit") as commit_mock, + ): + service._send(self.gateway, notification, auto_commit=True) + commit_mock.assert_called_once() + self.assertEqual(notification.notification_status, "sent") + self.assertEqual(notification.gateway_message_id, "wamid.OUT") + + # ------------------------------------------------------------------ + # Template variables and buttons + # ------------------------------------------------------------------ + def test_header_variable_lifecycle(self): + tmpl = self._create_template(header="Hello {{1}}") + header_variable = tmpl.variable_ids.filtered( + lambda var: var.line_type == "header" + ) + self.assertEqual(header_variable.name, "{{1}}") + # Keep the variable while the header still uses it + tmpl.header = "Hi {{1}}" + self.assertEqual( + tmpl.variable_ids.filtered(lambda var: var.line_type == "header"), + header_variable, + ) + # Drop it once the header has no variable anymore + tmpl.header = "Hi" + self.assertFalse( + tmpl.variable_ids.filtered(lambda var: var.line_type == "header") + ) + + def test_prepare_components_to_export_static_and_quick_reply(self): + tmpl = self._create_template() + self.env["mail.whatsapp.template.button"].create( + [ + { + "name": "Site", + "button_type": "url", + "url_type": "static", + "website_url": "https://example.com", + "template_id": tmpl.id, + }, + { + "name": "Yes", + "button_type": "quick_reply", + "template_id": tmpl.id, + }, + ] + ) + components = tmpl._prepare_components_to_export() + buttons = next(c for c in components if c["type"] == "BUTTONS")["buttons"] + self.assertEqual( + buttons, + [ + {"type": "URL", "text": "Site", "url": "https://example.com"}, + {"type": "QUICK_REPLY", "text": "Yes"}, + ], + ) + + def test_extract_value_without_field_name(self): + tmpl = self._create_template(body="{{1}}") + self.assertEqual( + tmpl.variable_ids._extract_value_from_field_path(self.partner), "" + ) + + def test_button_dynamic_variable_update_and_checks(self): + tmpl = self._create_template() + button = self.env["mail.whatsapp.template.button"].create( + { + "name": "{{1}}", + "button_type": "url", + "url_type": "dynamic", + "website_url": "https://example.com/", + "template_id": tmpl.id, + } + ) + variable = button.variable_ids + # Changing the url updates the existing placeholder + button.website_url = "https://example.org/" + self.assertEqual(button.variable_ids, variable) + self.assertEqual(variable.sample_value, "https://example.org/") + # More than one placeholder is invalid + button.variable_ids = [ + Command.create( + {"name": "{{2}}", "line_type": "button", "template_id": tmpl.id} + ) + ] + with self.assertRaisesRegex(ValidationError, "only contain one placeholder"): + button.check_variable_ids() + # A dynamic url without placeholder is invalid + button.variable_ids = [Command.clear()] + with self.assertRaisesRegex(ValidationError, "must have a placeholder"): + button.check_variable_ids() + + def test_receive_update_media_with_url(self): + service = self.env["mail.gateway.whatsapp"] + value = self._new_message_value( + "34900111333", + document={ + "url": "https://cdn.example.com/doc", + "mime_type": "application/pdf", + "caption": "Invoice", + }, + ) + update = {"entry": [{"changes": [{"field": "messages", "value": value}]}]} + response = requests.Response() + response.status_code = 200 + response._content = b"PDFBYTES" + gateway = self.gateway.with_context(no_gateway_notification=True) + with patch.object(requests, "get", return_value=response) as get_mock: + service._receive_update(gateway, update) + get_mock.assert_called_once() + channel = self.env["discuss.channel"].search( + [("gateway_id", "=", self.gateway.id)] + ) + attachment = channel.message_ids.attachment_ids + self.assertEqual(attachment.name, "document.pdf") + self.assertEqual(attachment.raw, b"PDFBYTES") + + def test_template_values_without_record(self): + tmpl = self._create_template( + body="Name {{1}}", + model_id=self.env["ir.model"]._get_id("res.partner"), + variable_ids=[ + Command.create( + {"name": "{{1}}", "line_type": "body", "field_name": "name"} + ), + ], + ) + components = tmpl.prepare_value_to_send() + self.assertEqual( + components, + [{"type": "body", "parameters": [{"type": "text", "text": " "}]}], + ) + self.assertEqual(tmpl.render_body_message(), "Name ") diff --git a/mail_gateway_whatsapp/tests/test_mail_whatsapp_template.py b/mail_gateway_whatsapp/tests/test_mail_whatsapp_template.py new file mode 100644 index 000000000..87b3a9be0 --- /dev/null +++ b/mail_gateway_whatsapp/tests/test_mail_whatsapp_template.py @@ -0,0 +1,240 @@ +# Copyright 2024 Tecnativa - Carlos López +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import json +from unittest.mock import patch + +import requests + +from odoo import Command +from odoo.exceptions import UserError +from odoo.tests.common import tagged + +from odoo.addons.mail_gateway.tests.common import MailGatewayTestCase + + +@tagged("-at_install", "post_install") +class TestMailWhatsAppTemplate(MailGatewayTestCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.gateway = cls.env["mail.gateway"].create( + { + "name": "gateway", + "gateway_type": "whatsapp", + "token": "token", + "whatsapp_security_key": "key", + "webhook_secret": "MY-SECRET", + "member_ids": [(4, cls.env.user.id)], + } + ) + cls.new_template_response_data = { + "id": "018273645", + "status": "APPROVED", + } + cls.new_template_full_response_data = { + "name": "new_template", + "parameter_format": "POSITIONAL", + "components": [ + {"type": "HEADER", "format": "TEXT", "text": "Header 1"}, + {"type": "BODY", "text": "Body 1"}, + {"type": "FOOTER", "text": "Footer changed"}, + ], + "language": "es", + "status": "APPROVED", + "category": "MARKETING", + "id": "018273645", + } + cls.template_1_data = { + "name": "test_odoo_1", + "parameter_format": "POSITIONAL", + "components": [ + {"type": "HEADER", "format": "TEXT", "text": "Header 1"}, + {"type": "BODY", "text": "Body 1"}, + {"type": "FOOTER", "text": "Footer 1"}, + ], + "language": "es", + "status": "APPROVED", + "category": "MARKETING", + "id": "1234567890", + } + cls.template_2_data = { + "name": "test_with_buttons", + "parameter_format": "POSITIONAL", + "components": [ + {"type": "HEADER", "format": "TEXT", "text": "Header 2"}, + {"type": "BODY", "text": "Body 2"}, + { + "type": "BUTTONS", + "buttons": [{"type": "QUICK_REPLY", "text": "Button 1"}], + }, + ], + "language": "es", + "status": "APPROVED", + "category": "MARKETING", + "sub_category": "CUSTOM", + "id": "0987654321", + } + cls.templates_download = { + "data": [cls.template_1_data, cls.template_2_data], + } + + def _make_meta_requests(self, url, json_data, status_code=200): + """ + Simulate a fake request to the Meta API: + :param json_data: Dictionary with the json data to return + :param status_code: Status code expected + :returns requests.Response object + """ + response = requests.Response() + response.status_code = status_code + response._content = json.dumps(json_data).encode() + response.url = url + response.headers["Content-Type"] = "application/json" + return response + + def test_download_templates(self): + def _patch_request_post(url, *args, **kwargs): + if "message_templates" in url: + return self._make_meta_requests(url, self.templates_download) + return original_get(url, *args, **kwargs) + + with self.assertRaisesRegex( + UserError, "WhatsApp Account is required to import templates" + ): + self.gateway.button_import_whatsapp_template() + self.gateway.whatsapp_account_id = "123456" + original_get = requests.get + with patch.object(requests, "get", _patch_request_post): + self.gateway.button_import_whatsapp_template() + self.assertEqual(self.gateway.whatsapp_template_count, 2) + template_1 = self.gateway.whatsapp_template_ids.filtered( + lambda t: t.template_uid == "1234567890" + ) + self.assertTrue(template_1.is_supported) + self.assertEqual(template_1.template_name, "test_odoo_1") + self.assertEqual(template_1.category, "marketing") + self.assertEqual(template_1.language, "es") + self.assertEqual(template_1.state, "approved") + self.assertEqual(template_1.header, "Header 1") + self.assertEqual(template_1.body, "Body 1") + self.assertEqual(template_1.footer, "Footer 1") + template_2 = self.gateway.whatsapp_template_ids.filtered( + lambda t: t.template_uid == "0987654321" + ) + self.assertTrue(template_2.is_supported) + self.assertEqual(template_2.template_name, "test_with_buttons") + self.assertEqual(template_2.category, "marketing") + self.assertEqual(template_2.language, "es") + self.assertEqual(template_2.state, "approved") + self.assertEqual(template_2.header, "Header 2") + self.assertEqual(template_2.body, "Body 2") + self.assertFalse(template_2.footer) + + def test_export_template(self): + def _patch_request_post(url, *args, **kwargs): + if "message_templates" in url: + return self._make_meta_requests(url, self.new_template_response_data) + return original_post(url, *args, **kwargs) + + def _patch_request_get(url, *args, **kwargs): + if "018273645" in url: + return self._make_meta_requests( + url, self.new_template_full_response_data + ) + return original_get(url, *args, **kwargs) + + original_post = requests.post + original_get = requests.get + self.gateway.whatsapp_account_id = "123456" + new_template = self.env["mail.whatsapp.template"].create( + { + "name": "New template", + "category": "marketing", + "language": "es", + "header": "Header 1", + "body": "Body 1", + "gateway_id": self.gateway.id, + } + ) + self.assertEqual(new_template.template_name, "new_template") + with patch.object(requests, "post", _patch_request_post): + new_template.button_export_template() + self.assertTrue(new_template.template_uid) + self.assertTrue(new_template.is_supported) + self.assertFalse(new_template.footer) + self.assertEqual(new_template.state, "approved") + # sync templates, footer should be updated + with patch.object(requests, "get", _patch_request_get): + new_template.button_sync_template() + self.assertEqual(new_template.footer, "Footer changed") + + def test_prepare_values_template_send(self): + partner = self.env["res.partner"].create( + { + "name": "Ada Lovelace", + "phone": "+34900111222", + } + ) + ctx = { + "default_res_model": partner._name, + "default_res_id": partner.id, + } + tmpl = self.env["mail.whatsapp.template"].create( + { + "name": "Test Render", + "category": "utility", + "language": "es", + "header": "Hi {{1}}", + "body": "Name: {{1}} · Tel: {{2}}", + "gateway_id": self.gateway.id, + "variable_ids": [Command.clear()], + "state": "approved", + "is_supported": True, + "model_id": self.env["ir.model"]._get("res.partner").id, + } + ) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{1}}", + "line_type": "header", + "template_id": tmpl.id, + "field_name": "name", + } + ) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{1}}", + "line_type": "body", + "template_id": tmpl.id, + "field_name": "name", + } + ) + self.env["mail.whatsapp.template.variable"].create( + { + "name": "{{2}}", + "line_type": "body", + "template_id": tmpl.id, + "field_name": "phone", + } + ) + self.env["mail.whatsapp.template.button"].create( + { + "name": "phone", + "button_type": "phone_number", + "template_id": tmpl.id, + "call_number": "+34666555444", + } + ) + components = tmpl.with_context(**ctx).prepare_value_to_send() + + header = next(c for c in components if c["type"].upper() == "HEADER") + self.assertEqual([p["type"] for p in header.get("parameters", [])], ["text"]) + self.assertEqual(header["parameters"][0]["text"], partner.name) + + body = next(c for c in components if c["type"].upper() == "BODY") + self.assertEqual( + [p["type"] for p in body.get("parameters", [])], ["text", "text"] + ) + self.assertEqual(body["parameters"][0]["text"], partner.name) + self.assertEqual(body["parameters"][1]["text"], partner.phone or "") diff --git a/mail_gateway_whatsapp/tools/__init__.py b/mail_gateway_whatsapp/tools/__init__.py new file mode 100644 index 000000000..4c73b5fa5 --- /dev/null +++ b/mail_gateway_whatsapp/tools/__init__.py @@ -0,0 +1 @@ +from . import const diff --git a/mail_gateway_whatsapp/tools/const.py b/mail_gateway_whatsapp/tools/const.py new file mode 100644 index 000000000..b02ee7202 --- /dev/null +++ b/mail_gateway_whatsapp/tools/const.py @@ -0,0 +1,77 @@ +# https://developers.facebook.com/docs/whatsapp/business-management-api/message-templates/supported-languages # noqa: B501 E501 +# res.lang not matching with supported languages(iso codes) +supported_languages = [ + ("af", "Afrikaans"), + ("sq", "Albanian"), + ("ar", "Arabic"), + ("az", "Azerbaijani"), + ("bn", "Bengali"), + ("bg", "Bulgarian"), + ("ca", "Catalan"), + ("zh_CN", "Chinese (CHN)"), + ("zh_HK", "Chinese (HKG)"), + ("zh_TW", "Chinese (TAI)"), + ("hr", "Croatian"), + ("cs", "Czech"), + ("da", "Danish"), + ("nl", "Dutch"), + ("en", "English"), + ("en_GB", "English (UK)"), + ("en_US", "English (US)"), + ("et", "Estonian"), + ("fil", "Filipino"), + ("fi", "Finnish"), + ("fr", "French"), + ("ka", "Georgian"), + ("de", "German"), + ("el", "Greek"), + ("gu", "Gujarati"), + ("ha", "Hausa"), + ("he", "Hebrew"), + ("hi", "Hindi"), + ("hu", "Hungarian"), + ("id", "Indonesian"), + ("ga", "Irish"), + ("it", "Italian"), + ("ja", "Japanese"), + ("kn", "Kannada"), + ("kk", "Kazakh"), + ("rw_RW", "Kinyarwanda"), + ("ko", "Korean"), + ("ky_KG", "Kyrgyz (Kyrgyzstan)"), + ("lo", "Lao"), + ("lv", "Latvian"), + ("lt", "Lithuanian"), + ("mk", "Macedonian"), + ("ms", "Malay"), + ("ml", "Malayalam"), + ("mr", "Marathi"), + ("nb", "Norwegian"), + ("fa", "Persian"), + ("pl", "Polish"), + ("pt_BR", "Portuguese (BR)"), + ("pt_PT", "Portuguese (POR)"), + ("pa", "Punjabi"), + ("ro", "Romanian"), + ("ru", "Russian"), + ("sr", "Serbian"), + ("sk", "Slovak"), + ("sl", "Slovenian"), + ("es", "Spanish"), + ("es_AR", "Spanish (ARG)"), + ("es_ES", "Spanish (SPA)"), + ("es_MX", "Spanish (MEX)"), + ("sw", "Swahili"), + ("sv", "Swedish"), + ("ta", "Tamil"), + ("te", "Telugu"), + ("th", "Thai"), + ("tr", "Turkish"), + ("uk", "Ukrainian"), + ("ur", "Urdu"), + ("uz", "Uzbek"), + ("vi", "Vietnamese"), + ("zu", "Zulu"), +] + +REG_VARIABLE = r"{{[1-9][0-9]*}}" diff --git a/mail_gateway_whatsapp/views/ir_actions_server_views.xml b/mail_gateway_whatsapp/views/ir_actions_server_views.xml new file mode 100644 index 000000000..7149a5eae --- /dev/null +++ b/mail_gateway_whatsapp/views/ir_actions_server_views.xml @@ -0,0 +1,33 @@ + + + + ir.actions.server.view.form.inherit.mail_gateway_whatsapp + ir.actions.server + + + + + + + + + + diff --git a/mail_gateway_whatsapp/views/mail_gateway.xml b/mail_gateway_whatsapp/views/mail_gateway.xml new file mode 100644 index 000000000..bbb820808 --- /dev/null +++ b/mail_gateway_whatsapp/views/mail_gateway.xml @@ -0,0 +1,127 @@ + + + + + mail.gateway.form (in mail_gateway_telegram) + mail.gateway + + + + + + + + + + + + + +
    +

    First steps

    + Define the values of the fields Webhook Key and Whatsapp Security Key. + You should set some random value of your choice for this fields. + Ensure that facebook will be able to comunicate with your server. +

    Creating the Application from meta developer

    +
      +
    1. Access + + Meta developer platform.
    2. +
    3. Create a new application.
    4. +
    5. Select the Other option, then Business in order to create Whatsapp manager
    6. +
    7. Select a name and create it
    8. +
    9. Select the Whatsapp API on the products of the application
    10. +
    11. Select the business that you will use
    12. +
    13. Go to Whatsapp / API Configuration menú.
    14. +
    15. Add a new number.
    16. +
    17. Copy the phone identification number to the field Whastapp From phone field.
    18. +
    19. Access the menu Configuration / Basic information.
    20. +
    21. Show the secret key of the application and copy it to the Webhook secret field.
    22. +
    23. Access the menu Configuration / Advanced Options.
    24. +
    25. Copy the API Version on the Whastapp Version field.
    26. +
    +

    Creating a permanent token

    +
      +
    1. Access your meta business site.
    2. +
    3. Access your business settings menu
    4. +
    5. Go to Users / System Users and create a new one with administrator
    6. +
    7. Once it is created, Generate a new token related to the created app with no expiry and give access to all whatsapp permissions.
    8. +
    9. Copy the token value to token field in this page.
    10. +
    +

    Setting webhook and version

    +
      +
    1. Save this record. All the values have been filled
    2. +
    3. Press the button Integrate webhook.
    4. +
    5. On Facebook Develpment, return to the app menu and go to Whatsapp / Configuration.
    6. +
    7. Click on Edit Button on the webhook area.
    8. +
    9. On the wizard, fill the URL field with Webhook URL field of the gateway. For the verification identifier, use the Whatsapp Security Key field.
    10. +
    11. Verify and save the wizard.
    12. +
    13. If no error is raised, refresh this gateway data, and you should see that it is integrated. + You should be able to receive and send messages. + If an error is raised, check that the fields are filled properly and that facebook server is able to access your server.
    14. +
    +
    +
    +
    +
    +
    +
    diff --git a/mail_gateway_whatsapp/views/mail_whatsapp_template_views.xml b/mail_gateway_whatsapp/views/mail_whatsapp_template_views.xml new file mode 100644 index 000000000..2f9052a39 --- /dev/null +++ b/mail_gateway_whatsapp/views/mail_whatsapp_template_views.xml @@ -0,0 +1,190 @@ + + + + view.mail.whatsapp.template.tree + mail.whatsapp.template + + + + + + + + + + + + + + + + + view.mail.whatsapp.template.form + mail.whatsapp.template + +
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + view.mail.whatsapp.template.search + mail.whatsapp.template + + + + + + + + + + + WhatsApp Templates + ir.actions.act_window + mail.whatsapp.template + list,form + [('gateway_id', '=', active_id)] + {'default_gateway_id': active_id} + +
    diff --git a/mail_gateway_whatsapp/wizards/__init__.py b/mail_gateway_whatsapp/wizards/__init__.py new file mode 100644 index 000000000..47359283f --- /dev/null +++ b/mail_gateway_whatsapp/wizards/__init__.py @@ -0,0 +1,2 @@ +from . import mail_compose_gateway_message +from . import whatsapp_composer diff --git a/mail_gateway_whatsapp/wizards/mail_compose_gateway_message.py b/mail_gateway_whatsapp/wizards/mail_compose_gateway_message.py new file mode 100644 index 000000000..cd24a1b09 --- /dev/null +++ b/mail_gateway_whatsapp/wizards/mail_compose_gateway_message.py @@ -0,0 +1,34 @@ +# Copyright 2024 Tecnativa - Carlos López +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import markupsafe + +from odoo import api, fields, models + + +class MailComposeGatewayMessage(models.TransientModel): + _inherit = "mail.compose.gateway.message" + + whatsapp_template_id = fields.Many2one( + "mail.whatsapp.template", + domain="""[ + ('state', '=', 'approved'), + ('is_supported', '=', True), + ('model', '=', model) + ]""", + ) + + @api.onchange("whatsapp_template_id") + def onchange_whatsapp_template_id(self): + if self.whatsapp_template_id: + self.body = markupsafe.Markup( + self.whatsapp_template_id.render_body_message() + ) + + def _action_send_mail(self, auto_commit=False): + if self.whatsapp_template_id: + self = self.with_context( + whatsapp_template_id=self.whatsapp_template_id.id, + res_id=int(self.res_ids.strip("[]")), + ) + return super()._action_send_mail(auto_commit=auto_commit) diff --git a/mail_gateway_whatsapp/wizards/mail_compose_gateway_message.xml b/mail_gateway_whatsapp/wizards/mail_compose_gateway_message.xml new file mode 100644 index 000000000..17bb3aa23 --- /dev/null +++ b/mail_gateway_whatsapp/wizards/mail_compose_gateway_message.xml @@ -0,0 +1,26 @@ + + + + + mail.compose.gateway.message + + + + + + + whatsapp_template_id + + + whatsapp_template_id + + + + diff --git a/mail_gateway_whatsapp/wizards/whatsapp_composer.py b/mail_gateway_whatsapp/wizards/whatsapp_composer.py new file mode 100644 index 000000000..967c7bb7a --- /dev/null +++ b/mail_gateway_whatsapp/wizards/whatsapp_composer.py @@ -0,0 +1,111 @@ +# Copyright 2022 CreuBlanca +# Copyright 2024 Tecnativa - Carlos López +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from datetime import datetime + +from odoo import api, fields, models +from odoo.exceptions import UserError + + +class WhatsappComposer(models.TransientModel): + _name = "whatsapp.composer" + _description = "Compose a whatsapp message" + + res_model = fields.Char("Document Model Name") + res_id = fields.Integer("Document ID") + number_field_name = fields.Char() + find_gateway = fields.Boolean() + gateway_id = fields.Many2one( + "mail.gateway", domain=[("gateway_type", "=", "whatsapp")], required=True + ) + template_id = fields.Many2one( + "mail.whatsapp.template", + domain="""[ + ('gateway_id', '=', gateway_id), + ('state', '=', 'approved'), + ('is_supported', '=', True), + ('model', '=', res_model) + ]""", + ) + body = fields.Text("Message") + is_required_template = fields.Boolean(compute="_compute_is_required_template") + + @api.depends("res_model", "res_id", "number_field_name", "gateway_id") + def _compute_is_required_template(self): + MailMessage = self.env["mail.message"] + for wizard in self: + if ( + not wizard.res_model + or not wizard.gateway_id + or not wizard.number_field_name + ): + wizard.is_required_template = False + continue + record = self.env[wizard.res_model].browse(wizard.res_id) + is_required_template = True + channel = record._whatsapp_get_channel( + wizard.number_field_name, wizard.gateway_id + ) + if channel: + last_message = MailMessage.search( + [ + ("gateway_type", "=", "whatsapp"), + ("model", "=", channel._name), + ("res_id", "=", channel.id), + ], + order="date desc", + limit=1, + ) + if last_message: + delta = (datetime.now() - last_message.date).total_seconds() / 3600 + if delta < 24.0: + is_required_template = False + wizard.is_required_template = is_required_template + + @api.onchange("gateway_id") + def onchange_gateway_id(self): + self.template_id = False + + @api.onchange("template_id") + def onchange_template_id(self): + if self.template_id: + self.body = self.template_id.render_body_message() + + @api.model + def default_get(self, fields): + result = super().default_get(fields) + gateways = self.env["mail.gateway"].search([("gateway_type", "=", "whatsapp")]) + result["find_gateway"] = len(gateways) != 1 + if not result["find_gateway"]: + result["gateway_id"] = gateways.id + return result + + def _action_send_whatsapp(self): + record = self.env[self.res_model].browse(self.res_id) + if not record: + return + channel = record._whatsapp_get_channel(self.number_field_name, self.gateway_id) + channel.with_context(whatsapp_template_id=self.template_id.id).message_post( + body=self.body, subtype_xmlid="mail.mt_comment", message_type="comment" + ) + + def action_view_whatsapp(self): + self.ensure_one() + record = self.env[self.res_model].browse(self.res_id) + if not record: + return + channel = record._whatsapp_get_channel(self.number_field_name, self.gateway_id) + if channel: + return { + "type": "ir.actions.client", + "tag": "mail.action_discuss", + "params": {"active_id": f"{channel._name}_{channel.id}"}, + } + return False + + def action_send_whatsapp(self): + self.ensure_one() + if not self.body: + raise UserError(self.env._("Body is required")) + self._action_send_whatsapp() + return False diff --git a/mail_gateway_whatsapp/wizards/whatsapp_composer.xml b/mail_gateway_whatsapp/wizards/whatsapp_composer.xml new file mode 100644 index 000000000..03965f23c --- /dev/null +++ b/mail_gateway_whatsapp/wizards/whatsapp_composer.xml @@ -0,0 +1,48 @@ + + + + + whatsapp.composer.form (in mail_gateway_whatsapp) + whatsapp.composer + +
    + + + + + + + + +
    +
    +
    +
    +
    + + + Send Whatsapp Message + whatsapp.composer + form + {} + new + +
    diff --git a/requirements.txt b/requirements.txt index 3e01d6c06..154935992 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ cairosvg lottie python-telegram-bot +requests_toolbelt