2016-02-08 61 views
0

作为一个侧面项目,我目前正在实施一个LiveChat Report Web应用程序。基本上,它会将我们所有的LiveChat数据下载到.csv文件中进行分析等。API请求循环Node.js和LiveChat API

我的整个工作都很顺利;然而,我很难包装如何循环,虽然请求基于返回的结果页面。例如,我想要从每个聊天中获得某些信息。 LiveChat API只在每个页面上返回25个聊天记录。不幸的是,我无法每次调用每个页面,并且取决于日期范围参数,页面数量每次都有所不同。如果可能的话,我想在1 csv上获得所有这些页面。

我的要求是这样的:

function chatListReport() { 
document.getElementById('chat_list_submit').addEventListener('click', function(event) { 
var req = new XMLHttpRequest(); 
var params = {date_from:null,date_to:null, page:null}; 

params.date_from = document.getElementById('date_from').value; 
params.date_to = document.getElementById('date_to').value; 
params.page = document.getElementById('page').value; 

req.onreadystatechange = function() { //when response received 
    if (req.readyState == 4 && req.status == 200) { 
     var response = (req.responseText); 
     var final = "data:text/csv;charset=utf-8," + encodeURI(response); 
     var link = document.createElement('a'); 
     link.setAttribute('href', final); 
     link.setAttribute('download', 'ChatListSurveyReport.csv'); 
     link.click(); 

    }} 
req.open('POST', '/chat_list_report', true); //submit update via POST to server 
req.setRequestHeader('Content-Type', 'application/json'); //set request header 
req.send(JSON.stringify(params)); 
event.preventDefault(); 
}); 

我的服务器端看起来像这样(使用NPM liveChatAPI):

app.post('/chat_list_report', function(req, res){ 
var params = req.body; 
api.chats.list(params, function(data){ 
    var headers = 'Chat Date,Agent,PostChat Survey Rating,Comments'; 
    var result = (data.chats || []) 
    .filter(function(chat) {return chat.type === "chat"}) 
    .map(function(chat) { 
     var postSurvey = chat.postchat_survey || []; 

     return [ 
      chat.ended.replace(",", ""), 
      chat.agents[0].display_name, 
      (postSurvey[0] || {}).value || "", 
      (postSurvey[1] || {}).value || "", 
     ].join(','); 
    }); 

    result.unshift(headers); 

    res.send(result.join('\n')); 
    }); 
}); 

我能够返回的页面数。这包含在返回的JSON中。简而言之,是否有办法将该页码响应返回给请求,并通过请求X次循环,然后创建带有所有信息的1个csv?目前,我仅限于每个请求只有25个聊天。

谢谢!任何帮助是极大的赞赏。

回答

1

我们看到了两个可能的解决方案:

1: A.前端将请求发送到后端,然后后端返回工作,其前端必须在它的身边存储的ID,例如在localStorage中。

B.此时,后端自行完成作业,并尝试完成作业,作为一项完整任务。

C.前端每隔几秒向该后端发送一个关于该任务的请求,并给出它的ID。虽然任务尚未完成,但后端回复“正在进行”, 和前端将继续询问有关任务,直到完成为止。

D.如果前端查询任务,并且此时收到通知 该任务完成,则后端返回“完成的消息”与 进一步完成的信息。

E. GUI应该通知: o等待响应 o响应成功,链接下载文件。

--------- ---------- OR

2: A.前端发送请求到后端,后端注册任务和在 完成任务后,发送包含完成数据的电子邮件。

B.前端通知已将任务添加到'队列'中,并且只有当它完成后,才会发送一封包含任务结果的电子邮件。 C.需要在前端添加额外的输入:电子邮件和处理电子邮件的某种API e。g^E,G,:https://postmarkapp.com/

让我知道它是如何工作的,

干杯, 亚当