setyongr / b24

Bitrix24 Client Library
MIT License
21 stars 16 forks source link

Parameter <any param> must be array. #4

Open SeregPie opened 6 years ago

SeregPie commented 6 years ago

Hello. https://training.bitrix24.com/rest_help/crm/contacts/crm_contact_list.php Any example I'm trying to use, I get an error with Parameter 'param' must be array.

bitrix24.callMethod("crm.contact.list", {
  order: { "DATE_CREATE": "ASC" },
  filter: { "TYPE_ID": "CLIENT" },
  select: [ "ID", "NAME", "LAST_NAME", "TYPE_ID", "SOURCE_ID" ]
});

Is there any difference between this library and the library used in the documentation examples?

SeregPie commented 6 years ago

The problem is querystring. It just does not support nested objects.

setyongr commented 6 years ago

Yup, thanks for pointing out, using native querystring we must use notation like

{
   "SELECT[0]" : "ID",
    "SELECT[1]" : "TITLE",
    "SELECT[2]" : "COMPANY_TYPE",                    
}

Using other implementation of querystring also will solve #3

Snailsloth commented 6 years ago

Hello. Could you tell me how to use querystring? Even a small example could help me. I'm trying to create a lead with b24

"crm.lead.add", 
{
   fields:{
      "TITLE":"leadname"
    }
},

and have same error . Thanks!

I mean.. if I try to add a lead through the address bar, the following construction works:

https://company.bitrix24.ru/rest/user/key/crm.lead.add?fields=[TITLE]=IAMLEAD

but if i want to make same thing from node server , I can not construct a query in the method crm.lead.add correctly, i always got

'{"error":"","error_description":"Parameter \\u0027fields\\u0027 must be array."}' }

UPDATE: Ok, i found some bug and issue in qs repo about troubles with object stringifying. I had the same problem: from

?${qs.stringify(param)

in node_modules/b24/dist/index.js . Output was "fields=" and nothing more.

After manual "qs" package installation and replacement of const qs = require("querystring"); with const qs = require("qs"); , i finally can create a lead :snail:

Hope it can help someone

andreasteffanoni commented 6 years ago

Same problem for me. I followed Snailsloth suggestion, and the solution was really simple: After adding qs to the project (npm add qs --save), params and url are simple to build (I used webhooks):

    var params = {
        fields: {
            "TITLE": "Aboca",
            "COMPANY_TYPE": "CUSTOMER",
            "OPENED": "Y",
            "ASSIGNED_BY_ID": "1",
            "PHONE": [{"VALUE": "0039 55 555888", "VALUE_TYPE": "WORK"}]
        }
    };

    const qs = require("qs");

    var url = 'https://yourHost/rest/YourUser/YourHookCode/crm.company.add?' + qs.stringify(params);`

Then you just make a http get. The example is for adding a new company, but I suppose you can use any bitrix24 API.

Draecal commented 3 years ago

I'm trying to do the following:

let params = { filter: { 'ID': '2' } } const tasks = bitrix24.callMethod('tasks.task.list', qs.stringify(params)).then(allTasks => { console.log(allTasks)

and getting all tasks not just the task 2

Solved The following code gives the intended data:

const tasks = bitrix24.callMethod('tasks.task.list', {filter:{
                        'REAL_STATUS': [2, 3]
                    }}).then(allTasks => {
                console.log(allTasks)
                    res.status(200).render('home/index', {allUsers: allUsers, allTasks: allTasks});
            }).catch(err => { console.log(err)});