Giter Club home page Giter Club logo

handesk's Introduction

Handesk

Description

Handesk has been created by our need (At Revo Systems www.revo.works) to have a powerful yet simple Ticketing system, we needed a system that allowed us to have multiple teams, with multiple users, easy and efficient reporting by all/team/user as well as lead management.

Landing page: http://handesk.io

Check out the screenshots to see how nice it looks, and feel free to contribute by sending us PRs. We will keep adding features as we need them, but our basic workflow is totally covered :D

Features

  • Email polling (new tickets and tickets updates)
  • Email attachments as ticket attachments (using laravel storage driver)
  • API for creating/updating/fetching tickets/leads so you can display them into your main app
  • Instant email/slack notifications when tickets are created/updated
  • Everything is unlimited
  • Lead management (With its API as well)
  • Auto lead subscription to mailChimp based on its tags
  • Tickets reporting
  • Tickets internal notes
  • Tickets can be escalated, so assistants can comment on them to help the teams
  • Can merge tickets
  • Mention agents with @name so they get notified
  • Lead tasks, that can have a due date, and sending daily tasks email
  • Create issues to your code repository directly from the ticket
  • Updating the ticket automatically when an issue is marked as resolved
  • UI multi language support (default en, alternative ca, de, fr, es)
  • Roadmap module, you can create ideas that come from your customers or your own, give them deadlines and integrate them with your repository manager, you can even create ideas from support tickets so you never lose track.
  • You can also create ideas by sending an email to you support accounts starting with Idea: it will create an idea instead of a ticket
  • Ticket rating, when a ticket is solved a rating email is sent to the customer (check config/handesk.php to disable it)

Follow us on twitter @codepassionapp to stay tuned

Installation

Its very simple, you just need to follow the standard Laravel installation

git clone https://github.com/BadChoice/handesk.git
cd handesk
composer install
# Setup your .env file to match your desired database
php artisan key:generate

# Purge the cache before running migrations
php artisan config:cache
php artisan config:clear

# Run migrations and seed
php artisan migrate --seed
php artisan storage:link #if you use the local driver

Alternatively, you can use the following docker setup

The default admin user is [email protected] / admin If you want email pulling, you need to enable the imap extension on php (note that on mac the php-cli runs very slow, you need to update your /etc/hosts file

::1         localhost YourMac.local
127.0.0.1   localhost YourMac.local

Open your app/Console/Kernel.php to update the schedulers as you want (comment them if not needed) Add the cron job * * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

Further configuration

Email pulling

Enter your mail credentials in .env

MAIL_FETCH_HOST=pop3.handesk.com
MAIL_FETCH_PORT=110
[email protected]
MAIL_FETCH_PASSWORD=secret-password

Sidebar

You can toggle the visibility of leads and ideas in the config/handesk.php file.

'leads'    => env('HANDESK_LEADS_ENABLED', true),
'roadmap'  => env('HANDESK_ROADMAP_ENABLED', true),

Mailchimp

Set your mailchimp key in .env MAILCHIMP_API_KEY=448027f3acac5594605be3adf78be862-us15

And enter the relation of tags => list id in config/services.php mailchimp section

Bitbucket

You can create issues directly to your code repository from tickets. You need to setup your credentials in the .env

BITBUCKET_USER=bitbucket-user-if-using-basic-auth
BITBUCKET_PASSWORD=bitbucket-password-if-using-basic-auth

And enter your repositories list in config/issues.php file, filling the repositories field.

You can event update the tickets automatically (adding a private note using bitbucket webhooks). You just need to go to your report webhooks settings and add a new webhook with the url

http://{handesk.io}/webhook/bitbucket

You just need to check the issues updated option

Api Token

Set your desired API token in the .env

API_TOKEN=the-api-token

We have the following SDK's to easily interact with Handesk api There is the badchoice/handesk-php package in packagist to easily talk with the api. Handesk-php Handesk-ios In progress

Screenshots

Tickets screenshot Ticket screenshot Leads screenshot Lead screenshot Invitation screenshot Email screenshot

Community

We have a slack channel at https://handesk.slack.com/ And you can join with the following invitation

Join in with the following link

Join handesk slack

Or you can follow me on twitter too @codepassionapp

Even at instragram codepasssion.io

Development

We try to follow a TDD approach as well as some mixed functional CSS for the frontend.

PRs are welcome!

License

Handesk is open-sourced software licensed under the MIT license.

Special thanks to Jetbrains for their support to open source projects!

handesk's People

Contributors

badchoice avatar bangash-92 avatar berkaygure avatar boyaq avatar cretection avatar deleugpn avatar dependabot-support avatar dependabot[bot] avatar douglasokolaa avatar edwade3 avatar fuhrmann avatar giacomo92 avatar grahamcampbell avatar kikoseijo avatar kodjunkie avatar limker avatar lucidlemon avatar marco-aa avatar mte90 avatar paubenetprat avatar paurevo avatar rmariuzzo avatar robindirksen1 avatar rpaggi avatar scelpi avatar shanerich5 avatar shashankrp avatar spekulatius avatar tuck183 avatar vmitchell85 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

handesk's Issues

Support for attachments / pictures

Dear Team,

do you have support for attachments / pictures ? I tried to find it in the migrations but i couldn't find it ;)

Thanks
MarcO

Feature: hide login email adress in reply emails to customer or set a default value

If a customer reciews a email he will get [email protected] and a reply to [email protected] but in this way the suppername email-adress will spread around in the world ;)

Why not use "Supporter name [email protected]" in From and [email protected] in Reply-To field ?

So we have a central account for the world and the support users can login with there emailadresses.

Maybe we can set this a optional flag ?

What do you think ?

#searcher is undefined

I am getting an error on initial install of the following:

TypeError: $("#searcher").searcher is not a function. (In '$("#searcher").searcher('tickets/search/')', '$("#searcher").searcher' is undefined)

tickets:193
<script> $("#searcher").searcher('tickets/search/'); </script>

Feature: Multi language for mail templates

Dear all :)

the UI now supports multi languages :) It would be nice to answer in the language the users is writing so the system is multi national.

2 Ideas

a) Email is coming into the system and if the ticked is assigned we can set the language
or
b) the team member can answer and set it own language he will answer with - so we can answer a customer in diffrent languages/templates

What do you think ?

Leads tasks

Be able to add tasks to leads (with timestamps)

file attachment problems

Hi again,

I think there are a few problems when you attach a file on an issue.

The first one: after uploading the file you are redirected into public/tickets?all=true section and you can lost in which ticket you where working on.

The other problem: the attached file which we can see on the comments doesn't link properly, I think we need to control with mod_rewrite in the .htaccess file but I'm not sure.

Cheers!

Mobile design

  • Fix right header
  • Fix margin on top buttons (create)
  • Hide create issue / escalate buttons
  • Fix leads.index last column
  • Fix leads.show form sizes
  • Fix leads.show task button position
  • Fix teams.index
  • Fix settings screen
  • Fix agents.index

Mail fetcher is not deleting the messages once they've been downloaded

Our setup
Handesk fetches from helpdesk@domain

We have support@domain which forwards mail to helpdesk@domain.

When Handesk fetches from helpdesk@domain and sees a forwarded email from support@domain, it does not delete it.

Non-forwarded messages (so an email sent straight to helpdesk@domain), are deleted.

Could this be an email headers issue?

License?

Can you please provide a license for use of Handesk? Or have I missed it?

Question about pull requests

Hello :)

i'm using my fork to work on (local pc to my github forke) of your project.
Every thing fine about this.
If i make changes i push them into my forke and than i make a PR at your side - fine too ;)

Problem now is how to update my fork with you latest changes ?
I use this https://stackoverflow.com/questions/3903817/pull-new-updates-from-original-github-repository-into-forked-github-repository/30343766#30343766

But sometimes my forked git does not show "switching the base".

Some idea what i'm doing wrong ? Thx !

p.s. i tried check this too https://www.sitepoint.com/quick-tip-sync-your-fork-with-the-original-without-the-cli/
at the moment my master does not contain app/Language.php for example

Test Coverage and Code Complexity: TODO

Easy

  • Cover Authentication Process
  • Refactor and Cover SettingsController
  • Refactor TicketsController
  • Cover UsersController

Medium

  • Cover Attachment Model
  • Cover DailyTasksMail

Hard

  • Reduce complexity of KpiRepository;
  • Reduce complexity of next top 5 complex classes (after KpiRepository);
  • Clean up uncovered and unused classes / files / methods
  • Test coverage for the top 5 complex classes
  • Refactor Ticket Model

Stats

Project Risk


Test Coverage

Integrity constraint violation: 1048 Column 'body' cannot be null

Possible Bug - maybe i can fix it the next days but today im running low in time ;)

Steps to reproduce:

  • Write a Email to support from extern
  • Cron Job will pull Email
  • Cron Job will fail s. Stack-Trace

Possible Solution:
App\Jobs\CreateTicketsFromNewEmails while process uses $message-text but
with php-imap library it will be ->textPlain or ->textHtml s. Mailbox.php in vendor folder

 if($partStructure->type == 0 && $data) {
                                if(strtolower($partStructure->subtype) == 'plain') {
                                        $mail->textPlain .= $data;
                                }
                                else {
                                        $mail->textHtml .= $data;
                                }
                        }
                        elseif($partStructure->type == 2 && $data) {
                                $mail->textPlain .= trim($data);
                        }

Stack-Trace:

Next Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'body' cannot be null (SQL: insert into `tickets` (`title`, `body$
Stack trace:
#0 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(607): Illuminate\Database\Connection->runQueryCallback('insert into $
#1 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(450): Illuminate\Database\Connection->run('insert into `ti...', Arra$
#2 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Connection.php(404): Illuminate\Database\Connection->statement('insert into `ti...'$
#3 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php(32): Illuminate\Database\Connection->insert('insert $
#4 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2133): Illuminate\Database\Query\Processors\Processor->processIns$
#5 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1251): Illuminate\Database\Query\Builder->insertGetId(Array, '$
#6 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(688): Illuminate\Database\Eloquent\Builder->__call('insertGetId'$
#7 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(653): Illuminate\Database\Eloquent\Model->insertAndSetId(Object($
#8 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(522): Illuminate\Database\Eloquent\Model->performInsert(Object(I$
#9 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php(284): Illuminate\Database\Eloquent\Model->save()
#10 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Support/helpers.php(950): Illuminate\Database\Eloquent\Relations\HasOneOrMany->Illuminate\D$
#11 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php(285): tap(Object(App\Ticket), Object(Closure))
#12 /home/forge/handesk.vikinks.com/app/Ticket.php(33): Illuminate\Database\Eloquent\Relations\HasOneOrMany->create(Array)
#13 /home/forge/handesk.vikinks.com/app/Jobs/CreateTicketsFromNewEmails.php(34): App\Ticket::createAndNotify(Object(App\Requester), 'New ticket: #1:...', NULL, Array)
#14 /home/forge/handesk.vikinks.com/app/Jobs/CreateTicketsFromNewEmails.php(26): App\Jobs\CreateTicketsFromNewEmails->processMessage(Object(PhpImap\IncomingMail))
#15 /home/forge/handesk.vikinks.com/vendor/laravel/framework/src/Illuminate/Support/Collection.php(287): App\Jobs\CreateTicketsFromNewEmails->App\Jobs\{closure}(Object$
#16 /home/forge/handesk.vikinks.com/app/Jobs/CreateTicketsFromNewEmails.php(28): Illuminate\Support\Collection->each(Object(Closure))
#17 [internal function]: App\Jobs\CreateTicketsFromNewEmails->handle(Object(App\Services\Pop3\Mailbox))

Enable self signed certificates in smtp out / swiftmailer

Dear @BadChoice ,

i made a fork to add support to laravel swiftmailer to use smtp out on a self signed certificate (have done this for a other project too).

Into to .env i'll add

MAIL_SSLOPTIONS_ALLOW_SELF_SIGNED=true
MAIL_SSLOPTIONS_VERIFY_PEER=true
MAIL_SSLOPTIONS_VERIFY_PEER_NAME=false

Into config/mail.php i'll add (with default secure settings)

'stream' => [
        'ssl' => [
            'allow_self_signed' => env('MAIL_SSLOPTIONS_ALLOW_SELF_SIGNED', false),
            'verify_peer' => env('MAIL_SSLOPTIONS_VERIFY_PEER', true),
            'verify_peer_name' => env('MAIL_SSLOPTIONS_VERIFY_PEER_NAME', true),
        ],
    ], 

So swiftmailer will use this features for open-ssl-socket-connections.
I found this solution on a laravel forum ;)

For my PR should i work an dev or master ? Should i take care about a special workflow ?

Integrity constraint violation: 1048 Column 'name' cannot be null

Today the polling of emails stopped working.

I checked the log files and found a DB Exception i guess the Email from the customer is correct but it did not contain a Name.

Next Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: insert into requesters (email, na
me, updated_at, created_at) values ([email protected], , 2017-09-19 07:51:02, 2017-09-19 07:51:02)) in /home/forge/....../vendor/laravel/framework/src/ Illuminate/Database/Connection.php:647

Installation error

Hi.

Ive just installed handesk onto my server. when navigating to the site i get the below. not sure what the issue could be.

image

delete agents

Hi,

Is there any visual way via UI to delete agent users? Or I need to remove via database?

Thanks!

PSR-2

Image

Believe it or not, I'm all #teamBracesInSameLine (second type). Unfortunately that's not the path that PSR-2 chose.

After working with some open sources projects (and Laravel source code itself), I learned to deal with it. PSR-2 does make code more readable from a world-wide perspective. If you get used to reading PSR-2 formatted code, you can read anybody's PSR-2 formatted code in the world.

Anyway, the point of this topic is to say I hope you guys don't mind my PRs with PSR-2 code-style. PHPStorm will automatically format code for me that way.

Branch strategy

Should contributors use dev branch for pull requests and master branch be protected for releases only?

enhancment: default tempalte for issues

Inspired by the rocket.chat team - the use a tempalte if somebody is filling out an isssue -
makes it easyer for the dev's to reproduce - maybe usefull for handesk too ???
Every time you open an issues in the write-tab you will see the text from the bottom

# # # # # #

Description:

Server Setup Information:

  • Version of handesk:
  • Operating System:

Steps to Reproduce:

Expected behavior:

Actual behavior:

Relevant logs:

Scrollbars appearing

Good afternoon,

after installing on a clean ubuntu server with php7+apache2 we encounter that the design is a bit akward showing the scrollbars everywhere.

I've tested in all browsers, same result.

handesk-github

Anyone can help? Many thanks

Add rating for tickets

When sending the "solved" email, it could add a new line with

Rate this ticket: 1 2 3 4 5

so the customer can rate the support received (showing new page where they can vote and say why)

Updating handesk

Thanks for your efforts on this - pretty much exactly what I was looking for!

I'm wondering how I would go about keeping handesk up to date once installed? If I make any changes to views etc., will they not be lost/create merge issues if I pull via git?

Not sure how difficult it would be to make this a composer package, which would simplify the process? Or some other route.

Run Handesk with existing Laravel project

It is possible to run the Handesk with a existing Laravel project? As if it was a common package.

I'm asking this because the installation process aims a clean installation.

Suggestion for People Installing with PHP 7.2

If you install or use Handesk in PHP 7.2, you need to do composer update to resolve the count() error in Laravel Blade Template.
This is due to backward incompatibility with count() function that Laravel Blade Template uses.
I propose adding composer update to install instruction.
Hope this helps those who confused when Handesk installed in PHP 7.2 and show count() exception error after login.

More of PHP 7.2 backward incompatibilities: http://php.net/manual/en/migration72.incompatible.php

Can't login with the default credential

Hi,

I set up all steps, but I can't login using default login and password generated in the user factory.

I'm using the dev branch and tested the v1.3.3. And password reset link don't work.

Handesk behind haproxy and SSL

Hi,

I'm trying to make it work behind haproxy, it works if I don't try to make anything strange with the SSL, but when I try to configure the SSL I get mixed content error:

I try to change the assets to secure_asset but nothing, it takes my http url for the css all the time even in my .env I have https:// for the APP_URL parameter.

Maybe someone already look around something similar.
Cheers

create issue button

If we don't use bitbucket we should remove the button.

I change the issue.blade.php with the following line at the beginning
@if(strcmp(config('issues.credentials.key'),'the-bitbucket-key-if-using-oauth') !== 0)

and ending with an other
@endif

I know that the condition is not really good but when I made the first copy of the .env.example is the string you had inside for credentials.key

Should be better to use a switch inside the .env and issue config file to check if we have any issue addon activated.

As I know that I'm not going to use it for now, I'll let it like that.

I'm not making any PR because It's now an optimal solution but at least my agents are not getting errors when they press the button ;)

Thanks for all!

Portuguese Language Support

Hi!

I'm interested on this project, and I'm thinking to contribute adding the Brazilian Portuguese language.

Soon I'll send my PR.

Best regards!

UPDATE:
Translate status: ⚫⚫⚫⚫⚫⚫⚫⚫⚫⚫⚫⚫ 100%

invitation request?

it should be public ticket system however.... to post a ticket one should be registered and.... while registering there seems to be an invitation coupon?? am little wondered! who invited clients for ticket submission?

reply to solved tickets can get lost

To-Reproduce:
Customer sends email
Will get notification about ticket created - fine :)
Supporter is writing answer and mark ticket as solved.

Customer don't think so and will reply

Supporter will not se the reply because it's listed under solved ... this will be a little show stopper ;)
Support will not react ...

Version:
current master

Possible solution:
if ticket is in solved list and customer replys ticket will get back to pending state

Maybe related to issue #22

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.