Author Message
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
I am creating a simple media listener to play some TTS and collect a digit from a party on the call. What I see in the logs is that the listener is created, I call "promptAndCollect" and receive an immediate prompt timeout in the logs. Also, no audio is heard on the call.
Can you advise what I might have wrong here?

logs:

2018-10-11 12:31:40,516 [WebContainer : 2] OfferConsent FINE - OfferConsent-1.0.0.0.1 - Attempting to create listener for Call Id -- local.1538466828113_275338!IP, Call UCID -- 00002000431539275250
2018-10-11 12:31:41,061 [WorkManager.MediaServerThreadPool : 2] OfferConsent FINE - OfferConsent-1.0.0.0.1 - Received digits for Call local.1538466828113_275338!IP, Digits = , Cause = TIMEOUT
2018-10-11 12:31:41,061 [WorkManager.MediaServerThreadPool : 2] OfferConsent FINE - OfferConsent-1.0.0.0.1 - local.1538466828113_275338!IPSomething besides 1 or 2 was pressed...


code for invoking listener:

try {
logger.fine(String.format("Attempting to create listener for Call Id -- %s, Call UCID -- %s ", call.getId(), call.getUCID()));
final MyMediaListener mediaListener = new MyMediaListener(call);
//set Listener to wait for consent Accepted
mediaListener.setConsentListener(this);

final MediaService mediaService = MediaFactory.createMediaService();

final PlayItem playItem = MediaFactory.createPlayItem()
.setSource("Please press 1 to approve your order")
.setInterruptible(false).setIterateCount(1);

final DigitOptions digitOptions = MediaFactory.createDigitOptions()
.setNumberOfDigits(1)
.setFlushBuffer(true)
.setTimeout(60000);

final Participant participant = call.getCallingParty();
mediaService.promptAndCollect(participant, playItem, digitOptions, mediaListener);

} catch (final URISyntaxException e) {
logger.error("Bad file URI ", e);
}


MediaListener:

public class MyMediaListener extends MediaListenerAbstract
{
public MyMediaListener(Call call) {
super();
this.call = call;
}

private final Logger logger = Logger.getLogger(MyCallListener.class);
private IConsentListener listener;
private Call call;

public void setConsentListener (IConsentListener listener) {
this.listener = listener;
}

@Override
public void playCompleted(final UUID requestId,
final PlayOperationCause cause)
{
logger.fine("Done playing prompt." + cause);
}

@Override
public void digitsCollected(final UUID requestId, final String digits,
final DigitCollectorOperationCause cause)
{

logger.fine(String.format("Received digits for Call %s, Digits = %s, Cause = %s", call.getId(), digits, cause.toString()));
if (digits.equalsIgnoreCase("1"))
{
logger.fine("1 was pressed");
if (listener != null) {
logger.fine("Calling Consent Accepted listener");
listener.onConsentAccepted();
}

}
else
{
logger.fine(call.getId() + "Something besides 1 or 2 was pressed...");
if (listener != null) {
listener.onConsentNotAccepted();
}
}



}
}
JoelEzell
Joined: Nov 15, 2013
Messages: 780
Offline
Let me engage somebody to help diagnose this. In the meantime, can you please do a "ce dlogv" and check to see if there are any WARN or ERROR logs when this happens?
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
I believe we are missing TTS settings on the Media servers. I am reviewing this to see if that is the issue.
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
Ok so we were missing the TTS configs, so I added those. I do not see any WARN or ERR in that log. I do see alot of SDP and SIP chatter regarding my service. I've uploaded a capture from "ce dlogw > dlogwlogs.txt" to the thread.

Also I am not sure if this matters, but I am testing by having a call in queue hearing hold music. I'm not sure if this affects this particular interaction or if it has to be a call with 2 parties connected. I can definitely hear that it is attempting to do something on the call because I can hear the hold music skip a beat when I invoke my service.

Log attached.
Filename dlogwlogs.txt [Disk] Download
RobertFavero
Joined: Mar 31, 2015
Messages: 27
Offline
Hi,

Right after the prompt and collect operation is passed to the media server, the media server generates the following event:

<?xml version="1.0" encoding="UTF-8"?>
<controlContextEventList version="1.0" loadfactor="1">
<msmlEvent sid="59d93bc9-f21c-3227-b2af-5f9ab93d4ba6" seq="1">
<msml version="1.1">
<event name="msml.dialog.exit"
id="conn:fe46b358-96cf-3322-9b79-38a3b37ffb15/dialog:787a0037-cd98-4102-9964-48a9de275da8">
<name>dialog.exit.description</name>
<value>No resource to fulfill request</value>
<name>dialog.exit.status</name>
<value>520</value>
</event>
</msml>

I believe this probably indicates that your TTS settings are still not quite correct. To confirm this, could you please try doing prompt and collect with an audio file? I believe the following wav file should be present on your AAMS:

cstore://october?ns=mmf&cg=system/default

(Just use this as your source instead of "Please press 1 to approve your order".) If this works, then I'm wondering if you have configured a TTS engine like Nuance or similar on your AAMS?

Thanks.

--Rob
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
We have a total of 16 media servers. Is there a way to force the call to one server for troubleshooting? Also do the AAMS servers need to be restarted after adding the TTS servers ? We were missing those entries previously but I added them and got same issue.
RobertFavero
Joined: Mar 31, 2015
Messages: 27
Offline
Hi,

What version of Breeze are you using? One way to force everything to one AAMS is to put all but one AAMS in locked mode. If you are using a new enough version of Breeze, there is also a way to configure locations so that the AAMS in the same location as the Breeze node will be preferred.

Here are some additional questions:

1. What engine do you have configured for TTS? Is it Nuance?
2. What happens when you try using the "cstore" announcement source that I mentioned previously?

Thanks.

--Rob
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
I made the changes and heard "October" announced on the call, so we know the functionality is at least good from cstore.

I went back and rechecked and made sure we have TTS on all media servers. We use Nuance, v2 TCP. I included a screenshot of our settings, we have 4 servers, 2 for each location our AMS are installed in. We utilize these same TTS servers on a daily basis for thousands of calls from AEP so we know the servers are good.

We use Breeze 3.4.0.0.12340003, and I'm using 3.4 SDK.
  • [Thumb - Capture.PNG]
[Disk] Download
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
Is a reboot necessary after adding TTS Settings? Also what is the proper codec setting to use for the TTS servers?
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
Media Server rebooted, no change. I do see this in the Media server log after the request--


MRCP Resource Allocation Failure MRCP Allocation Failure
Details: No resource matches requested capability [pool , capability 2, vendor , version ]
LOG
GENERAL SEARCH
POOLNAME [speechsynth-mrcp.default]
NO ACTIVE RESOURCE
NO MATCH

.
(10) (b40e01d5-b36a-375a-b01e-b914d8e22a76)



The pool is definitely active and has the servers in it. Screenshot attached.


  • [Thumb - MediaServer.PNG]
[Disk] Download
MichaelNorman
Joined: Jun 3, 2015
Messages: 448
Offline
I finally figured out that the issue is that the server was not configured for DNS, and could not resolve the server name that was configured. So I re-added them by ip address only, and I am now getting the proper audio played.
JoelEzell
Joined: Nov 15, 2013
Messages: 780
Offline
Great news! Thanks for letting us know.
RobertFavero
Joined: Mar 31, 2015
Messages: 27
Offline
Good to hear and thanks for the update.

Then, just to finish this out, the screen capture of your configuration that you provided matched what I had in my lab, so I thought probably it was OK (and of course your results confirm this).

Also, I'm pretty sure that it is not necessary to restart the media server after configuring the TTS server in the MRCP area of the AAMS.

Finally to expand more on how to force a particular AAMS to be used when doing troubleshooting, in Breeze 3.4, if you configure a location for the Breeze (in the System Manager at Routing->SIP Entities) and configure the same location for an AAMS (in the System Manager at Media Server->Server Administration), that AAMS will be chosen for use with calls on that Breeze (assuming the AAMS is in an active, non-overloaded state). With Breeze 3.5 additional, enhanced configuration is available for influencing how an AAMS is selected.
Kalmuk
Joined: Oct 27, 2018
Messages: 1
Offline
I am reviewing this to see if that is the issue. There was no answer?

Go to:   
Mobile view