TIP: You can type at any time to perform a new search.
SMS Marketing
mass_mailing_sms · odoo/odoo
- Repository
- odoo/odoo · module folder
- Module version
- 1.1
- Category
- Marketing/Email Marketing
- Folder size
- 2.25 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://www.odoo.com/app/sms-marketing
- Last tracking update
- 2026-08-15 22:44:15
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Julien Castiaux, Adrien Dieudonné, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, Florian Charlier, Renaud Thiry, Louis Wicket (wil), Maximilien (malb), Victor Piryns (pivi), Pierre-Yves Dufays, Dylan Kiss (dyki), nihp-odoo, aath-odoo, guce, yagp-odoo, Pierre Pulinckx, Anton Romanova (roan), Bastien PIERRE, Krzysztof Magusiak (krma), Jérôme Belpaire, Séna Nshimiyimana, ELCO, chpa-odoo
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- mass_mailing_crm_sms, mass_mailing_event_sms, mass_mailing_event_track_sms, mass_mailing_sale_sms, test_mail_full, test_mass_mailing, website_mass_mailing_sms
- Description
Code Analysis ⓘ
Views touched (25)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
blacklist_main |
Unsubscribed | ir.ui.view | qweb | New |
blacklist_number |
Unsubscribed | ir.ui.view | qweb | New |
mailing_contact_view_form |
mailing.contact.view.form.inherit.sms | mailing.contact | form | Inherits mass_mailing.mailing_contact_view_form |
mailing_contact_view_kanban |
mailing.contact.view.kanban.inherit.sms | mailing.contact | kanban | Inherits mass_mailing.mailing_contact_view_kanban |
mailing_contact_view_search |
mailing.contact.view.search.inherit.sms | mailing.contact | search | Inherits mass_mailing.mailing_contact_view_search |
mailing_contact_view_tree |
mailing.contact.view.list.inherit.sms | mailing.contact | list | Inherits mass_mailing.mailing_contact_view_tree |
mailing_list_view_form |
mailing.list.view.form.inherit.sms | mailing.list | form | Inherits mass_mailing.mailing_list_view_form |
mailing_list_view_kanban |
mailing.list.view.kanban.inherit.mass.mailing.sms | mailing.list | kanban | Inherits mass_mailing.mailing_list_view_kanban |
mailing_mailing_view_form_mixed |
mailing.mailing.view.form.mixed | mailing.mailing | form | Inherits mass_mailing_sms.mailing_mailing_view_form_sms |
mailing_mailing_view_form_sms |
mailing.mailing.view.form.inherit.sms | mailing.mailing | form | Inherits mass_mailing.view_mail_mass_mailing_form |
mailing_mailing_view_kanban_sms |
mailing.mailing.view.kanban.inherit.sms | mailing.mailing | kanban | Inherits mass_mailing.view_mail_mass_mailing_kanban |
mailing_mailing_view_search_sms |
mailing.mailing.search | mailing.mailing | search | Inherits mass_mailing.view_mail_mass_mailing_search |
mailing_mailing_view_tree_sms |
mailing.mailing.view.list.sms | mailing.mailing | list | New |
mailing_sms_test_view_form |
mailing.sms.test.view.form | mailing.sms.test | form | New |
mailing_trace_report_sms_view_graph |
mailing.sms.trace.report.view.graph | mailing.trace.report | graph | Inherits mass_mailing.mailing_trace_report_view_graph |
mailing_trace_report_sms_view_pivot |
mailing.sms.trace.report.view.pivot | mailing.trace.report | pivot | Inherits mass_mailing.mailing_trace_report_view_pivot |
mailing_trace_report_sms_view_tree |
mailing.sms.trace.report.view.list | mailing.trace.report | list | Inherits mass_mailing.mailing_trace_report_view_tree |
mailing_trace_view_form |
mailing.trace.view.form.inherit.sms | mailing.trace | form | Inherits mass_mailing.mailing_trace_view_form |
mailing_trace_view_form_sms |
mailing.trace.view.form.sms | mailing.trace | form | New |
mailing_trace_view_search |
mailing.trace.view.search.inherit.sms | mailing.trace | search | Inherits mass_mailing.mailing_trace_view_search |
mailing_trace_view_tree |
mailing.trace.view.list.inherit.sms | mailing.trace | list | Inherits mass_mailing.mailing_trace_view_tree |
mailing_trace_view_tree_sms |
mailing.trace.view.list.sms | mailing.trace | list | New |
sms_composer_view_form |
sms.composer.views.inherit.sms | sms.composer | form | Inherits sms.sms_composer_view_form |
utm_campaign_view_form |
utm.campaign.view.form | utm.campaign | form | Inherits utm.utm_campaign_view_form |
utm_campaign_view_kanban |
utm.campaign.view.kanban | utm.campaign | kanban | Inherits utm.utm_campaign_view_kanban |
HTTP endpoints (3)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/sms/<int:mailing_id>/unsubscribe/<string:trace_code> |
MailingSMSController.blacklist_number |
public | http | ALL | sudo website |
/sms/<int:mailing_id>/<string:trace_code> |
MailingSMSController.blacklist_page |
public | http | ALL | sudo website |
/r/<string:code>/s/<int:sms_id_int> |
MailingSMSController.sms_short_link_redirect |
public | http | ALL | sudo |
Models touched (11)
New fields (1)
-
mobileCharstring='Mobile'
No public methods.
New fields (1)
-
contact_count_smsIntegercompute='_compute_mailing_list_statistics'string='SMS Contacts'
-
action_send_mailing_sms(self) -
action_view_contacts_sms(self) -
action_view_mailings(self)
New fields (10)
-
ab_testing_mailings_sms_countIntegerrelated='campaign_id.ab_testing_mailings_sms_count' -
ab_testing_sms_winner_selectionSelectioncopy=Truedefault='clicks_ratio'readonly=Falserelated='campaign_id.ab_testing_sms_winner_selection' -
body_plaintextTextcompute='_compute_body_plaintext'readonly=Falsestore=True args: 'SMS Body' -
mailing_typeSelectionondelete={'sms': 'set default'}selection_add=[('sms', 'SMS')] -
sms_allow_unsubscribeBooleandefault=False args: 'Include opt-out link' -
sms_force_sendBooleanhelp='Immediately send the SMS Mailing instead of queuing up. Use at your own risk.' args: 'Send Directly' -
sms_has_insufficient_creditBooleancompute='_compute_sms_has_iap_failure' args: 'Insufficient IAP credits' -
sms_has_unregistered_accountBooleancompute='_compute_sms_has_iap_failure' args: 'Unregistered IAP account' -
sms_subjectCharhelp='For an email, the subject your recipients will see in their inbox.\nFor an SMS, the internal title of the message.'readonly=Falserelated='subject'translate=False args: 'Title' -
sms_template_idMany2one → sms.templateondelete='set null'string='SMS Template' args: 'sms.template'
-
action_buy_sms_credits(self) -
action_retry_failed(self) -
action_retry_failed_sms(self) -
action_send_sms(self, res_ids=None) -
action_test(self) -
convert_links(self) -
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model -
get_sms_link_replacements_placeholders(self)Get placeholders for replaced links in sms widget for accurate computation of sms counts. Reminders and assumptions: * Links wille be transformed to the format ``"[base_url]/r/[link_tracker_code]/s/[sms_id]"``. * unsubscribe is formatted as: ``"STOP SMS : [base_url]/sms/[mailing_id]/[trace_code]"``. :returns: Character counts used for links, formatted as ``{link: str, unsubscribe: str}``.
New fields (2)
-
mailing_idMany2one → mailing.mailingondelete='cascade'required=Truestring='Mailing' args: 'mailing.mailing' -
numbersTextdefault=_default_numbershelp='Carriage-return-separated list of phone numbers'required=Truestring='Number(s)'
-
action_send_sms(self)
New fields (7)
-
failure_typeSelectionselection_add=[('sms_number_missing', 'Missing Number'), ('sms_number_format', 'Wrong Number Format'), ('sms_credit', 'Insufficient Credit'), ('sms_country_not_supported', 'Country Not Supported'), ('sms_registration_needed', 'Country-specific Registration Required'), ('sms_server', 'Server Error'), ('sms_acc', 'Unregistered Account'), ('sms_blacklist', 'Blacklisted'), ('sms_duplicate', 'Duplicate'), ('sms_optout', 'Opted Out'), ('sms_expired', 'Expired'), ('sms_invalid_destination', 'Invalid Destination'), ('sms_not_allowed', 'Not Allowed'), ('sms_not_delivered', 'Not Delivered'), ('sms_rejected', 'Rejected'), ('twilio_authentication', 'Authentication Error"'), ('twilio_callback', 'Incorrect callback URL'), ('twilio_from_missing', 'Missing From Number'), ('twilio_from_to', 'From / To identic')] -
sms_codeCharargs: 'Code' -
sms_idMany2one → sms.smscompute='_compute_sms_id'store=Falsestring='SMS' args: 'sms.sms' -
sms_id_intIntegerindex='btree_not_null'string='SMS ID' -
sms_numberCharargs: 'Number' -
sms_tracker_idsOne2many → sms.trackerstring='SMS Trackers' args: 'sms.tracker', 'mailing_trace_id' -
trace_typeSelectionondelete={'sms': 'set default'}selection_add=[('sms', 'SMS')]
-
create(self, vals_list)@api.model_create_multi -
fields_get(self, allfields=None, attributes=None)@api.model
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (3)
-
mailing_idMany2one → mailing.mailingstring='Mailing' args: 'mailing.mailing' -
mass_sms_allow_unsubscribeBooleandefault=True args: 'Include opt-out link' -
utm_campaign_idMany2one → utm.campaignondelete='set null'string='Campaign' args: 'utm.campaign'
No public methods.
New fields (2)
-
mailing_idMany2one → mailing.mailingstring='Mass Mailing' args: 'mailing.mailing' -
mailing_trace_idsOne2many → mailing.tracestring='Statistics' args: 'mailing.trace', 'sms_id_int'
No public methods.
New fields (1)
-
mailing_trace_idMany2one → mailing.traceindex='btree_not_null'ondelete='cascade' args: 'mailing.trace'
No public methods.
New fields (4)
-
ab_testing_mailings_sms_countIntegercompute='_compute_mailing_sms_count' args: 'A/B Test Mailings SMS #' -
ab_testing_sms_winner_selectionSelectiondefault='clicks_ratio'string='SMS Winner Selection' args: [('manual', 'Manual'), ('clicks_ratio', 'Highest Click Rate')] -
mailing_sms_countIntegercompute='_compute_mailing_sms_count'groups='mass_mailing.group_mass_mailing_user' args: 'Number of Mass SMS' -
mailing_sms_idsOne2many → mailing.mailingdomain=[('mailing_type', '=', 'sms')]groups='mass_mailing.group_mass_mailing_user'string='Mass SMS' args: 'mailing.mailing', 'campaign_id'
-
action_create_mass_sms(self) -
action_redirect_to_mailing_sms(self)
New fields (0)
No new fields.
Public methods (1)-
SELF_REQUIRED_UTM_MEDIUMS_REF(self)@property
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…