Search code examples
c#pandorabots

How to connect to XML-RPC from c#


How to connect to XML-RPC Api from c# ,

A client can interact with a Pandorabot by POST'ing to:

http://www.pandorabots.com/pandora/talk-xml The form variables the client needs to POST are:

botid - see H.1 above. input - what you want said to the bot. custid - an ID to track the conversation with a particular customer. This variable is optional. If you don't send a value Pandorabots will return a custid attribute value in the element of the returned XML. Use this in subsequent POST's to continue a conversation.

How to call?


Solution

  • This should get you going:

       public void Talk()
       {
            string xmlResult = null;
            Result result = null;  // Result declared at the end 
            string botId = "c49b63239e34d1"; // enter your botid
            string talk = "Am I a human?"; 
            string custId = null; // (or a value )
            using (var wc = new WebClient())
            {
                var col = new NameValueCollection();
    
                col.Add("botid", botId);
                col.Add("input", talk);
                if (!String.IsNullOrEmpty(custId))
                {
                    col.Add("custid", custId);
                }
    
                byte[] xmlResultBytes = wc.UploadValues(
                    @"http://www.pandorabots.com/pandora/talk-xml", 
                    "POST", 
                    col);
                xmlResult = UTF8Encoding.UTF8.GetString(xmlResultBytes);
                result = Result.GetInstance(xmlResultBytes);
            }
    
            //raw result
            Console.WriteLine(xmlResult);
    
            // use the Result class
            if (result.status == 0)  // no error
            {
                Console.WriteLine("{0} -> {1}", 
                    result.input, result.that);
            }
            else  // error
            {
                Console.WriteLine("Error: {0} : {1}", 
                    result.input, result.message);
            }
        }
    
    
    [XmlRoot(ElementName="result")]
    public class Result
    {
        static XmlSerializer ser = new XmlSerializer(typeof(Result) , "");
    
        public Result()
        {
        }
    
        public static Result GetInstance(byte[] bytes)
        {
            return (Result)ser.Deserialize(new MemoryStream(bytes));
        }
    
        [XmlAttribute]
        public int status { get; set; }
        [XmlAttribute]
        public string botid { get; set; }
        [XmlAttribute]
        public string custid { get; set; }
        [XmlElement]
        public string input { get; set; }
        [XmlElement]
        public string that { get; set; }
        [XmlElement]
        public string message { get; set; }
    }