Как авторизоваться бесплатному пользователю? — БЕСПЛАТНЫЙ ПОЛЬЗОВАТЕЛЬ

Описание

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

Что такое интеграция?

Любое API-взаимодействие между сторонней системой и amoCRM называется интеграцией. Решение такого рода создается командой, известной как интегратор.

Для дальнейшей авторизации любой интеграции, использующей Bbackend Rest API (Backed by Error), необходимо сначала добавить пароль к вашей учетной записи. Даже если речь идет об интеграции, которая загружена в интерфейс amoCRM, но не имеет REST API.

Мы выделяем следующие типы интеграции в зависимости от сложности и назначения:

  1. Приватная интеграция в рамках одного аккаунта. Это простейший вид интеграции, когда мы делаем интеграцию только для одного аккаунта. Например, у нас есть разработчик/партнер, который делает уникальную доработку необходимую только одной компании/аккаунту. Тогда ему необходимо зайти под администратором в нужный аккаунт, добавить интеграцию, скопировать ключи и обмениваться данными в рамках данного аккаунта и прав пользователя, от лица которого он скопировал ключ.
  2. Публичная интеграция. Любую приватную интеграцию можно передать на модерацию для добавления ее на страницу интеграций. После прохождения модерации все пользователи системы amoCRM смогут найти ее на соответствующей странице у себя в аккаунте и приступить к установке.
    До появления oAuth авторизации не было возможности инициировать установку интеграции со стороннего сайта. Но теперь, зарегистрировав интеграцию в своем аккаунте в первый раз, вы получите ключи и сможете использовать механизм кнопки amoCRM на сайт. С её помощью вы сможете включать интеграцию в сторонних аккаунтах в случае, если пользователь разрешит авторизацию и предоставит доступ. Также первый аккаунт, в который была зарегистрирована интеграция, автоматически становится техническим аккаунтом, которому принадлежит данная интеграция. Управлять ее описанием, активностью, обновлением сможет любой администратор, но только из этого единственного аккаунта.

При создании интеграции у пользователя есть возможность загрузить архив виджетов с файлами, которые будут загружаться как часть фронтенда в браузере в дополнение к взаимодействию через бэкенд. Ваши варианты включают:

  1. Отображать свой макет в специально отведенных местах системы: в карточках встреч или контактов, в списках, в воронках, на приборной панели и т.д. Таким образом, вы добавляете интерфейс взаимодействия с интеграцией для наших постоянных пользователей
  2. Влияете на отображение и поведение стандартных интерфейсов amoCRM
  3. Обмениваетесь данными с внешними системами путем отправки запросов или с amoCRM через REST API

Подробнее о разработке JS-интеграции вы можете узнать из этого видео.

Примеры использования виджета из жизни

  1. Я хочу отображать дополнительную информацию о контакте (на карточке контакта) из моей внутренней учетной системы;
  2. Я хочу, чтобы сотрудники моей компании могли отправлять запрос в бухгалтерию для создания платежного поручения прямо из карточки транзакции;
  3. Я разработчик стороннего сервиса (телефония, списки электронной почты) и хочу дать клиентам amoCRM возможность использовать мой сервис, опубликовав публичную интеграцию и сделав интеграцию amoCRM и сервиса более легкой и простой.

Client.auth.geturl(mode)

Возвращается адрес ссылки, по которой пользователь должен перейти, чтобы получить доступ к порталу AmoCRM и код авторизации.

Режим араметр отвечает на запросы по обработке URI перенаправления.

  1. popup – окно авторизации будет закрыто, а переход на Redirect URI будет выполнен в основном окне.
  2. post_message – перенаправление произойдет в окне, которое было открыто,
    после обработки кода авторизации вам нужно закрыть окно

Client.auth.setcode(code)

Устанавливает код авторизации и удаляет информацию о текущем токене. Желательно применять именно этот метод
в сравнение с client.environment.set(‘auth.code’);

Client.connection.connect()

В определенных обстоятельствах вы получаете на базе следующий жетон:

  1. Код авторизации (config.auth.code)
  2. Старый токен, если срок действия истек (refresh_token)
  3. Код авторизации, полученный пользователем при нажатии на ссылку. Использует встроенный сервер авторизации

Client.connection.setcode(code)

Замена: client.auth.setCode(code)

Вызовы этого метода в версии 2.x.x обновят токен указанным кодом.

Это происходит в текущей итерации при последующем запросе API. Эквивалентом предыдущей версии является:

Client.environment

Сохраняются все ранее переданные настройки.

Client.environment.get(path?)

Client Получить настройки, переданные конструктору

const{ Client }=require('amocrm-js');constclient=newClient({// логин пользователя в портале, где адрес портала domain.amocrm.rudomain: 'domain',// может быть указан полный домен вида domain.amocrm.ru, domain.amocrm.com/*       Информация об интеграции (подробности подключения       описаны на https://www.amocrm.ru/developers/content/oauth/step-by-step)    */auth: {client_id: 'clientId',// ID интеграцииclient_secret: 'clientSecret',// Секретный ключredirect_uri: 'redirectUri',// Ссылка для перенаправленияcode: 'code',// Код для упрощённой авторизации, необязательный/*        Параметр состояния для проверки на корректность. Необязательный. Используется встроенным сервером авторизации        см. https://www.amocrm.ru/developers/content/oauth/step-by-step#Получение-Authorization-code      */state: 'state',},});client.environment.get();// возвращает весь объект настроекclient.environment.get('domain');// 'domain';client.environment.get('auth.redirect_uri');// 'redirectUri'

Client.environment.set(path, value)

Установка новой стоимости в окружении

Client.token.fetch()

Используя свое имя пользователя и пароль, получите код авторизации. Токен автоматически устанавливается в приложение после обновления.

Client.token.getvalue()

Называется текущим значением токена.

Client.token.refresh()

Обновляет токен по значению refresh_token текущего. Явно вызывать нет необходимости, так как
при каждом запросе идёт проверка токена на актуальность. Если время жизни токена истекло, этот метод
будет вызван автоматически.

Токен автоматически устанавливается в приложение после обновления.

Client.token.setvalue(value)

Вводится новое значение токена.

Javascript

С помощью этой техники можно интегрироваться с загруженным архивом.

Sales automation. cloud based crm system. online sales management software

Мы не видим смысла усложнять получение кода авторизации с помощью механизма перенаправления, когда вам нужно только разработать интеграцию в своем аккаунте. Когда вы создаете интеграцию в своем аккаунте, вы можете получить этот код. Интеграция будет работать с вашими правами (правами администратора, так как только пользователи с правами администратора могут создавать интеграции).

Сначала необходимо создать интеграцию в той же учетной записи, в которой вы собираетесь иметь интеграцию, используя аналогию, найденную на странице Пример по шагам.

После заполнения всех необходимых полей вы увидите идентификатор интеграции, секретный ключ и код авторизации. Вы можете перейти непосредственно к разделу инструкции, в котором описывается обмен кода авторизации на токен доступа и токен обновления, пропустив шаги, связанные с созданием ссылки для перехода и обработкой полученных параметров.

Авторизация

A PI Chat требует использования следующей серии запросов вместо передачи маркера доступа:

  • Date
  • Content-Type
  • Content-MD5
  • X-Signature
Похожее:  О фонде
ЗаголовокОписание
DateДата и время формирования запроса, подпись будет действительна 15 минут от даты формирования запроса
Content-TypeТип данных запроса, на данный момент поддерживается только application/json
Content-MD5Для тела запроса необходимо рассчитать md5 хеш и в заголовке указывать в нижнем регистре. При этом важно иметь ввиду, что тело запроса обсчитывается как поток байт, без учета окончания json разметки, и если в конце есть “n” или пробелы они тоже будут учитываться.
Для GET запросов, md5 тоже необходимо рассчитать, даже если ничего не передается в теле запроса (получится md5 от пустой строки)
X-SignatureПодпись запроса. Формируется строка из названия метода (GET/POST) в верхнем регистре и значений (как указаны в запросе без изменений) заголовков путем объединения через “n”. Значения заголовков идут в определенном порядке. В общем случае если заголовок отсутствует, вместо него указывается пустая строка.
Далее к строке добавляем запрашиваемый путь из url без протокола и домена (без GET параметров).
Получившуюся строку обсчитываем по HMAC-SHA1, а в качестве секрета используем секрет канала, полученный при регистрации. Получившийся хеш в нижнем регистре указываем в заголовке X-Signature

Внедрение множественных источников в действующие интеграции

Если интеграция поддерживает функцию “Записывать первым”, она может использовать элемент по умолчанию при обращении к нескольким источникам.

Например, есть подключенный аккаунт с интеграцией чата, и доверять этой интеграции может только 1 источник.

Поддержка нескольких источников начала реализовываться посредством интеграции. Эта процедура логически разделена на следующие этапы:

Этап 1 Интеграция способна взаимодействовать с источниками из API (но не отправляет и не принимает источники в сообщениях amoJo)

Этап 1 При отправке сообщений клиенту, интеграция указывает external_id и уже знакома с работой с источниками.

Теперь, когда добавлена функция “Написать первым”, интеграция обрабатывает источник менеджера сообщения и учитывает его при открытии окна чата с клиентом.

Администратор учетной записи может добавить дополнительные источники во время этапа 3 интеграции.

Дополнительные требования к виджету для корректной работы с api чатов

Вы должны передать объекту location в manifest.json параметр “lead_sources”.

Вы должны включить параметр “whatsape_modal” для отображения в модальном окне для подключения интеграции с WhatsApp.

Доска почёта

Спасибо amaromev, Shuraman69 и Сергею Козину за работу над этим проектом.

Dmitrytemlead за возможность использования библиотеки в проекте для другой стороны.

Заголовок запроса

Приложение/JSON в качестве типа контента

Заголовок типа данных при ошибке

Приложение/Проблема JSON Content-Type

Заголовок типа данных при успешном результате

Приложение/HAL JSON в качестве типа контента

Запросы к порталу

С указанием метода:

Изменения в 3.x.x по сравнению с 2.x.x

  1. Исходный код TypeScript
  2. Подсветка синтаксиса на основе интерфейсов TS
  3. Удобная передача параметров GET
  4. Добавление ошибок приложения и запросов API
  5. Добавление новых событий в компоненты приложения
  6. Работа с сущностями через ООП
  7. Обширная документация и примеры использования
  8. Библиотека стала меньше

Импорт существующей переписки

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

Импортные сообщения могут быть разрешены:

  • Входящие от клиента
  • Исходящие клиенту от пользователя amoCRM
  • Исходящие клиенту от бота интеграции

Эта техника позволяет импортировать сообщения чата без отправки уведомлений пользователям amoCRM или создания “несобранного”.

Мы включаем поле payload[silent]: false в финальное сообщение, чтобы гарантировать, что клиент получит только одно уведомление.

Также важно отметить, что в карточке отображается история сообщений только за 24 часа с момента создания первой транзакции или покупателя.

Какие могут быть примеры?

Инструменты

Кроме того, вы можете использовать интеграционную систему для работы с eCoS и REST API для удаленного получения и обновления данных в amoCRM.

Использование

ES6:

Использование в целях разработки

Один из простых способ разработки интеграции: библиотека-сервис ngrok.
Пакет перенаправляет трафик с вашего компьютера на заданный публичный IP, который можно задать в
адресе интеграции.

Пример использования NGROK.

Источник по-умолчанию

Как обрабатывать чаты, в которых либо не указан источник, либо передан анонимный источник, заданный “источником по умолчанию”. При использовании интеграции нескольких источников можно массово помечать уже существующие чаты.

Для одной интеграции может быть только один источник на аккаунт с параметром по умолчанию=true.

Если работа с несколькими источниками не поддерживается интеграцией, будет присутствовать только один источник. Через API интеграция может изменить источник или удалить его.

Когда администратор добавляет интеграцию в качестве источника, amoCRM не создает автоматически источники “по умолчанию”, даже если интеграция поддерживает множество источников.

Чтобы изменить источник по умолчанию, необходимо установить поле default=true в источнике. Для предыдущего источника поле по умолчанию будет установлено в false.

При удалении источника «по-умолчанию» никто другой не сможет стать “по умолчанию”. Интеграция должна указать новый источник по-умолчанию.

Если источник был специально проигнорирован сообщениями, то он не будет автоматически ссылаться на чаты.

Контакт и чаты являются частью соглашения, но источник не связан со связью.

Существует 2 источника:

  • Техническая поддержка
  • Отдел сбыта

На данный момент источником по умолчанию является “Техническая поддержка”.

Если “Отдел продаж” является текстом сообщения по умолчанию, то “заместитель” будет значением external_id.

Пока интеграция источника не будет передана вместе с сообщением, такое поведение будет продолжаться до тех пор.

Как авторизоваться бесплатному пользователю? — бесплатный пользователь

При первом добавлении вас в аккаунт на вашу почту должно прийти письмо с данными для авторизации. Пароль, указанный
при регистрации, можно будет сменить самостоятельно в профиле. Впоследствии
необходимо будет использовать именно этот пароль.

Логика выбора источника при создании чата

Если интеграция не создавала источники самостоятельно, то при создании разобранной транзакции из чата в транзакции будет указан источник, который мы создали (при подключении интеграции). Если “интеграция” отправляет сообщения в неопознанные и удаленные источники, мы проверим, есть ли они там по умолчанию (свойство source default=true); нет ли у пользователя доступа к какой-либо информации конкретно о себе; запрещен ли доступ к серверу без подключения к среде приложения Android/Bluetooth+.

Метод

Получить источники/id/api/v4

Методы

  • client.connect -> client.connection.connect
  • client.request(method, path, params, options) -> client.request.make(method, path, params, options)
  • client.connection.getAuthUrl() -> client.auth.getUrl()
  • client.connection.setState(state) -> client.environment.set(‘auth.state’, state)
  • client.connection.getState() -> client.environment.get(‘auth.state’)
  • client.connection.getToken() -> client.token.getValue()
  • client.connection.setToken(token) -> client.token.setValue(token)
  • client.connection.refreshToken() -> client.token.refresh()
Похожее:  Личный кабинет Пенсионного фонда РФ для физлиц - вход и регистрация на официальном сайте

Написать первым

Вы должны указать в заявке, нужна ли вам функция Write First. Она также может быть доступна для уже существующих каналов благодаря поддержке Chat API.

Обработка ошибок

  • NO_JSON_RESPONSE. Пустой ответ
  • INVALID_JSON_RESPONSE. Некорректный JSON вет
  • API_RESPONSE_ERROR. Ошибка в ответе по API
  • NO_TOKEN_AND_CODE. В настройках отсуствует код и не установлен токен
  • CONNECTION_ERROR. Неудачное соединение
  • NO_ENVIRONMENT_OPTIONS. Отсутствуют настройки
  • PATH_IS_EMPTY. Попытка установить client.environment.set без переданного первого пути
  • INVALID_PATH. Неверный
  • NO_AUTH_OPTIONS. Отсутствуют настройки config.auth

Ограничения

Процедуру можно использовать с привилегиями администратора. Существует не более 50 источников.

Особенности работы интеграции с несколькими каналами чатов

Только если для интеграции назначено более одного канала, в этом случае необходимо учитывать осторожность.

Среди них есть один источник интеграции по умолчанию, и каждый источник интеграции может управлять только своим собственным источником.

Источники информации системы менеджмента могут стать несовместимыми.

  • Интеграция требует разрешения конфликтов идентификаторов источников на стороне пользователя
  • Источник может использоваться только с одним каналом по умолчанию. Также необходимо разработать процесс миграции на несколько источников
  • Для каждого чата/сообщения необходимо явно передавать источник, чтобы все чаты имели четкую связь с источником
  • Если в amoCRM передается неизвестный источник, то в качестве источника будет определена сама интеграция (тот же источник, который используется при создании транзакций через API).

Предоставление пользователю доступа к выбору источника “по умолчанию” в настройках интеграции является одним из вариантов в такой ситуации.

Ответ

{
  "_total_items": 2,
  "_embedded": {
    "sources": [
      {
        "id": 3108069,
        "name": "Support",
        "pipeline_id": 20453,
        "external_id": "79001234567",
        "services": [],
        "default": true,
        "request_id": "0",
        "_links": {
          "self": {
            "href": "https://example.amocrm.ru/api/v4/sources/3108069"
          }
        }
      },
      {
        "id": 3108070,
        "name": "Sales",
        "pipeline_id": 20453,
        "external_id": "79039876543",
        "services": [
          {
            "type": "whatsapp",
            "pages": [
              {
                "id": "79039876543",
                "name": "whatsapp",
                "link": " 79039876543"
              }
            ]
          }
        ],
        "default": false,
        "request_id": "1",
        "_links": {
          "self": {
            "href": "https://example.amocrm.ru/api/v4/sources/3108070"
          }
        }
      }
    ]
  }
}

Связь между внешним_id и телефонным номером должна храниться на стороне интеграции.

Теперь, когда источник подключен, мы можем отправлять сообщения в Chats API, и на воронке будут сгенерированы несобранные сообщения.

В данном случае клиент отправил сообщение на номер Отдела продаж и интеграция указала external_id источника в поле source[external_id] при отправке сообщения.

Отправка сообщения из чата в amocrm

Вы можете воспользоваться техникой API.

Для отправки сообщений необходимо воспользоваться методом добавления сообщения.

С помощью этой техники можно добавить как исходящие, так и входящие сообщения.

Несколько сообщений с одинаковой полезной нагрузкой[msgid] не поддерживаются Chat API.

Рассмотрим пример кода:

<?php

include __DIR__ . '/helpers.php';

// Секретный ключ канала
$channelSecret = 'f2d7f8704eff95087ed45b23ba99c0b5aac8278e';
// Scope ID, который был получен при подключении канала в аккаунт
$scopeId = '344a5002-f8ca-454d-af3d-396180102ac7_52e591f7-c98f-4255-8495-827210138c81';
// Тело запроса, отправим сообщение в amoCRM, которое написал нам клиент
$requestBody = [
    'event_type' => 'new_message',
    'payload' => [
        'timestamp' => time(),
        'msec_timestamp' => round(microtime(true) * 1000),
        'msgid' => 'my_int-5f2836a8ca481',
        'conversation_id' => 'my_int-d5a421f7f218',
        'sender' => [
            'id' => 'my_int-1376265f-86df-4c49-a0c3-a4816df41af8',
            'avatar' => 'https://images.pexels.com/photos/10050979/pexels-photo-10050979.jpeg?auto=compress&cs=tinysrgb&dpr=2&w=500',
            'profile' => [
                'phone' => ' 79151112233',
                'email' => 'example.client@example.com',
            ],
            'profile_link' => 'https://example.com/profile/example.client',
            'name' => 'Вася клиент',
        ],
        'message' => [
            'type' => 'text',
            'text' => 'Сообщение от клиента',
        ],
        'silent' => false,
    ],
];
$jsonBody = json_encode($requestBody);
$checkSum = createBodyChecksum($jsonBody);
$apiMethod = sprintf('/v2/origin/custom/%s', $scopeId);

// Составим подпись
$signature = createSignature(
    $channelSecret,
    $checkSum,
    $apiMethod
);

// Подготовим заголовки
$curlHeaders = prepareHeaderForCurl($checkSum, $signature);

echo 'POST ' . $apiMethod . PHP_EOL;
foreach ($curlHeaders as $header) {
    echo $header . PHP_EOL;
}
echo PHP_EOL . $jsonBody . PHP_EOL . PHP_EOL;

// Выполним запрос
execCurl($apiMethod, $jsonBody, $curlHeaders);

Параметры запроса

Вы можете создать новый источник только с тем же ID; ID внешнего источника изменить нельзя.

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

Если источник удален во время пакетного удаления, метод все равно возвращает данные.

Передача параметров

HANTERING с использованием:

объектом:

Подключение к crm

Возможно подключение

  1. По заранее известному коду авторизации
    (например, с помощью упрощённой авторизации)
  2. С помощью встроенного OAuth-сервера (см. пример ниже)

После успешного подключения клиент автоматически получает новый токен
по истечению старого перед формированием запроса

Подключение по коду авторизации (упрощенная авторизация)

Его можно получить с помощью упрощенной авторизации или самостоятельно написанного обработчика
адреса интеграции (redirectUri).

constclient=newClient({// логин пользователя в портале, где адрес портала domain.amocrm.rudomain: 'domain',// может быть указан полный домен вида domain.amocrm.ru, domain.amocrm.com/*       Информация об интеграции (подробности подключения       описаны на https://www.amocrm.ru/developers/content/oauth/step-by-step)    */auth: {client_id: 'clientId',// ID интеграцииclient_secret: 'clientSecret',// Секретный ключredirect_uri: 'redirectUri',// Ссылка для перенаправленияcode: 'code',// Код для упрощённой авторизации, необязательный},});

Подключение через oauth-сервер

В AmoCRM API код авторизации можно использовать только один раз для получения
токена. Последующие запросы на получение токена будут выдавать ошибку.

Чтобы облегчить процесс получения токена, в данный пакет встроен OAuth-сервер,
который может обрабатывать указанный адрес перенаправления. Сервер включает прослушивание по необходимости
и закрывает соединение по получению кода авторизации.

Без параметра code

constclient=newClient({// логин пользователя в портале, где адрес портала domain.amocrm.rudomain: 'domain',// может быть указан полный домен вида domain.amocrm.ru, domain.amocrm.com/*       Информация об интеграции (подробности подключения       описаны на https://www.amocrm.ru/developers/content/oauth/step-by-step)    */auth: {client_id: 'clientId',// ID интеграцииclient_secret: 'clientSecret',// Секретный ключredirect_uri: 'redirectUri',// Ссылка для перенаправления,/*            Необязательный араметр состояния для проверки на корректность.             Используется встроенным сервером авторизации.            см. https://www.amocrm.ru/developers/content/oauth/step-by-step#Получение-Authorization-code        */state: 'state',server: {// порт, на котором запустится сервер авторизацииport: 3000}},});

Получение id аккаунта в сервисе чатов

Необходимо знать уникальный строковый идентификатор учетной записи, который используется специально для Chat API и отличается от того, который применяется при использовании других методов amoCRM.

Получить его можно двумя способами:

  • В веб-версии системы с помощью сценария Javascript
  • С помощью запроса к API amoCRM.

Получение истории сообщений чата

Вы можете получить доступ к истории сообщений конкретного чата в чатах API.

Техника получения истории доступна для анализа в этой спецификации.

Получение кода авторизацию

  1. Используйте упрощенную авторизацию
  2. Используйте сервер авторизации, встроенный в эту библиотеку
  3. Вручную.

Получение сообщения, отправленного из amocrm, разбор вебхука

Мы отправляем на указанный адрес webhook каждый раз, когда пользователь отправляет сообщение из amoCRM в ваш канал.

Похожее:  Личный кабинет «НПФ Сбербанк»: регистрация / вход на официальный сайт

Кроме того, мы настоятельно рекомендуем обрабатывать и отправлять в мессенджер запросы на сообщения вне контекста.

Пример цепочки запросов

Интеграция сможет создавать необходимые источники через API после установки и получения Access Token.

  • Создать источник
  • Отправить сообщение с информацией об источнике
  • Webhook с информацией об источнике.

Рассмотрим, что мы создаем интеграцию с WhatsApp.

Для этого отправьте POST-запрос на /api/v4 source.

Примеры

Общее:

Работать с фабриками:

Процесс oauth авторизации

  1. Авторизоваться на сайте AmoCRM
  2. Получить код авторизации
  3. Получить OAuth-токен через код авторизации

Процесс авторизации:

  1. Сервер ожидает перехода пользователя по адресу: crm.auth.getUrl(mode)
  2. При успешном переходе пользователь перенаправляется на {redirectUri}, заданный в интеграции
  3. Сервер авторизации перехватывает запрос на {redirectUri}
    (как это сделать, описано ниже), извлекает код авторизации и
    с помощью crm.connection.setCode(code) автоматически получает токен для работы

Работа с событиями

Компоненты Auth, Token, Connection унаследованы от класса
EventEmitter. То есть они все поддерживают
методы подписки на события (on, off, removeAllListeners) и отписки от них, принятые в EventEmitter.

Разработка на production-сервере

Сервер авторизации должен соответствовать следующим требованиям, чтобы работать на “боевом” хостинге:

  1. Публичный IP-адрес, на котором находится проект
  2. Порт сервера авторизации, указанный в настройках данной библиотеки (auth.server.port),
    открыт для внешних подключений или работает прокси-переадресация в настройках виртуального хоста.

После остаётся только заменить адрес {redirectUri} на адрес
вашего хоста в настройках библиотеки и интеграции.

Разработка тиражируемого решения

Вы можете предоставить возможность другим пользователям AmoCRM подключиться к вашему каналу. Для этого необходимо создать виджет, который позволит пользователям связать свои учетные записи с вашим сайтом в одном месте.

Мы сообщали вам, когда разработка виджета была закончена.

Регистрация канала

A PI Chats в amoCRM отвечает за обработку чатов, каналов и сообщений.

Связывание нового чата с существующим контактом

Вы можете добавить новый контакт, начать чат и импортировать переписку, используя Chats API в сочетании с AmoCRM api. “Постоянный доступ” – это особый способ, который чаты ATI предлагают для начала разговора без заключения другого договора с пользователем или другими сторонами в той же сделке.

Этот пример применим в том случае, если клиент уже существует и, согласно бизнес-логике, не является организацией, которую вы хотите.

Как можно создать чат с помощью API? Дополнительную информацию см. в Справочнике APP.

Создадим новый чат

<?php

include __DIR__ . '/helpers.php';

// Секретный ключ канала
$channelSecret = 'f2d7f8704eff95087ed45b23ba99c0b5aac8278e';
// Scope ID, который был получен при подключении канала в аккаунт
$scopeId = '344a5002-f8ca-454d-af3d-396180102ac7_52e591f7-c98f-4255-8495-827210138c81';
// Тело запроса
$requestBody = [
    'conversation_id' => 'my_int-8e3e7640-49af-4448-a2c6-d5a421f7f217',
    'source' => [
        'external_id' => '78001234567', // external_id источника в API Источников, поле не передается, если интеграция не поддерживает множественные источники
    ],
    'user' => [
        'id' => 'my_int-1376265f-86df-4c49-a0c3-a4816df41af9',
        'avatar' => 'https://example.com/users/avatar.png',
        'name' => 'Имя клиента',
        'profile' => [
            'phone' => ' 79151112233',
            'email' => 'example.client@example.com',
        ],
        'profile_link' => 'https://example.com/profile/example.client',
    ]
];
$jsonBody = json_encode($requestBody);
$checkSum = createBodyChecksum($jsonBody);
$apiMethod = sprintf('/v2/origin/custom/%s/chats', $scopeId);

// Составим подпись
$signature = createSignature(
    $channelSecret,
    $checkSum,
    $apiMethod
);

// Подготовим заголовки
$curlHeaders = prepareHeaderForCurl($checkSum, $signature);

echo 'POST ' . $apiMethod . PHP_EOL;
foreach ($curlHeaders as $header) {
    echo $header . PHP_EOL;
}
echo PHP_EOL . $jsonBody . PHP_EOL . PHP_EOL;

// Выполним запрос
execCurl($apiMethod, $jsonBody, $curlHeaders);

События

  • client.on(‘connection:beforeConnect’) -> client.connection.on(‘beforeConnect’)
  • client.on(‘connection:beforeFetchToken’) -> client.token.on(‘beforeFetch’)
  • client.on(‘connection:beforeRefreshToken’) -> client.token.on(‘beforeRefresh’)
  • client.on(‘connection:checkToken’) -> client.token.on(‘expirationCheck’)
  • client.on(‘connection:authError’) -> client.connection.on(‘connectionError’)
  • client.on(‘connection:connected’) -> client.connection.on(‘connected’)
  • client.on(‘connection:error’) -> client.connection.on(‘connectionError’)
  • client.on(‘connection:newToken’) -> client.token.on(‘change’)

Сообщество и вопросы

По всем вопросам работы библиотеки заходите в чат проекта в Telegram.
Сделаем вместе пространство уютным 🙂

Сохранение авторизации между сессиями

Может быть полезным сохранять авторизацию между запусками приложения. Для этого есть событие change
компонента client.token, в которое приходит новый токен при каждом сохранении.

Этот токен можно сохранять куда вам удобно (БД, файлы и тд). При инициализации соединения можно заранее установить токен для восстановления авторизации:
crm.token.setValue(currentToken)

Пример реализации через сохранение файла

Тело запроса

{
  "account_id": "52e591f7-c98f-4255-8495-827210138c81",
  "time": 1639572261,
  "message": {
    "receiver": {
      "id": "2ed64e26-70a1-4857-8382-bb066a076219",
      "phone": "79161234567",
      "email": "example.client@example.com",
      "client_id":"my_int-1376265f-86df-4c49-a0c3-a4816df41af8"
    },
    "sender": {
      "id": "76fc2bea-902f-425c-9a3d-dcdac4766090"
    },
    "conversation": {
      "id": "8e4d4baa-9e6c-4a88-838a-5f62be227bdc",
      "client_id":"my_int-d5a421f7f218"
    },
    "source":{
      "external_id":"78001234567"
    },
    "timestamp": 1639572260,
    "msec_timestamp": 1639572260980,
    "message": {
      "id": "0371a0ff-b78a-4c7b-8538-a7d547e10692",
      "type": "picture",
      "text": "Текст сообщения Сделка #15926745",
      "markup": {
        "mode": "inline",
        "buttons": [
          [
            {
              "text":"Принять заказ"
            },
            {
              "text":"Отменить заказ"
            }
          ]
        ]
      },
      "tag": "",
      "media": "https://amojo.amocrm.ru/attachments/image.jpg",
      "thumbnail": "https://amojo.amocrm.ru/attachments/image_320x200.jpg",
      "file_name": "",
      "file_size": 0,
      "template": {
        "id": 7103,
        "content": "Текст сообщения {{lead.name}}",
        "params": [
          {
            "key": "{{lead.id}}",
            "value": "15926745"
          }
        ]
      }
    }
  }
}

Указание источника при работе с api чатов

Интеграция может задать воронку в источнике, где первое сходящееся сообщение будет создавать нерасчлененное.

Если пользователь выбирает источник, созданный интеграцией, и начинает взаимодействие с клиентом первым, то источник отправляется интеграции в хуке.

Установка

npm

Yarn

Фабрики

Портал может работать в режиме ООП с помощью фабрик.

  • Используйте готовые методы, а не API
  • Прокручивайте вакансии, контакты и т.д. с помощью постраничной навигации.

В настоящее время библиотека помогает следующим фабрикам:

Формирование подписей и заголовков

Для связывания запросов необходимы заголовки X-Signature и секретный ключ.

Пример формирования запроса на PHP:

<?php

$secret = '5a44c5dff55f3c15a4cce8d7c4cc27e207c7e189';
$method = 'POST';
$contentType = 'application/json';
$date = date(DateTimeInterface::RFC2822);
$path = '/v2/origin/custom/f90ba33d-c9d9-44da-b76c-c349b0ecbe41/connect';

$url = "https://amojo.amocrm.ru" . $path;

$body = [
    'account_id' => 'af9945ff-1490-4cad-807d-945c15d88bec',
    'title' => 'ScopeTitle', //Название вашего канала, отображаемое пользователю
    'hook_api_version' => 'v2',
];
$requestBody = json_encode($body);
$checkSum = md5($requestBody);

$str = implode("n", [
    strtoupper($method),
    $checkSum,
    $contentType,
    $date,
    $path,
]);

$signature = hash_hmac('sha1', $str, $secret);

$headers = [
    'Date' => $date,
    'Content-Type' => $contentType,
    'Content-MD5' => strtolower($checkSum),
    'X-Signature' => strtolower($signature),
];

$curlHeaders = [];
foreach ($headers as $name => $value) {
    $curlHeaders[] = $name . ": " . $value;
}

echo $method . ' ' . $url . PHP_EOL;
foreach ($curlHeaders as $header) {
    echo $header . PHP_EOL;
}
echo PHP_EOL . $requestBody . PHP_EOL;

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 5,
    CURLOPT_CUSTOMREQUEST => $method,
    CURLOPT_POSTFIELDS => $requestBody,
    CURLOPT_HTTPHEADER => $curlHeaders,
]);

$response = curl_exec($curl);
$err = curl_error($curl);
$info = curl_getinfo($curl);
curl_close($curl);
if ($err) {
    $result = "cURL Error #:" . $err;
} else {
    echo "Status: " . $info['http_code'] . PHP_EOL;
    echo $response . PHP_EOL;
}

Хуки о печати пользователем amocrm

Вы можете получить дополнительные веб-крючки в дополнение к типичным.

Адрес, указанный как адрес получения Webhooks, получит запрос и передаст его.

Мы предполагаем, что пользователь продолжает набирать текст еще пять секунд после каждого нажатия клавиши. Поэтому веб-крючок отправляется не чаще одного раза в пять минут.

После получения такого крючка вы должны сообщить эту информацию мессенджеру, с которым вы интегрируетесь.

Webhook Reference: что такое?

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 4,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector