Developer platform

Build apps

Once you are logged in your developer account, you are ready to build apps. So let's go through the different sections of the Developer Platform:

Milestones of the app creation process

Here are the different steps of an app creation:

  • Sign up to our developer platform.
  • You'll receive within 48 hours a confirmation of your subscription and your credentials to access your test environment.
  • You build your awesome app and send it for approval when it's finished.
  • You get notified of the acceptance or not of your app publication (see app validation process section).
  • If your app is approved, congratulations, iAdvize customer can now benefit from your work!
  • If your app is private: one or few selected customers can install it on their production environment.
  • If your app is public: any iAdvize customer can install it directly on the marketplace.
  • If you need to create a new version of your app, please refer to the "versioning of your apps" section of this documentation.

My apps

This is the place where you can see the list of all the apps you have built on iAdvize. You can also see their current status:

  • Published: your app is ready to be installed on the iAdvize Marketplace
  • Under review: your app has been submitted for review
  • Sandbox: you can edit your app

App information

This is where you will be able to define your app's profile. Also, this is where you can set the Privacy mode of your application: public or private.

How does the Private mode work? Your App can be available for all iAdvize's customers or for selected customers. Our team is still working on the accessibility mode under the Private mode. We will make it available manually for the specific customers you have selected.

Health check

In order to ensure satisfaction from our customers we require that every integrator provide an health check route. Using the provided endpoint iAdvize must be able to detect that a connector is healthy and is behaving as expected. You are required to implement an healthcheck endpoint as specified below.

Healthcheck endpoint

Request - GET method
Query parameterDescriptionValues
No parameter
Response - status object
{
    "status": "UP"
}
FieldDescriptionValuesRequired
statusThe current status of your connectorUP

Note that this endpoint will be checked on a regular basis at the url you specified in the App information section. It MUST return 200 status or it will be considered unhealthy.

App Parameters

By adding parameters to the installation process, the client has the possibility to configure your connector.

You can request two kinds of parameters:

A connector parameter has 4 to 5 properties:

  • Key: the key of your parameter according to your code.
  • Label: the name of your parameter, this is what users will see in the marketplace during the installation process
  • Type: it defines the type of entry. (For instance: text)
  • Url: only required for type "selectpicker". To dynamically retrieve options from the given url
  • Required: specify if the parameter is required for your connector

Currently, we support 3 types of parameters:

  • "text". For textual input values
  • "toggle". For enabling / disabling a part of the parameters. It is useful if you want to allow your clients to enable / disable specific features of your connector
  • "selectpicker". For dynamically loaded options from the configured url
Text parameter
Usage in the dev platform

Selectpicker usage

Result in the marketplace

Selectpicker result

Toggle parameter
Usage in the dev platform

Toggle usage

Result in the marketplace

Toggle result

Select picker parameter
Usage in the dev platform

Selectpicker usage

Result in the marketplace

Selectpicker result

Note: To retrieve the options of the selectpicker, we will call the endpoint:

Request - GET method
Query parameterDescriptionValues
idWebsiteUnique identifier of the website on which your connector is being installed on?idWebsite=ha-123
Response - Array of options (must NOT be empty)
[
  {
    "label": "I am transferring you to my colleague",
    "value": "direct_transfer"
  },
  {
    "label": "Wait a moment, I am transferring you.",
    "value": "wait_a_moment"
  },
  {
    "label": "My colleague is going to take over this conversation, bye !",
    "value": "colleague_take_over"
  }
]
FieldDescriptionValuesRequired
labelThe displayed label in the select pickerString
valueThe value of the optionString

1. Define Authentication parameters

The App Authentication section is where you can set the authentication information that the final user will have to enter in order to install your connector. Once the user is authenticated, the connector will be able to access the right data from iAdvize and from the third-party app. For example, you can ask the user for his/her third app's email and password. Users will need to follow these authentication steps to install your app.

You can add parameters and define the type of entry you need (text, numeric, etc.).

You can add as much parameters as you need. This is the first thing users will see once they click on the "install" button on the iAdvize Marketplace. Parameters appear to users according to their order of creation (the 1st entry created is the 1st on displayed on the page).

i.e. if your primary goal is to know your users’ usernames, it is the first information you should ask them for.

i.e. users might be required to authenticate with an email and a password. In this case, you need to create two different parameters, one for the email and one for the password.

Authentication

Users have to fill in the parameters during the installation process first, on the iAdvize Marketplace.

Authentication admin

2. Define App Settings parameters

Just as in the section dedicated to your app's authentication, you are able to set the parameters that users will need to install your connector. These are the parameters that the iAdvize administrator will fill in to install and configure your connector from the iAdvize Marketplace.

Define your app's settings parameters

You can add as many parameters as the installation and configuration of your application requires. For each of these parameters you will have to specify the type of input required.

Label: it is the name of your parameter. (This is what the users will see). For instance it could be: Username Type: it defines the type of entry. (For instance: alphanumeric) *ID: the identifier (key) of your parameter according to your code.

These configuration steps will take place immediately after authentication (if any). The order of appearance of the steps depends on their order of creation. The first created parameter will appear first and the last created parameter will appear last to the user.

Setting

Users have to fill in the parameters during the installation process first, on the iAdvize Marketplace.

Setting

App Plugins

Use plugins to enhance the iAdvize interface by adding or editing predefined features.

Plugins are basically HTTP endpoints whose json responses fit the plugin json-schema. For each plugin one or more endpoint have to be defined. When a plugin is used on user interface, we will make a GET http call to endpoint with documented query parameters. Your http response have to comply with plugin json-schema. You can find a link of the json schema below each plugin route. It can be used to validate your http responses on your side.

The plugins already available are:

  • The product List (on the discussion panel)
  • The customer information (on the discussion panel)
  • The conversation closing form (on the discussion panel)
  • The bot (add an external bot within iadvize chatbox)

Product list

The integration of the product list enables iAdvize's Console panel users to browse a product catalog from the iAdvize discussion panel. Agents can look for a product while they are chatting and send it in just a click within their conversation.

Products are displayed in a popup window just over the conversations view: When shared, visitors can see their image, title, availability and price. By clicking on the "view product" button, visitors are redirected to the product page on your website.

Product list

Add the Product list plugin

To make sure your connector uses the Product list plugin correctly, all you have to do is to declare:

  • The product list URL - this is your catalog’s URL
  • The categories url - this is where your connector will get the list of your product categories

Categories data

Request - GET method
Query parameterDescriptionValues
idConnectorVersionConnector version id?idConnectorVersion=c008849d-7cb1-40ca-9503-d6df2c5cddd8
idParentUnique identifier of the parent category?idParent=123
idWebsiteUnique identifier of the website on which your connector is installed?idWebsite=ha-123
idOperatorUnique identifier of the operator loading the categories?idOperator=9999
limitMaximum number of resources per page?limit=10
offsetNumber of resources skipped before beginning to return resources?offset=10
Response - Array of categories
[
    {
        "id": "123",
        "idParent": "123",
        "label": "category",
        "products": [
            "123",
            "456"
        ],
        "productsCount": 3
    },
    {
        "id": "456",
        "idParent": null,
        "label": "category",
        "products": null,
        "productsCount": 7
    }
 ]
FieldDescriptionValuesRequired
idUnique identifierInteger
idParentUnique identifier of the parent categoryInteger
labelLabelString
productsproductsArray of strings
productsCountNumber of productsInteger

You can validate your response data format with the associated json schema

Products data

Request - GET method
Query parameterDescriptionValues
idConnectorVersionConnector version id?idConnectorVersion=c008849d-7cb1-40ca-9503-d6df2c5cddd8
idCategoryCategory id?idCategory=123
idWebsiteUnique identifier of the website on which your connector is installed?idWebsite=ha-123
idOperatorUnique identifier of the operator loading the products?idOperator=9999
limitMaximum number of resources per page?limit=10
offsetNumber of resources skipped before beginning to return resources?offset=10
searchQueryProduct search query?searchQuery=query
Response - Array of products
[
    {
        "id": "123",
        "title": "Product's title",
        "productUrl": "http://www.e-commerce.com/url-product",
        "brand": "brand",
        "description": "product's description",
        "shortDescription": "shrot description",
        "available": true,
        "imageUrl": "http://www.e-commerce.com/url-product-image.jpg",
        "reference": "reference",
        "priceCatalog": "99.9 €",
        "pricePromotion": "90 €",
        "priceSpecial": "80 €"
    },
    {
        "id": "456",
        "title": "Product's title",
        "productUrl": "http://www.e-commerce.com/url-product",
        "brand": null,
        "description": "product's description",
        "shortDescription": null,
        "available": true,
        "imageUrl": "http://www.e-commerce.com/url-product-image.jpg",
        "reference": null,
        "priceCatalog": "9.9 €",
        "pricePromotion": null,
        "priceSpecial": null
    }
]
FieldDescriptionValuesRequired
idUnique identifierInteger
titleTitleString
productUrlProduct's urlString
brandBrandString
descriptionDescriptionString
shortDescriptionShort descriptionString
availableAvailabilityBoolean
imageUrlImage's urlString
referenceReferenceString
priceCatalogPrice catalogString
pricePromotionPrice promotionString
priceSpecialPrice specialString

You can validate your response data format with the associated json schema.

Customer information

The customer information plugin enables iAdvize's Console panel users to access to customer information in a single click. Agents can overview the customer information in a new window while they are chatting. Operators can then edit it or simply look for information.

To be able to retrieve the customer information, iAdvize must be able to identify the visitor thanks to an email and/or an external ID.

Customer information

Add the customer information plugin In order to set the right plugin parameters, all you have to do is to declare:

  • The customer information URL - this is your customer information URL (mandatory).
  • The customer information action URL - This URL will be triggered, if agent click on ACTION type field. This field is not mandatory.

Customer information data

Request - GET method
Query parameterDescriptionValues
emailVisitorVisitor email?emailVisitor=email@iadvize.com
idConnectorVersionConnector version id?idConnectorVersion=c008849d-7cb1-40ca-9503-d6df2c5cddd8
idVisitorExternalVisitor external id?idVisitorExternal=123
idVisitorUniqueVisitor unique id?idVisitorUnique=a7b94266db827c5b8f04586e8e543abd4b7e976e9a723
idWebsiteUnique identifier of the website on which your connector is installed?idWebsite=ha-123
operatorLocaleOperator locale?operatorLocale=en
idOperatorUnique identifier of the operator loading the visitor profile?idOperator=9999
Response - Array of fields
[
    {
        "id":"crm_profile_link",
        "label": "CRM profile",
        "value": "https://www.crm.fr/customer-information",
        "fieldType":"URL"
    },
    {
        "id":"crm_visitor_tag",
        "label": "CRM tag",
        "value": "tag",
        "fieldType": "TEXT"
    },
    {
        "id":"crm_create_case_action",
        "label": "Create a case",
        "value": "OPEN_CASE",
        "fieldType": "ACTION"
    }
]
FieldDescriptionValuesRequired
idUnique identifierString
labelLabelString
valueValueString
fieldTypeField typeACTION, TEXT or URL

You can validate your response data format with the associated json schema.

Customer information action URL

Request - POST method
Body parametersDescriptionValues
actionAction to execute on the connectorOPEN_CASE
idConnectorVersionConnector version idc008849d-7cb1-40ca-9503-d6df2c5cddd8
idVisitorUniqueVisitor unique ida7b94266db827c5b8f04586e8e543abd4b7e976e9a723
idWebsiteUnique identifier of the website on which your connector is installedha-123
idConversationIdentifier of the current conversationha-123
idOperatorOperator identifier who has clicked on the actionha-12345
Response - Array of fields
{
    "success": true,
    "message": "Case created with success"
}
FieldDescriptionValuesRequired
successResult of the actionBoolean
messageResult message of the actionString

You can validate your response data format with the associated json schema.

Conversation closing form

The conversation closing form plugin enables iAdvize's Console panel users to provide additional information manually at the end of conversation.

Conversation closing form plugin

Add the conversation closing form plugin

In order to set the right plugin parameters, all you have to do is to declare:

  • The connector URL - this is your form's url

Conversation Closing Form data

Request - GET method
Query parameterDescriptionValues
idConnectorVersionConnector version id?idConnectorVersion=c008849d-7cb1-40ca-9503-d6df2c5cddd8
idWebsiteUnique identifier of the associated website (assigned to you by iAdvize)?idWebsite=ha-123
operatorLocaleOperator locale?operatorLocale=en
idOperatorUnique identifier of the operator loading the form?idOperator=9999
Response - Array of inputs
FieldDescriptionValuesRequired
idUnique identifierstring
idParentParent identifier, if the field depends on itstring
labelLabelstring
fieldTypeField typeTEXT, CHECKBOX, SELECT, TEXTAREA, INTEGER or DECIMAL
isRequiredRequiredBoolean
optionsList of options object for SELECT typearray
options.labelLabel displayed for this optionstring
options.valueValue saved when option is selectedstring
[
    {
        "id": "create_crm_ticket",
        "label": "Create a CRM ticket",
        "fieldType": "CHECKBOX",
        "isRequired": true
    },
    {
        "id": "brand_name",
        "label": "Brand name",
        "fieldType": "TEXT",
        "isRequired": true
    },
    {
        "id": "brand_description",
        "label": "Brand name brings a totally new concept \n to their customers.",
        "fieldType": "TEXTAREA",
        "isRequired": true
    },
    {
        "id": "ticket_priority",
        "idParent": "create_crm_ticket",
        "label": "Priority",
        "fieldType": "SELECT",
        "isRequired": true,
        "options": [
            {
                "label": "Major",
                "value": "MAJOR"
            },
            {
                "label": "Minor",
                "value": "MINOR"
            },
            {
                "label": "Trivial",
                "value": "TRIVIAL"
            }
        ]
    },
    {
        "id": "order_id",
        "label": "The order id related to the claim",
        "fieldType": "INTEGER",
        "isRequired": false
    },
    {
        "id": "order_discount",
        "label": "The discount granted to the customer",
        "fieldType": "DECIMAL",
        "isRequired": false
    }
]

You can validate your response data format with the associated json schema.

External bots

Bots are an important part of iAdvize integration ecosystem. That's why they have their own dedicated documentation.

Add webhooks

The webhook system allows external applications to subscribe to events (via callback URLs) to receive updates in real-time. When you build your app, you can subscribe to a list of events. When customers install your app, it automatically creates webhooks for these customers as well as for events based on your app's configuration.

This subscription is based on the events happening on different domains. See the list of events available in the Webhooks documentation.

You can create as much outgoing webhooks as you need. A webhook can cover several events. An event can be linked to a customer (example customers.website.created) or linked to a website (example customers.website.created)

  • Name of the webhook: an optional label you can give to the webhook
  • webhook URL: the server URL that will receive the webhook
  • Security token: Token provided by iAdvize (this field cannot be edited)
  • Content-type: Application / json ; Application / x-www-form-urlencoded
  • Events: you can select the events in the list. You can subscribe to all iAdvize events, all events of a specific domain, or only one event.

Submit your apps

Apps must be submitted to iAdvize for review. The versioning declaration must be done by the developer during the submission process. iAdvize will approve or refuse the app based on specific criteria. iAdvize will get in touch within 48 hours to the developers.

App security

For security reasons iAdvize provides you with a method to verify and secure your apps. You will be able to make sure that the payloads have not been subjected to modifications, and to verify its source in order for example to limit the requests to those coming from iAdvize.

Once your server is configured to receive payloads, you can set up a secret token and verify the information.

Set you secret token

First, you need to get one secret token depending on your connector. You can retrieve this token in the 'App information' section on our developer platform.

Once your server is configured to receive payloads, you can set up a secret token and verify the information.

Note: If you want to use the webhook system without building a connector, you will have to use one token per webhook. To retrieve the token(s) you must contact us at developers@iadvize.com and we will generate the token for you.

Validating payloads from iAdvize

Once the secret token set, iAdvize will create a hash signature. This hash signature is passed along with each request in the headers as X-iAdvize-Signature.

For GET requests, hash signature starts with algorithm name sha256= and is computed by hashing the raw query string with HMAC hexdigest algorithm and your secret token as salt.

For POST, PUT... requests, hash signature starts with algorithm name sha256= and is computed by hashing the raw body string with HMAC hexdigest algorithm and your secret token as salt.

X-iAdvize-Signature: sha256=110e8400-e29b-11d4-a716-446655440000

You have to compute a new hash using your secret token, and to compare it with X-iAdvize-Signature and make sure it matches. Here is an example of a PHP implementation:

// Example for a POST request
$secretToken       = 'yourSecretToken';
$headers           = getallheaders();
$iAdvizeSignature  = $headers['X-iAdvize-Signature'];

// Get alogrithm and hash
list($algorithm, $iAdvizeHash) = explode('=', $iAdvizeSignature, 2);

// Get body payload from webhook
$bodyPayload = file_get_contents('php://input');

// Computed hash with body payload
$bodyPayloadHash = hash_hmac($algorithm, $bodyPayload, $secretToken);

// Final check
if (! hash_equals($iAdvizeHash, $bodyPayloadHash)) {
    exit('Validation hash failed');
}

We strongly recommend you, to use the constant time string comparison method (hash_equals vs === in our example), to be less vulnerable to timing attacks.

Developer Policy

Developers host their code on their own host service. Developers are responsible for their connector's maintenance. Developers can set their app’s price (monthly fee per user). If it’s not a free app, developers must be a legal person.