Сценарий в первый раз ожидает ответа без каких-либо проблем, но каждый раз после этого он просто непрерывный, даже если ответ не имеет длины> = 2.
В настоящее время я использую phantomJSскрипт, выполняющий веб-сервер javascript, который время от времени требует ввода данных пользователем.Поэтому я отправил сообщение, используя Slack API, и использую синхронный запрос XmlHttpRequest, чтобы дождаться ответа пользователя для получения запрошенного значения.(насколько я знаю, других вариантов нет из-за встроенного веб-сервера phantomJS)
ts - это временная метка, которая похожа на уникальный идентификатор
response - это ответ веб-сервера
var slackGetResponse = function(requestTs) {
var xhrResp = new XMLHttpRequest();
xhrResp.onreadystatechange = function() {
if (xhrResp.readyState == XMLHttpRequest.DONE) {
var json = JSON.parse(xhrResp.responseText).messages;
if (json.length >= 2) {
slackSendMsg("OK", true, requestTs);
slackResponse = json[1].text;
return true;
} else {
if (rTo < responseTimout) {
rTo++;
setTimeout(slackGetResponse(requestTs), 2000);
} else {
slackSendMsg('Timeout', true, '');
response.statusCode = 500;
response.setHeader('Content-Type', 'application/json');
response.write(JSON.stringify({
"status": false,
"msg": "timeout"
}));
response.close();
return true;
}
}
}
}
xhrResp.open("GET", "https://slack.com/api/conversations.replies?token=" + token + "&channel=" + channel + "&ts=" + requestTs + "&pretty=1&limit=1", false);
xhrResp.send();
}
Отправка первого сообщения:
var slackSendMsg = function(msg, async, threadTs) {
var xhrMsg = new XMLHttpRequest();
xhrMsg.onreadystatechange = function() {
if (xhrMsg.readyState == XMLHttpRequest.DONE) {
var requestTs = JSON.parse(xhrMsg.responseText).ts;
if (!async) {
return slackGetResponse(requestTs);
}
return true;
}
}
xhrMsg.open("GET", "https://slack.com/api/chat.postMessage?token=" + token + "&channel=" + channel + "&text=" + msg + "&pretty=1&thread_ts=" + threadTs, async);
xhrMsg.send();
};
Вот как я вызываю метод во время выполнения:
slackSendMsg('Password Error, please provide *Password* for _' + params.name + '_.', false, '');
credentials.password = slackResponse;