Messenger 開放平台自然語言處理

自然語言處理(NLP)可讓您瞭解商家收到的訊息,並從中擷取有意義的資訊(日期、時間等)。您可以利用此資訊來識別意圖,以實作對話所需的訊息體驗。

使用 Meta 的內建 NLP 可減少計入訊息速率限制的 API 呼叫。

運作方式

在訊息送達商家之前,Meta 的內建 NLP 會先使用來自 Meta 的 Wit.ai 以及指出剖析器正確概率的信賴水準來剖析訊息,以幫助偵測含義並擷取資訊。然後訊息會像往常一樣轉送給商家,並且會伴隨在訊息中偵測到之任何有意義的資訊、實體特徵一起傳送。例如,如果訊息中包含「你好,明天下午 2 點」之類的短句,則您會取得包含問候語的特徵和包含實際時間戳記的實體。

內建 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 權限

傳送 POST 要求至 /PAGE-ID/nlp_configs 端點,並將 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

Webhook 通知

如果啟用內建 NLP,則每個訊息物件的 message Webhooks 通知中將會包含相關的 NLP 實體和特徵。

實體和特徵

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 開放平台預設會傳回下列特徵。

資訊特徵

再見(僅限英文)

wit$bye

問候語(僅限英文)

wit$greetings

觀感

wit$sentiment

謝謝(僅限英文)

wit$thanks

請參閱我們的 Wit.ia 文件 ,進一步瞭解可用的實體、特徵等等。

通知範例

以下範例為包含短句「明天下午 4 點見」的訊息,且在剖析後會包含 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
  }
}