Что значит supported api 3.

Я использую код InApp V3 для покупок в приложении в моем приложении, я получаю эту ошибку BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE и error value:3 когда учетная запись Google недоступна на устройстве. Я хочу знать, есть ли другие возможности для получения этой ошибки, потому что, когда я получаю эту ошибку, мне нужно показать всплывающее окно пользователю с некоторыми данными. Если это вызвано из-за недоступности учетной записи Google на устройстве, я покажу диалог с соответствующим текстом. Это код, который я использую

MHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { // error here return; } } });

Это ошибка Error checking for billing v3 support. (response: 3:Billing Unavailable) Error checking for billing v3 support. (response: 3:Billing Unavailable)

Как мы можем видеть непосредственно в коде установки IabHElper образца, предоставленного google, ошибка означает:

«Служба биллинга недоступна на устройстве».

Billing API version is not supported for the type requested

Это Справочник биллинга In-app (IAB Version 3), поэтому ошибка означает, что IAB v3 не установлен на устройстве.

Фактически это означает, что у пользователя есть учетная запись google и, возможно, также служба выставления счетов в приложении, но у нее нет последней версии. Это происходит в старых устройствах, и когда пользователь никогда ничего не обновляет, он используется для устройств, где вы можете увидеть старое приложение Market вместо приложения Play.

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

ОБНОВИТЬ:

Если вы ищете код во всем SDK библиотеки и вспомогательные классы, предоставляемые google, это единственное место, где мы можем найти именно то, что именно вы вызываете: IabHelper класса IabHelper

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0) .isEmpty()) { // service available to handle that Intent mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); } else { // no service available to handle that Intent mServiceConn=null; if (listener != null) { listener.onIabSetupFinished(new IabResult(BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE, "Billing service unavailable on device.")); } }

Это означает, что приложение не может подключиться к службе на устройстве, так как диспетчер пакетов даже не знает об этом . Это единственный вариант, который может вызвать эту ошибку. И что означает, что он не может подключиться к сервису? Это означает одно из следующих:

  • Устройство не имеет установленную службу.
  • У него есть старая версия, так как мы знаем, что в последних версиях игрового магазина используется IAB v3.

Таким образом, ваша ошибка может означать только одно из этого, что для вас означает, что вы должны показать пользователю mesagge, например: «У вас нет установленных служб google play, или вам нужно их обновить». И нет других возможностей или получить эту ошибку.

Но, если вы хотите сделать это проще для пользователей, вы можете сказать, что им нужно обновить приложение Google Play до последней версии . И это заставит все работать как шарм.

Эта ошибка также принимается после того, как пользователь удалит свою учетную запись google с устройства.

В основном возможность вашей проблемы BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE заключается в том, что в некоторых странах все еще в App Purchase не разрешено, как в Сербии и во многих странах.

Таким образом, любой пользователь из страны, в которой Google Play не поддерживает приложение App Purchase, получит BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE .

Это будет меньше шансов, что у пользователя не будет обновлена ​​Служба Google Play, установленная на телефоне, поэтому не беспокойтесь об этом случае.

Попробуйте эти хаки

Удалите кеш, данные и обновления для приложения для воспроизведения, снова запустите приложение для воспроизведения, оно должно работать! Или попробуйте с последними обновлениями (если он исправлен)

FYI:

Просто имейте в виду:

    IABv3 встроен в сервисы Google Play, поэтому для обновления App Play требуется обновление.

    V2 был встроен в клиент Play Store. Проблема кеша / EULA не связана конкретно с IAB, это связано с настройкой Play Services (и, надеюсь, для большинства пользователей это необязательно, часть кэша в любом случае).

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

См. Этот отчет: сообщение об ошибке, сообщение G +

Если вы не аутентифицировали свое устройство с помощью учетной записи Google, может возникнуть эта ошибка.

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

Приняты следующие соглашения при использовании Data API:

  • Пустые поля всегда возвращаются в ответе со значением null . В случае массива возвращается пустой массив, в случае объекта возвращается пустой объект;
  • Все поля связанные с датой и временем передаются в формате YYYY-MM-DD hh:mm:ss;
  • Запросы к API выполняются всегда с помощью метода POST;
  • Все параметры в запросах/ответах, а также в структурах данных в формате JSON и название методов именуются в стиле Snake Case - разделение слов через нижнее подчёркивание;
  • Данные возвращаются только в JSON формате согласно спецификации RFC 7159. Заголовок Accept игнорируется;
  • Кодировка данных UTF-8;
  • Заголовок Content-Type должен быть "application/json; charset=UTF-8" ;
  • Заголовок Content-Length должен содержать корректную длину сообщения, следуя спецификации HTTP/1.1

Добавить IP-адрес в список разрешенных

По умолчанию доступ к API запрещен всем, чтобы можно было делать запросы необходимо IP-адрес хоста с которого делается запрос добавить в белый список. Это можно сделать через личный кабинет "Администратор -> Аккаунт -> Правила и настройки безопасности" вкладка "API".

Если необходимо разрешить доступ всем IP-адресам, то нужно добавить в список разрешенных 0.0.0.0/0

Если запрос делается из под агента, то его IP адрес должен быть добавлен в белый список клиентского аккаунта

Пользователи API и аутентификация

К пользователям и ключам доступа применяются права доступа аналогичные правам доступа в личном кабинете

Доступ по ключу

Ключи генерируются на уровне пользователя в разделе личного кабинета "Аккаунт" → "Управление пользователями"
Существует два типа ключей:

  • Постоянный;
  • Временный;

Постоянный ключ имеет неограниченное время действия.
Временный ключ имеет конкретную дату окончания действия ключа.

Доступ по логину и паролю

Используется аутентификация с использованием сессий

Время жизни сессии 1 час.

Отчёт по запросам к API

В личном кабинете "Отчёты"->"Служебные"->"Запросы к API" можно построить отчёт по запросам к API

Базовый URL для доступа к API

Базовый URL для доступа к API соответствует следующему шаблону:

:// /

https://dataapi.сайт/

Версионность

Текущая версия Data API 2.0

Data API поддерживает версионность. Версия указывается в базовом URL как vX.Y , где X - номер мажорной версии, Y - номер минорной версии

Если была выпущена новая версия, то старая считается устаревшей и соответственно при обращении к старой версии API в мета-параметрах (см. раздел ) будет возвращаться параметр "current_version_deprecated" со значением "true"

Максимальное количество поддерживаемых версий - 2
Период поддержки устаревшей версии 2 месяца

Лимиты и ограничения

Баллы списываются только за успешные запросы, т.е в отчете по запросам к API (см. раздел ) он помечен как успешный.

Информация о лимитах возвращается во всех ответах в мета-парметрах (см. раздел ) кроме случаев когда лимиты не учитываются;

Лимиты построены по бальной системе, т.е каждый метод имеет свой вес. Вызов метода уменьшает доступные дневные/минутные баллы на размер веса вызываемого метода

Информация о лимитах в мета-параметрах:

Методы и их стоимость в баллах

Расширение лимитов

На странице "Аккаунт" -> "Тарифы и опции" в личном кабинете можно расширить лимиты.

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

Параметры сообщения об ошибке

Название Тип Обязательный Описание
error object да Объект с содержимым ошибки
code number да Не уникальный код ошибки (см. раздел )
message string да Cообщение об ошибке
data object да Объект с деталями ошибки
mnemonic string да Уникальный текстовый код ошибки. При обработке ошибок рекомендуется использовать этот параметр.
value string нет Содержит то, что передал пользователь без изменений
В некоторых случаях может отсутствовать. К примеру, обязательный параметр вообще не был заполнен.
extended_helper string нет Ссылка на более подробное описание ошибки и возможные решения
params object нет Карта подстановок параметров для шаблона с текстом об ошибке. Т.е. содержит динамически изменяемые значения, к примеру, лимиты. Значения указанные в этом параметре могут быть использованы в сообщениях об ошибках в интерфейсе, который базируется на Data API.
field string нет Название параметра, с которым связана ошибка
Вложенные параметры отображаются через разделитель точка "."
К примеру: "employee.phone_number"

JSON структура ошибки

{ "jsonrpc": "2.0", "id": null, "error": { "code": "number", "message": "string", "data": { "mnemonic": "string", "field": "string", "value": "string", "params": { "object": "string" }, "extended_helper": "string", "metadata": { } } } }

Группы кодов ошибок

Код ошибки Описание
-32700 Ошибки связанные с валидацией JSON
-32600
-32601 Ошибки связанные с методом
-32602 Ошибки связанные с валидацией параметров в вызываемом методе
-32603 Внутренние ошибки JSON RPC сервера
-32001 Ошибки аутентификации и ошибки с ключами
-32003 Ошибки с правами доступа - ip адрес не в белом списке, нет прав у пользователя
-32004 Ошибки связанные с неверной последовательностью вызываемых методов
-32007 Ошибки связанные с виртуальным номером
-32008 Ошибки связанные с компонентами
-32009 Ошибки связанные с аккаунтом
-32029 Ошибки связанные с лимитами
-32099 Ошибки связанные с поддержкой различных частей спецификации JSON RPC 2.0 - Групповые операции, Уведомления

Список ошибок общих для всех методов

Текст сообщение Код Мнемоника Описание
Invalid Request The JSON sent is not a valid Request object -32600 invalid_request Ошибки связанные с валидацией параметров запроса - id , jsonrpc
Access token has been expired -32001 access_token_expired Применяется только к постоянному токену. Если время жизни постоянного токена истекло, то возвращается указанная ошибка
Access token has been blocked -32001 access_token_blocked Если постоянный токен заблокирован, то возвращается указанная ошибка
Access token is invalid -32001 access_token_invalid Указанная ошибка возвращается если постоянный/временный токен не найден
Limit per {limit_type} has been exceeded. Value of current limit per {limit_type} is {limit_max_value} -32029 limit_exceeded Лимит превышен
You need at least on of the following components to access this method: {components} -32008 method_component_disabled Если не подключен компонент, который требуется для работы метода
You need at least on of the following components to access this paremeter: {components} -32008 parameter_component_disabled Если не подключен компонент, который нужен для заполнения параметра и создания сущности
Your IP {ip} is not whitelisted -32003 ip_not_whitelisted IP адрес с которого делается запрос не находится в белом списке адресов. Если запрос делается из под агента, то ваш IP адрес должен быть в списках разрешеных адресов внутри клиентского аккаунта
Login or password is wrong -32001 auth_error Неправильный логин или пароль
Your account has been disabled, contact the support service -32009 account_inactive Аккаунт заблокирован
Internal error, contact the support service -32603 internal_error Внутренняя ошибка, необходимо обратиться в службу технической поддержки
Data supplied is of wrong type -32602 data_type_error К примеру, если ожидаем string а передали int
The method does not exist / is not available -32601 method_not_found Вызываемый метод не найден
Permission denied -32003 forbidden Нет прав на доступ к методу или API, или запрещено выполнять какое-либо действие
Invalid JSON was received by the server. -32700 parse_error Ошибка валидации JSON
Batch operations not supported -32099 batch_opreations_not_supported Групповые операции не поддерживаются
Notifications not supported -32099 notifications_not_supported Был потерян параметр id в запросе. См. раздел
The required parameter has been missed -32602 required_parameter_missed Обязательный параметр не передали
Invalid parameter value -32602 invalid_parameter_value Возвращается во всех случаях, если было передано некорректное значение параметра или переданное значение не соответствует требуемому формату ввода
Unexpected method parameter(s) -32602 unexpected_parameters Если в "params" были переданы параметры которые не предусмотрены JSON структурой метода или указан параметр для сортировки, фильтрации и выборки, который не существует
The combination of parameters is not permitted -32602 invalid_parameters_combination Если параметры указанные в методе находятся в недопустимой комбинации или имеют зависмость друг от друга. Нужно смотреть документацию по методу и его параметрам.
{error_message} -32602 error Динамические ошибки

Список ошибок для методов с глаголом get

Текст ошибки Код Мнемоника Описание
Invalid parameter value -32602 invalid_parameter_value Если в фильтрах было передано некорректное значение для regexp, jsquery или любых значений не соответствующих документации
Sort by parameter is prohibited -32602 sort_prohibited Сортировка по параметру запрещена и невозможна, так как параметр для сортировки не находится в списке разрешенных для сортировки
Filter by parameter is prohibited -32602 filter_prohibited Фильтрация по параметру запрещена и невозможна, так как параметр для фильтрации не находится в списке разрешенных для фильтрации
Max value of requested date interval is 3 months -32602 date_interval_limit_reached Если в запросе период между указанными датами в date_from и date_till превышает 3 месяца. В основном ошибка актуальна только для методов получения отчетов, но не для всех.

Список ошибок общих для методов с глаголом delete

Список ошибок общих для методов с глаголом create и update, set, unset

Текст ошибки Код Мнемоника Описание
Entity not found -32602 entity_not_found Если передан уникальный идентификатор сущности, которая не найдена
Duplicate entity -32602 duplicate_entity Если сущность уже существует
A new data limit has been exceeded -32602 data_limit_exceeded Ошибка возникает в случае, если было достигнуто максимальное количество данных.
Action is not allowed for your tariff plan. You need contact support service or change your tariff plan settings in your account -32602 tariff_restrictions Любые ограничения тарифного плана
This value is already used by another entity -32602 already_in_use Значение указанного параметра уже используется в другой сущности. К примеру, виртуальный номер уже используется в другой рекламной кампании.

Групповые операции

Функционал не поддерживается

Принцип именования методов

Имя JSON-RPC метода состоит из двух частей разделенных точкой: глагола и имени объекта.

Имя объекта выбирается как существительное во множественном числе, отражающее бизнес-сущность, например subscribers .

Имя метода должно начинаться с глагола, отражающего суть операции.

Глаголы используемые в именовании методов

Глагол Описание
create Добавляет сущность.
get Возвращает список отсортированных и отфильтрованных данных с помощью критериев фильтрации и методов сортировки. К запросу возможно применить лимит и постраничный вывод на количество получаемых данных (см. раздел ). С помощью критериев фильтрации может быть так же получена одна запись, по ёё уникальному идентификатору (см. раздел ). В специальном мета-параметре возвращается общее количество записей (см. раздел ). С помощью специального параметра можно указать какие поля возвращать в ответном сообщении (см. раздел ).
update Обновляет сущность с определённым идентификатором.
Возможно частичное обновление параметров
При обновлении массивов обновляется весь массив целиком, т.е все элементы которые не были переданы удаляются.
Для зануления необязательного параметра нужно передать null
delete Удаляет сущность с определённым идентификатором.
add Связь одного объекта с другим.
enable Подключение объекта
disable Отключение объекта
set Простановка свойства на другой объект, к примеру, установка тега на обращение
unset Снятие свойства с другого объека, к примеру, снятие тега с обращения

Критерии фильтрации

Фильтрация данных применяется только к глаголу "get" (см. раздел с помощью необязательного примитива "filter" , который является объектом и может содержать:

  1. Простой фильтр;
  2. Дерево фильтров которое содержит простые фильтры с условиями.

Простой фильтр - это объект, который содержит в себе обязательные примитивы:

Дерево фильтров содержит специальный примитив "filters" , который может содержать в себе как простые фильтры, так и дерево фильтров.

Возможные ошибки при фильтрации

Пример JSON структуры простого фильтра

Получаем список записей у которых поле "name" имеет имя "Bob"

{ "jsonrpc":"2.0", "id":1, "method":"get.entity", "params":{ "filter":{ "field":"name", "operator":"=", "value":"Bob" } } }

Пример JSON структуры дерева фильтров с одним уровнем вложенности

Получаем список записей у которых поле "name" имеет имя "Bob" и его возраст 25 лет

{ "jsonrpc":"2.0", "id":1, "method":"get.entity", "params":{ "filter":{ "filters":[ { "field":"name", "operator":"=", "value":"Bob" }, { "field":"age", "operator":"=", "value":25 } ], "condition":"and" } } }

Пример JSON структуры дерева фильтров с двойным уровнем вложенности

Получаем список записей у которых поле "name" имеет имя "Bob" и его возраст 25 лет или список записей у которых поле "name" имеет имя "Dexter" и его возраст 2 года

{ "jsonrpc":"2.0", "id":1, "method":"get.entity", "params":{ "filter":{ "filters":[ { "filters":[ { "field":"name", "operator":"=", "value":"Bob" }, { "field":"age", "operator":"=", "value":25 } ], "condition":"and" }, { "filters":[ { "field":"name", "operator":"=", "value":"Dexter" }, { "field":"age", "operator":"=", "value":2 } ], "condition":"and" } ], "condition":"or" } } }

Пример JSON структуры дерева фильтров с тройным уровнем вложенности

Условие запроса ((addv_comp_id = 10 or addv_comp_id = 12) and (tag_id = 1 or tag_id = 5)) or visitor_id = 14 or (date_from = 2015-12-14 and date_till = 2015-12-16)

{ "filter":{ "filters":[ { "filters":[ { "filters":[ { "field":"addv_comp_id", "operator":"=", "value":10 }, { "field":"addv_comp_id", "operator":"=", "value":12 } ], "condition":"or" }, { "filters":[ { "field":"tag_id", "operator":"=", "value":1 }, { "field":"tag_id", "operator":"=", "value":5 } ], "condition":"or" } ], "condition":"and" }, { "field":"visitor_id", "value":14, "operator":"=" }, { "filters":[ { "field":"date_from", "value":"2015-12-14 12:00:00", "operator":"=" }, { "field":"date_till", "value":"2015-12-16 15:00:00", "operator":"=" } ], "condition":"and" } ], "condition":"or" } }

Операторы фильтрации

Фильтрация null и not null будет =null, !=null

Оператор Описание Учёт регистра строк Тип данных
= Равно да
!= Не равно да number, string, null, boolean, iso8601, enum
< Меньше чем - number, iso8601
> Больше чем - number, iso8601
<= Меньше или равно - number, iso8601
>= Больше или равно - number, iso8601
like Начинается с, Заканчивается на, Содержит да string
regexp Posix да string
jsquery PostgreSQL jsquery да object, array
in Массив значений в отношении "or" да number, string, enum

Сортировка данных

Сортировка данных применяется только к глаголу "get" (см. раздел ) с помощью массива объектов сортировки со следующими примитивами:

  • field - поле по которому производится сортировка;
  • order - направления сортировки. Возможные значения "asc" / "desc" . "asc" - по возрастанию, "desc" - по убыванию. Параметр необязателен. Значение по умолчанию "asс" .

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

Возможные ошибки при сортировки

JSON структура:

{ "jsonrpc":"2.0", "id":"number", "method":"string", "params":{ "sort":[ { "field":"string", "order":"string" } ] } }

Постраничный вывод

Постраничный вывод может быть применён к глаголу "get" (см. раздел ). Для выполнения пагинации данных используются следующие параметры:

JSON структура:

{ "jsonrpc":"2.0", "id":"number", "method":"string", "params":{ "offset":"number", "limit":"number" } }

Мета-параметры

Возвращаются при использовании глагола "get" (см. раздел ).

Присутствуют как в ошибочном, так и в успешном ответе

Параметр "api_version" возвращается только для версий которые deprecated.

JSON структура:

{ "metadata":{ "api_version":{ "current_version_deprecated":"boolean", "current_version":"string", "latest_version":"string" }, "limits":{ "day_limit":"number", "day_remaining":"number", "day_reset":"number", "minute_limit":"number", "minute_remaining":"number", "minute_reset":"number" }, "total_items":"number" } }

Представление возвращаемых данных

Отдельный список возвращаемых столбцов

В глаголе получения данных "get" (см. раздел ) может быть указан специальный необязательный примитив "fields" с типом массив, который может содержать список полей которые необходимо показать в выводе. Если примитив "fields" не используется, то в выводе показываются все поля по умолчанию для вызываемого метода.

Список полей индивидуален для каждого метода.

JSON структура:

{ "jsonrpc":"2.0", "id":"number", "method":"string", "params":{ "fields":[ "string" ] } }

Возможные ошибки в представлении возвращаемых данных

Общие поля для всех методов

Название Тип Обязательный Допустимые значения Описание
id string или number да Уникальный идентификатор запроса к API, который используется для связи запроса с ответом. Рекомендуется делать в виде уникального хэша или случайного числа.
method string да Вызываемый метод
jsonrpc string да 2.0 Номер спецификации JSON-RPC
params object да Содержит тело запроса к API. В зависимости от вызываемого метода тело запроса меняется.

Аутентификация

Вход

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

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

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

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

JSON структура запроса

{ "jsonrpc":"2.0", "id":"number", "method":"login.user", "params":{ "login":"string", "password":"string" } }

Если обычная АТС для вас уже не круто, то в лексиконе появляется слово ИНТЕГРАЦИЯ. Это слово для многих ассоциируется со сложными процессами, долгой разработкой и высокими бюджетами. Следом за ИНТЕГРАЦИЕЙ обычно ходит API, тот самый набор процедур и средств, с помощью которого наша IP АТС стыкуется с каким-то сторонним приложением.


Смысл ИНТЕГРАЦИИ почти всегда сводится к передаче от IP АТС в сторону приложения (обычно это какая-нибудь CRM) номера при выходящем звонке (ну и факта самого звонка разумеется) и передаче того же номера из приложения в IP АТС, при исходящем. Далее приложение уже само решает, что сделать с этим номером:

  • Открыть карточку найденную по номеру
  • Сделать запись в логе
  • Отправить сообщение
  • И т.п.

Реже ИНТЕГРАЦИЯ подразумевает встраивание более широкого функционала:

  • Управление состоянием линии оператора
  • Работа с собственными вызовами
  • Работа с вызовами коллег
  • Работа с конференциями
  • Работа с телефонной книгой
  • И т.п.

Тут по сути, мы переносим нашу CRM функционал софтфона.

Какие бывают 3CX API

HTTP API

С его помощью можно:

  • Сделать звонок от абонента 3CX (на внутренний или внешний номер)
  • Отключить абонента
  • Включить абонента
  • Отключить абоненту внешние вызовы
  • Включить абоненту внешние вызовы
  • Включить для абонента запись разговоров
  • Отключить для абонента запись разговоров

Работает все это довольно просто, например, для того чтобы позвонить набираем в браузере такую строку
IP-АДРЕС -3CX:5000/ivr/PbxAPI.aspx?func=make_call&from=номер-откуда-звоним&to=куда-звоним&pin=пароль

Сначала звонок прилетит инициатору, поставит его на hold, потом 3CX будет дозваниваться до удаленного номера и объединит звонки.

Полное описание переменных есть тут- http://www.3cx.com/blog/docs/3cx-http-api/
Применять можно в любой браузерной CRM. Минусы – взаимодействие только в сторону АТС. Направить таким образом уведомление клиенту о входящем звонке – нельзя.

CRM API

С его помощью можно:

  • Делать вызовы из стороннего приложения
  • Уведомления о смене статуса вызова (соединение установлено разорвано, набор номера, дозвон, и т.д.)
  • Уведомления о статусе абонента (logged in, logged out, нет связи с АТС)

CRM API, это по сути модуль к родному софтфону – 3CX Phone for Windows. Для разработки плагина нужно владеть Microsoft Visual Studio. Делается библиотека DLL, которая прописывается в конфигурационном файле софтфона.

Применять можно где угодно. Нужно помнить, что данное API требует наличия софтфона, это одновременно и плюс: он на себя берет клиент – серверное взаимодействие, и минус – софтфон нужен по-любому.

CALL CONTROL API

Call Control API доступен для 3CX Phone System начиная с версии 11 и выше и позволяет программно контролировать вызовы. Для разработки необходим опыт работы с.NET и C#.


С его помощью можно:
  • Просмотр всех активных вызовов на АТС
  • Перехват контроля над звонками
  • Перевод вызова
  • Отбой
  • Изменение настроек 3CX Phone System
  • И еще штук 30 различных функций
Использование этого API предполагает применение в крупных проектах. Основное отличие от остальных API – взаимодействие идет непосредственно с АТС (с серверной частью), а не с клиентом.
Описание команд с примерами есть тут - http://www.3cx.com/blog/docs/call-control-api/

Интеграции с CRM доступные «из коробки»

Все коробочные интеграции выполнены в виде плагинов к 3CX Phone.
  • Click to Call – возможность набирать номер одним кликом из CRM.
  • Call Pop-up - автоматическое отображение карточки контакта на основании caller ID.
  • Call Journals – ведение истории вызовов в CRM.
Действия на стороне CRM настраиваются в 3CXPhone.
Интеграция с Microsoft Outlook и Microsoft Office 365 доступна для любого коммерческого релиза 3CX Phone System commercial license. Остальные плагины требуют CRM 3CX Phone System версию PRO. Стоит заметить, что количество пользователей этих плагинов никак не лицензируется.

Кроме уже указанного Outlook и Office поддерживаются следующие CRM:

  • Microsoft Dynamics
  • Google Contacts
  • Salesforce
  • SugarCRM
  • Sage CRM
В каждый плагин ставится из общего дистрибутива и имеет 2 части, первая - 3CXPlugin для сотфофна и вторая - пакет кастомизации для CRM - системы и небольшой мануал как его установить, так чтобы в интерфейсе появилась нужная кнопка - ПОЗВОНИТЬ.

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