Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

ChatGPT integration with ServiceNow VirtualAgent

AnveshKumar M
Tera Sage
Tera Sage

Hello Folks!!!

Today I got some time to explore ChatGPT and immediately thought of Integrating with ServiceNow and I wanted it to be more interactive like the real ChatGPT (not the full UI). So, I thought of integrating with Virtual Agent which provides the real chat kind of experience. Follow along to try this on your own.

 

Step-1: Navigate to https://platform.openai.com/ and sign in with your account, then navigate to Your profile -> View API keys, then click on generate secret keys under API keys to get one for you.

 

Step-2: Create an outbound REST in your ServiceNow instance like the one in the screenshots below.AnveshKumarM_0-1677830093584.png

Add the following HTTP Headers:

Note: Authorization header value should be "Bearer <Your-Secret-Key>"AnveshKumarM_2-1677830184695.pngStep-3: Create a POST method in the REST message we created in the previous step.AnveshKumarM_5-1677830391322.png

Add the HTTP Query parameters:

 

{ 
  "model": "${model}",
  "prompt": "${prompt}",
  "max_tokens": ${max_tokens},
  "temperature": ${temperature}
}

AnveshKumarM_7-1677830567648.pngStep-4: Now create a new "Topic" in Virtual Agent (Conversational Interfaces -> Virtual Agent -> Designer) with name "chatGPT" and create a flow like the one below.

 

AnveshKumarM_8-1677830828716.png

Step-5: Create a script variable with default value '...'

AnveshKumarM_12-1677832607229.png

 

Step-6: A -> User Input: 

AnveshKumarM_9-1677830968924.png

For prompt I wrote the custom script, so that It will be used for the initial greeting prompt and displaying the answer as well.

 

(function execute() {
    if(vaVars.gptAnswer == '...' || vaVars.gptAnswer == ''){
        return 'Hello ' + vaInputs.user.name + '! Wanna ask something?' 
    }else{
        return vaVars.gptAnswer;
    }
})()

 

 

Step-7: B -> Decision:  If the user input is Bye or bye It will end the chat otherwise it will call go the REST message node.  See the condition for 'Bye' link. 

AnveshKumarM_10-1677831182651.pngStep-8: C -> Script Action: Used Script Action node to call the REST API, which will query the ChatGPT and stores the response in a script variable. See the code below.

 

(function execute() {
    try { 
         var r = new sn_ws.RESTMessageV2('chatGPT', 'Query');
         r.setStringParameterNoEscape('model', 'text-davinci-003');
         r.setStringParameterNoEscape('temperature', '0');
         r.setStringParameterNoEscape('max_tokens', '4000');
         r.setStringParameterNoEscape('prompt', vaInputs.question);
         var response = r.execute();
         var responseBody = response.getBody();
         var httpStatus = response.getStatusCode();
         if(httpStatus == '200'){
             var data = JSON.parse(responseBody);
             vaVars.gptAnswer = data['choices'][0]['text'];
             //singleOutMsg.setTextPart(data['choices'][0]['text']);
         }else{
             //singleOutMsg.setTextPart('HTTP Error: ' + httpStatus);
             vaVars.gptAnswer = 'HTTP Error: ' + httpStatus;
         }
    } catch(ex) {
        vaVars.gptAnswer = ex.message + '';
        //singleOutMsg.setTextPart(ex.message + '');
    }
})()
​

 

 

Step-9: Publish the topic and try the Virtual Agent in Service Portal.

 

AnveshKumarM_13-1677832743268.pngAnveshKumarM_14-1677832764001.png

 

That's it!!! Let me know if you have any thoughts to improve this.

 

Thanks,
Anvesh
7 REPLIES 7

shreefiles
Tera Contributor

Hi @Anvesh - Thanks for the detailed steps. You made it very easy for anyone to configure and it works perfectly. 

Thanks @shreefiles and I'm happy to see it helped.

 

 

Thanks,
Anvesh

Prem33
Tera Contributor

Hi @AnveshKumar M  solution working fine but Conversation is not end Flow not going to end side .even i click end conversation  And also if i test this chatgpt topic Non Other topics also not visible 

Prem33_1-1682864498291.png

 

Prem33_0-1682864265081.png