The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Conductrics Agent

DESCRIPTION

First I've got php agent API from conductrics github (https://github.com/conductrics/conductrics-php) and I've rewritten it in Modern Perl, then I've improved it.

I've substituted rand() calls with less cpu expensive Time::Hires to unvalidate cache.

I'll use this module for a new Catalyst model.

SYNOPSIS

    use Conductrics::Agent;

    my $agent = Conductrics::Agent->new(
        name=>'', # your conductrics agent
        apiKey=>'',    # place your apikey here
        ownerCode=>'', # place your ownerCode here
        baseUrl=>'http://api.conductrics.com',
    );

    #
    # $agent will ask for a decision the conductrics server about which colour
    #
    my $choice = $agent->decide($userSessionid, qw/red jellow green blue/);
    print "$choice\n";

METHODS

decide()

Whenever in your code you want to act using decision evaluated by Conductrics you just call decide in a proper form, simple, multiple with names or nameless.

decide($sessionId, @choices)

Conductrics will compute the decision and this returns which $choice.

decide($sessionId, {decisionN1=>[ qw/option1 option2 option3/ ]}, {decisionN2=>[ qw/anotherOpt oneMoreOpt / ]})

decide($sessionId, [ qw/option1 option2 option3/ ], [ qw/anotherOpt oneMoreOpt / ] )

decisionN1 is only a placeholder for name you have choose for this decision point as well as decisionN2 is another name you like.

Here is how to use Multi-Faceted Decisions, with or without name: you are asking at the server more than one Here some words from the conductrics help: "Whenver you ask us for a decision, we'll pick one option from each list, and send them back to you in one answer." "We're basically doing multivariate testing ("MVT") for you, tracking the success of combinations of options rather than each option individually."

get_decision($session, $pointCode)

If you have defined more decision points for your agent, you can get decisions from Conductrics using 'point code'. While decide() needs more information, with this call you have already provided those information to the server during agent's definition.

To define agents see Conductrics::API::Client.

reward($sessionId, $goalCode, [$value])

Conductrics will collect the numeric value about the goalCode. This is the way it learn whick decisions are winning.

expire($sessionId)

You are notifing that this session has been closed, for example on user logout action.

http://www.conductrics.com/ for more info about their analysis service.

TESTS

Execute full test suite

First you have to create two test agents following these description:

{ "code": "test-agent", "owner": "$your_ownerCode",

  "goals": [
    {"code": "goal-1"}
  ],

  "points": [
    {
    "code": "point-1",
    "decisions": [
        {
          "code": "colori",
          "choices": [
            {"code": "rosso"},
            {"code": "giallo"}
          ]
        }
      ]
    }
  ]
}

and

{ "code": "mvt-agent", "owner": "$your_ownerCode",

  "goals": [
    {"code": "goal-2"}
  ],

  "points": [
    {
    "code": "point-2",
    "decisions": [
        {
          "code": "colour",
          "choices": [
            {"code": "red"},
            {"code": "black"},
            {"code": "green"}
          ]
        },
        {
          "code": "font",
          "choices": [
            {"code": "Helvetica"},
            {"code": "Times"}
          ]
        }
      ]
    }
  ]
}

You have to set some env to execute t/02-real_test.t You will find your data into Account/Keys and Users page.

Required env for execute full test's suite:

       Conductrics_apikey
       Conductrics_ownerCode
       Conductrics_agent_name=test-agent
       Conductrics_mvt_agent_name=mvt-agent

Test's sources are good examples about how to use this API, so "Use The Source Luke".

MORE INFO

Conductrics has many help pages available from the console, so signup and read it.

http://conductrics.com/

There are also Report API, Management API and Targetting Rule API.

ToDo

I wuold like to return promises for handling non blocking request to conductrics server.

AUTHORS

 Ferruccio Zamuner - nonsolosoft@diff.org

COPYRIGHT

This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.