It is a far from simple issue. Particularly since in your example, Details does not contain the word "call", it contains the word "called" so even if we parsed the data in details into a return separated list of key words, there would be no match to any record in your validation table.
Best solution that I can think of is to use a looping script that searches the field for one such entry value at a time;
The following assumes a relationship between activities and validation based on the Catesian join operator so that any record in activities matches to all records in Validation. (You could also use ExecuteSQL to generate this list in the variable without any relationship to Validation)
You would also have a field named "ActionToTake" in Validation that stores the text associated with each entry value such as: "Mark this activity a Phone Contact?"
Set Variable [$EntryList ; value: List ( Validation::Entry ) ]
Set Variable [$ActionList ; value: List ( Validation::ActionToTake ) ]
Set Variable [$K ; $K + 1]
Exit Loop If [ $K > Valuecount ( $EntryList ) ]
If [ PatternCount ( Activity::Details ; GetValue ( $EntryList ; $K ) ) // entry found in details text ]
Show Custom Dialog [ GetValue ( $ActionList ; $K ) ]