base on Modern, Streamlined, Free and Open Source Customer Service Software <div align="center" markdown="1"> <img src=".github/hd-logo.svg" alt="Frappe Helpdesk logo" width="80"/> <h1>Frappe Helpdesk</h1> **Customer Service, Made Simple and Effective** ![GitHub release (latest by date)](https://img.shields.io/github/v/release/frappe/helpdesk) [![codecov](https://codecov.io/github/frappe/helpdesk/branch/develop/graph/badge.svg?token=8ZXHCY4G9U)](https://codecov.io/github/frappe/helpdesk) <a href="https://trendshift.io/repositories/12764" target="_blank"><img src="https://trendshift.io/api/badge/repositories/12764" alt="teableio%2Fteable | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a> </div> </div> <div align="center"> <img src="./.github/Hero2.png" alt="Hero Image" width="100%" /> </div> <br /> <div align="center"> <a href="https://frappe.io/helpdesk">Website</a> - <a href="https://docs.frappe.io/helpdesk">Documentation</a> </div> ## Frappe Helpdesk Frappe Helpdesk is an 100% open-source Ticket Management tool which helps you streamline your company's support, offers an easy setup, clean user interface, and automation tools to resolve customer queries efficiently. ### Motivation Managing issues from our customers was a big challenge for us. We were using the ERPNext support module which was not very good in UI and the UX was also not good. We wanted to have a tool that can be easily integrated with our existing system and can be customized as per our needs. So we decided to build Frappe Helpdesk. ### Key Features - **Agent and Customer Portal Views**: Dual portals for agents and customers to simplify issue submission and management. - **Customizable SLAs**: Discover how you can set and track SLAs for better response times. - **Assignment Rules**: Custom auto-assignment of tickets based on priority, issue type, or workload. - **Knowledge Base**: Learn how to create and manage help articles to empower users and reduce tickets. - **Canned Responses**: Pre-written replies for common queries to ensure quick and consistent communication. <details open> <summary >View Screenshots</summary> <h3></h3> <div align="center"> <sub> Agent List View </sub> </div> ![Agent List View](.github/AgentListView.png) <div align="center"> <sub> Upload articles and let your customer solve their queries through the Knowledge Base. </sub> </div> ![Knowledge Base](.github/KB.png) <div align="center"> <sub> With advanced search, your customers will be recommended relevant articles regarding their issue. </sub> </div> ![Article Search](.github/Search2.png) </details> <br> ### Under the Hood - [**Frappe Framework**](https://github.com/frappe/frappe): A full-stack web application framework written in Python and Javascript. - [**Frappe UI**](https://github.com/frappe/frappe-ui): A Vue-based UI library, to provide a modern user interface. ## Production Setup ### Managed Hosting You can try [Frappe Cloud](https://frappecloud.com), a simple, user-friendly and sophisticated [open-source](https://github.com/frappe/press) platform to host Frappe applications with peace of mind. It takes care of installation, setup, upgrades, monitoring, maintenance and support of your Frappe deployments. It is a fully featured developer platform with an ability to manage and control multiple Frappe deployments. <div> <a href="https://frappecloud.com/helpdesk/signup" target="_blank"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://frappe.io/files/try-on-fc-white.png"> <img src="https://frappe.io/files/try-on-fc-black.png" alt="Try on Frappe Cloud" height="28" /> </picture> </a> </div> ### Self Hosting Follow these steps to set up Frappe Helpdesk in production: **Step 1**: Download the easy install script ```bash wget https://frappe.io/easy-install.py ``` **Step 2**: Run the deployment command ```bash python3 ./easy-install.py deploy \ --project=helpdesk_prod_setup \ --email=your_email.example.com \ --image=ghcr.io/frappe/helpdesk \ --version=stable \ --app=helpdesk \ --sitename subdomain.domain.tld ``` Replace the following parameters with your values: - `your_email.example.com`: Your email address - `subdomain.domain.tld`: Your domain name where Helpdesk will be hosted The script will set up a production-ready instance of Frappe Helpdesk with all the necessary configurations in about 5 minutes. ## Development Setup ### Docker You need Docker, docker-compose and git setup on your machine. Refer [Docker documentation](https://docs.docker.com/). After that, follow below steps: **Step 1**: Setup folder and download the required files mkdir frappe-helpdesk cd frappe-helpdesk # Download the docker-compose file wget -O docker-compose.yml https://raw.githubusercontent.com/frappe/helpdesk/develop/docker/docker-compose.yml # Download the setup script wget -O init.sh https://raw.githubusercontent.com/frappe/helpdesk/develop/docker/init.sh **Step 2**: Run the container and daemonize it docker compose up -d **Step 3**: The site [http://helpdesk.localhost:8000/helpdesk](http://helpdesk.localhost:8000/helpdesk) should now be available. The default credentials are: - Username: Administrator - Password: admin ### Local To setup the repository locally follow the steps mentioned below: 1. Install bench and setup a `frappe-bench` directory by following the [Installation Steps](https://frappeframework.com/docs/user/en/installation) 1. Start the server by running `bench start` 1. In a separate terminal window, create a new site by running `bench new-site helpdesk.test` 1. Map your site to localhost with the command `bench --site helpdesk.test add-to-hosts` 1. Get the Helpdesk app. Run `bench get-app https://github.com/frappe/helpdesk` 1. Run `bench --site helpdesk.test install-app helpdesk`. 1. Run `bench build --app helpdesk` 1. Now open the URL `http://helpdesk.test:8000/helpdesk` in your browser, you should see the app running **For Frontend Development** 1. Open a new terminal session and cd into `frappe-bench/apps/helpdesk/desk`, and run the following commands: ``` yarn install yarn dev or yarn dev --host helpdesk.test ``` 1. Now, you can access the site on vite dev server at `http://helpdesk.test:8080` **Note:** You'll find all the code related to Helpdesk's frontend inside `frappe-bench/apps/helpdesk/desk` ## Compatibility matrix | Helpdesk Branch | Compatible Frappe Framework Version | |-----------------|-------------------------------------| | main | version-15 | | develop | develop branch | ## Learn and connect - [Telegram Public Group](https://t.me/frappedesk) - [Discuss Forum](https://discuss.frappe.io/c/frappehelpdesk/69) - [Documentation](https://docs.frappe.io/helpdesk) ## Contributing 1. [Issue Guidelines](https://github.com/frappe/erpnext/wiki/Issue-Guidelines) 1. [Report Security Vulnerabilities](https://frappe.io/security) 1. [Pull Request Requirements](https://github.com/frappe/erpnext/wiki/Contribution-Guidelines) 2. [Translations](https://crowdin.com/project/frappe) <br> <br> <div align="center"> <a href="https://frappe.io" target="_blank"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://frappe.io/files/Frappe-white.png"> <img src="https://frappe.io/files/Frappe-black.png" alt="Frappe Technologies" height="28"/> </picture> </a> </div> ", Assign "at most 3 tags" to the expected json: {"id":"12764","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"