A simple crm for a team of 5 or 6 people to use for outbound telemarketting. NO inbound. The program will be geared towards telemarketing and being able to call 200 people per day per person + record some text notes per call + change a "status" field.
asterisk api tie in (on local lan)
php front end
should run from a linux machine
github (or equivelant for tracking bugs and soruce code)
English as a first language or as very very very good second language. You're going to be ignored if it appears otherwise.
The detailed specs will change and will need to be finalized before starting any programming.
These are still being finalized, and screenshots are being created. I need some assistance in finalizing the screenshots based on my specs.
objective and a few notes
A simple crm for a team of 5 or 6 people to use for outbound telemarketting. NO inbound.
Geared towards telemarketing and being able to call 200 people pe userperr day + record some text notes per call + change a "status" field. Some calls result in a new phone number. Never erase old data. just append.
I want to import in an excel list with contact info and have a screen for cold callers to bang out phone calls back to back to back all day long while entering in notes. All of the crms are too featureful and too bloated. Using salesforce now and I want to dump it. I want maybe 5 people to be working on this at any one time. They will all be working the same lists, but without bumping into the same on at the same time. Different people calling the same lead is fine, but just not at same exact moment in time. Possibly investigate weather or not you can tap into the freepbx or elastix api for controlling phone calls. That way the user can stay on the phone for 8 hours a day and not disconnect that leg of the call, but the leg from the server to the other end will be the one changing. That would be ideal. Each call has 2 legs. One from the user to the phone server and one from the phone server to the other end. Right now we can dial out manually but I think we can increase call volumes considerably if the user is forced into the next call after a certain timeout period vs letting them decide when to click to dial. Ill pay for a mockup of this so I can know its what im needing regardless of the api callability.
The idea is we might have 10000 leads across 2 or 3 people. They will each make 150-200 calls a day and record their findings on each phone call. They will slowly widdle them down to being unqualified and unworthy of another phone call. Ones which remain on the list we will want to call every month for a year like clock work until we get what we need or we determine its not worth calling them ever again.
We want to format the page to fit on 1280x1024. The three frames should be fixed heights. The lead call logs should be the only one with a scroll bar.
where and how
probably a browser based program running on a linux machine . Force certain browser, probably ie, to be used.
validate ALL input boxes for proper input. Phone numbers always contain dashes. Emails always need @. Limit most fields to a max character count.
Make it so the user can navigate the currently being added to call notes fields with the arrow keys, shift and shift tab or some other custom combo would be ok.
Lead details page
Send email button per lead, change based on campaign
. Send template email to the email next to the button
have a send email button next to all email addresses
when the button is pressed, ad d a "call log" with a type of "email sent"
mass edit function
Let me somehow pull all of the data into excel and push it back into the database after i edit some stuff. Would be useful for mass edits. Salesforce lets you do this. Excel will let you query a database and pull it all in. Just now sure how you put it back. Salesforce does it with macros.
Link to edit "between call time duration" in seconds
link to admin import leads page
Import should probably just do csv but take care of the tie between activities and leads or just let you import leads with no previous activity
We can get a csv from salesforce with the leads and a csv with the activities. I believe there is a column that ties the activities to the leads. We would want to copy into the new system, most of the leads from salesforce we are trying to work with currently.
Import in .csv file and let me define how to map the colums because I may have it in different column layouts each time I import it. Show me which column is mapping to which field. Possibly let me preview it after its normalized, prior to importing it finally.
Normalize the fields like change "Georgia" to "ga" or " ga" to "ga". Normalize the phone numbers remove any ( or ) or other characters other than numbers and dashes in the correct spots. add dashes if missing. Maybe show the admin the normalized changes before importing and let admin confirm it ok or not ok.
When I import in a lead list, make the lead status pull down for the first (not yet called though) call log default to a "default" value for purposes of filtering
Link to manage email templase page
Manage email templates. Define which email template is used on which campaigns.
edit, create, delete
Link to manage users page
edit, create, delete usrs and define some as administrators. Lock theo as permanent administrator
Link to manage campaign page
add/edit/create campaigns. A campaign will be a specific script to a specific set of leads. If we want to use multiple campaigns on the same lead, we will just import them twice and call the lead source something different. Each lead can only have one campaign or no campaign. The script will be on paper that the reps will already have. Dont need to add anything concerning the script to the program.
Define which leads are going to be owned by each user. Set a field per lead called "lead owner". Let admin change the owner of leads. Let admin assign the leads based on some criteria such as "lead source" or other search query
define which campaign each user is working on. only one at a time. When a campaign is changed for a user, probably unassign all of the leads already owned by that user, back to the "unallocated" pool
Let me decide which lead status will cause an email to be sent to xyz email address with the entire lead info and all call logs for that lead when that lead is saved
Let me decide which newest dated lead status makes that lead hidden from the cold callers list view/list (stuff like disconnected or unqualified, ie someone we do not want to call again because they are a waste of time)
Let me decide which lead sources gets shown or hidden from cold callers list view
Link to Define how many leads are shown on the page at once
Admin - add edit create users, assign permissions, assign which leads based on "lead source" or other search query should be reassigned to which rep.
Even unassign as well
Link to export page
Let the user filter by most feilds and show a grid of the results. Put radio check boxes next to the leads and have a import into salesforce button. Also have a check all button as well as a check all on this page button and an unselect all button.
export lead to salesforce b utton. I got this working elsewhere bfor only lead details, ut also want to import activities. Then probably mark the lead somehow so the data is there but the rep doesn't see the lead any more unless we want them to. That way we potentially use salesforce to maintain the account after we've started business with them. Or think of a way to completely dump salesforce. The idea is to use this program for the day to day cold calling of the leads and use salesforce later after we do business.
Link to lead/call status page
add/edit/delete lead statuses. When deleting one that was used, ask if the admin wants to leave the leads alone or if they want to be mass changed to another one.
define which campaign can use which lead statuses
call status will set on a per call basis, which will automaticly change the lead status. based on certain criteria we want to hide or remove some leads from being called again, such as being called twice and both times it was disconnected or 5 times they said they cant help us
on a per lead status basis, define the number of times it is used before the lead isnt worth calling any more every again. possibly revert it to a dead pool or some other such thing so it doesnt show up on anyones lists again, unless the admin unsets that flag or whatnot. Just because it might have moved, it still needs to show up in reports from that lead status. Maybe have a field for "dead not worth calling again" and set it to true or false, automaticly.
Search button top right corner
Advanced search feature which searches most (and lets the admin unselect some fields, but default to most) text fields and shows the results in clickable format to bring up the lead view
Show search results in the grid view on the top, and let you click on a lead to show it on the bottom lead detail view
Page view when looking at leads and not in settings
Top half of page should be the grid view, just below the status frame
Bottom half of page should be the lead info plus previous call log details
top most status frame
have this litttle frame at the top 100 pixels or so. put the ready not ready feature there. Put the timer count down until next call is dialed there. Put the current campaign for that user there. Put how many calls theyve made today since 8 am in there . Put how many call logs theyve left today. Put how many emails theyve sent today. Update this on every page refresh. The
ready not ready feature
"ready" button and a "not ready" button
the idea is to let the user hit the not ready button when they are going on break or they are not going to make another call after the current one
if they leave it on "ready", then the system pushes them into the next call automactlyl upon them hitting save after the "between call time duration" has been met.
when the user is ready bring the user to the first one that is callable at that point in time given the state. We cant call time zones behind us at 8 am. Were est. we can start calling anyone in any time zone at 8 am their time.
AUTO SAVE ALL TEXT as its entered, or every so many seconds or if they time out,
throw a message up that says what is going on on (your data is being saved, and your being timed out
if the user was "im ready" and in a call (which they should be since itll auto dial) mark the status of that particular call log as "timed out".
upon login after a timeout, bring them back to the last page from which they were on.
asterisk tie in
tie into asterisk api to get some of the following features
# of calls made today (and for reports)
total phone time for that user for that day (and for reports)
who called a phone # last
call start time
call end time
Tie into our asterisk server so it power dials outward when the page is loaded.. Let the admin pick the default value for the seconds of wait time before it auto dials. It should auto dial the newest number in all of the call logs. Possibly let the user interject and hit cancel if they read the call log and feel its not the right number to be calling. Use asterisk api. Each user gets their extension defined.
curretly using zoiper soft phone on each workstation. Its pretty simple to do a callto:// with the phone number but we want to step it up and use the asterisk api
user view page load (when im ready)
When page loads, give the user xxx seconds, to read the previous notes, and then auto dial outward to the newest phone number. Let the user decide at some point if that # needs to be changed back to the original one vs the new one?????
rep view (not ready yet, just logged in)
Rep view- default show the one with the oldest "last called" date first on the top of the list.
Rep view (when ready)
Rep view have a "ready, not ready" button at the top so the rep can hit ready when they are ready to work for a solid hour, then not ready when they go on break
While "ready". It would push them to the next deal automaticly, by closing the page they are on. Whenthe user hangs up the phone, give them 30-60 seconds to type in the call log information, and then automaticly bring up the next lead, and dial It for them.
Custom reporting. Investigate using the other reporting package you talked about. Possibly let me email myself after I save my filter and set times automaticly for emailing and who to email. Let me export out csv or xls also.
Lots of reports. Not sure if they should be premade or custom on the fly. Custom on the fly might be good because then we can change them ourselves later. Extensive Report capability of most fields compared to most fields, multiple reps at the same time. Some maybe detailed and some may be summerized and or both. Automate the emailing of reports that we created at certain date times.
some reports may fit on one page. some wont. Add pagination as well as show xx per page (default 100 rows?)
export report to xls button
email myself xls report button
Let me see how many leads were edited/call logs added (AND # of leads called if we can tap into api) filterable by user(or all) and time block (maybe weekly)
One axis would be user (or all), one axis would be timedateblock so one axis would be a 10 - 7 day ranges for example I could say [url removed, login to view] - [url removed, login to view] but then show me that 7 day block first and all previous 7 days blocks as well.
If we can get into api ( I think we can), a grid of view of time spent on phone in hours:min:second per user(or all) and time clock. Same as above let me see previous time blocks so we can compare them for various time periods all on one screen.
Let me see the all of the call log note fields filtererable by user and time block and other fields (so I can review/criquite their daily work and tell them what to do better, show me the newest call log note field set first then second third fourth etc)
Let me see a grid view of one axis lead source and one axis newestleadstatus with totals in each cell, for all plus per user (so I can see how effective each lead status is)
Let me see a grid view of one axis last modified by user(or all) and one axis newestleadstatus with totals in each cell
Grid view of one axis company/name/state/lead source/all call log notes fields and one axis user (or all) filterable by any field
Show a summary list of the number of leads from each lead source
Plus more I haven't thought of yet
Lead list above details view
Highlight the currently selected lead, and change it as the system moves you to the next lead when "im ready". when "not ready" the prev/next button should work. When "im ready" some of the functionality like prev/next should be greyed out.
Show these columns for 10 leads at a time, with a prev/next page button. These should be clickable. If everything is working ok though, there really wont be any need to go to the next or prev page because the system will be doing the work for you.
last call date ("none" if none)
last called by user
Lead details view
1 multi row multi column grid with these fields------
Lead Fields/buttons may include:
Company name (non editable)
Name (non editable)
Phone # (non editable) text field as well as a call button
city (non editable)
State (non editable)
Email (non editable)
Lead source (non editable)
Lead status (non editable, changes based on the newest call log)
Left click to email template (I got this setup already, just call an external url with the email addy as a parameter and itll send my template email)
Last called (auto fill in date and time)
---another grid with this data-----probably 4 columns with unlimited rows-- L
Lead details view lead logs grid
(show me the newest set of call log notes first, just below the lead info above). sort it by date show the oldest one last. Make them static after being saved)
type (email sent, call made, timed out)
datetimelastmodifiedbyuser (filled in automaticly when call log is saved)
call log notes field (text box say 250 character limit, maybe 2 rows tall with word wrap. no panning around)
call status pulldown
phone# (static, this is the number dialed that caused a new call log to be created)
newphone# (text field for entering a new phone number that a rep is given
email address (text field 50 char max)
2 Call buttons (one for phone # and one for new phone #)
Next Lead button (Save the current call log, bring the user to the next lead, and auto dial the next deal after timer)
Save Call log(Save will save the page without bringing them to the next lead)
Prev Lead button (grey out unless user is "not ready")
Upon login show a list view with the company name, name phone #, city, state with a filter on top
Filters may include all fields listed below. Filters which are a pull down (on the option page) instead of text field should be pull downs. There will be filter function to search for text in any of the fields
Show users the lead list that ive assigned to them. Only assign 1 rep to each lead. Two people should not be able to seethe same lead. It will be possible that there are duplicates but i think this is unavoidable but we'll do our best before we import lists.
Sort it by last called date by default.
Make them all clickable. Clickuing on a lead will display the lead details in the bottom frame
rep view delead detail page load (when in im ready mode)
Create a new blank set of call log notes fields, at the top of the lead logs grid, while still showing the old ones. Keep incrementing upward in the number of call log notes field sets
They will call the lead, and fill in the next available call log notes fields and pull down, then hit save, hang up and move onto the next one, and rinse and repeat. Or if the api works, and the second leg is hung up, give them 30 seconds to finish typing their notes, auto save, then auto move to the next lead.
We by default the next lead called will be the one with the oldest Last called date and time. That way each lead gets some equal action and they do not pick and choose which to call.
At some point they will cycle back to the ones they did a month ago
Show them the previously made calls logs, so they can use them as their guide on how to handle the call
other stuff not sure where to put it yet
when "im ready" and the system brings you to the next lead after you hit next. Throw a counter on the status frame that starts at the number set by the admin and counts towards 1. When timer hits 0, then it auto dials the newest lead phone #. Allow them to hang up the call if needed? put it in the ready not ready status frame. this will give the rep so many seconds to read the lead information
based on a certain call status, we might want to revert to auto dialing a number other than the newest added one. For example if a number is disconnected or always busy or fax or its someones home phone or they definitly cant help us get what we want
Record who last viewed a lead, who last called it (from api who called that phone # last)
if a rep gets hung up on and the other leg of the call goes dead , give them a timer before you push them to the next lead
if the rep hangs up the phone
put a hang up button on the status bar. this should disconnect the leg of the call from the phone server to the other end while leaving the rep still connected to the phone system. Then it probably should give them some number of seconds until it saves their data and pushes them to the next lead and dials for them.
i want to test and figure out what the optimal time needs to be in between leads
when leaving a call log have a button that says add follow up call
this should popup and present a calender with forward back buttons on it. the user should pick a date on it.
when that date occurs or passes (if the user wasnt there that day), move that lead to the top of their call list so its called first thing that particular day.
keep track of the # of apointments set for the deal closer. Setting the lead status to appointment* will be considered an apointment set.
send an email report daily to the deal closer with a list of all of their day's appointments set?
when sending emails, have it all come from a set email address email@example.com. Needs to login to smtp and authenticate and send it through [url removed, login to view] for best deliverability
when employees leave and are replaced, their extension number may stay the same. they would get a new login. it might be best to just make a new extension?
* * *This broadcast message was sent to all bidders on Tuesday Jul 17, 2012 6:01:11 PM:
tfurber changed the ExpertRating requirements on this project from:
Advanced PHP Test