diff --git a/ora_ai_website/README.md b/ora_ai_website/README.md new file mode 100644 index 000000000..382a67663 --- /dev/null +++ b/ora_ai_website/README.md @@ -0,0 +1,132 @@ +# Ora-Ai Website for Odoo 18 + +[![Odoo](https://img.shields.io/badge/Odoo-%23A24689.svg?style=for-the-badge&logo=Odoo&logoColor=white)](https://www.odoo.com) +[![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](https://opensource.org/licenses/MIT) + +## Overview + +This module facilitates order placement via ora AI voice assistance, +seamlessly integrating with the Sale Order system to enhance customer service and streamline operations. + +## Features + +- ⏱️**Reducing Order Time.** +- 🎙️**Replacing Employees with Voice Assistance.** +- 🕒**24/7 Availability.** +- 🛒**Automated Sale Order Creation.** +- 🌐**Starts in English, then auto-detects and switches + to your default language set in the voice assistant.** +- 🧅**Addon Product Options and Variants.** +- 📢**Promotional Content Integration.** + +## Screenshots + +Here are some glimpses of ORA AI: + +### VAPI AI Interface + +
+ + + Feature 1 + + +
+ +### Voice Assistance Interface + +
+ + + Clicking the icon allows us to communicate with the assistants directly from the website. + Feature 1 + + +
+
+ + Once you’ve selected the product and quantity, just confirm the order to add it to + your cart. + Feature 1 + + +
+
+ + The corresponding sales order has been created. We can now proceed with the + remaining confirmation steps. + Feature 1 + + +
+ +## Prerequisites + +Before you begin, ensure you have the following installed: + +- An active Odoo Community/Enterprise Edition instance (local or hosted) + +## Configuration + +- Once installed, users will be able to add the API details for VAPI AI. + Company + +## Installation + +Follow these steps to set up and run the app: + +1. **Clone the Repository** + + ```git clone https://github.com/cybrosystech/Ora-AI-Voice.git``` + +2. **Add the module to addons** + + ```cd Ora AI``` + +## Contributing + +We welcome contributions! To get started: + +1. Fork the repository. + +2. Create a new branch: + ``` + git checkout -b feature/your-feature-name + ``` +3. Make changes and commit: + ``` + git commit -m "Add your message here" + ``` +4. Push your changes: + ``` + git push origin feature/your-feature-name + ``` +5. Create a Pull Request on GitHub. + +--- + +- Submit a pull request with a clear description of your changes. + +## License + +This project is licensed under the AGPL-3. Feel free to use, modify, and distribute it as needed. + +Company +------- + +* `Cybrosys Techno Solutions ` + +## Contact + +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + + +Maintainer +========== +![Cybrosys Logo](https://www.cybrosys.com/images/logo.png) +https://cybrosys.com + + +This module is maintained by Cybrosys Technologies. +For support and more information, please visit https://www.cybrosys.com \ No newline at end of file diff --git a/ora_ai_website/__init__.py b/ora_ai_website/__init__.py new file mode 100644 index 000000000..835c90702 --- /dev/null +++ b/ora_ai_website/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import controllers +from . import models diff --git a/ora_ai_website/__manifest__.py b/ora_ai_website/__manifest__.py new file mode 100644 index 000000000..1cde95cd9 --- /dev/null +++ b/ora_ai_website/__manifest__.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'Ora-Ai Website', + 'version': '18.0.1.0.0', + 'category': 'eCommerce', + 'summary': """Ora-AI Website enables users to place product orders using + the voice assistant directly through the website.""", + 'description': """Ora Website Assistant,By implementing this module + voice-activated technology, your customers can easily browse your eCommerce + store, inquire about products, and place orders, all by speaking naturally + to the AI.""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['base', 'ora_ai_base', 'website_sale'], + 'data': [ + 'views/res_config_settings_views.xml', + 'views/templates.xml', + 'views/website_menus.xml', + ], + 'assets': { + 'web.assets_frontend': [ + 'ora_ai_website/static/src/js/website_templates.js', + 'ora_ai_website/static/src/scss/website_template.scss', + ], + }, + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + 'auto_install': False, + 'installable': True, + 'application': False +} diff --git a/ora_ai_website/controllers/__init__.py b/ora_ai_website/controllers/__init__.py new file mode 100644 index 000000000..d51a1c6c2 --- /dev/null +++ b/ora_ai_website/controllers/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import ora_ai_website diff --git a/ora_ai_website/controllers/ora_ai_website.py b/ora_ai_website/controllers/ora_ai_website.py new file mode 100644 index 000000000..d71bf79db --- /dev/null +++ b/ora_ai_website/controllers/ora_ai_website.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, http +from odoo.http import request, route + + +class WebSiteVapiController(http.Controller): + """This controller handles various HTTP routes related to VAPI assistant + integration and product-related operations on the website.""" + + @route('/website_assistant', auth='public', type='json', + website=True) + def website_assistant_data(self): + """Get the values from the settings and return as data dictionary. """ + private_api_key = request.env['ir.config_parameter'].sudo().get_param( + 'ora_ai_base.vapi_private_api_key') + public_api_key = request.env['ir.config_parameter'].sudo().get_param( + 'ora_ai_base.vapi_public_api_key') + assistant = request.env['ir.config_parameter'].sudo().get_param( + 'ora_ai_website.website_assistant_id') + assistant_id = request.env['ora.ai'].sudo().browse( + int(assistant)).id_assistant + return {'public_api_key': public_api_key, + 'assistant': assistant_id, + 'private_api_key': private_api_key} + + @route('/get_product_id', auth='public', type='json', website=True) + def get_product_id(self, **args): + """Fetch the corresponding product.""" + product = args.get('product_name') + product_id = request.env['product.product'].sudo().search( + [('name', '=', product)]) + return {'product_id': product_id.id} + + @route('/get_variant_product_id', auth='public', type='json', + website=True) + def get_variant_product_id(self, **args): + """Fetch the product variant ID that matches the given product + name and variant attribute values.""" + variant = args.get('variant_name') + att_value_list = [var.strip() for var in variant.split(",")] + att_id_list = [] + for val in att_value_list: + att_id_list.append(request.env['product.attribute.value'].search( + [('name', '=', val)]).id) + product_variants = request.env['product.product'].search( + [('name', '=', args.get('product_name'))]) + variant_product_id = [] + for rec in product_variants: + variant_product_ids = rec.product_template_variant_value_ids.ids + variants = rec.product_template_variant_value_ids.mapped('name') + if (variant_product_ids == att_id_list or + variants == att_value_list): + variant_product_id.append(rec.id) + return { + 'variant_product_id': variant_product_id[0] + } + + @route('/get_product_name', auth='public', type='json', website=True) + def get_product_name(self): + """Getting all the published product names.""" + product_name = request.env['product.template'].sudo().search( + [('is_published', '=', True)]).mapped('name') + return {'product_name': product_name} + + @route('/shop/add_to_cart', auth='public', type='json', website=True) + def add_to_cart(self, products): + """ Add multiple products to the website cart.""" + order = request.website.sale_get_order( + force_create=1) + val = [] + for product_id_str, quantity in products.items(): + product_id = int(product_id_str) + view = request.env['ir.ui.view'] + values = order._cart_update(product_id=product_id, + add_qty=quantity) + values['website_sale.cart_lines'] = view._render_template( + "website_sale.cart_lines", { + 'website_sale_order': order, + 'date': fields.Date.today(), + 'suggested_products': order._cart_accessories()}) + values['website_sale.total'] = view._render_template( + "website_sale.total", { + 'website_sale_order': order}) + request.session['website_sale_cart_quantity'] = order.cart_quantity + values['cart_quantity'] = order.cart_quantity + val.append(values) + line_ids = [values['line_id']] + lines = order.order_line.filtered(lambda line: line.id in line_ids) + show_tax = order.website_id.show_line_subtotals_tax_selection == 'tax_included' + notification = { + 'currency_id': order.currency_id.id, + 'lines': [{'id': line.id, + 'image_url': order.website_id.image_url( + line.product_id, 'image_128'), + 'quantity': line.product_uom_qty, + 'name': line.name_short, + 'description': line._get_sale_order_line_multiline_description_variants(), + 'line_price_total': ( + line.price_total + if show_tax + else line.price_subtotal + ), + } for line in lines + ], + } + values['notification_info'] = notification + return { + 'success': True, + 'order_id': order.id, + 'order_total': order.amount_total, + 'values': val, + } diff --git a/ora_ai_website/doc/RELEASE_NOTES.md b/ora_ai_website/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..07d0d6764 --- /dev/null +++ b/ora_ai_website/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 03.12.2025 +#### Version 18.0.1.0.0 +#### ADD + +- Initial commit for Ora-Ai Website \ No newline at end of file diff --git a/ora_ai_website/models/__init__.py b/ora_ai_website/models/__init__.py new file mode 100644 index 000000000..cfe18f9a9 --- /dev/null +++ b/ora_ai_website/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from .import res_config_settings diff --git a/ora_ai_website/models/res_config_settings.py b/ora_ai_website/models/res_config_settings.py new file mode 100644 index 000000000..dc27d46ef --- /dev/null +++ b/ora_ai_website/models/res_config_settings.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + """Inherited to add the Website assistants fields in the settings.""" + _inherit = 'res.config.settings' + + is_website_assistant = fields.Boolean(string='Enable Website Assistant', + config_parameter='ora_ai_website.is_website_assistant', + help='Check this field for enabling ' + 'Website assistant') + website_assistant_id = fields.Many2one('ora.ai', + string="Choose Assistant", + config_parameter='ora_ai_website.website_assistant_id', + domain="[('state', '=', 'done')]") diff --git a/ora_ai_website/static/description/assets/customer.jpg b/ora_ai_website/static/description/assets/customer.jpg new file mode 100644 index 000000000..0b78768ad Binary files /dev/null and b/ora_ai_website/static/description/assets/customer.jpg differ diff --git a/ora_ai_website/static/description/assets/icons/arrows-repeat.svg b/ora_ai_website/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/banner-1.png b/ora_ai_website/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/banner-1.png differ diff --git a/ora_ai_website/static/description/assets/icons/banner-2.svg b/ora_ai_website/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/banner-bg.png b/ora_ai_website/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/banner-bg.png differ diff --git a/ora_ai_website/static/description/assets/icons/banner-bg.svg b/ora_ai_website/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/banner-call.svg b/ora_ai_website/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ora_ai_website/static/description/assets/icons/banner-mail.svg b/ora_ai_website/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ora_ai_website/static/description/assets/icons/banner-pattern.svg b/ora_ai_website/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/banner-promo.svg b/ora_ai_website/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/brand-pair.svg b/ora_ai_website/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/check.png b/ora_ai_website/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/check.png differ diff --git a/ora_ai_website/static/description/assets/icons/chevron.png b/ora_ai_website/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/chevron.png differ diff --git a/ora_ai_website/static/description/assets/icons/close-icon.svg b/ora_ai_website/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ora_ai_website/static/description/assets/icons/cogs.png b/ora_ai_website/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/cogs.png differ diff --git a/ora_ai_website/static/description/assets/icons/collabarate-icon.svg b/ora_ai_website/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/icons/consultation.png b/ora_ai_website/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/consultation.png differ diff --git a/ora_ai_website/static/description/assets/icons/cybro-logo.png b/ora_ai_website/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/cybro-logo.png differ diff --git a/ora_ai_website/static/description/assets/icons/down.svg b/ora_ai_website/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ora_ai_website/static/description/assets/icons/ecom-black.png b/ora_ai_website/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/ecom-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/education-black.png b/ora_ai_website/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/education-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/faq.png b/ora_ai_website/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/faq.png differ diff --git a/ora_ai_website/static/description/assets/icons/feature-icon.svg b/ora_ai_website/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/feature.png b/ora_ai_website/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/feature.png differ diff --git a/ora_ai_website/static/description/assets/icons/gear.svg b/ora_ai_website/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/hero.gif b/ora_ai_website/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..d28160470 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/hero.gif differ diff --git a/ora_ai_website/static/description/assets/icons/hire-odoo.svg b/ora_ai_website/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/hotel-black.png b/ora_ai_website/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/hotel-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/license.png b/ora_ai_website/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/license.png differ diff --git a/ora_ai_website/static/description/assets/icons/life-ring-icon.svg b/ora_ai_website/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/lifebuoy.png b/ora_ai_website/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/lifebuoy.png differ diff --git a/ora_ai_website/static/description/assets/icons/mail.svg b/ora_ai_website/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/icons/manufacturing-black.png b/ora_ai_website/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/manufacturing-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/notes.png b/ora_ai_website/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/notes.png differ diff --git a/ora_ai_website/static/description/assets/icons/notification icon.svg b/ora_ai_website/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/odoo-consultancy.svg b/ora_ai_website/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/ora_ai_website/static/description/assets/icons/odoo-licencing.svg b/ora_ai_website/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/icons/odoo-logo.png b/ora_ai_website/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/odoo-logo.png differ diff --git a/ora_ai_website/static/description/assets/icons/patter.svg b/ora_ai_website/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/pattern1.png b/ora_ai_website/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/pattern1.png differ diff --git a/ora_ai_website/static/description/assets/icons/pos-black.png b/ora_ai_website/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/pos-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/puzzle-piece-icon.svg b/ora_ai_website/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/puzzle.png b/ora_ai_website/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/puzzle.png differ diff --git a/ora_ai_website/static/description/assets/icons/replace-icon.svg b/ora_ai_website/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/restaurant-black.png b/ora_ai_website/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/restaurant-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/screenshot-main.png b/ora_ai_website/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/screenshot-main.png differ diff --git a/ora_ai_website/static/description/assets/icons/screenshot.png b/ora_ai_website/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/screenshot.png differ diff --git a/ora_ai_website/static/description/assets/icons/service-black.png b/ora_ai_website/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/service-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/skype-fill.svg b/ora_ai_website/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/skype.png b/ora_ai_website/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/skype.png differ diff --git a/ora_ai_website/static/description/assets/icons/skype.svg b/ora_ai_website/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/icons/star-1.svg b/ora_ai_website/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/star-2.svg b/ora_ai_website/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/support.png b/ora_ai_website/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/support.png differ diff --git a/ora_ai_website/static/description/assets/icons/test-1 - Copy.png b/ora_ai_website/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/test-1 - Copy.png differ diff --git a/ora_ai_website/static/description/assets/icons/test-1.png b/ora_ai_website/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/test-1.png differ diff --git a/ora_ai_website/static/description/assets/icons/test-2.png b/ora_ai_website/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/test-2.png differ diff --git a/ora_ai_website/static/description/assets/icons/trading-black.png b/ora_ai_website/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/trading-black.png differ diff --git a/ora_ai_website/static/description/assets/icons/training.png b/ora_ai_website/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/training.png differ diff --git a/ora_ai_website/static/description/assets/icons/translate.svg b/ora_ai_website/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/update.png b/ora_ai_website/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/update.png differ diff --git a/ora_ai_website/static/description/assets/icons/user.png b/ora_ai_website/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/user.png differ diff --git a/ora_ai_website/static/description/assets/icons/video.png b/ora_ai_website/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/video.png differ diff --git a/ora_ai_website/static/description/assets/icons/whatsapp.png b/ora_ai_website/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/whatsapp.png differ diff --git a/ora_ai_website/static/description/assets/icons/wrench-icon.svg b/ora_ai_website/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/ora_ai_website/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/icons/wrench.png b/ora_ai_website/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/ora_ai_website/static/description/assets/icons/wrench.png differ diff --git a/ora_ai_website/static/description/assets/lightning.svg b/ora_ai_website/static/description/assets/lightning.svg new file mode 100644 index 000000000..9e570e3c1 --- /dev/null +++ b/ora_ai_website/static/description/assets/lightning.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/misc/Cybrosys R.png b/ora_ai_website/static/description/assets/misc/Cybrosys R.png new file mode 100644 index 000000000..da4058087 Binary files /dev/null and b/ora_ai_website/static/description/assets/misc/Cybrosys R.png differ diff --git a/ora_ai_website/static/description/assets/misc/email.svg b/ora_ai_website/static/description/assets/misc/email.svg new file mode 100644 index 000000000..15291cdc3 --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/misc/phone.svg b/ora_ai_website/static/description/assets/misc/phone.svg new file mode 100644 index 000000000..b7bd7f251 --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/misc/star (1) 2.svg b/ora_ai_website/static/description/assets/misc/star (1) 2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/misc/support (1) 1.svg b/ora_ai_website/static/description/assets/misc/support (1) 1.svg new file mode 100644 index 000000000..7d37a8f30 --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/misc/support-email.svg b/ora_ai_website/static/description/assets/misc/support-email.svg new file mode 100644 index 000000000..eb70370d6 --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/ora_ai_website/static/description/assets/misc/tick-mark.svg b/ora_ai_website/static/description/assets/misc/tick-mark.svg new file mode 100644 index 000000000..2dbb40187 --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/misc/whatsapp 1.svg b/ora_ai_website/static/description/assets/misc/whatsapp 1.svg new file mode 100644 index 000000000..0bfaf8fc6 --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/misc/whatsapp.svg b/ora_ai_website/static/description/assets/misc/whatsapp.svg new file mode 100644 index 000000000..b618aea1d --- /dev/null +++ b/ora_ai_website/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/assets/modules/1.jpg b/ora_ai_website/static/description/assets/modules/1.jpg new file mode 100644 index 000000000..8602126f7 Binary files /dev/null and b/ora_ai_website/static/description/assets/modules/1.jpg differ diff --git a/ora_ai_website/static/description/assets/modules/2.png b/ora_ai_website/static/description/assets/modules/2.png new file mode 100644 index 000000000..0acf8802e Binary files /dev/null and b/ora_ai_website/static/description/assets/modules/2.png differ diff --git a/ora_ai_website/static/description/assets/modules/3.jpg b/ora_ai_website/static/description/assets/modules/3.jpg new file mode 100644 index 000000000..864310c24 Binary files /dev/null and b/ora_ai_website/static/description/assets/modules/3.jpg differ diff --git a/ora_ai_website/static/description/assets/modules/4.jpg b/ora_ai_website/static/description/assets/modules/4.jpg new file mode 100644 index 000000000..78a1a4cb4 Binary files /dev/null and b/ora_ai_website/static/description/assets/modules/4.jpg differ diff --git a/ora_ai_website/static/description/assets/modules/5.jpg b/ora_ai_website/static/description/assets/modules/5.jpg new file mode 100644 index 000000000..49fd46c39 Binary files /dev/null and b/ora_ai_website/static/description/assets/modules/5.jpg differ diff --git a/ora_ai_website/static/description/assets/modules/6.jpg b/ora_ai_website/static/description/assets/modules/6.jpg new file mode 100644 index 000000000..169875b88 Binary files /dev/null and b/ora_ai_website/static/description/assets/modules/6.jpg differ diff --git a/ora_ai_website/static/description/assets/person (1) 1.svg b/ora_ai_website/static/description/assets/person (1) 1.svg new file mode 100644 index 000000000..8f8946c7c --- /dev/null +++ b/ora_ai_website/static/description/assets/person (1) 1.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/person (1) 2.svg b/ora_ai_website/static/description/assets/person (1) 2.svg new file mode 100644 index 000000000..7cbae24e9 --- /dev/null +++ b/ora_ai_website/static/description/assets/person (1) 2.svg @@ -0,0 +1,3 @@ + + + diff --git a/ora_ai_website/static/description/assets/screenshots/aa.png b/ora_ai_website/static/description/assets/screenshots/aa.png new file mode 100644 index 000000000..a6997ddca Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/aa.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/hero.gif b/ora_ai_website/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..b7b8999ea Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/hero.gif differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_1.png b/ora_ai_website/static/description/assets/screenshots/ora_1.png new file mode 100644 index 000000000..898507ba9 Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_1.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_10.png b/ora_ai_website/static/description/assets/screenshots/ora_10.png new file mode 100644 index 000000000..ed88a26b0 Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_10.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_11.png b/ora_ai_website/static/description/assets/screenshots/ora_11.png new file mode 100644 index 000000000..9fe23d8ef Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_11.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_2.png b/ora_ai_website/static/description/assets/screenshots/ora_2.png new file mode 100644 index 000000000..99d0066d0 Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_2.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_3.png b/ora_ai_website/static/description/assets/screenshots/ora_3.png new file mode 100644 index 000000000..c4bfbd4bc Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_3.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_4.png b/ora_ai_website/static/description/assets/screenshots/ora_4.png new file mode 100644 index 000000000..774f8642f Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_4.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_5.png b/ora_ai_website/static/description/assets/screenshots/ora_5.png new file mode 100644 index 000000000..f7e772d45 Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_5.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_6.png b/ora_ai_website/static/description/assets/screenshots/ora_6.png new file mode 100644 index 000000000..39c487c3d Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_6.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_7.png b/ora_ai_website/static/description/assets/screenshots/ora_7.png new file mode 100644 index 000000000..fc3515d7c Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_7.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_8.png b/ora_ai_website/static/description/assets/screenshots/ora_8.png new file mode 100644 index 000000000..b90283c0c Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_8.png differ diff --git a/ora_ai_website/static/description/assets/screenshots/ora_9.png b/ora_ai_website/static/description/assets/screenshots/ora_9.png new file mode 100644 index 000000000..980496265 Binary files /dev/null and b/ora_ai_website/static/description/assets/screenshots/ora_9.png differ diff --git a/ora_ai_website/static/description/assets/sparkle 1.svg b/ora_ai_website/static/description/assets/sparkle 1.svg new file mode 100644 index 000000000..ea45f7a63 --- /dev/null +++ b/ora_ai_website/static/description/assets/sparkle 1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ora_ai_website/static/description/assets/sparkle 2.svg b/ora_ai_website/static/description/assets/sparkle 2.svg new file mode 100644 index 000000000..23fa957a5 --- /dev/null +++ b/ora_ai_website/static/description/assets/sparkle 2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/ora_ai_website/static/description/assets/star.svg b/ora_ai_website/static/description/assets/star.svg new file mode 100644 index 000000000..4bc06c5c7 --- /dev/null +++ b/ora_ai_website/static/description/assets/star.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ora_ai_website/static/description/banner.jpg b/ora_ai_website/static/description/banner.jpg new file mode 100644 index 000000000..692b04c1a Binary files /dev/null and b/ora_ai_website/static/description/banner.jpg differ diff --git a/ora_ai_website/static/description/icon.png b/ora_ai_website/static/description/icon.png new file mode 100644 index 000000000..d2ca1fd06 Binary files /dev/null and b/ora_ai_website/static/description/icon.png differ diff --git a/ora_ai_website/static/description/index.html b/ora_ai_website/static/description/index.html new file mode 100644 index 000000000..c19d807bb --- /dev/null +++ b/ora_ai_website/static/description/index.html @@ -0,0 +1,1086 @@ + + + + + + ORA AI Website + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+ +
+
+
+
+

+ Users can use the voice assistants from the website module to order the product and + confirm the + order. +

+

ORA AI Website +

+
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+

Key + Highlights

+
+
+
+
+ +
+
+ We can configure the voice assistant from the module. +
+

+

+
+
+
+
+
+ +
+
+ By configuring an assistant from the base module, choose the assistant in the + website + settings. +
+

+

+
+
+
+
+
+ +
+
+ Can create the squad of the assistants. +
+

+

+
+
+
+
+
+ +
+
+ Can use preferable languages to the assistant. +
+

+

+
+
+
+
+
+ +
+
+ Compatible with Community, Enterprise, and + Odoo.sh. +
+

+

+
+
+
+
+ +
+
+
+ ORA AI WEBSITE +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ + After installation, the module becomes accessible from the dashboard. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + Add the keys into the voice assistant settings. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + From the assistant form view, you can create a new assistant by providing a name and + configuring the AI model and LLM provider under the Model tab. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + Go to the Transcriber tab in the assistant form view and set the provider and model. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + After entering and saving all the assistant details, click the Create Assistant + button to proceed. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + After creating the assistants choose the corresponding assistant for the website. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + Then the assistant will be visible in the website. + To specify your requirements, simply click the button and speak with the assistant. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + It will navigate through the products on the website. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + Once you’ve selected the product and quantity, just confirm the order to add it to + your cart. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + Proceed to checkout. + +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ + The corresponding sales order has been created. We can now proceed with the + remaining confirmation steps. + +

+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+

+ We can speak to our voice assistant in multi languages. +

+
+
+
+
+
+
+
+ +
+

+ A squad of assistants can be created. +

+
+ +
+
+
+
+
+
+ +
+

+ We can use this assistant in our website to order the product. +

+
+ +
+
+
+
+
+ +
+
+

+ Latest Release 18.0.1.0.0 +

+ + 3rd December, 2025 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + + +
+

+ Related Products +

+ +
+ + +
+

+ Our Services

+ +
+
+ +
+
+ .... +
+
+ +
+ + +
+
+ + + + + + diff --git a/ora_ai_website/static/src/js/website_templates.js b/ora_ai_website/static/src/js/website_templates.js new file mode 100644 index 000000000..635d4c2be --- /dev/null +++ b/ora_ai_website/static/src/js/website_templates.js @@ -0,0 +1,191 @@ +/** @odoo-module **/ +import publicWidget from "@web/legacy/js/public/public_widget"; +import { rpc } from "@web/core/network/rpc"; +import wSaleUtils from "@website_sale/js/website_sale_utils"; + +// Public widget integrates a voice assistant into the website shop interface. +publicWidget.registry.VoiceAssistantButton = publicWidget.Widget.extend({ + selector: '.oe_website_sale', + events: { + 'click .website_assistant_container': '_onClick', + }, + init() { + this._super(...arguments); + this.rpc = rpc; + this.isAssistantActive = false; + this.microElement = document.querySelector('.micro'); + }, + start: async function () { + await this._fetchProductName(); + const data = await this._fetchAssistantData(); + window.apiKey = data.public_api_key; + window.assistant = data.assistant; + this._loadVapiScript(); + }, + _fetchProductName: async function () { + const result = await this.rpc('/get_product_name', {}); + this.product_name = result.product_name; + }, + _fetchAssistantData: async function () { + const response = await this.rpc('/website_assistant', {}); + this.data = response; + return response; + }, + _loadVapiScript: function () { + (function (d, t) { + const g = document.createElement(t), + s = d.getElementsByTagName(t)[0]; + g.src = "/ora_ai_base/static/src/lib/vapi.min.js"; + g.defer = true; + g.async = true; + s.parentNode.insertBefore(g, s); + })(document, "script"); + }, + _onClick: function () { + if (this.isAssistantActive) { + this.stop_assistant(); + } else { + this.start_assistant(); + this.microElement.classList.add('active'); + } + }, + stop_assistant: function() { + this.VAPI.stop() + }, + start_assistant: async function() { + this.isAssistantActive = !this.isAssistantActive; + const VAPI = window.vapiSDK.run({ + apiKey: this.data.public_api_key, + assistant: this.data.assistant, + }); + this.VAPI = VAPI; + VAPI.start(window.assistant); + if (VAPI) { + VAPI.on("message", async (message) => { + if (message.type === "tool-calls") { + if (message.toolCallList[0].function.arguments.LanguagePreference){ + await this.update_assistant(message.toolCallList[0].function.arguments.LanguagePreference.LanguageCode, this.data.assistant) + } + if (message.toolCallList[0].function.arguments.OrderDetails){ + await this._handleToolCalls(message.toolCallList[0].function.arguments.OrderDetails.Products); + } + } + if (message.transcriptType === "final" && message.role === "assistant") { + const assistant_msg = message.transcript.toLowerCase(); + this.highlight_product_card_transcriber(assistant_msg); + } + }); + VAPI.on("call-end", () => { + this.isAssistantActive = false; + if (this.is_lang_set){ + this.reset_assistant() + } + this.$el.find('td.oe_product').each(function () { + $(this).css({ + 'box-shadow': 'none' + }); + }) + }); + VAPI.on('speech-start', () => { + this.microElement.classList.add('speech-active'); + }); + VAPI.on('speech-end', () => { + this.microElement.classList.remove('speech-active'); + }); + VAPI.on('call-end', () => { + this.microElement.classList.remove('speech-active'); + this.microElement.classList.remove('active'); + }); + } + }, + reset_assistant: async function() { + const response = await this.rpc(`/web/dataset/call_kw/vapi.voice.assistant/reset_assistant`, { + model: "vapi.voice.assistant", + method: "reset_assistant", + args: [], + kwargs: {'assistant_id': this.data.assistant}, + }); + }, + update_assistant: async function(LanguageCode, assistant_id) { + const lang_obj = await this.rpc(`/web/dataset/call_kw/vapi.language/get_language`, { + model: "vapi.language", + method: "get_language", + args: [], + kwargs: {'language': LanguageCode}, + }); + if (lang_obj.status) { + this.is_lang_set = false + this.VAPI.stop() + const options = { + method: 'PATCH', + headers: { + Authorization: `Bearer ${this.data.private_api_key}`, + 'Content-Type': 'application/json' + }, + body: `{ + "transcriber":{ + "language": "${LanguageCode}", + "provider":"deepgram", + "model":"nova-2" + }, + "voice":{ + "provider":"11labs", + "voiceId":"${lang_obj.voice}" + }, + "firstMessage":"${lang_obj.first_msg}", + "endCallPhrases":["${lang_obj.end_msg}"] + }` + }; + const response = await fetch(`https://api.vapi.ai/assistant/${this.data.assistant}`, options) + if (response.ok) { + this.is_lang_set = true + this.start_assistant() + } + } + }, + _handleToolCalls: async function (products) { + const productQtyDict = {}; + await Promise.all(products.map(async (item) => { + if (item.productId && item.Quantity) { + productQtyDict[item.productId] = item.Quantity; + } + })); + await this.rpc("/shop/add_to_cart", { products: productQtyDict + }).then((data) => { + data.values.map(async (item) => { + wSaleUtils.updateCartNavBar(item); + wSaleUtils.showCartNotification(this.call.bind(this), item.notification_info); + }) + this.$el.find('td.oe_product').each(function () { + $(this).css({ + 'box-shadow': 'none' + }); + }) + setTimeout(() => this.stop_assistant(), 15000); + }); + }, + highlight_product_card_transcriber: async function(assistant_msg) { + let matchedProduct = null; + for (let i = 0; i < this.product_name.length; i++) { + if (assistant_msg.replace(/block/g, 'bloc').includes(this.product_name[i].toLowerCase())) { + matchedProduct = this.product_name[i]; + break; + } + } + if (matchedProduct) { + this.$el.find('div.oe_product').each(function () { + const productText = $(this).find('h6.o_wsale_products_item_title').text().trim(); + if (productText === matchedProduct) { + $(this).css({ + 'box-shadow': 'rgba(0, 0, 0, 0.56) 0px 22px 70px 4px' + }); + } + else { + $(this).css({ + 'box-shadow': 'none' + }); + } + }); + } + }, +}); \ No newline at end of file diff --git a/ora_ai_website/static/src/scss/website_template.scss b/ora_ai_website/static/src/scss/website_template.scss new file mode 100644 index 000000000..60b3e7927 --- /dev/null +++ b/ora_ai_website/static/src/scss/website_template.scss @@ -0,0 +1,77 @@ +.website_assistant_container { + width: 80px; + height: 20px; + padding: 20px; + border-radius: 10px; + display: flex; + justify-content: center; + align-items: center; + position: relative; + cursor: pointer; + margin-left: 10px; +} +.micro { + --width: 45px; + --height: 45px; + display: flex; + align-items: center; + justify-content: center; + width: var(--width); + height: var(--height); + background-color: #714B67; + border-radius: 50%; + border: 1px solid #714B67; + position: relative; + margin-left: 10px; +} +.micro:hover { + background-color: #126406; + box-shadow: 0 8px 16px rgb(18, 100, 6); + transform: scale(1.05); +} +.micro:before, +.micro:after { + position: absolute; + content: ""; + top: 0; + right: 0; + bottom: 0; + left: 0; + border: solid 3px #714B67; + border-radius: 50%; + opacity: 0; +} +@keyframes ripple { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(2); + opacity: 0; + } +} +.micro.active { + background-color: #714B67; +} +.micro.active:before, +.micro.active:after { + border-color: #714B67; + animation: ripple 2s linear infinite; +} +.micro.speech-active { + background-color: #b90918; +} +.micro.speech-active:before, +.micro.speech-active:after { + border-color: rgb(185, 9, 24); + animation: ripple 2s linear infinite; +} +.microphone-icon { + fill: #ffffff; + width: 25px; + height: 25px; +} +#vapi-support-btn { + display: none; +} diff --git a/ora_ai_website/views/res_config_settings_views.xml b/ora_ai_website/views/res_config_settings_views.xml new file mode 100644 index 000000000..ef6fad167 --- /dev/null +++ b/ora_ai_website/views/res_config_settings_views.xml @@ -0,0 +1,24 @@ + + + + + + res.config.settings.view.form.inherit.ora.ai.website + + res.config.settings + + + + + + + + + + + + + \ No newline at end of file diff --git a/ora_ai_website/views/templates.xml b/ora_ai_website/views/templates.xml new file mode 100644 index 000000000..81bc03d72 --- /dev/null +++ b/ora_ai_website/views/templates.xml @@ -0,0 +1,34 @@ + + + + + \ No newline at end of file diff --git a/ora_ai_website/views/website_menus.xml b/ora_ai_website/views/website_menus.xml new file mode 100644 index 000000000..8b106cef5 --- /dev/null +++ b/ora_ai_website/views/website_menus.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file