Добавление успешного исходящего разговора во все найденные контакты.
const SipuniAmoCrm = require('@sipuni/amocrm');
const axios = require('axios');
const CONTACT_LIMIT = 5;
module.exports = async (args) => {
const amoApi = new SipuniAmoCrm({
domain: args.settings.domain, accessToken: args.crm_auth
});
const dst_num = args.call_args.dst_num;
const line_name = args.call_args.line_name;
const operator_name = args.call_args.operator_name;
const call_record_link = args.call_args.call_record_link;
const call_started_user_id = args.context.call_started_user_id ? args.context.call_started_user_id.id :
6902296; // Если пользователь в амо не сапоставлен добавление звонка от администратора указывается конкретный id
//поиск всех контактов
const result = await amoApi.request('GET', '/contacts', {
'query': args.call_args.dst_num.slice(1),
'limit': CONTACT_LIMIT,
'with': 'leads'
});
let contacts = [];
if (result)
contacts = result._embedded.contacts;
else
return { error: "Не найден контакт" }
// создание заметки о пропущенном во все найденные контакты.
const data = contacts.map(contact => {
return {
"entity_id": contact.id,
"note_type": "call_out",//call_in
"params": {
"uniq": args.call_args.call_id,
"duration": parseInt(args.call_args.timestamp) - parseInt(args.call_args.call_answer_timestamp),
"source": "Sipuni",
"link": `${call_record_link}`,
"phone": dst_num,
"call_status": 4, //Статус звонка. Доступные варианты: 1 – оставил сообщение, 2 – перезвонить позже, 3 – нет на месте, 4 – разговор состоялся, 5 – неверный номер, 6 – Не дозвонился, 7 – номер занят. Необязательный параметр
"call_result": `${dst_num} Через номер: ${line_name}`,
},
"created_by": parseInt(call_started_user_id),
}
});
const res = await axios.post(`https://${args.settings.domain}/api/v4/contacts/notes`, data, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${args.crm_auth}`,
}
});
return {
notes: res.data._embedded.notes.map(note => { return { id: note.id, entity_id: note.entity_id } }),
operator_name,
call_started_user_id,
};
};