Search code examples
javaaiml

is it possible to call Java functions from aiml?


I am creating a chatbot using Java and program ab. In few places I can’t answer the questions directly, I have to process something or call a web service and process the result and then reply back. In such cases how to include the result of my java function to the responses in the aiml.

Say,

User: What is the price of the product A?
Bot: The price of product A is $50 

In the above example, $50 is not going to be same always. I have to take that in run time. So how to solve this problem?

**AIML:**

<category>
    <pattern>WHAT IS THE PRICE OF THE *</pattern>
    <template>The price of <star/> is $<call some function price(productA)> 
    </template>
</category>

**JAVA:**

public int price(String product){
   // gets the product price
   // do the conversion 
   // apply discount
   return price;
}

Please someone help me. Thanks in advance.


Solution

  • Typically AIML extensions are implemented as an extension tag. So you wouldn't call a programming language method/function directly from AIML script. In the AB documentation you can find more details about implementing this kind of functionality here. Below is the relevant text with an updated link to PCAIMLProcessorExtension found in a forked project on GitHub. There a couple of practical examples on of working extensions can be found.

    AIMLProcessorExtension

    Program AB defines a Java Interface called AIMLProcessorExtension that you can use to define new AIML tags.

    A class implementing AIMLProcessorExtension must provide:

    • a Set of tag names.
    • a function to recursively evaluate the XML parse tree for each node associated with a new tag.

    The Program AB source includes a sample implementation of this interface called PCAIMLProcessorExtension, which defines a collection of tags simulating a contacts database.