CVP Call Studio — циклическое выполнение через XML
-
Здравствуйте,
я пытаюсь написать приложение в Call Studio, которое принимает вывод вызова Finesse Get-Team и возвращает loginId пользователя на основе расширения и ID команды, переданных ICM.
https://developer.cisco.com/docs/finesse/team/#team
Я знаю, что могу использовать XpathUtil для проверки значения свойств, но я застрял на том, как пройти по циклу через несколько записей User, которые вложены в ответ Team/Users в результатах.
https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cust_contact/contact_center/customer_voice_portal/12-6-2/user/guide/ccvp_b_1262-user-guide-for-cisco-unified-cvp-vxml-server-and-call-studio/ccvp_b_1251-user-guide-for-cisco-unified-cvp-vxml-server-...
Я не уверен, в чем заключаются ограничения раздела «Настройки» элемента «Установить значение», где приведен пример выражения XPath в документации. На основе примера, ссылка на который приведена ниже, я смог понять, как использовать Rest Client в Call Studio для запроса данных и извлечения их из ответа с помощью XPath.
[)
Проблема заключается в том, что вывод из Get-Team API в Finesse возвращает несколько записей User в Users.
Я пришел к выводу, что мне нужно создать цикл foreach, примерно такой, как ниже importPackage
(
com
.
audium
.
server
.
cvpUtil
)
;
//REST client output
var
xml{
Data
.
Element
.
Finesse
.
response_body
}
;
//pseudo code foreach loop
foreach
(
XpathUtil
.
eval
(
xml
,
"/Team/Users"
){
//check the current User's Extension value against what ICM provided
if
(
XpathUtil
.
eval
(
xml
,
"/Team/Users/User/Extension"
)Data
.
Session
.
Extension
)
{
//write the matching user's loginId to the element's variable
XpathUtil
.
eval
(
xml
,
"/Team/Users/User/loginId"
)
;
}
}
)
; Буду рад любым отзывам, идеям или альтернативным вариантам! -
Вам не нужно использовать цикл. Выражения XPath позволяют фильтрам выбирать строку (строки) массива на основе значения дочернего тега массива. Таким образом, если вам нужен loginId для записи, где /Team/users/User[#]/extension='1001002', вы можете использовать следующее выражение XPath: var path = "/Team/users/User[extension='1001002']/loginId" В вашем случае объедините данные сеанса в путь (это сложно, потому что вы должны использовать знак + для объединения переменной данных сеанса в литеральное выражение пути:
var path = "/Team/users/User[extension='" + {Data.Session.Extension} + "']/loginId" Вероятно, вам следует использовать функцию подсчета массивов в XPath, чтобы определить, содержалось ли расширение в XML. Если нет, то присвойте локальной переменной значение типа «NA». Затем добавьте элемент Decision и проверьте, равно ли значение созданной локальной переменной строке NA. Используйте это в элементе SetValue: importPackage(com.audium.server.cvpUtil)
var xml= {Data.Element.Finesse.response_body}; var path1 = "/Team/users/User[extension='" +{Data.Session.Extension}+ "']"
var numResults = XpathUtil.eval(xml, path1) if(numResults>0){
var path2 = "/Team/users/User[extension='" +{Data.Session.Extension}+ "']/loginId"
XpathUtil.eval(xml, path2)
} else {
"NA"
}
Здравствуйте! Похоже, вам интересна эта беседа, но у вас пока нет учетной записи.
Вы устали просматривать одни и те же посты каждый раз, когда заходите на сайт? После регистрации, вам не придётся искать обсуждения в которых вы принимали участие, настройте уведомления о новых сообщениях так как вам это удобно (по электронной почте или уведомлением). У вас появится возможность сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост может стать ещё лучше 💗
Зарегистрироваться Войти