Data Access¶
You can access meta data as well as results about your chat engagements over the GraphQL API at https://juji.ai/api/graphql
An example GraphQL query to list all engagements of a brand:
query
engagements($brandName: String!) {
getEngagementsByBrand(brandName: $brandName) {
name
order
status
}
}
with the variable brandName
specified in an JSON object:
{
brandName: "mycorp"
}
Consult the documentation of your GraphQL client library on the details of submitting GraphQL queries.
Output Format¶
Our API can return data in JSON, EDN as well as Transit format.
You can specify how you want to receive API responses by including the Accept
header set to any one of:
application/json
(default)application/edn
application/transit+json
The advantages of EDN and Transit are richer data types. With Transit you also get a more efficient over the wire format.
Errors¶
GraphQL always returns a 200 HTTP response status code, so we have to rely on
the errors
field of the response to check for errors.
Per the GraphQL specification, errors
is an array of maps (dictionaries). Each error map will have the following keys message
, category
, kind
and data
. data
is any valid JSON
or EDN
value and the other fields are all strings. There are five (5) broad categories of errors authentication
, authorization
, validation
, application
and unexpected
. Within each category, kind
explicitly identifies the actual error.
For example, an authentication errors look like:
{
"category": "authentication",
"kind": "auth.error/not-authenticated",
"message": "The operation requires you to be authenticated.",
"data": {}
}
Websocket¶
Some computational intensive API requests are handled with Websockt, so the results
can stream in when they become available. Since WebSocket requests cannot set custom headers, the JWT token should be sent as a query parameter auth-token
.
Upload Data for Analysis¶
It is possible to access Juji's analytics capabilities without using the chat platform. However, the same authentication requirement for data access described above is necessary.
Currently, we offer individual traits analysis, where our models infer an individual's personality and other individual traits using text that he or she has written.
The data analysis endpoint is https://juji.ai/api/analyze
The input file is expected to be POST
as a file
field in multipart/form-data
. There is no need to specify the content-type. If have to, put in application/json
or text/csv
respectively.
The input file can be either a JSON or CSV file with corresponding file suffix.
If the input is CSV, we expect the first column contains the identifier, and the second column contains a concatenation of an individual's written text as a single string. The CSV file should not have header.
If the input is JSON, we expect an array of objects, where
each object has two fields: id
and text
. text
will be a concatenation of
an individual's written text into a single string, and id
be any string that
is unique among the input rows/objects.
The output is streamed back in CSV format, where the first row is the header with the names of the traits. The values of the traits are percentage.
Juji does not retain the uploaded files, as they are immediately discarded after the output is returned.
Download Chat Report¶
Basic Conversation Report¶
Basic chat report can be fetch using GET request.
curl --location --request GET \
'https://juji.ai/api/reports?report-key=individual-results&auth-token=<token-value>&engagement-id=<engagement-id>&include-test-data=false'
https://juji.ai/api/reports
and in the query string, set the report-key
to "individual-results", then fill in the engagement-id
and other optional parameters. Engagement id can be queried using API call such as Engagements
or you can find the id as the last part of the generated web URL after you deployed your chatbot. When using API key, auth-token
parameter is not required. include-test-data
is set to false
by default.
The response will be a string of data in csv format. The data includes conversation responses of each participatants of the given engagement. An exameple is shown below.
First Name,Last Name,Email,User Agent,Completion Code,Location,Start,Finish,Duration (minutes),Channel,Gather demographics: gender,Asked FAQs
t1,,juji-user-548327dc-aa1f-4054-8ab4-a37e203e0c26@juji-inc.com,"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",,"{:timezone ""America/Los_Angeles"", :ip ""12.34.56.789"", :area-code 0, :dma-code 0, :city ""A"", :country-code ""US"", :metro-code 0, :longitude -123.4567, :postal-code ""12345"", :region ""California"", :org ""AT&T Services, Inc."", :latitude 123.4567, :country-name ""United States""}",2021-01-20 23:24:06,,1,web,,
Optionally you can also include tarit percentile scores in your individual results if you have access to personality analytics. The following boolean parameters can be used to specify the traits you desire:
big5_factors
big5_facets
holland_codes
shopper_dna
soft_skills
moral_characters
Below is an example using cRUL and well as its response.
curl --location --request GET \
'https://juji.ai/api/reports?report-key=individual-results&auth-token=<token-value>&engagement-id=<engagement-id>&include-test-data=false&big5_factors=True&soft_skills=True'
First Name,Last Name,Email,User Agent,Completion Code,Location,Start (America/Los_Angeles),Finish,Duration (minutes),Channel,Tell me about yourself,Asked FAQs,big5_factors_neuroticism,big5_factors_extroversion,big5_factors_openness,big5_factors_agreeableness,big5_factors_conscientiousness,soft_skills_leadership,soft_skills_people_skills,soft_skills_innovativeness,soft_skills_grit,soft_skills_action_oriented,soft_skills_resourcefulness,soft_skills_inquisitiveness,soft_skills_teamwork,soft_skills_communication,soft_skills_positivity,soft_skills_calmness,soft_skills_independence,soft_skills_detail_oriented,soft_skills_adaptability
John,,juji-user-a3f2ac4e-b614-4151-8b01-839c654109a3@juji-inc.com,"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36",,"{:timezone ""America/Los_Angeles"", :ip ""12.34.56.789"", :area-code 0, :dma-code 0, :city ""A"", :country-code ""US"", :metro-code 0, :longitude -123.4567, :postal-code ""12345"", :region ""California"", :org ""AT&T Services, Inc."", :latitude 123.4567, :country-name ""United States""}",2022-05-10 23:14:03,2022-05-10 23:14:33,0,web,I am an AI software engineer at Juji. I train chatbots,,17.066186189512738,9.182373692137357,92.17822650548699,18.897750348327946,92.82761574531013,89.66562210622642,0.44348765009564195,99.34258717762158,93.0057170659342,75.51779746902791,99.95202433931146,99.77415041423164,3.503366467149105,42.572588437085365,18.1462436235978,95.45517236734389,99.99089855797502,93.71164811901794,83.54958737675481
support at(@) juji.io.
.
Standard Big5 Report¶
Alternatively, there is an API for retrieving Big5 personality scores with trait names. This can be done with the same GET request as the regular individual results API except the report-key
is set to big5
.
curl --location --request GET \
'https://juji.ai/api/reports?report-key=big5&auth-token=<token-value>&engagement-id=<engagement-id>&include-test-data=false'
Similarly, the response will be a string of data in csv format. The data includes conversation responses and personality scores (if applicable) of each participatants of the given engagement. An exameple is shown below.
First Name,Last Name,Email,User Agent,Completion Code,Location,Start,Finish,Duration (minutes),Channel,Gather demographics: gender,Asked FAQs,Openness,Imagination,Artistic_Interest,Feelings,Adventurousness,Intellectual_Curiosity,Liberalism,Conscientiousness,Self_Efficacy,Orderliness,Dutifulness,Achievement_Striving,Self_Discipline,Cautiousness,Extroversion,Friendliness,Gregariousness,Assertiveness,Activity_Level,Excitement_Seeking,Cheerfulness,Agreeableness,Trust,Straightforwardness,Altruism,Cooperation,Modesty,Sympathy,Neuroticism,Anxiety,Anger,Depression,Self_Consciousness,Impulsiveness,Vulnerability
t1,,juji-user-548327dc-aa1f-4054-8ab4-a37e203e0c26@juji-inc.com,"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",,"{:timezone ""America/Los_Angeles"", :ip ""12.34.56.789"", :area-code 0, :dma-code 0, :city ""A"", :country-code ""US"", :metro-code 0, :longitude -123.4567, :postal-code ""12345"", :region ""California"", :org ""AT&T Services, Inc."", :latitude 123.4567, :country-name ""United States""}",2021-01-20 23:24:06,,1,web,,,36.13541798365461,13.290581805094925,69.90396487992511,77.15953217560208,14.352478113721617,21.452611092889672,20.653339834694272,44.28527848667517,54.561037503275145,82.38387886673544,91.3233545692471,10.616104982056406,19.55675956043462,7.270535438302267,75.0045233539362,84.47620138247996,80.35717998131344,66.9274661801379,54.78618912035408,82.03414681082974,81.44595664850205,82.06446262912935,90.87886328546921,85.49197212672262,83.83877023080315,75.70710344618357,88.70960654682591,67.76046013877169,78.67947741962988,67.04116468437702,86.20177231934017,78.76662084022674,69.74154161142214,99.68790702532878,70.6378580370844