02-19-2015 10:23 AM
I have a gadget where I need to set the agent to NOT_READY.
Here is a code snippet:
var currentState = user.getState();
if ( currentState == "READY" ) {
console.log("Setting state to NOT_READY");
user.setState(states.NOT_READY,'10',{
success: success,
error: makeStateError
});
}
};
I always get the same error:
Object { status: 400, content: "<ApiErrors>
<ApiError>
<ErrorType>Parameter Missing</ErrorType>
<ErrorData>finesse.api.reasoncode.require_reasoncode</ErrorData>
<ErrorMessage>The state change requires a valid reason code.</ErrorMessage>
</ApiError>
</ApiErrors>", object: Object }
I know I need to send the reason code id. But it still gives me this error.
I used this to get the valid reason code ids.
http://10.89.194.14/finesse/api/User/50005/ReasonCodes?category=NOT_READY
Here is part of the return:
<ReasonCodes category="NOT_READY"><ReasonCode><uri>/finesse/api/ReasonCode/5</uri><category>NOT_READY</category><code>10</code><label>End of Shift</label><forAll>true</forAll></ReasonCode>
As you can see I get a reason code id of 10 back. So I use 10 for the reason code id when I try to change the agent state but I always get the error. Any help would be appreciated.
02-19-2015 10:38 AM
The reasoncode ID should be used, not the reasoncode. Let me know if this works for you.
02-19-2015 10:43 AM
Thanks for the answer Edwin. But I was saying I have been using the reasoncode ID and it is not working. Please see the details in my original post. I am using 10 but I still get the error.
This does not resolve my issue.
Please advise.
02-19-2015 10:46 AM
Let me look into this further. You should have a reply by tomorrow.
02-19-2015 03:56 PM
This is a bit confusing. The ReasonCodeID should be used. The returned URL of <code>10</code> is the ReasonCode, and not what you are looking for.
You need is the value of 5 (in your example), that is the real ReasonCodeID...
<ReasonCode><uri>/finesse/api/ReasonCode/5"><ReasonCode><uri>/finesse/api/ReasonCode/5
02-20-2015 09:30 AM
OK, that makes sense. Now I know the correct value to use, but it still gives me the same error. However, I am able to use the Finesse web service using Ajax, I can do a PUT and then it works. That is a work around though, and I have to pass in the user name and password. I would rather get it to work using the user object.
03-06-2015 12:37 AM
Hi
Try this:
var currentState = user.getState();
if ( currentState == "READY" ) {
console.log("Setting state to NOT_READY");
rc = { id: '10' };
user.setState(states.NOT_READY,rc,{
success: success,
error: makeStateError
});
}
};
Reason code must be sent as a dictionary (i believe that's what this is called) where the reason code is set as a key named id.
This has been a major headace for me for a few months now, finally figured this out yesterday
Finnur
04-23-2018 06:55 AM
Hi,
I have scenario where system shouldn't allow user/agent to change state to READY.If user tries to change READY system should automatically put them to NOT_READY so when i am trying with below code system is giving alert but its allowing agent to go to READY:(. Do you know why?Any help is really appreciated.
if ( currentState == "READY" )
{
alert("Inside currentState Condition!!" + currentState);
console.log("Setting state to NOT_READY");
rc = { id: '10' };
user.setState(states.NOT_READY,rc,{
success: success,
error: makeStateError
});
};
04-23-2018 10:20 AM
Hi,
Where do you have this code?
If the agent is making the change to READY using the actual agent state change from the desktop, you cannot stop that request in a custom gadget. You need to allow it to go READY and then switch it back to NOT_READY via the custom gadget.
So, when you say "its allowing agent to go READY", do you mean that it is not setting the agent back to NOT_READY? Take a look at the webservices logs to see if there is an error being sent.
Thanx,
Denise
04-23-2018 10:32 AM
Thanks.Following is my JavaScript file. Yes we are allowing agent to change status to READY, but after am checking the currentstatus and if its READY then am trying to change it back to NOT_READY.
var finesse = finesse || {};
finesse.gadget = finesse.gadget || {};
finesse.container = finesse.container || {};
clientLogs = finesse.cslogger.ClientLogger || {}; // for logging
/**
* The following comment prevents JSLint errors concerning the logFinesse function being undefined.
* logFinesse is defined in Log.js, which should also be included by gadget the includes this file.
*/
/*global logFinesse */
/** @namespace */
finesse.modules = finesse.modules || {};
finesse.modules.SampleGadget = (function ($) {
var user, states, dialogs, clientlogs, malength,
/**
* Populates the fields in the gadget with data
*/
render = function () {
var currentState = user.getState();
var malength = user.getMobileAgentDialNumber();
var dnLenght = malength.length;
// Examples of getting data from the User object (GET)
if (user.isMobileAgent() && user.getMobileAgentDialNumber().length != 11) {
alert("Hello! You have entered Invalid Dial Number.\n Please check and enter correct 11 digit number!!" + dnLenght);
if (user.isMobileAgent() && user.getMobileAgentDialNumber().length != 11 && user.getState() != "NOT_READY") {
alert("Inside Condition!!" + user.getState());
}
}
if ( currentState == "READY" )
{
alert("Inside currentState Condition!!" + currentState);
console.log("Setting state to NOT_READY");
rc = { id: '10' };
user.setState(states.NOT_READY,rc,{
success: success,
error: makeStateError
});
};
//$("#userState").text(currentState);
gadgets.window.adjustHeight();
},
/**
* Handler for the onLoad of a User object. This occurs when the User object is initially read
* from the Finesse server. Any once only initialization should be done within this function.
*/
handleUserLoad = function (userevent) {
render();
},
/**
* Handler for all User updates
*/
handleUserChange = function(userevent) {
render();
};
/** @scope finesse.modules.SampleGadget */
return {
/**
* Performs all initialization for this gadget
*/
init : function () {
var cfg = finesse.gadget.Config;
clientLogs = finesse.cslogger.ClientLogger; // declare clientLogs
gadgets.window.adjustHeight();
// Initiate the ClientServices and load the user object. ClientServices are
// initialized with a reference to the current configuration.
finesse.clientservices.ClientServices.init(cfg, false);
// Initiate the ClientLogs. The gadget id will be logged as a part of the message
clientLogs.init(gadgets.Hub, "LearningSampleGadget");
user = new finesse.restservices.User({
id: cfg.id,
onLoad : handleUserLoad,
onChange : handleUserChange
});
states = finesse.restservices.User.States;
// Initiate the ContainerServices and add a handler for when the tab is visible
// to adjust the height of this gadget in case the tab was not visible
// when the html was rendered (adjustHeight only works when tab is visible)
containerServices = finesse.containerservices.ContainerServices.init();
containerServices.addHandler(finesse.containerservices.ContainerServices.Topics.ACTIVE_TAB, function() {
clientLogs.log("Gadget is now visible"); // log to Finesse logger
// automatically adjust the height of the gadget to show the html
gadgets.window.adjustHeight();
});
containerServices.makeActiveTabReq();
}
};
}(jQuery));
04-23-2018 11:30 AM
Glancing at the code, the code snippet looks correct. I did notice that you have a success and onError handler, but I don't see it defined. Two suggestions, breakpoint it in the browser's developer's tool and make sure that the setState method is actually being executed successfully. If so, take a look at the webservices logs to see if you are getting an error back.
Thanx,
Denise
04-23-2018 12:48 PM
Thanks Denise, After defining success and onError handler its working fine now.AgentState is changing from READY to NOT_READY without any issues.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide