Назначение задач о пропущенных звонках на ответственного в сделке amoCRM

const SipuniAmoCrm = require('@sipuni/amocrm');

const LEAD_CLOSED_STATUSES = [142 /*успешная*/, 143 /*неуспешная*/];
const TASK_TEXT = 'Пропущен звонок';
const TASK_DUE = 4*60*60; // 4 часа в секундах

// Создание задачи если сделка открыта
async function createTaskifLeadOpen(amoApi, lead_id) {
       const lead = await amoApi.leads.get(lead_id);
       if (lead && !LEAD_CLOSED_STATUSES.includes(lead.status_id)) {
                 // Поиск незакрытой задачи
                 const existingTask = await amoApi.tasks.list({
                         'filter[responsible_user_id]': lead.responsible_user_id,
                         'filter[is_completed]': 0,
                         'filter[entity_type]': 'leads',
                         'filter[entity_id]': lead_id,
                  });
                  // Если нет открытых задач, создаем новую
                  if (!existingTask) {
                      const timestamp = Math.ceil((new Date()).getTime()/1000);
                      await amoApi.tasks.create({
                             responsible_user_id: lead.responsible_user_id,
                             entity_id: lead_id,
                             entity_type: 'leads',
                             complete_till: timestamp + TASK_DUE,
                             text: TASK_TEXT,
                      });
                  }
                  return lead_id;
      }
      return 0;
}

// Получение списка сделок для контакта
async function getLeads(amoApi, contact_id) {
       const result = await amoApi.request('GET', `/contacts/${contact_id}` , { with: 'leads' });
       return result._embedded.leads;
}

module.exports = async (args) => {


         // Если найден/создан контакт при поступлении звонка,
         // его ID находится в args.context.contact_id
         if (!args.context.contact_id) {
             return { reason: 'Нет контакта в контексте звонка' };
         }

         const amoApi = new SipuniAmoCrm({
                domain: args.settings.domain, accessToken: args.crm_auth
         });

        
         // Получаем список сделок
         const leads = await getLeads(amoApi, args.context.contact_id);

         // Создаем задачи для открытых сделок
         const promises = leads.map(lead => createTaskifLeadOpen(amoApi, lead.id));
         const openLeads = await Promise.all(promises);

         if (updatedLead) {
             return {
                    updatedLeads: openLeads, // массив с результатами, включает id сделок для которых создали задачи и нули для остальных сделок
             };
         } else {
              return {updatedLeads: openLeads}; // массив с результатами, включает id сделок для которых создали задачи и нули для остальных сделок
};
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0