An Android app for Frappe Helpdesk. Read your tickets and see how the queue is doing, from your phone.
Replying, commenting, and changing status or priority need an agent to write as, which the app sets up when you pick one in Settings. Until then it stays read only. See Acting as an agent.
Dashboard, analytics, agent ranking, and settings. Other people's names are masked in these shots; the app shows them as they are.
A Frappe Helpdesk site, and a way to authenticate against it: either an OAuth Client record on the site, or an API key and secret from a user on it.
The account has to be a System User either way. Helpdesk blocks most API paths for website users, so an agent account with a plain portal login will fail at sign in with "Access not allowed for this URL". You can check the user type on the User record in desk.
Download the APK from the latest release and open it on your phone. Android will ask you to allow installs from your browser or file manager the first time.
Sideloaded apps do not update themselves. Two options:
- Obtainium: add this repo's URL once and it will tell you when a new release is out.
- The app also checks the releases page on launch and shows a banner when a newer version exists. Tapping it opens the release page; you still install by hand.
Every release is signed with the same key, so a new version installs over the old one and keeps your data.
Two ways in. Either stores its credentials in encrypted preferences on the device, and neither is sent anywhere except your site.
Enter your site URL and tap Sign in. The authorize page opens in a browser tab and hands you back to the app, so the app never sees your password. The exchange uses PKCE, so there is no client secret to keep on the device.
This needs an OAuth Client on the site, once. If the site runs
helpdesk_push, a System Manager can
create it by calling helpdesk_push.api.create_oauth_client, and the app then
reads the client ID from the site on its own.
Otherwise create it by hand: search "OAuth Client" in desk and add one with app name
Helpdesk Mobile, scopes all openid, redirect URI helpdesk://oauth/callback,
grant type Authorization Code, response type Code, and token endpoint auth method
None. The client ID is the document name, and the app asks for it on the login
screen when the site does not publish one.
Access tokens expire after an hour; the app refreshes them in the background, so you stay signed in. Signing out revokes the token on the site.
Tap "Use an API key instead", then enter your site URL, API key, and API secret.
To generate the key and secret, open your User record in desk, then API Access, then Generate Keys. The secret is shown once, so copy it before closing the dialog.
Reads always run as the account you signed in with. Writes, meaning replies, comments, status and priority changes, are attributed to the agent you pick in Settings.
Picking yourself works right away, using the session you signed in with.
Picking someone else needs an API key for them, and Frappe only issues one by replacing that agent's current secret. So the app asks first. Choose "Issue key" if you are sure nothing else uses that agent's key, or "Read only" to browse their tickets and get their notifications without touching it. Minting a key needs the System Manager role.
Push notifications come from helpdesk_push, a small Frappe app that watches tickets and sends through Firebase. Without it the app still works; you just refresh by hand.
- Copy
local.properties.sampletolocal.propertiesand setsdk.dir. - Create a Firebase project, add an Android app for your package name, and put
the downloaded
google-services.jsoninapp/. The file is untracked;app/google-services.json.sampleshows the shape. ./gradlew assembleDebug.
For a signed release build, fill in the release.* keys in local.properties
and run ./gradlew assembleRelease. Tagging a commit v1.2.3 builds and
publishes the APK through GitHub Actions, and the version number comes from the
tag.
Nothing secret is committed. Credentials are entered at sign in, and the signing key and Firebase config stay out of the repo.
MIT. See LICENSE.



