【发布时间】:2018-02-10 17:09:34
【问题描述】:
我正在通过 Messenger 平台 API 创建一个简单的聊天机器人,但我几乎不知道如何有效地识别机器人可以响应的一组命令。我目前正在使用 switch 语句来检测以感叹号开头的命令(例如 !showlist; !additem <single/set of parameter(s)>)。
这是我目前拥有的:
switch(true){
case stristr($receivedMsg,'!additem'):
....
}
在代码的任何匹配阶段,要么执行一组语句,要么先推断最终参数,然后使用它们执行一些语句。
我在上述设置中遇到的问题如下:
- 在无参数命令的情况下,即使命令拼写错误,也可以获得相关代码来执行。例如。 !additem#$%% 仍将调用 switch 语句中的实际命令代码。
-
对于带有参数的命令,在检索这些参数时使用以下语句:
$item=str_replace('!additem', '', $receivedMsg);在参数中包含不需要的文本很容易;您可以使用
trim()处理空格,或者暗示总会有空格并编辑上述语句以将其包含在函数中。例如。$item=str_replace('!additem ', '', $receivedMsg);但这会在尝试将命令与参数分开时出现其他问题。
我知道解决方案可以使用系统的字符串操作函数进行硬编码,但这对我来说似乎不正确。在这种情况下人们会怎么做?难道没有一种特定的方法可以精确匹配命令并安全地发现最终用户的拼写错误吗?
【问题讨论】:
-
参数是否用引号括起来?还是空格字符是分隔符?
-
@revo 没有。我希望单个空格字符作为分隔符(例如,在命令之后,所以 !additem{space}param)。然后如果有多个参数,我希望逗号作为分隔符。
-
为什么要为错位的命令烦恼?这会导致问题。
-
@Havenard 你所说的“错位命令”是什么意思?
-
@MarcoDufal 没关系,我想我看错了那里的东西,无论如何你不应该为拼写错误的命令而烦恼,如果我们要开始尝试猜测用户到底想用他的无能做什么为了提供具有正确语法的命令,我们将需要进入人工智能领域。这绝对不是机器人的操作方式。
标签: php regex string string-matching chatbot