Mail Whatsapp Gateway

mail_gateway_whatsapp
REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/18.0/mail_gateway_whatsapp
VERSION
VERSION 2.1.5
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Creu Blanca, Dixmit
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Creu Blanca, Dixmit
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Lopez, Weblate, OCA-git-bot, oca-ci, CarlosRoca13, CristianoMafraJunior, Julio Santa Cruz
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:16
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/social:
    - mail_gateway
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES requests_toolbelt
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

Code Analysis

Views touched (7)
XML IDNameModelTypeStatus
ir_actions_server_view_form ir.actions.server.view.form.inherit.mail_gateway_whatsapp ir.actions.server xpath Inherits base.view_server_action_form
mail_compose_gateway_message_form_view mail.compose.gateway.message xpath Inherits mail_gateway.mail_compose_gateway_message_form_view
mail_gateway_form_view mail.gateway.form (in mail_gateway_telegram) mail.gateway xpath Inherits mail_gateway.mail_gateway_form_view
view_mail_whatsapp_template_form view.mail.whatsapp.template.form mail.whatsapp.template form New
view_mail_whatsapp_template_search view.mail.whatsapp.template.search mail.whatsapp.template search New
view_mail_whatsapp_template_tree view.mail.whatsapp.template.tree mail.whatsapp.template list New
whatsapp_composer_form_view whatsapp.composer.form (in mail_gateway_whatsapp) whatsapp.composer form New
Models touched (12)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • state Selection
    ondelete={'whatsapp': 'cascade'} selection_add=[('whatsapp', 'WhatsApp message')]
  • whatsapp_gateway_id Many2one → mail.gateway
    comodel_name='mail.gateway' domain=[('gateway_type', '=', 'whatsapp')]
  • whatsapp_partner Char
  • whatsapp_template_id Many2one → mail.whatsapp.template
    comodel_name='mail.whatsapp.template' domain="[('gateway_id', '=', whatsapp_gateway_id),('model_id', '=', model_id)]"
Public methods (0)

No public methods.

New fields (1)
  • whatsapp_template_id Many2one → mail.whatsapp.template
    domain="[\n ('state', '=', 'approved'),\n ('is_supported', '=', True),\n ('model', '=', model)\n ]" args: 'mail.whatsapp.template'
Public methods (1)
  • onchange_whatsapp_template_id(self)
    @api.onchange('whatsapp_template_id')

New fields (7)
  • gateway_type Selection
    ondelete={'whatsapp': 'cascade'} selection_add=[('whatsapp', 'WhatsApp')]
  • whatsapp_account_id Char
  • whatsapp_from_phone Char
  • whatsapp_security_key Char
  • whatsapp_template_count Integer
    compute='_compute_whatsapp_template_count'
  • whatsapp_template_ids One2many → mail.whatsapp.template
    args: 'mail.whatsapp.template', 'gateway_id'
  • whatsapp_version Char
    default='23.0'
Public methods (1)
  • button_import_whatsapp_template(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (16)
  • body Text
    required=True
  • button_ids One2many → mail.whatsapp.template.button
    string='Buttons' args: 'mail.whatsapp.template.button', 'template_id'
  • category Selection
    required=True args: [('authentication', 'Authentication'), ('marketing', 'Marketing'), ('utility', 'Utility')]
  • company_id Many2one → res.company
    related='gateway_id.company_id' store=True args: 'res.company'
  • footer Char
  • gateway_id Many2one → mail.gateway
    domain=[('gateway_type', '=', 'whatsapp')] ondelete='cascade' required=True args: 'mail.gateway'
  • header Char
  • is_supported Boolean
    copy=False
  • language Selection
    required=True args: supported_languages
  • model Char
    related='model_id.model' store=True string='Related model'
  • model_id Many2one → ir.model
    comodel_name='ir.model' default=<expr> ondelete='cascade' required=True string='Applies to'
  • name Char
    required=True
  • state Selection
    default='draft' required=True args: [('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')]
  • template_name Char
    compute='_compute_template_name' copy=False store=True
  • template_uid Char
    copy=False readonly=True
  • variable_ids One2many → mail.whatsapp.template.variable
    compute='_compute_variable_ids' precompute=True readonly=False store=True string='Variables' args: 'mail.whatsapp.template.variable', 'template_id'
Public methods (5)
  • button_back2draft(self)
  • button_export_template(self)
  • button_sync_template(self)
  • prepare_value_to_send(self)
  • render_body_message(self)

New fields (8)
  • button_type Selection
    default='quick_reply' required=True string='Type' args: [('quick_reply', 'Quick Reply'), ('url', 'Visit Website'), ('phone_number', 'Call Number')]
  • call_number Char
  • name Char
    size=25 string='Button Text'
  • sequence Integer
  • template_id Many2one → mail.whatsapp.template
    comodel_name='mail.whatsapp.template' ondelete='cascade' required=True
  • url_type Selection
    default='static' args: [('static', 'Static'), ('dynamic', 'Dynamic')]
  • variable_ids One2many → mail.whatsapp.template.variable
    compute='_compute_variable_ids' copy=True precompute=True store=True args: 'mail.whatsapp.template.variable', 'button_id'
  • website_url Char
Public methods (1)
  • check_variable_ids(self)

New fields (7)
  • button_id Many2one → mail.whatsapp.template.button
    ondelete='cascade' args: 'mail.whatsapp.template.button'
  • field_name Char
    string='Field'
  • line_type Selection
    required=True args: [('header', 'Header'), ('body', 'Body'), ('button', 'Button')]
  • model Char
    related='template_id.model' string='Model Name'
  • name Char
    required=True string='Placeholder'
  • sample_value Char
    default='Sample Value' required=True
  • template_id Many2one → mail.whatsapp.template
    comodel_name='mail.whatsapp.template' ondelete='cascade' required=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • body Text
    args: 'Message'
  • find_gateway Boolean
  • gateway_id Many2one → mail.gateway
    domain=[('gateway_type', '=', 'whatsapp')] required=True args: 'mail.gateway'
  • is_required_template Boolean
    compute='_compute_is_required_template'
  • number_field_name Char
  • res_id Integer
    args: 'Document ID'
  • res_model Char
    args: 'Document Model Name'
  • template_id Many2one → mail.whatsapp.template
    domain="[\n ('gateway_id', '=', gateway_id),\n ('state', '=', 'approved'),\n ('is_supported', '=', True),\n ('model', '=', res_model)\n ]" args: 'mail.whatsapp.template'
Public methods (5)
  • action_send_whatsapp(self)
  • action_view_whatsapp(self)
  • default_get(self, fields)
    @api.model
  • onchange_gateway_id(self)
    @api.onchange('gateway_id')
  • onchange_template_id(self)
    @api.onchange('template_id')
REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/17.0/mail_gateway_whatsapp
VERSION
VERSION 1.1.4
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Creu Blanca, Dixmit
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Creu Blanca, Dixmit
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Lopez, Weblate, OCA-git-bot, oca-ci, CarlosRoca13, CristianoMafraJunior, Julio Santa Cruz
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/social:
    - mail_gateway
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES requests_toolbelt
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
mail_compose_gateway_message_form_view mail.compose.gateway.message xpath Inherits mail_gateway.mail_compose_gateway_message_form_view
mail_gateway_form_view mail.gateway.form (in mail_gateway_telegram) mail.gateway xpath Inherits mail_gateway.mail_gateway_form_view
view_mail_whatsapp_template_form view.mail.whatsapp.template.form mail.whatsapp.template form New
view_mail_whatsapp_template_search view.mail.whatsapp.template.search mail.whatsapp.template search New
view_mail_whatsapp_template_tree view.mail.whatsapp.template.tree mail.whatsapp.template tree New
whatsapp_composer_form_view whatsapp.composer.form (in mail_gateway_whatsapp) whatsapp.composer form New
Models touched (11)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • whatsapp_template_id Many2one → mail.whatsapp.template
    domain="[\n ('state', '=', 'approved'),\n ('is_supported', '=', True),\n ('model', '=', model)\n ]" args: 'mail.whatsapp.template'
Public methods (1)
  • onchange_whatsapp_template_id(self)
    @api.onchange('whatsapp_template_id')

New fields (7)
  • gateway_type Selection
    ondelete={'whatsapp': 'cascade'} selection_add=[('whatsapp', 'WhatsApp')]
  • whatsapp_account_id Char
  • whatsapp_from_phone Char
  • whatsapp_security_key Char
  • whatsapp_template_count Integer
    compute='_compute_whatsapp_template_count'
  • whatsapp_template_ids One2many → mail.whatsapp.template
    args: 'mail.whatsapp.template', 'gateway_id'
  • whatsapp_version Char
    default='15.0'
Public methods (1)
  • button_import_whatsapp_template(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (16)
  • body Text
    required=True
  • button_ids One2many → mail.whatsapp.template.button
    string='Buttons' args: 'mail.whatsapp.template.button', 'template_id'
  • category Selection
    required=True args: [('authentication', 'Authentication'), ('marketing', 'Marketing'), ('utility', 'Utility')]
  • company_id Many2one → res.company
    related='gateway_id.company_id' store=True args: 'res.company'
  • footer Char
  • gateway_id Many2one → mail.gateway
    domain=[('gateway_type', '=', 'whatsapp')] ondelete='cascade' required=True args: 'mail.gateway'
  • header Char
  • is_supported Boolean
    copy=False
  • language Selection
    required=True args: supported_languages
  • model Char
    related='model_id.model' store=True string='Related model'
  • model_id Many2one → ir.model
    comodel_name='ir.model' default=<expr> ondelete='cascade' required=True string='Applies to'
  • name Char
    required=True
  • state Selection
    default='draft' required=True args: [('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')]
  • template_name Char
    compute='_compute_template_name' copy=False store=True
  • template_uid Char
    copy=False readonly=True
  • variable_ids One2many → mail.whatsapp.template.variable
    compute='_compute_variable_ids' precompute=True readonly=False store=True string='Variables' args: 'mail.whatsapp.template.variable', 'template_id'
Public methods (5)
  • button_back2draft(self)
  • button_export_template(self)
  • button_sync_template(self)
  • prepare_value_to_send(self)
  • render_body_message(self)

New fields (8)
  • button_type Selection
    default='quick_reply' required=True string='Type' args: [('quick_reply', 'Quick Reply'), ('url', 'Visit Website'), ('phone_number', 'Call Number')]
  • call_number Char
  • name Char
    size=25 string='Button Text'
  • sequence Integer
  • template_id Many2one → mail.whatsapp.template
    comodel_name='mail.whatsapp.template' ondelete='cascade' required=True
  • url_type Selection
    default='static' args: [('static', 'Static'), ('dynamic', 'Dynamic')]
  • variable_ids One2many → mail.whatsapp.template.variable
    compute='_compute_variable_ids' copy=True precompute=True store=True args: 'mail.whatsapp.template.variable', 'button_id'
  • website_url Char
Public methods (1)
  • check_variable_ids(self)

New fields (7)
  • button_id Many2one → mail.whatsapp.template.button
    ondelete='cascade' args: 'mail.whatsapp.template.button'
  • field_name Char
    string='Field'
  • line_type Selection
    required=True args: [('header', 'Header'), ('body', 'Body'), ('button', 'Button')]
  • model Char
    related='template_id.model' string='Model Name'
  • name Char
    required=True string='Placeholder'
  • sample_value Char
    default='Sample Value' required=True
  • template_id Many2one → mail.whatsapp.template
    comodel_name='mail.whatsapp.template' ondelete='cascade' required=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • body Text
    args: 'Message'
  • find_gateway Boolean
  • gateway_id Many2one → mail.gateway
    domain=[('gateway_type', '=', 'whatsapp')] required=True args: 'mail.gateway'
  • is_required_template Boolean
    compute='_compute_is_required_template'
  • number_field_name Char
  • res_id Integer
    args: 'Document ID'
  • res_model Char
    args: 'Document Model Name'
  • template_id Many2one → mail.whatsapp.template
    domain="[\n ('gateway_id', '=', gateway_id),\n ('state', '=', 'approved'),\n ('is_supported', '=', True),\n ('model', '=', res_model)\n ]" args: 'mail.whatsapp.template'
Public methods (5)
  • action_send_whatsapp(self)
  • action_view_whatsapp(self)
  • default_get(self, fields)
    @api.model
  • onchange_gateway_id(self)
    @api.onchange('gateway_id')
  • onchange_template_id(self)
    @api.onchange('template_id')
REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/16.0/mail_gateway_whatsapp
VERSION
VERSION 1.1.3
CATEGORY
CATEGORYUncategorized
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Creu Blanca, Dixmit
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Creu Blanca, Dixmit
COMMITTERS
COMMITTERSEnric Tobella, Carlos Lopez, Weblate, OCA-git-bot, oca-ci, Marcel Savegnago
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/social:
    - mail_gateway
odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES requests_toolbelt
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
mail_compose_gateway_message_form_view mail.compose.gateway.message xpath Inherits mail_gateway.mail_compose_gateway_message_form_view
mail_gateway_form_view mail.gateway.form (in mail_gateway_telegram) mail.gateway xpath Inherits mail_gateway.mail_gateway_form_view
view_mail_whatsapp_template_form view.mail.whatsapp.template.form mail.whatsapp.template form New
view_mail_whatsapp_template_search view.mail.whatsapp.template.search mail.whatsapp.template search New
view_mail_whatsapp_template_tree view.mail.whatsapp.template.tree mail.whatsapp.template tree New
whatsapp_composer_form_view whatsapp.composer.form (in mail_gateway_whatsapp) whatsapp.composer form New
Models touched (9)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • whatsapp_template_id Many2one → mail.whatsapp.template
    domain="[\n ('state', '=', 'approved'),\n ('is_supported', '=', True)\n ]" args: 'mail.whatsapp.template'
Public methods (1)
  • onchange_whatsapp_template_id(self)
    @api.onchange('whatsapp_template_id')

New fields (7)
  • gateway_type Selection
    ondelete={'whatsapp': 'cascade'} selection_add=[('whatsapp', 'WhatsApp')]
  • whatsapp_account_id Char
  • whatsapp_from_phone Char
  • whatsapp_security_key Char
  • whatsapp_template_count Integer
    compute='_compute_whatsapp_template_count'
  • whatsapp_template_ids One2many → mail.whatsapp.template
    args: 'mail.whatsapp.template', 'gateway_id'
  • whatsapp_version Char
    default='15.0'
Public methods (1)
  • button_import_whatsapp_template(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (12)
  • body Text
    required=True
  • category Selection
    required=True args: [('authentication', 'Authentication'), ('marketing', 'Marketing'), ('utility', 'Utility')]
  • company_id Many2one → res.company
    related='gateway_id.company_id' store=True args: 'res.company'
  • footer Char
  • gateway_id Many2one → mail.gateway
    domain=[('gateway_type', '=', 'whatsapp')] ondelete='cascade' required=True args: 'mail.gateway'
  • header Char
  • is_supported Boolean
    copy=False
  • language Selection
    required=True args: supported_languages
  • name Char
    required=True
  • state Selection
    default='draft' required=True args: [('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')]
  • template_name Char
    compute='_compute_template_name' copy=False store=True
  • template_uid Char
    copy=False readonly=True
Public methods (3)
  • button_back2draft(self)
  • button_export_template(self)
  • button_sync_template(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • body Text
    args: 'Message'
  • find_gateway Boolean
  • gateway_id Many2one → mail.gateway
    domain=[('gateway_type', '=', 'whatsapp')] required=True args: 'mail.gateway'
  • is_required_template Boolean
    compute='_compute_is_required_template'
  • number_field_name Char
  • res_id Integer
    args: 'Document ID'
  • res_model Char
    args: 'Document Model Name'
  • template_id Many2one → mail.whatsapp.template
    domain="[\n ('gateway_id', '=', gateway_id),\n ('state', '=', 'approved'),\n ('is_supported', '=', True)\n ]" args: 'mail.whatsapp.template'
Public methods (5)
  • action_send_whatsapp(self)
  • action_view_whatsapp(self)
  • default_get(self, fields)
    @api.model
  • onchange_gateway_id(self)
    @api.onchange('gateway_id')
  • onchange_template_id(self)
    @api.onchange('template_id')
STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/mail
PULL REQUEST
PULL REQUEST[MIG] mail_gateway_whatsapp: Migration to 19.0 (#203)