Как получить адрес клиента из CRM

Scope: crm

Кто может выполнять метод: пользователи с административным доступом к разделу CRM

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Адрес клиента может храниться в Битрикс:

  • в пользовательском поле типа «адрес» любого объекта CRM. Чтобы получить адрес из поля, вызовите метод get или list для нужного типа объекта.
  • в реквизитах контактов, компаний и лидов. В реквизитах в рамках одного поля Адрес может храниться несколько адресов с указанием их типов. У одного клиента может быть записано несколько реквизитов.

Чтобы получить адрес клиента из реквизитов, последовательно выполните два метода:

  1. crm.requisite.list
  2. crm.address.list

1. Получаем реквизиты, связанные с контактом

Получение ID реквизита — необходимый шаг, так как адрес не имеет прямой привязки к контакту или компании. Адрес привязан к объекту реквизита.

Для получения реквизитов используем метод crm.requisite.list с фильтром:

  • в ENTITY_TYPE_ID укажем значение 3 — идентификатор для типа контакт. Для типа компании используйте идентификатор 4
  • в ENTITY_ID — ID контакта, в примере 2429. Получить ID можно методом crm.contact.list с фильтром по любому известному полю контакта. Чтобы получить ID компании, используйте crm.company.list. Если необходимо получить ID контакта или компании по номеру телефона или почте, используйте туториал «Поиск дубликатов по номеру телефона»

Как использовать примеры в документации

BX24.callMethod(
        "crm.requisite.list",
            {
            filter: { 
                 "ENTITY_TYPE_ID": "3", 
                 "ENTITY_ID": "2429",      
                },
            select: [
                "ID",
                "ENTITY_TYPE_ID",
                "ENTITY_ID",
                ],
            },
        );
        
require_once('crest.php');
        
            $result = CRest::call(
                'crm.requisite.list',
                [
                    'filter' => [
                        'ENTITY_TYPE_ID' => '3',
                        'ENTITY_ID' => '2429',
                    ],
                    'select' => [
                        'ID',
                        'ENTITY_TYPE_ID',
                        'ENTITY_ID',
                    ],
                ]
            );
        
        echo '<PRE>';
        print_r($result);
        echo '</PRE>';
        
from b24pysdk import BitrixWebhook, Client
        from b24pysdk.errors import BitrixAPIError
        
        client = Client(
            BitrixWebhook(
                domain="your-domain.bitrix24.com",
                webhook_token="user_id/webhook_key",
            )
        )
        
        result = client.crm.requisite.list(
            filter={
                "ENTITY_TYPE_ID": "3",
                "ENTITY_ID": "2429",
            },
            select=[
                "ID",
                "ENTITY_TYPE_ID",
                "ENTITY_ID",
            ],
        ).response.result
        

Мы получили ID реквизита 361 — параметр, необходимый для следующего запроса.

   Array
           (
            [result] => Array
               (
                   [0] => Array
                       (
                           [ID] => 361
                           [ENTITY_TYPE_ID] => 3
                           [ENTITY_ID] => 2429
                       )
               )
            [total] => 1      
           )
        

2. Получаем адрес

Для получения адреса используем метод crm.address.list с фильтром:

  • в ENTITY_TYPE_ID укажем значение 8 — идентификатор для типа реквизит
  • в ENTITY_ID — ID реквизита, полученный в предыдущем запросе, в примере 361
  • в TYPE_IDтип адреса, если необходимо получить конкретный. Например, тип адрес доставки — 11, юридический адрес — 6.
BX24.callMethod(
            "crm.address.list",
            {
                filter: { 
                "ENTITY_TYPE_ID": 8, 
                "ENTITY_ID": 361,  
                "TYPE_ID": 11, 
                },
            },
        );
        
require_once('crest.php');
        
            $result = CRest::call(
                'crm.address.list',
                [
                    'filter' => [
                        'ENTITY_TYPE_ID' => 8,
                        'ENTITY_ID' => 361,
                        'TYPE_ID' => 11,
                    ],
                ]
            );
        
        echo '<PRE>';
        print_r($result);
        echo '</PRE>';
        
result = client.crm.address.list(
            filter={
                "ENTITY_TYPE_ID": 8,
                "ENTITY_ID": 361,
                "TYPE_ID": 11,
            }
        ).response.result
        

Мы получили данные адреса для доставки контакта.

    Array
            (
                [result] => Array
                    (
                        [0] => Array
                            (
                                [TYPE_ID] => 11
                                [ENTITY_TYPE_ID] => 8
                                [ENTITY_ID] => 361
                                [ADDRESS_1] => Гранатный переулок, 10 c1
                                [ADDRESS_2] => 
                                [CITY] => Москва
                                [POSTAL_CODE] => 123001
                                [REGION] => Пресненский район
                                [PROVINCE] => Москва
                                [COUNTRY] => Россия
                                [COUNTRY_CODE] => 
                                [LOC_ADDR_ID] => 571
                                [ANCHOR_TYPE_ID] => 3
                                [ANCHOR_ID] => 2429
                            )
                    )
                [total] => 1       
            )
        

Пример кода

var contactId = "ваш_контакт_ID_здесь"; // Замените на фактический ID контакта
        
        // Метод для получения ID реквизита
        BX24.callMethod(
            "crm.requisite.list",
            {
                filter: {
                    "ENTITY_TYPE_ID": 3,
                    "ENTITY_ID": contactId
                },
                select: ["ID"]
            },
            function(requisiteResult) {
                if (requisiteResult.error()) {
                    console.error(requisiteResult.error());
                } else {
                    var requisites = requisiteResult.data();
                    if (requisites.length > 0) {
                        var requisiteId = requisites[0].ID;
                        console.log("Requisite ID:", requisiteId);
        
                        // Метод для получения адреса
                        BX24.callMethod(
                            "crm.address.list",
                            {
                                filter: {
                                    "ENTITY_TYPE_ID": 8,
                                    "ENTITY_ID": requisiteId,
                                    "TYPE_ID": 11
                                }
                            },
                            function(addressResult) {
                                if (addressResult.error()) {
                                    console.error(addressResult.error());
                                } else {
                                    var addresses = addressResult.data();
                                    if (addresses.length > 0) {
                                        // Создаем таблицу для отображения адресов
                                        var table = [];
                                        addresses.forEach(function(address) {
                                            table.push({
                                                "Адрес": address.ADDRESS_1 || "Не указано",
                                                "Город": address.CITY || "Не указано",
                                                "Индекс": address.POSTAL_CODE || "Не указано",
                                                "Страна": address.COUNTRY || "Не указано"
                                            });
                                        });
                                        console.table(table);
                                    } else {
                                        console.log("Адрес для доставки не найден.");
                                    }
                                }
                            }
                        );
                    } else {
                        console.log("Реквизит не найден.");
                    }
                }
            }
        );
        
require_once('crest.php');
        
            $contactId = 'ваш_контакт_ID_здесь'; // Замените на фактический ID контакта
        
            // Метод для получения ID реквизита
            $requisiteResult = CRest::call(
                'crm.requisite.list',
                [
                    'filter' => [
                        'ENTITY_TYPE_ID' => 3,
                        'ENTITY_ID' => $contactId
                    ],
                    'select' => ['ID']
                ]
            );
        
            if (isset($requisiteResult['error'])) {
                echo 'Error: ' . $requisiteResult['error_description'];
            } else {
                $requisites = $requisiteResult['result'];
                if (count($requisites) > 0) {
                    $requisiteId = $requisites[0]['ID'];
                    echo 'Requisite ID: ' . $requisiteId . PHP_EOL;
        
                    // Метод для получения адреса
                    $addressResult = CRest::call(
                        'crm.address.list',
                        [
                            'filter' => [
                                'ENTITY_TYPE_ID' => 8,
                                'ENTITY_ID' => $requisiteId,
                                'TYPE_ID' => 11
                            ]
                        ]
                    );
        
                    if (isset($addressResult['error'])) {
                        echo 'Error: ' . $addressResult['error_description'];
                    } else {
                        $addresses = $addressResult['result'];
                        if (count($addresses) > 0) {
                            // Создаем таблицу для отображения адресов
                            echo '<table border="1">';
                            echo '<tr><th>Адрес</th><th>Город</th><th>Индекс</th><th>Страна</th></tr>';
                            foreach ($addresses as $address) {
                                echo '<tr>';
                                echo '<td>' . ($address['ADDRESS_1'] ?? 'Не указано') . '</td>';
                                echo '<td>' . ($address['CITY'] ?? 'Не указано') . '</td>';
                                echo '<td>' . ($address['POSTAL_CODE'] ?? 'Не указано') . '</td>';
                                echo '<td>' . ($address['COUNTRY'] ?? 'Не указано') . '</td>';
                                echo '</tr>';
                            }
                            echo '</table>';
                        } else {
                            echo 'Адрес для доставки не найден.';
                        }
                    }
                } else {
                    echo 'Реквизит не найден.';
                }
            }
        
from b24pysdk import BitrixWebhook, Client
        from b24pysdk.errors import BitrixAPIError
        
        client = Client(
            BitrixWebhook(
                domain="your-domain.bitrix24.com",
                webhook_token="user_id/webhook_key",
            )
        )
        
        contact_id = "ваш_контакт_ID_здесь"
        
        try:
            requisites = client.crm.requisite.list(
                filter={
                    "ENTITY_TYPE_ID": 3,
                    "ENTITY_ID": contact_id,
                },
                select=["ID"],
            ).response.result
        except BitrixAPIError as error:
            print(f"Ошибка: {error}")
        else:
            if requisites:
                requisite_id = requisites[0]["ID"]
                print(f"ID реквизита: {requisite_id}")
        
                try:
                    addresses = client.crm.address.list(
                        filter={
                            "ENTITY_TYPE_ID": 8,
                            "ENTITY_ID": requisite_id,
                            "TYPE_ID": 11,
                        }
                    ).response.result
                except BitrixAPIError as error:
                    print(f"Ошибка: {error}")
                else:
                    if addresses:
                        print("Адрес\tГород\tИндекс\tСтрана")
                        for address in addresses:
                            print(
                                "\t".join(
                                    [
                                        str(address.get("ADDRESS_1") or "Не указано"),
                                        str(address.get("CITY") or "Не указано"),
                                        str(address.get("POSTAL_CODE") or "Не указано"),
                                        str(address.get("COUNTRY") or "Не указано"),
                                    ]
                                )
                            )
                    else:
                        print("Адрес для доставки не найден.")
            else:
                print("Реквизит не найден.")