Creating and modifying data
  • 10 Mar 2020
  • 8 Minutes To Read
  • Contributors
  • Print
  • Share
  • Dark
    Light

Creating and modifying data

  • Print
  • Share
  • Dark
    Light

Create

Adding new tasks to a Corezoid process.

Basic description

Let us add (create) three tasks to "Test" process (process ID 1234) from API user (user ID 13000).

By default, all new tasks fall into the starting node called "Login"(node_id="n10221").

URL example for making request: https://api.corezoid.com/api/1/json/13000/{GMT_UNIXTIME}/{SIGNATURE}

Request

 {
    "ops":[
    {
        "ref":"130605ref1",
        "type":"create",
        "obj":"task",
        "conv_id":"1234",
        "data":{
            "phone":"380501234561",
            "card":"4134000011112221"
            }
    },
    {
        "ref":"130605ref2",
        "type":"create",
        "obj":"task",
        "conv_id":"1234",
        "data":{
            "phone":"380661234562",
            "card":"4134000011112222"
            }
    },
    {
        "ref":"130605ref3",
        "type":"create",
        "obj":"task",
        "conv_id":"1234",
        "data":{
            "phone":"380661234563",
            "card":"4134000011112223"
            }
    }
    ]
}

ref - external (for process) task identifier, optional parameter. Used in case of reverse interaction with a system that created request.

Response in case of successful operation:

{
    "request_proc":"ok",
    "ops":[
        {
            "ref":"130605ref1",
            "obj":"task",
            "obj_id":"t71001",
            "proc":"ok"
        },
        {
            "ref":"130605ref2",
            "obj":"task",
            "obj_id":"t71012",
            "proc":"ok"
        },
        {
            "ref":"130605ref3",
            "obj":"task",
            "obj_id":"t71013",
            "proc":"ok"
        }
    ]
}

Erlang

-module(test).

-export([send_to_conv/6, test/0]).

test() ->
%Conveyor url
  ConvUrl = "https://api.corezoid.com",

%Conveyor ID
  ConvId = <<"5555">>,

%API user login (Conveyor with given ConvId has to be shared for this API user)
  ApiUser = "555",

%API User Secret Key
  ApiSecret = <<"qjVXiaXFazSCtIvMTjW29cZbPkzeYUzCzGmmrcJtIIj2eqceUm">>,

  % unique task reference, optional
  Reference = integer_to_binary(random:uniform(100000000)),

% Data for processing
  Data = <<"{\"phone\":\"client_phone\",\"name\":\"client_name\"}">>,

  {ok, Response} = send_to_conv(ConvUrl, ConvId, ApiUser, ApiSecret, Reference, Data),

  Response.


-spec send_to_conv(ConvUrl, ConvId, ApiUser, ApiSecret, Reference, Data) -> {ok, binary()} when
  ConvUrl :: list(),
  ConvId :: binary(),
  ApiUser :: list(),
  ApiSecret :: binary(),
  Reference :: binary(),
  Data :: binary().

send_to_conv(ConvUrl, ConvId, ApiUser, ApiSecret, Reference, Data) ->

% start inets app for httpc client
  application:start(inets),

%Time in unix format
  Time = erlang:integer_to_binary(unixtime()),

%Request with one element (could be many) in ops array for task create
  Request = <<"{\"ops\":[{\"ref\":\"", Reference/binary, "\",\"type\":\"create\",\"obj\":\"task\",\"conv_id\":\"",
  ConvId/binary, "\",\"data\":", Data/binary, "}]}">>,

%Generate Sign
  Sign = create_sign(<<Time/binary, ApiSecret/binary, Request/binary, ApiSecret/binary>>),
  Url = ConvUrl ++ "/api/1/json/" ++ ApiUser ++ "/" ++ binary_to_list(Time) ++ "/" ++ binary_to_list(Sign),

  {ok, {{_, 200, _}, _, Response}} = httpc:request(post, {Url, [], "application/octet-stream", Request}, [{timeout, 10000}], []),

  {ok, Response}.


unixtime()->
  {A,B,_C} = now(),
  A*1000000 + B.

create_sign(Bin) ->
  list_to_binary(list_to_hexstr(binary_to_list(crypto:hash(sha, Bin)))).


list_to_hexstr([]) ->
  [];
list_to_hexstr([H|T]) ->
  to_hex(H) ++ list_to_hexstr(T).


to_hex(N) when N < 256 ->
  [hex(N div 16), hex(N rem 16)].


hex(V) ->
  if
    V < 10 ->
      $0 + V;
    true ->
      $a + (V - 10)
  end.

Java

SDK for the work middleware.biz

https://github.com/corezoid/sdk-java/releases/tag/v2.1


import com.corezoid.sdk.entity.CorezoidMessage;
import com.corezoid.sdk.entity.RequestOperation;
import com.corezoid.sdk.utils.HttpManager;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import net.sf.json.JSONObject;
import org.apache.http.HttpException;

public class MiddlewareCreate {

    public static void main(String[] args) {
        try {
            // ID process
            String conv_id = "15476";
            // API user settings
            String apiLogin = "5965";
            String apiSecret = "VjKyfIuVAFOGGZwLLFfkHvrTPFUTBBP6E3A8596vIj5jiwqSsK";
            // Create task
            JSONObject data = new JSONObject()
                    .element("phone", "+380989055434")
                    .element("nick", "Test Nick");
            String ref = "test" + System.currentTimeMillis() + new Random(System.currentTimeMillis()).nextInt(1000);
            RequestOperation operation = RequestOperation.create(conv_id, ref, data);
            // Add task to list
            List<RequestOperation> ops = Arrays.asList(operation);
            // Build a Message
            ConveyorMessage message = ConveyorMessage.request(apiSecret, apiLogin, ops);
            // Create HttpManager instance
            HttpManager http = new HttpManager();
            // Send all tasks to Middleware
            String answer = http.send(message);
        } catch (HttpException ex) {
            System.out.println(ex);
        }
    }

}

PHP

SDK for the work Corezoid.com

https://github.com/corezoid/sdk-php

Example of loading request into the process ID 1635:

include_once('Corezoid.php'); // Corezoid class

// API user settings
$api_login = '1234';
$api_secret = 'Iw5N12MYleOULxdfMH43SK9ZAmjPyFKtdhToiL38xIBz6ecdZxW';

// Init Corezoid class
$CZ = new Corezoid($api_login, $api_secret);

// Add new task
$ref1    = time().'_'.rand();
$task1   = array('phone' => '+380989055434', 'nick' => 'Test Nick');
// ID process
$process_id = 1635;

$CZ->add_task($ref1, $process_id, $task1);

// Send all tasks to Corezoid.com
$res = $CZ->send_tasks();

BASH

Create new task

Example of creating a new task with a reference "ref_32353" to the process with ID "1664" from the user with ID "985":

#!/bin/sh

CONV_ID=1664
CONV_USER_ID='985'
CONV_USER_PASS='***'
API_URL='https://api.corezoid.com/api/1/json/'
TIME=$(echo $(($(date +%s))))

JSON="{
    \"ops\" : [{
    \"ref\" : \"ref_32353\",
   \"type\" : \"create\",
    \"obj\" : \"task\",
\"conv_id\" : ${CONV_ID},
   \"data\" : {\"key1\" : \"val1\", \"key2\" : \"val2\"}
  }]
}"

SIGNATURE=$(echo -n "${TIME}${CONV_USER_PASS}${JSON}${CONV_USER_PASS}" | openssl dgst -sha1 | awk '{print $NF}')

REQ=$(curl --silent -XPOST ${API_URL}${CONV_USER_ID}/${TIME}/${SIGNATURE} --data "${JSON}")
echo "Result: ${REQ}"

Create new process

#!/bin/sh

# Before you can start using Corezoid API you need to create an API key and get an authorization login and secret key.
# Create file with this script
# Check if file allowed for executing as program
# Allow executing as a program - chmod +x ./../conveyor_api_multipart/download_sh
# https://doc.corezoid.com/docs/protocol-description-v2
# Manage api_keys - https://admin.corezoid.com/users/api_key
# Set your env variables
# {{API_KEY_LOGIN}}, {{API_KEY_SECRET}}, {{API_URL}},

API_KEY_LOGIN="{{API_KEY_LOGIN}}"                                   # authorization login of your API key (for example {{API_KEY_LOGIN}} = 32
API_KEY_SECRET="{{API_KEY_SECRET}}"                                 # a secret key of your API key
API_URL="{{API_URL}}"                                               # URL to download_sh endpoint (for example {{API_URL}} = https://admin.corezoid.com/api/2/json
CONTENT_TYPE="application/json"

TIMESTAMP=$(printf $(($(date +%s))))
BODY="
{
    \"ops\": [
        {
            \"title\": \"Test\",
            \"description\": \"\",
            \"folder_id\": 0,
            \"obj\": \"conv\",
            \"create_mode\": \"without_nodes\",
            \"conv_type\": \"process\",
            \"type\": \"create\",
            \"status\": \"active\"
        }
    ]
}
"
SIGNATURE=$(printf "${TIMESTAMP}${API_KEY_SECRET}${BODY}${API_KEY_SECRET}" | openssl dgst -sha1 | awk '{printf $NF}')
REQ=$(curl --silent --header "Content-Type: ${CONTENT_TYPE}" -XPOST "${API_URL}/${API_KEY_LOGIN}/${TIMESTAMP}/${SIGNATURE}" --data "${BODY}")

printf "Result: ${REQ}"

Below you can find an example on how to upload and download Corezoid objects using BASH scripts.

Get URL to Corezoid object:

#!/bin/sh

# Before you can start using Corezoid API you need to create an API key and get an authorization login and secret key.
# Create file with this script
# Check if file allowed for executing as program
# Allow executing as a program - chmod +x ./../conveyor_api_multipart/download_sh
# https://doc.corezoid.com/docs/protocol-description-v2
# Manage api_keys - https://admin.corezoid.com/users/api_key
# Set your env variables
# {{API_KEY_LOGIN}}, {{API_KEY_SECRET}}, {{API_URL}},
# {{OBJ_ID}}, {{OBJ_TYPE}}, {{COMPANY_ID}}, {{ASYNC}}

API_KEY_LOGIN="{{API_KEY_LOGIN}}"                                   # authorization login of your API key (for example {{API_KEY_LOGIN}} = 32
API_KEY_SECRET="{{API_KEY_SECRET}}"                                 # a secret key of your API key
API_URL="{{API_URL}}"                                               # URL to download_sh endpoint (for example {{API_URL}} = https://admin.corezoid.com/api/2/download

OBJ_ID={{OBJ_ID}}                                                   # ID of object (for example {{OBJ_ID}} = 316494)
OBJ_TYPE="{{OBJ_TYPE}}"                                             # Type of object, possible values: conv | folder | dashboard
COMPANY_ID="{{COMPANY_ID}}"                                         # company id (for examole {{COMPANY_ID}} = i814004545)
ASYNC={{ASYNC}}                                                     # possible values: true | false

TIMESTAMP=$(printf $(($(date +%s))))
BODY="
{
    \"ops\": [
        {
            \"obj_type\": \"${OBJ_TYPE}\",
            \"obj\": \"obj_scheme\",
            \"obj_id\": ${OBJ_ID},
            \"company_id\":\"${COMPANY_ID}\",
            \"async\": ${ASYNC}
        }
    ]
}
"
SIGNATURE=$(printf "${TIMESTAMP}${API_KEY_SECRET}${BODY}${API_KEY_SECRET}" | openssl dgst -sha1 | awk '{printf $NF}')
REQ=$(curl --silent -XPOST "${API_URL}/${API_KEY_LOGIN}/${TIMESTAMP}/${SIGNATURE}" --data "${BODY}")

printf "Result: ${REQ}"

Download Corezoid object by URL

#!/bin/sh

# Before you can start using Corezoid API you need to create an API key and get an authorization login and secret key.
# Create file with this script
# Check if file allowed for executing as program
# Allow executing as a program - chmod +x ./../conveyor_api_multipart/download_sh
# https://doc.corezoid.com/docs/protocol-description-v2
# Manage api_keys - https://admin.corezoid.com/users/api_key
# Set your env variables
# {{API_KEY_LOGIN}}, {{API_KEY_SECRET}}, {{DOWNLOAD_URL}},

API_KEY_LOGIN="{{API_KEY_LOGIN}}"       # authorization login of your API key (for example {{API_KEY_LOGIN}} = 32
API_KEY_SECRET="{{API_KEY_SECRET}}"     # a secret key of your API key
DOWNLOAD_URL="{{DOWNLOAD_URL}}"         # You can get from "get -> obj_scheme" request (for example {{DOWNLOAD_URL}} = # https://admin.corezoid.com/user_downloads/folder_1_1580304112.json

TIMESTAMP=$(printf $(($(date +%s))))
BODY=""
SIGNATURE=$(printf "${TIMESTAMP}${API_KEY_SECRET}${BODY}${API_KEY_SECRET}" | openssl dgst -sha1 | awk '{printf $NF}')

REQ=$(curl --silent -XGET "${DOWNLOAD_URL}/${API_KEY_LOGIN}/${TIMESTAMP}/${SIGNATURE}" -O -J)

printf "Result: ${REQ}"

Upload Corezoid object

#!/bin/sh

# Before you can start using Corezoid API you need to create an API key and get an authorization login and secret key.
# Create file with this script
# Check if file allowed for executing as program
# Allow executing as a program - chmod +x ./../conveyor_api_multipart/download_sh
# Set your env variables
# {{API_KEY_LOGIN}}, {{API_KEY_SECRET}}, {{API_URL}},
# {{COMPANY_ID}}, {{FOLDER_ID}}, {{ASYNC}},
# {{FILE_DIR_PATH}}, {{FILE_NAME}}, {{CONTENT_TYPE}},
# {{TMP_FILE_PATH}}
# https://doc.corezoid.com/docs/protocol-description-v2
# Manage api_keys - https://admin.corezoid.com/users/api_key

API_KEY_LOGIN="{{API_KEY_LOGIN}}"               # authorization login of your API key (for example {{API_KEY_LOGIN}} = 32
API_KEY_SECRET="{{API_KEY_SECRET}}"             # a secret key of your API key
API_URL="{{API_URL}}"                           # URL to download_sh endpoint (for example {{API_URL}} = https://admin.corezoid.com/api/2/upload

COMPANY_ID="{{COMPANY_ID}}"                     # company id (for examole {{COMPANY_ID}} = i814004545)
FOLDER_ID="{{FOLDER_ID}}"                       # foder id for upload objects (for example {{FOLDER_ID}} = 0)
ASYNC="{{ASYNC}}"                               # possible values: true | false
FILE_DIR_PATH="{{FILE_DIR_PATH}}"               # Path to local file dir (for example {{FILE_DIR_PATH}} = /home)
FILE_NAME="{{FILE_NAME}}"                       # File name (for example {{FILE_NAME}} = test.json)
CONTENT_TYPE="{{CONTENT_TYPE}}"                 # possible values: application/json | application/zip
TMP_FILE_PATH="./gen_signature"                 # path to tmp file

TIMESTAMP=$(printf $(($(date +%s))))
FILE_PATH=${FILE_DIR_PATH}/${FILE_NAME}
BODY="Content-Disposition: form-data; name=\"type\"\r\ncreateContent-Disposition: form-data; name=\"obj\"\r\nobj_schemeContent-Disposition: form-data; name=\"folder_id\"\r\n${FOLDER_ID}Content-Disposition: form-data; name=\"async\"\r\n${ASYNC}Content-Disposition: form-data; name=\"company_id\"\r\n${COMPANY_ID}Content-Disposition: form-data; name=\"scheme\"; filename=\"${FILE_NAME}\"\r\nContent-Type: ${CONTENT_TYPE}\r\n"

printf "${TIMESTAMP}${API_KEY_SECRET}${BODY}" >> $TMP_FILE_PATH
cat $FILE_PATH >> $TMP_FILE_PATH
printf "$API_KEY_SECRET" >> $TMP_FILE_PATH
SIGNATURE=$(openssl dgst -sha1 $TMP_FILE_PATH | awk '{printf $NF}')
rm $TMP_FILE_PATH

REQ=$(
  curl  --silent -XPOST "${API_URL}/${API_KEY_LOGIN}/${TIMESTAMP}/${SIGNATURE}" \
        --header "Content-Type: multipart/form-data" \
        --form "type=create" \
        --form "obj=obj_scheme" \
        --form "folder_id=${FOLDER_ID}" \
        --form "async=${ASYNC}" \
        --form "company_id=${COMPANY_ID}" \
        --form "scheme=@${FILE_PATH};type=${CONTENT_TYPE}"
)

printf "Result: ${REQ}"

PYTHON

SDK for the work Corezoid.com

https://github.com/MaxBondar/Corezoid

This module helps you sending and modifying tasks to Corezoid processes.

from Corezoid import Corezoid

# Insert Corezoid Process credentials
# Learn more about credentials: https://doc.corezoid.com/en/interface/access_management.html
API_KEY    = '<INSERT API KEY>' 
API_SECRET = '<INSERT API SECRET>'
PROCESS_ID = '<INSERT PROCESS ID>'

# Initialize Corezoid SDK
c = Corezoid(API_KEY, API_SECRET, PROCESS_ID)

# There are 2 methods available: send and modify tasks.
# Learn more about Corezoid API: https://doc.corezoid.com/en/api/upload_data/

# Send a new task to Corezoid process
def send_task(ref, data):
    # ref: string. Can be a custom value. By default it's a timestamp. 
    # data: JSON. Must be a JSON object.

    c.create_task(ref, data)

# Modify an existing task by ref at Corezoid process
def modify_task(ref, data):
    # ref: string. Can be a custom value. By default it's a timestamp. 
    # data: JSON. Must be a JSON object.

    c.modify_task(ref, data)

Modify

Modifying task by it's reference (sending callback).

Request with reference 130605ref1 sent for processing to http://my.api.com/getData via api method. Processing of request on api.my.com resource is made asynchronously, therefore after processing process receives callback with results.
Example of callback to a process:

Example of URL to which requests will be sent to: https://api.corezoid.com/api/1/json/13000/{GMT_UNIXTIME}/{SIGNATURE}

{
    "ops":[
        {
            "type":"modify",
            "obj":"task",
            "ref":"130605ref1",
            "conv_id":"1234",
            "data":{
                "checkedClient":"true"
            }
        }
    ]
}

Response of a process after callback successfully accepted:

{
    "request_proc":"ok",
    "ops":[
        {
            "ref":"130605ref4",
            "proc":"ok"
        }
    ]
}

"checkedClient":"true" - this parameter and its value will be added to the request with 130605ref1 reference. After that request leaves standby mode in api_callback and proceeds to perform the following logics.

Example of change task with the help of SDK Java

SDK for the work middleware.biz

https://github.com/corezoid/sdk-java/releases/tag/v2.1


import com.corezoid.sdk.entity.CorezoidMessage;
import com.corezoid.sdk.entity.RequestOperation;
import com.corezoid.sdk.utils.HttpManager;
import java.util.Arrays;
import java.util.List;
import net.sf.json.JSONObject;
import org.apache.http.HttpException;

public class MiddleWareModify {

    public static void main(String[] args) {
        try {
            // ID process
            String conv_id = "15476";
            // API user settings
            String apiLogin = "5965";
            String apiSecret = "VjKyfIuVAFOGGZwLLFfkHvrTPFUTBBP6E3A8596vIj5jiwqSsK";
            // ModifÏy task
            String ref = "test141874099180849";
            JSONObject data = new JSONObject()
                    .element("phone", "+380989055434")
                    .element("ref", "test141874099180849");
            RequestOperation operation = RequestOperation.modifyRef(conv_id, ref, data);
            // Add task to list
            List<RequestOperation> ops = Arrays.asList(operation);
            // Build a Message
            ConveyorMessage message = ConveyorMessage.request(apiSecret, apiLogin, ops);
            // Create HttpManager instance
            HttpManager http = new HttpManager();
            // Send all tasks to Middleware
            String answer = http.send(message);
        } catch (HttpException ex) {
            System.out.println(ex);
        }
    }

}

Was This Article Helpful?