Calling WSDL URL from service node

Hello. I want to make call to a WSDL URL http://www.dneonline.com/calculator.asmx?wsdl using service node. However, after configuring the service node for GET/POST methods I always get an ESOCKETTIMEDOUT error with status code 400.
The URL works fine when tested with SOAP UI.

I’ve learnt from the documentation that WSDL URL can be used with Alert Tasks but setting an alert doesn’t serve me the purpose. Please help me to know if there is some other way of hitting a WSDL through kore.

Here are the snapshots of dialog configuration at service node, requested payload and expected response.service_node_config Request_payload_header Request_payload_body expected_response

When you make a GET call to the WSDL end point (from a rest client like POSTMAN or servicenode from kore.ai bot builder), the response would show us the details like service endpoint (http://www.dneonline.com/calculator.asmx) to call, target namespace, operations allowed (Add, multiple, divide etc) and the elements that can be passed for performing these operations (intA, intB). Please refer to the highlighted elements in the response from in bold
http://www.dneonline.com/calculator.asmx?wsdl

<?xml version="1.0" encoding="utf-8"?>

<wsdl:definitions xmlns:soap=“http://schemas.xmlsoap.org/wsdl/soap/” xmlns:tm=“http://microsoft.com/wsdl/mime/textMatching/” xmlns:soapenc=“http://schemas.xmlsoap.org/soap/encoding/” xmlns:mime=“http://schemas.xmlsoap.org/wsdl/mime/” xmlns:tns=“http://tempuri.org/” xmlns:s=“http://www.w3.org/2001/XMLSchema” xmlns:soap12=“http://schemas.xmlsoap.org/wsdl/soap12/” xmlns:http=“http://schemas.xmlsoap.org/wsdl/http/” targetNamespace=“http://tempuri.org/” xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/”>
wsdl:types
<s:schema elementFormDefault=“qualified” targetNamespace=“http://tempuri.org/”>
<s:element name=“Add”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“intA” type=“s:int” />
<s:element minOccurs=“1” maxOccurs=“1” name=“intB” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“AddResponse”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“AddResult” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“Subtract”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“intA” type=“s:int” />
<s:element minOccurs=“1” maxOccurs=“1” name=“intB” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“SubtractResponse”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“SubtractResult” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“Multiply”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“intA” type=“s:int” />
<s:element minOccurs=“1” maxOccurs=“1” name=“intB” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“MultiplyResponse”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“MultiplyResult” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“Divide”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“intA” type=“s:int” />
<s:element minOccurs=“1” maxOccurs=“1” name=“intB” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
<s:element name=“DivideResponse”>
<s:complexType>
<s:sequence>
<s:element minOccurs=“1” maxOccurs=“1” name=“DivideResult” type=“s:int” />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name=“AddSoapIn”>
<wsdl:part name=“parameters” element=“tns:Add” />
</wsdl:message>
<wsdl:message name=“AddSoapOut”>
<wsdl:part name=“parameters” element=“tns:AddResponse” />
</wsdl:message>
<wsdl:message name=“SubtractSoapIn”>
<wsdl:part name=“parameters” element=“tns:Subtract” />
</wsdl:message>
<wsdl:message name=“SubtractSoapOut”>
<wsdl:part name=“parameters” element=“tns:SubtractResponse” />
</wsdl:message>
<wsdl:message name=“MultiplySoapIn”>
<wsdl:part name=“parameters” element=“tns:Multiply” />
</wsdl:message>
<wsdl:message name=“MultiplySoapOut”>
<wsdl:part name=“parameters” element=“tns:MultiplyResponse” />
</wsdl:message>
<wsdl:message name=“DivideSoapIn”>
<wsdl:part name=“parameters” element=“tns:Divide” />
</wsdl:message>
<wsdl:message name=“DivideSoapOut”>
<wsdl:part name=“parameters” element=“tns:DivideResponse” />
</wsdl:message>
<wsdl:portType name=“CalculatorSoap”>
<wsdl:operation name=“Add”>
<wsdl:documentation xmlns:wsdl=“http://schemas.xmlsoap.org/wsdl/”>Adds two integers. This is a test WebService. ©DNE Online</wsdl:documentation>
<wsdl:input message=“tns:AddSoapIn” />
<wsdl:output message=“tns:AddSoapOut” />
</wsdl:operation>
<wsdl:operation name=“Subtract”>
<wsdl:input message=“tns:SubtractSoapIn” />
<wsdl:output message=“tns:SubtractSoapOut” />
</wsdl:operation>
<wsdl:operation name=“Multiply”>
<wsdl:input message=“tns:MultiplySoapIn” />
<wsdl:output message=“tns:MultiplySoapOut” />
</wsdl:operation>
<wsdl:operation name=“Divide”>
<wsdl:input message=“tns:DivideSoapIn” />
<wsdl:output message=“tns:DivideSoapOut” />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name=“CalculatorSoap” type=“tns:CalculatorSoap”>
<soap:binding transport=“http://schemas.xmlsoap.org/soap/http” />
<wsdl:operation name=“Add”>
<soap:operation soapAction=“http://tempuri.org/Add” style=“document” />
wsdl:input
<soap:body use=“literal” />
</wsdl:input>
wsdl:output
<soap:body use=“literal” />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name=“Subtract”>
<soap:operation soapAction=“http://tempuri.org/Subtract” style=“document” />
wsdl:input
<soap:body use=“literal” />
</wsdl:input>
wsdl:output
<soap:body use=“literal” />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name=“Multiply”>
<soap:operation soapAction=“http://tempuri.org/Multiply” style=“document” />
wsdl:input
<soap:body use=“literal” />
</wsdl:input>
wsdl:output
<soap:body use=“literal” />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name=“Divide”>
<soap:operation soapAction=“http://tempuri.org/Divide” style=“document” />
wsdl:input
<soap:body use=“literal” />
</wsdl:input>
wsdl:output
<soap:body use=“literal” />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name=“CalculatorSoap12” type=“tns:CalculatorSoap”>
<soap12:binding transport=“http://schemas.xmlsoap.org/soap/http” />
<wsdl:operation name=“Add”>
<soap12:operation soapAction=“http://tempuri.org/Add” style=“document” />
wsdl:input
<soap12:body use=“literal” />
</wsdl:input>
wsdl:output
<soap12:body use=“literal” />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name=“Subtract”>
<soap12:operation soapAction=“http://tempuri.org/Subtract” style=“document” />
wsdl:input
<soap12:body use=“literal” />
</wsdl:input>
wsdl:output
<soap12:body use=“literal” />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name=“Multiply”>
<soap12:operation soapAction=“http://tempuri.org/Multiply” style=“document” />
wsdl:input
<soap12:body use=“literal” />
</wsdl:input>
wsdl:output
<soap12:body use=“literal” />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name=“Divide”>
<soap12:operation soapAction=“http://tempuri.org/Divide” style=“document” />
wsdl:input
<soap12:body use=“literal” />
</wsdl:input>
wsdl:output
<soap12:body use=“literal” />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name=“Calculator”>
<wsdl:port name=“CalculatorSoap” binding=“tns:CalculatorSoap”>
<soap:address location=“http://www.dneonline.com/calculator.asmx” />
</wsdl:port>
<wsdl:port name=“CalculatorSoap12” binding=“tns:CalculatorSoap12”>
<soap12:address location=“http://www.dneonline.com/calculator.asmx” />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Now on the bot builder, I have a dialog using the service http://www.dneonline.com/calculator.asmx that allows the users to perform these operations. Please refer to the below screenshots for details on the dialog configuration.

screencapture-bots-kore-ai-botbuilder-1608819080378 (1)
This content type for this service is expected in text/xml and so passing the headers
screencapture-bots-kore-ai-botbuilder-1608819135966
Configuring the request envelope for making the call
screencapture-bots-kore-ai-botbuilder-1608819213182

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/”>
soap:Body
<{{context.entities.operation}} xmlns=“http://tempuri.org/”>
{{context.entities.firstNum}}
{{context.entities.secondNum}}
</{{context.entities.operation}}>
</soap:Body>
</soap:Envelope>

Screenshots of bot in action:
screencapture-bots-kore-ai-botbuilder-1608819446550 screencapture-bots-kore-ai-botbuilder-1608819398318 screencapture-bots-kore-ai-botbuilder-1608819328699

Hope this helps.

1 Like

Also, the response that comes from the service in xml is converted to JSON by Kore.ai platform. So you could look up for the key in response object like context.calldneonline.response.body[“soap:Envelope”][“soap:Body”][0].AddResponse[0].AddResult[0]

1 Like