Сделки¶
Запрос к внешнему сервису¶
Для взаимодействия с внешними сервисами используется операция «Запрос к внешнему сервису». Операция доступна как в сценариях сделки, так и в действиях перехода.
Данные отправляются POST-запросом, в формате JSON, в теле. Набор полей тот же, что и в карточке сделки.
{
"class": "BumsTradeM_Deal",
"id": 3,
"data": {
"deal": {
"Id": "3",
"GUID": "",
"Name": "№1",
"Description": "",
"Contractor": {
"Id": 1000000,
"Name": "Тестов Тест"
},
...
}
}
}
Если вы хотите обновить данные сделки, сервис должен вернуть данные в формате JSON. Набор полей, как в запросе на редактирование сделки. Если сервис вернёт некорректный JSON, то изменения не вступят в силу, а сообщение об ошибке будет записано в log.
{
"Model": {
"Description": "some new value"
},
"Positions": [
{
"Price": {
"Value": 42,
"CurrencyId": 1,
"Rate": 1
},
"OfferId": 51
},
{
"Price": {
"Value": 43,
"CurrencyId": 1,
"Rate": 1
},
"OfferId": 52
}
]
}
Задача для примера: При переходе сделки и состояния «Оформление заказ» в состояние «Предоплата», цены товаров должны обновляться из сторонней системы.
1. Добавляем схему «Продажа товаров» из готовых схем¶
Подробности создания схемы есть в справке Мегаплана.
2. Реализуем внешний сервис¶
Для имитации внешнего сервиса, будем использовать Google Apps Script в режиме Web-приложения. Скрипт получит данные от Мегаплана и возвратит позиции сделок с обновленными ценами. Данные придут в формате карточки сделки, а результат будет отправлен в формате запроса на редактирование сделки.
Скрипт пересоздает первую позицию с переданным товаром и новой ценой (остальные позиции удалятся).
function doPost(e) {
if (typeof e !== 'undefined')
return ContentService.createTextOutput(
JSON.stringify(
createAnswer(
JSON.parse(e.postData.contents)
)
)
);
}
function createAnswer(request) {
return {
"Positions": [
{
"OfferId": request.data.deal.Positions[0].Offer.Id,
"Price": {
"Value": 42
}
}
]
};
}
3. Создаем действие¶
К переходу из состояния «Оформление заказ» в состояние «Предоплата», добавляем действие «Запрос к внешнему сервису». Адресом для запроса указываем адрес нашего google script. Например, https://script.google.com/macros/s/AKfycbzk8G5RrOJAHu21V4t7XXbDqoowsrgSkWWGPv1oodQkiB3kQO/exec
4. Создаем сделку¶
Создаем сделку с одной позицией и ценой, например, 110 руб.
5. Результат¶
Переводим сделку в состояние «Предоплата» и наблюдаем обновленную цену.
Пример обработки данных сделки на PHP есть в библиотеке.