Перейти к содержанию

Обновление Заказа

Обновление данных Заказа в Лайнере.


Адрес и метод

POST /v2/order/update/{orderId}/

orderId int
Идентификатор Заказа в Лайнере. Значение > 0.


Параметры (Body)

Передавайте только те поля, которые нужно обновить. Обязательных полей в теле запроса нет.

code string необязательный
Код заказа в Лайнере. Допустимые символы: a-z, 0-9, -, _. Должен быть уникальным.

serviceTitle string необязательный
Внутреннее название заказа.

title string необязательный
Отображаемое название заказа.

callSchedule array необязательный
Расписание звонков: до 7 элементов, позиция элемента — день недели (Пн → Вс). Элемент — ["HH:MM", "HH:MM"] (начало и конец рабочего дня) или [] — выходной.

callHolidayOverrides array необязательный
Список праздничных дней (string). Принимается любой распознаваемый формат даты, хранится и возвращается в формате дд.мм.гггг.

autoDialingEnabled bool необязательный
Разрешены ли звонки в заказе.

predictiveModeEnabled bool необязательный
Разрешены ли звонки в предиктивном режиме.

aiDefaultLanguage string необязательный
Язык по-умолчанию для ИИ. Код одного из доступных языков, например ru, gb.

amdDetectionEnabled bool необязательный
Включено ли распознавание автоответчиков.

callRecordRule string необязательный
Когда начинать запись разговора. Доступные значения: client_is_connected, agent_is_connected.

sipEndpointUsageScheme string необязательный
Схема использования номеров. Доступные значения: random_default, random_without_repetition, even_loaded, even_loaded_daily.

agentUserIds array необязательный
Идентификаторы агентов (int), которые могут работать в этом заказе.

agentGroupIds array необязательный
Идентификаторы групп агентов (int), которые могут работать в этом заказе.

showLeadContactsToAgent bool необязательный
Могут ли агенты видеть контакты лидов.

callAttemptGroupId int необязательный
Идентификатор группы интервалов попыток дозвона. Значение >= 1.

qualifiedLeadsPerDayLimit int необязательный
Максимальное количество целевых лидов в день. Значение >= 1.

callScenarioId int необязательный
Идентификатор сценария разговора. Значение >= 1.

leadTransformEnabled bool необязательный
Разрешено ли агенту изменять тип лида.

status string необязательный
Статус заказа. Доступные значения: success, secondary, info.

speechRecognitionEnabled bool необязательный
Включено ли распознавание звонков.

ignoreLeadTimezone bool необязательный
Игнорировать ли часовой пояс клиента.

sipEndpointIds array необязательный
Список идентификаторов виртуальных номеров (int). Не может быть пустым.

customValues array необязательный
Словарь значений пользовательских полей: ключ — ID пользовательского поля, значение — сохраняемое значение этого поля. Поле должно существовать и относиться к заказам, значение должно соответствовать типу поля (для мультиселекта — строка со значениями через запятую).

transferNumbers array необязательный
Номера для перевода звонка. Каждый элемент — объект: number (string, обязателен, без пробелов) и names (object, необязателен: ключ — код языка, значение — название).

autoProcessCall bool необязательный
Автоматическая обработка звонка.

agentLeadCreationIsAllowed bool необязательный
Разрешено ли агенту создавать лидов.

agentLeadEditMode string необязательный
Режим редактирования лида агентом, например during-call.

Примечание

Неизвестные поля в теле запроса игнорируются. Поля createdAt, updatedAt, createdBy, updatedBy задать нельзя.


Пример запроса

curl -X POST "https://YOUR_LINER_API_HOST/v2/order/update/{orderId}/" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: YOUR_API_TOKEN" \
  -d '{
    "code": "{{code}}",
    "serviceTitle": "{{serviceTitle}}",
    "title": "{{title}}",
    "status": "{{status}}",
    "sipEndpointIds": [{{sipEndpointId}}, {{sipEndpointId2}}],
    "callSchedule": [["{{start}}", "{{end}}"]],
    "callHolidayOverrides": ["{{holiday}}"],
    "autoDialingEnabled": {{autoDialingEnabled}},
    "predictiveModeEnabled": {{predictiveModeEnabled}},
    "aiDefaultLanguage": "{{aiDefaultLanguage}}",
    "amdDetectionEnabled": {{amdDetectionEnabled}},
    "callRecordRule": "{{callRecordRule}}",
    "sipEndpointUsageScheme": "{{sipEndpointUsageScheme}}",
    "agentUserIds": [{{agentUserId}}, ...],
    "agentGroupIds": [{{agentGroupId}}, ...],
    "showLeadContactsToAgent": {{showLeadContactsToAgent}},
    "callAttemptGroupId": {{callAttemptGroupId}},
    "qualifiedLeadsPerDayLimit": {{qualifiedLeadsPerDayLimit}},
    "callScenarioId": {{callScenarioId}},
    "leadTransformEnabled": {{leadTransformEnabled}},
    "speechRecognitionEnabled": {{speechRecognitionEnabled}},
    "ignoreLeadTimezone": {{ignoreLeadTimezone}},
    "customValues": {
      "{{customFieldId}}": "{{customFieldValue}}"
    },
    "transferNumbers": [
      {
        "number": "{{transferNumber}}",
        "names": {
          "{{langCode}}": "{{transferNumberName}}"
        }
      }
    ],
    "autoProcessCall": {{autoProcessCall}},
    "agentLeadCreationIsAllowed": {{agentLeadCreationIsAllowed}},
    "agentLeadEditMode": "{{agentLeadEditMode}}"
  }'
<?php

$host = 'https://YOUR_LINER_API_HOST';
$token = 'YOUR_API_TOKEN';
$orderId = (int)$orderId;

// Важно: заполняйте только те поля, которые хотите обновить
$payload = [
    'code' => $code ?? null,
    'serviceTitle' => $serviceTitle ?? null,
    'title' => $title ?? null,
    'status' => $status ?? null,
    'sipEndpointIds' => $sipEndpointIds ?? null,
    'callSchedule' => $callSchedule ?? null,
    'callHolidayOverrides' => $callHolidayOverrides ?? null,
    'autoDialingEnabled' => isset($autoDialingEnabled) ? (bool)$autoDialingEnabled : null,
    'predictiveModeEnabled' => isset($predictiveModeEnabled) ? (bool)$predictiveModeEnabled : null,
    'aiDefaultLanguage' => $aiDefaultLanguage ?? null,
    'amdDetectionEnabled' => isset($amdDetectionEnabled) ? (bool)$amdDetectionEnabled : null,
    'callRecordRule' => $callRecordRule ?? null,
    'sipEndpointUsageScheme' => $sipEndpointUsageScheme ?? null,
    'agentUserIds' => $agentUserIds ?? null,
    'agentGroupIds' => $agentGroupIds ?? null,
    'showLeadContactsToAgent' => isset($showLeadContactsToAgent) ? (bool)$showLeadContactsToAgent : null,
    'callAttemptGroupId' => isset($callAttemptGroupId) ? (int)$callAttemptGroupId : null,
    'qualifiedLeadsPerDayLimit' => isset($qualifiedLeadsPerDayLimit) ? (int)$qualifiedLeadsPerDayLimit : null,
    'callScenarioId' => isset($callScenarioId) ? (int)$callScenarioId : null,
    'leadTransformEnabled' => isset($leadTransformEnabled) ? (bool)$leadTransformEnabled : null,
    'speechRecognitionEnabled' => isset($speechRecognitionEnabled) ? (bool)$speechRecognitionEnabled : null,
    'ignoreLeadTimezone' => isset($ignoreLeadTimezone) ? (bool)$ignoreLeadTimezone : null,
    'customValues' => [
        $customFieldId => isset($customFieldValue) ? $customFieldValue : null,
    ],
    'transferNumbers' => $transferNumbers ?? null,
    'autoProcessCall' => isset($autoProcessCall) ? (bool)$autoProcessCall : null,
    'agentLeadCreationIsAllowed' => isset($agentLeadCreationIsAllowed) ? (bool)$agentLeadCreationIsAllowed : null,
    'agentLeadEditMode' => $agentLeadEditMode ?? null,
];

// Удаляем null-поля, чтобы не затирать значения случайно
$payload = array_filter($payload, fn($v) => $v !== null);

$ch = curl_init($host . '/v2/order/update/' . $orderId . '/');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'X-Api-Key: ' . $token,
    ],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
    CURLOPT_TIMEOUT => 15,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($response === false) {
    throw new RuntimeException('cURL error: ' . curl_error($ch));
}

curl_close($ch);

echo "HTTP {$httpCode}\n";
echo $response;
const host = "https://YOUR_LINER_API_HOST";
const token = "YOUR_API_TOKEN";
const orderId = Number(orderId);

// Важно: добавляйте только те поля, которые хотите обновить
const payload = {
  code: code,
  serviceTitle: serviceTitle,
  title: title,
  status: status,
  sipEndpointIds: sipEndpointIds,
  callSchedule: callSchedule,
  callHolidayOverrides: callHolidayOverrides,
  autoDialingEnabled: autoDialingEnabled != null ? Boolean(autoDialingEnabled) : undefined,
  predictiveModeEnabled: predictiveModeEnabled != null ? Boolean(predictiveModeEnabled) : undefined,
  aiDefaultLanguage: aiDefaultLanguage ?? undefined,
  amdDetectionEnabled: amdDetectionEnabled != null ? Boolean(amdDetectionEnabled) : undefined,
  callRecordRule: callRecordRule ?? undefined,
  sipEndpointUsageScheme: sipEndpointUsageScheme ?? undefined,
  agentUserIds: agentUserIds ?? undefined,
  agentGroupIds: agentGroupIds ?? undefined,
  showLeadContactsToAgent: showLeadContactsToAgent != null ? Boolean(showLeadContactsToAgent) : undefined,
  callAttemptGroupId: callAttemptGroupId != null ? Number(callAttemptGroupId) : undefined,
  qualifiedLeadsPerDayLimit: qualifiedLeadsPerDayLimit != null ? Number(qualifiedLeadsPerDayLimit) : undefined,
  callScenarioId: callScenarioId != null ? Number(callScenarioId) : undefined,
  leadTransformEnabled: leadTransformEnabled != null ? Boolean(leadTransformEnabled) : undefined,
  speechRecognitionEnabled: speechRecognitionEnabled != null ? Boolean(speechRecognitionEnabled) : undefined,
  ignoreLeadTimezone: ignoreLeadTimezone != null ? Boolean(ignoreLeadTimezone) : undefined,
  customValues: {
    [customFieldId]: customFieldValue != null ? customFieldValue : undefined,
  },
  transferNumbers: transferNumbers ?? undefined,
  autoProcessCall: autoProcessCall != null ? Boolean(autoProcessCall) : undefined,
  agentLeadCreationIsAllowed: agentLeadCreationIsAllowed != null ? Boolean(agentLeadCreationIsAllowed) : undefined,
  agentLeadEditMode: agentLeadEditMode ?? undefined,
};

// Удаляем undefined-поля
Object.keys(payload).forEach((k) => payload[k] === undefined && delete payload[k]);

const res = await fetch(`${host}/v2/order/update/${orderId}/`, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Api-Key": token
  },
  body: JSON.stringify(payload)
});

const data = await res.json();
console.log("HTTP", res.status, data);

Пример ответа

{
  "success": true,
  "message": "",
  "data": []
}

Примечание

Выше описана структура поля data. Общий формат ответа API см. в разделе Схема запросов