Character Conversation API
Character Conversation API - Code Example for Roblox integration with Convai.
The following piece of code is the most essential section to make a successful call to the Convai server to get a response in a conversation with a character.
function my_functions.callConvai(msg, sessionID, apiKey, charID)
local httpSrv = game:GetService("HttpService")
local baseUrl = "https://api.convai.com/character/getResponse"
local gpt_response
local function request()
-- We restrict from making unnecessary calls if the following values are not set properly
if apiKey == "" then
print("Please provide a valid API Key")
return
end
if charID == "" then
print("Please enter a valid Character ID")
return
end
-- REST API Cal
local response = httpSrv:RequestAsync({
Url = baseUrl,
Method = "POST",
Headers = {
-- This is the most convenient way to send form-data in Roblox
["Content-Type"] = "application/x-www-form-urlencoded",
["CONVAI-API-KEY"] = apiKey
},
Body = string.format([[&userText=%s&sessionID=%s&charID=%s&voiceResponse=%s]], msg, sessionID, charID, 'False')
})
-- Inspect the response table
if response.Success then
print("Status code:", response.StatusCode, response.StatusMessage)
print("Response body:\n", response.Body)
local data = httpSrv:JSONDecode(response.Body)
print("Response Text: ", data.text)
print("Response Session ID: ", data.sessionID)
gpt_response = response.Body --data.text
else
print("The request failed:", response.StatusCode, response.StatusMessage)
end
end
-- Wrap the function in a 'pcall' to prevent the script from breaking if the request fails
local success, message = pcall(request)
--print("Status code: ", message)
if gpt_response == nil then
gpt_response = httpSrv:JSONEncode({sessionID = sessionID, text = "Sorry, I can't chat right now."})
end
return gpt_response
end
The above function is called in the chatbox implementation in the demo game. Here is an overview of what each part is doing:
function my_functions.callConvai(msg, sessionID, apiKey, charID)
The function accepts the message we get from the user. We send that along with the sessionID, and characterID. We also pass the API Key that we have set previously.
local httpSrv = game:GetService("HttpService")
HttpService allows HTTP requests to be sent from game servers. Details.
Now for the most important portion of the code:
-- REST API Cal
local response = httpSrv:RequestAsync({
Url = baseUrl,
Method = "POST",
Headers = {
-- This is the most convenient way to send form-data in Roblox
["Content-Type"] = "application/x-www-form-urlencoded",
["CONVAI-API-KEY"] = apiKey
},
Body = string.format([[&userText=%s&sessionID=%s&charID=%s&voiceResponse=%s]], msg, sessionID, charID, 'False')
}
While the Body of the request might look like a complicated string, it is actually quite simple. To break it down into its simple components, it can be viewed as:
{
'userText': '<msg>',
'sessionID': '<session-id>',
'charID': '<character-id>',
'voiceResponse': 'False'
}
The rest of the part is a simple response handling code. Since the response, we receive is JSON data, we have to decode that on the client side to read its content:
local data = httpSrv:JSONDecode(response.Body)
print("Response Text: ", data.text)
print("Response Session ID: ", data.sessionID)
That concludes our discussion on the /getResponse API.
Last updated
Was this helpful?