SQL запросы (версия 3.xx)/amoCRM: различия между версиями
Jugin (обсуждение | вклад) |
Jugin (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 12: | Строка 12: | ||
Если по каким то причинам стандартный синтаксис SQL не подходит, можно использовать вызовы методов API amoCRM напрямую, без преобразования. Для этого следует вместо SQL запроса указать конструкцию: | Если по каким то причинам стандартный синтаксис SQL не подходит, можно использовать вызовы методов API amoCRM напрямую, без преобразования. Для этого следует вместо SQL запроса указать конструкцию: | ||
<syntaxhighlight lang=javascript> | |||
/! {Method: <название метода API>, | /! {Method: <название метода API>, | ||
Type: <тип запроса>, | Type: <тип запроса>, | ||
Params: <передаваемые параметры>} !/ | Params: <передаваемые параметры>} !/ | ||
</syntaxhighlight> | |||
Например: | Например: | ||
<syntaxhighlight lang=javascript> | |||
/! {Method: 'contacts', Type: 'GET', Params: {width: 'customers'}} !/ | /! {Method: 'contacts', Type: 'GET', Params: {width: 'customers'}} !/ | ||
</syntaxhighlight> | |||
Подробное описание формата вызова родных методов API amoCRM можно посмотреть [https://www.amocrm.ru/developers/content/crm_platform/platform-abilities здесь]. | Подробное описание формата вызова родных методов API amoCRM можно посмотреть [https://www.amocrm.ru/developers/content/crm_platform/platform-abilities здесь]. | ||
Строка 25: | Строка 28: | ||
Помимо этого можно использовать функцию, которая вернет нужный объект, например такого вида: | Помимо этого можно использовать функцию, которая вернет нужный объект, например такого вида: | ||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
return {Method: 'contacts', | |||
Type: 'GET', | |||
Params: {width: 'customers'}} ; | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Или функцию, которая выполнит необходимые действия и вернет результат, например так: | Или функцию, которая выполнит необходимые действия и вернет результат, например так: | ||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
return this.Query ('select * from contacts'); | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Более сложный вариант функции с вызовом метода REST API amoCRM и формированием результата: | Более сложный вариант функции с вызовом метода REST API amoCRM и формированием результата: | ||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
var Res = this.Select ('contacts'); | |||
return this.MakeResult (Res, 'contacts'); | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Если функция не возвращает записи, например в результате изменения или удаления данных, она должна вернуть значение null: | Если функция не возвращает записи, например в результате изменения или удаления данных, она должна вернуть значение null: | ||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
var Res = this.CallMethod ('contacts', 'POST', {...}); | |||
return null; | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Если необходимо выбрать контакты с определенным статусом сделки, то в следующем запросе необходимо указать id статуса, который можно узнать, выбрав данные из таблицы "Сделки": | Если необходимо выбрать контакты с определенным статусом сделки, то в следующем запросе необходимо указать id статуса, который можно узнать, выбрав данные из таблицы "Сделки": | ||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
var Res = this.Query ('select * from contacts'); | |||
var AddRes = this.Query ('select * from leads where status_id = 15097975'); | |||
return Res.Join (AddRes, 'id', 'main_contact_id'); | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Логгирование звонков можно выполнить так ([https://www.amocrm.ru/developers/content/telephony/calls_add документация]): | |||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
var Param = {add: [{uniq: "394427aaf821879e29efbc4eb98er22171514", | |||
phone_number: "88007750105", | |||
source: "amo_custom_widget", | |||
created_at: 1414654739, | |||
created_by: "999999", | |||
duration: 98, | |||
call_status: 2, | |||
call_result: "Перезвонить позже", | |||
direction: "inbound", | |||
link: "http:// ссылка на запись .mp3", | |||
responsible_user_id: "956757"}]}; | |||
var Result = this.CallMethod ('/api/v2/calls', 'POST', JSON.stringify (Param)); | |||
if (Result['_embedded'] !== undefined) { | |||
if (Result['_embedded']['errors']) { | |||
throw {description: Result['_embedded']['errors'][0].msg}; | |||
} | |||
} | |||
return null; | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Уведомление о звонке ([https://www.amocrm.ru/developers/content/telephony/call_event документация]): | |||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
var Param = {add: [{type: "phone_call", | |||
phone_number: "88007750105"}]}; | |||
var Result = this.CallMethod ('/api/v2/events', 'POST', JSON.stringify (Param)); | |||
return null; | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Получить список входящих звонков (и не только звонков но и других сущностей [https://www.amocrm.ru/developers/content/crm_platform/events-and-notes#notes-list документация]) в компаниях можно так: | |||
<syntaxhighlight lang=javascript> | |||
/! | |||
function () { | |||
function IsFieldExist (Fields, Name) | |||
{ | |||
for (var i in Fields) { | |||
if (Fields[i].Name == Name) return true; | |||
} | |||
return false; | |||
} | |||
var Record = this.Query ('select * from companies/notes'); | |||
var Fields = []; | |||
var Data = [] | |||
while (Record.Fetch ()) { | |||
if (Record.GetFieldValue ('note_type') == 'call_in') { // Выбираем только входящие звонки | |||
var Values = Record.GetFieldValue ('params'); | |||
var Row = []; | |||
for (var i in Values) { | |||
if (!IsFieldExist (Fields, i)) Fields.push ({Name: i}) | |||
Row.push (Values[i]); | |||
} | |||
Data.push (Row); | |||
} | |||
Record.Next (); | |||
} | |||
return new CRecordsetArray (Record.GetDatabase (), Fields, Data); | |||
} | |||
!/ | |||
</syntaxhighlight> | |||
Помимо этого SQL-запросы к этому источнику данных могут содержать комментарии в виде /* */ и содержать несколько запросов разделенных символами // на новой строке. | Помимо этого SQL-запросы к этому источнику данных могут содержать комментарии в виде /* */ и содержать несколько запросов разделенных символами // на новой строке. | ||
---- | ---- | ||
Назад к [[SQL_запросы_(версия_3.xx)|SQL-запросам]]. | Назад к [[SQL_запросы_(версия_3.xx)|SQL-запросам]]. |
Текущая версия на 10:28, 8 октября 2020
Для работы с данными amoCRM можно использовать стандартные SQL запросы, которые буду преобразованы в формат API amoCRM. Поддерживаются SQL - операторы:
- select - выборка данных. В списке полей можно указать только * - все поля.
- where - позволяет указать условие выборки. Поддерживается только условие отбора id =.
- order - позволяет указать порядок сортировки. Может быть использовано только для данных, где API amoCRM позволяет использовать сортировку данных.
- limit - позволяет указать начальное значение выборки и количество строк. Например: limit 50 или limit 10, 50
- insert - вставка данных, позволяет указать список полей и константы значений, выражения не поддерживаются.
- update - изменение данных, позволяет указать список изменяемых полей и единственное условие отбора: where id =.
Помимо стандартного синтаксиса SQL, в запросах к источнику данных amoCRM можно использовать вставки родного синтаксиса API amoCRM. Для этого используется конструкция /! !/.
Если по каким то причинам стандартный синтаксис SQL не подходит, можно использовать вызовы методов API amoCRM напрямую, без преобразования. Для этого следует вместо SQL запроса указать конструкцию:
/! {Method: <название метода API>,
Type: <тип запроса>,
Params: <передаваемые параметры>} !/
Например:
/! {Method: 'contacts', Type: 'GET', Params: {width: 'customers'}} !/
Подробное описание формата вызова родных методов API amoCRM можно посмотреть здесь.
Помимо этого можно использовать функцию, которая вернет нужный объект, например такого вида:
/!
function () {
return {Method: 'contacts',
Type: 'GET',
Params: {width: 'customers'}} ;
}
!/
Или функцию, которая выполнит необходимые действия и вернет результат, например так:
/!
function () {
return this.Query ('select * from contacts');
}
!/
Более сложный вариант функции с вызовом метода REST API amoCRM и формированием результата:
/!
function () {
var Res = this.Select ('contacts');
return this.MakeResult (Res, 'contacts');
}
!/
Если функция не возвращает записи, например в результате изменения или удаления данных, она должна вернуть значение null:
/!
function () {
var Res = this.CallMethod ('contacts', 'POST', {...});
return null;
}
!/
Если необходимо выбрать контакты с определенным статусом сделки, то в следующем запросе необходимо указать id статуса, который можно узнать, выбрав данные из таблицы "Сделки":
/!
function () {
var Res = this.Query ('select * from contacts');
var AddRes = this.Query ('select * from leads where status_id = 15097975');
return Res.Join (AddRes, 'id', 'main_contact_id');
}
!/
Логгирование звонков можно выполнить так (документация):
/!
function () {
var Param = {add: [{uniq: "394427aaf821879e29efbc4eb98er22171514",
phone_number: "88007750105",
source: "amo_custom_widget",
created_at: 1414654739,
created_by: "999999",
duration: 98,
call_status: 2,
call_result: "Перезвонить позже",
direction: "inbound",
link: "http:// ссылка на запись .mp3",
responsible_user_id: "956757"}]};
var Result = this.CallMethod ('/api/v2/calls', 'POST', JSON.stringify (Param));
if (Result['_embedded'] !== undefined) {
if (Result['_embedded']['errors']) {
throw {description: Result['_embedded']['errors'][0].msg};
}
}
return null;
}
!/
Уведомление о звонке (документация):
/!
function () {
var Param = {add: [{type: "phone_call",
phone_number: "88007750105"}]};
var Result = this.CallMethod ('/api/v2/events', 'POST', JSON.stringify (Param));
return null;
}
!/
Получить список входящих звонков (и не только звонков но и других сущностей документация) в компаниях можно так:
/!
function () {
function IsFieldExist (Fields, Name)
{
for (var i in Fields) {
if (Fields[i].Name == Name) return true;
}
return false;
}
var Record = this.Query ('select * from companies/notes');
var Fields = [];
var Data = []
while (Record.Fetch ()) {
if (Record.GetFieldValue ('note_type') == 'call_in') { // Выбираем только входящие звонки
var Values = Record.GetFieldValue ('params');
var Row = [];
for (var i in Values) {
if (!IsFieldExist (Fields, i)) Fields.push ({Name: i})
Row.push (Values[i]);
}
Data.push (Row);
}
Record.Next ();
}
return new CRecordsetArray (Record.GetDatabase (), Fields, Data);
}
!/
Помимо этого SQL-запросы к этому источнику данных могут содержать комментарии в виде /* */ и содержать несколько запросов разделенных символами // на новой строке.
Назад к SQL-запросам.