В настоящее время я делаю несколько запросов POST к этому API, на которые есть ссылка: https://youdontneedacrm.com/api#assign-a-lead
У меня есть запрос POST, который создает столько циклов, сколько я хочу, в цикле for, и он прекрасно работает, но сейчас я пытаюсь сделать POST-запросы, чтобы назначить эти созданные приводит к определенному торговому представителю, и он делает только один запрос вместо нескольких. Я не думаю, что API имеет ограничение на количество лидов, которые вы можете назначить одновременно, и POST-запросы довольно похожи друг на друга только с разными параметрами, поэтому я не совсем уверен, что будет причиной такого поведения.
Вот запросы в моем файле server.js
app.get('/assign*', (request, response) => {
var baseurl = 'https://OURACC.nocrm.io/api/v2/'
var apikey = 'APIKEY'
var lead_id = "";
var user_id = "";
var pathname = request.url; // retrieves the requested pathname (ie, /crm/path)
pathname = pathname.split('?');
pathname = pathname[0].split('/')
var parameters = request.query.params;
var path = pathname[2]; // gets request path for the crm
//console.log(request);
lead_id = parameters.lead_id
user_id = parameters.user_id
var params = {
user_id: user_id
}
if(path === 'leads'){
console.log("Inside Assigning Unassigned Leads");
axios.post(baseurl + path + '/' + lead_id + '/assign',
params
,{
headers: {'X-API-KEY': apikey, content_type: "json", accept: "application/json"}
}).then(function(res){
console.log("Lead Assigned");
}).catch(function(error){
console.log("Error: " + error);
})
}
})
app.get('/create*', (request, response) => {
var baseurl = 'https://OURACC.nocrm.io/api/v2/'
var apikey = 'APIKEY'
var title = "";
var description = "";
var tags = [];
var pathname = request.url; // retrieves the requested pathname (ie, /crm/path)
pathname = pathname.split('?');
pathname = pathname[0].split('/')
var parameters = request.query.params;
var path = pathname[2]; // gets request path for the crm
title = parameters.title
description = parameters.description
tags = parameters.tags
var params = {
title: title,
description: description,
tags: tags
}
if(path === 'leads'){
console.log("Inside Lead Creation");
axios.post(baseurl + path,
params
,{
headers: {'X-API-KEY': apikey, content_type: "json", accept: "application/json"}
}).then(function(res){
console.log("Lead Created");
}).catch(function(error){
console.log("Error: " + error);
})
}
})
Вот мой код на стороне клиента
import React from 'react';
import $ from 'jquery';
export default class ProspectAssignment extends React.Component {
constructor(props) {
super(props);
this.state = {
SpreadsheetID: "",
ProspectList: [],
Prospects: [],
Tags: [],
Fields: this.props.fields,
Users: this.props.users,
SelectedUser: this.props.users[0].name,
Unassigned: [],
Assigned: [],
};
}
componentDidMount(){
//console.log("IN PRE");
}
componentWillMount(){
// this.GetListOfUsers();
}
RenderUsersList(){
var list = this.state.Users;
list = JSON.stringify(list);
list = JSON.parse(list);
var options = [];
for(var i = 0; i < list.length; i++){
options.push(
<option key={list[i].id} value={list[i].name}>{list[i].name}</option>
)
}
return options
}
GetProspectList(){
var id = this.state.SpreadsheetID;
$.get('/crm/spreadsheets/' + id).then(response => {
console.log(response);
this.SetProspectList(response);
}).catch(error => {
console.log("Error: " + error);
})
}
SetProspectList(response){
var list = response.spreadsheet_rows;
var tags = response.tags;
var contentList = list[0].content;
var prospects = [];
for(var i = 0; i < list.length; i++){
var prospect = {
leadName: "",
businessName: "",
custNumber: "",
corpName: "",
corpContName: "",
corpPhone: "",
corpEmail: "",
custFirst: "",
custLast: "",
street: "",
city: "",
state: "",
zip: "",
phone: "",
category: "",
tags: [],
}
var keys = Object.keys(prospect);
for(var j = 0; j < contentList.length; j++){
var key = keys[j];
prospect[key] = list[i].content[j];
}
prospect.tags = tags;
prospects.push(prospect);
}
//console.log(prospects);
this.setState({Prospects: prospects});
}
ChangeHandler(e){
this.setState({SpreadsheetID: e.target.value});
}
SelectHandler(e){
console.log("Selected User: " + e.target.value);
this.setState({SelectedUser: e.target.value});
}
CreateLeads(){
var prospects = this.state.Prospects;
var description = "";
var title = "";
var tags = [];
for(var i = 0; i < prospects.length; i++){
tags = prospects[i].tags;
title = prospects[i].leadName;
description = "Business Name: " + prospects[i].businessName + "\n" +
"Customer Number: " + prospects[i].custNumber + "\n" +
"Corporate Name: " + prospects[i].corpName + "\n" +
"Corporate Contact Name: " + prospects[i].corpContName + "\n" +
"Corporate Phone: " + prospects[i].corpPhone + "\n" +
"Corporate Email: " + prospects[i].corpEmail + "\n" +
"Customer First Name: " + prospects[i].custFirst + "\n" +
"Customer Last Name: " + prospects[i].custLast + "\n" +
"Street: " + prospects[i].street + "\n" +
"City: " + prospects[i].city + "\n" +
"State: " + prospects[i].state + "\n" +
"Zip: " + prospects[i].zip + "\n" +
"Phone 1: " + prospects[i].phone + "\n" +
"Category: " + prospects[i].category;
var data = {
title: title,
description: description,
tags: tags,
}
console.log(data);
$.get('/create/leads', {params: data}).then(response => {
console.log(response);
}).catch(error => {
console.log("Error: " + error);
})
}
}
SetLeadsToStandby(response){
var createdLeads = response;
// TODO: After Leads are assigned to rep, loop through this.state.Assigned and change todo to standby
for(var i = 0; i < createdLeads.length; i++){
if(createdLeads[i].created_from == 'api' && createdLeads[i].status == 'todo'){
}
}
}
GetUnassignedLeads(){
$.get('/crm/leads/unassigned').then(response => { // get unassigned leads
//console.log(response);
this.setState({ Unassigned: response });
//this.AssignLeadToRep(response);
}).catch(error => {
console.log("Error: " + error);
})
}
AssignLeadsToRep(){
var users = this.state.Users;
var userSelected = this.state.SelectedUser;
var unassignedLeads = this.state.Unassigned;
var user_id = "";
var leadsToAssign = [];
for(var j = 0; j < users.length; j++){
if(userSelected === users[j].name){ // find user and retrieve their id
user_id = users[j].id;
}
}
for (var i = 0; i < unassignedLeads.length; i++){
if(unassignedLeads[i].created_from == 'api' && unassignedLeads[i].status == 'todo'){
leadsToAssign.push(unassignedLeads[i].id);
}
}
for(var k = 0; k < leadsToAssign.length; k++){
var data = {
user_id: user_id,
lead_id: leadsToAssign[k]
}
$.get('/assign/leads', {params: data}).then(response => {
console.log(response);
}).catch(error => {
console.log(error);
})
}
//this.setState({ Assigned: leadsToAssign });
}
render() {
var divToRender = (
<div>
<input type="text" id="SpreadsheetId" onChange={this.ChangeHandler.bind(this)}></input>
<button onClick={this.GetProspectList.bind(this)}>Get Prospecting List</button>
<button onClick={this.CreateLeads.bind(this)}>Create Leads</button>
<button onClick={this.GetUnassignedLeads.bind(this)}>Get Unassigned Leads</button>
<select onChange={this.SelectHandler.bind(this)} value={this.state.SelectedUser}>
{this.RenderUsersList()}
</select>
<button onClick={this.AssignLeadsToRep.bind(this)}>Assign Leads</button>
</div>
);
return divToRender;
}
}
Запрос, который отлично работает, находится в моем CreateLeads() метод. Тот, который не работает правильно, находится в моем методе AssignLeadsToRep (). Я получаю ответ 200 после первого запроса, но после этого он выглядит так, как будто зависает при первом запросе. Спасибо за любую помощь или предложения, спасибо.
[РЕДАКТИРОВАТЬ] Поэтому я заметил, что если я сделаю запрос AssignLeads и подожду около 2 минут, то все они начнут проходить. Когда я захожу на вкладку «Сеть» и смотрю на запросы, я замечаю, что в разделе «Время» написано, что он остановлен во всех запросах. Я также заметил, что в заголовках запросов написано Connection: Keep Alive, не уверен, что это как-то связано с этим, но нашел это интересным.