针对 Messenger 开放平台的自然语言处理

自然语言处理 (NLP) 可便于您从自家企业所收到的消息中,了解并提取有意义的信息(日期、时间等)。之后,您便可使用这些信息来确定意向,实现对话所需的消息体验。

使用 Meta 的内置 NLP 可减少计入消息流量限制的 API 调用。

运作方式

在将消息送达至您的企业之前,Meta 的内置 NLP 会先使用 Meta 的 Wit.ai 及表示解析器正确概率的置信度水平解析消息,以帮助检测含义并提取信息。随后,系统会照常把消息,以及在消息中检测到的任何有意义信息、实体特征,一并转发给您的企业。例如,如果消息包含“hello, tomorrow at 2pm”之类的短句,您会收到包含问候的特征,以及包含实际时间戳的实体。

内置 NLP 会自动启用语言识别功能,并会根据用户个人主页中的语言自动本地化日期和时间。

Wit.ai

Wit.ai 是解析用户消息并从中建立实体的应用。您可以为支持的语言使用默认的 Wit.ai,或者为您想要支持的每种语言创建自己的 Wit.ai 应用。Messenger 开放平台收到消息后,会先找出最常检测到的语言,然后使用关联的 Wit.ai 应用来提取实体。如果没有与最常检测到的语言关联的 Wit.ai 应用,则系统会使用默认语言模式。

请参阅 Wit.ai 文档,进一步了解 Wit.ai 应用及创建和测试您自己的自定义 Wit.ai 应用 ,以及受支持语言列表

向您的公共主页添加 NLP

可便于您向企业公共主页添加 NLP 的方法分为两种:使用 Meta 应用面板或采用编程方式。

使用应用面板

如要使用应用面板添加内置 NLP,请在产品下方前往 Messenger > 设置,然后向下滚动至内置 NLP 部分。从下拉菜单中选择 Facebook 公共主页,并把开关切换至开启。然后,选择语言模型,其中包含新增多种语言的选项。高级设置可便于您选择 NLP 版本、用于获取更多实体相关信息的详细标记,以及您想要接收的每个意图和特征的 n-best 值。此设置还会确定系统传回的已检测到的语言数量。

系统会编译您公共主页收件箱中过往对话的随机示例,并将其显示在新建的 Wit 应用中。您可立即在 Wit.ai 应用中标记示例。

以编程方式

如要以编程方式添加 NLP,您需要具备下列项目:

  • 从可以在公共主页上执行 MESSAGING 任务的用户处获取的公共主页访问口令
  • 公共主页编号
  • pages_messagingpages_manage_metadata 权限

/PAGE-ID/nlp_configs 端点发送 POST 请求,并将 nlp_enabled 参数设为 true,从而为公共主页启用 NLP。您还可以加入 model 参数,设置除默认语言(英文)以外的语言。

请参阅公共主页 NLP 参考文档 ,了解更多信息。

请求示例

为方便阅读,示例格式已经过调整。
curl -i -X POST "https://graph.facebook.com/LATEST-GRAPH-API-VERSION/me/nlp_configs
      ?nlp_enabled=true
      &model=PORTUGUESE 
      &access_token=PAGE-ACCESS-TOKEN"

您可运用 custom_token 参数以使用自定义 Wit.ai 应用,并通过 POST 请求更新 NLP 参数。如要禁用 NLP,请发送 POST 要求,并将 nlp_enabled 参数设置为 false

Webhooks 通知

如果已启用内置 NLP,则相关 NLP 实体和特征将包含在各消息对象的 message Webhooks 通知中。

实体和特征

默认情况下,Messenger 开放平台会返回下列实体。

信息实体

金额

wit$amount_of_money:amount_of_money

日期/时间

wit$datetime:$datetime

距离

wit$distance:distance

时长

wit$duration:duration

邮箱

wit$email:email

地点

wit$location:location

手机号

wit$phone_number:phone_number

数量

wit$quantity:quantity

温度

wit$temperature:temperature

网址

wit$url:url

体积

wit$volume:volume

内置特征

默认情况下,Messenger 开放平台会返回下列特征。

信息特征

Bye(仅限英文)

wit$bye

Greetings(仅限英文)

wit$greetings

感受

wit$sentiment

Thanks(仅限英文)

wit$thanks

请参阅我们的 Wit.ia 文档 ,进一步了解可用实体和特征等信息。

通知示例

在以下示例中,信息包含短句“see you tomorrow at 4pm”,并会在系统执行解析后加入 wit$datetimewit$sentiment 实体:

{...,
  "entities": {
    "wit$datetime:datetime": [
      {
        "id": "340464963587159",
        "name": "wit$datetime",
        "role": "datetime",
        "start": 8,
        "end": 23,
        "body": "tomorrow at 4pm",
        "confidence": 0.9704,
        "entities": [],
        "type": "value",
        "grain": "hour",
        "value": "2020-06-16T16:00:00.000-07:00",
        "values": [
          {
            "type": "value",
            "grain": "hour",
            "value": "2020-06-16T16:00:00.000-07:00"
          }
        ]
      }
    ]
  },
  "traits": {
    "wit$sentiment": [
      {
        "id": "5ac2b50a-44e4-466e-9d49-bad6bd40092c",
        "value": "neutral",
        "confidence": 0.6162
      }
    ]
  }

解析 NLP 消息

在您的 messages Webhooks 中,您可利用默认 NLP 来回复消息。举例来说,如果您将 handleMessage() 功能设为回复收到的每一条消息,您便可使用 greetings 实体来发送相应回复:

function firstTrait(nlp, name) {
  return nlp && nlp.entities && nlp.traits[name] && nlp.traits[name][0];
}

function handleMessage(message) {
  // check greeting is here and is confident
  const greeting = firstTrait(message.nlp, 'wit$greetings');
  if (greeting && greeting.confidence > 0.8) {
    sendResponse('Hi there!');
  } else { 
    // default logic
  }
}