Webhook 資料格式

看到這邊,應該會好奇,當使用者每次和機器人聊天的時候,LINE 也會打到我們提供的 webhook URL ,那 LINE 究竟給了我們什麼呢?

我們先試著在上一篇建立的 app\Http\Controller\LineController 中修改一些東西,印出來看看

try {
    $events = $bot->parseEventRequest($body, $signature);
    Log::info($events); // 增加這個 Log,將收到的訊息印出來
} catch (\Exception $e) {
    Log::error($e->getMessage());
}

 

然後對著聊天機器人傳送一則訊息看看,就可以看到這個 $events 裡面到底放了什麼?

array (
0 =>
LINE\LINEBot\Event\MessageEvent\TextMessage::__set_state(
array(
'message' =>
array (
'type' => 'text',
'id' => '10629983864837',
'text' => '這是一段文字',
),
'event' =>
array (
'type' => 'message',
'replyToken' => '773xxxxxx10044c9b52ac0b185145023',
'source' =>
array (
'userId' => 'Ubefxxxxxxbdc59b024344f4ce81e7911',
'type' => 'user',
)
)
'timestamp' => 1569403340191
)
),
)

 

此時 LINE 收到使用者的文字訊息後,會把這則文字訊息傳到我們剛剛給的 webhook 位址。我們把它印出來後,可以看到這個 JSON 是一個 webhook event object,此物件(events)包含 1 ~ n 個 event。先拿一個 event 來說明,從第一個先看:

'message' =>
array (
    'type' => 'text',
    'id' => '10629983864837',
    'text' => '這是一段文字',
),

 

message 這個區塊主要是描述使用者傳來的訊息,我們可以從 type 看出這段訊息的類型; id 可以看出這則訊息的唯一識別碼; text 會有使用者傳過來的訊息。

接著是第二個區塊:

'event' =>
array (
    'type' => 'message',
    'replyToken' => '773xxxxxx10044c9b52ac0b185145023',
    'source' =>
    array (
        'userId' => 'Ubefxxxxxxbdc59b024344f4ce81e7911',
        'type' => 'user',
    ),
)

 

這裡描述著使用者傳過來的事件資訊。 type 是這則訊息的類型。 replyToken 則是在回應此訊息使用,當程式要回應此訊息時須使用此 token,這個 token 的有效時間不一定,但是相當的短,所以要回覆的話要儘快。

再來是, source 的這個部分。這裡會描述 哪種人? 和 誰? 傳過來的訊息。 type 可以得知是群組傳的訊息?還是使用者傳的訊息?所以可能是 user 或者是 group ; userId 則是傳過來的使用者的 id ,假設是群組傳過來的話,將會是 groupId (若使用者有同意 official accounts terms of use ,則會再多一個屬性 userId)。

最後一個 :

'timestamp' => 1569403340191

 

這個很單純就是這則訊息的時間戳,採用 UNIX 時間,也就是從 UTC 1970 年 1 月 1 日 0 時 0 分 0 秒起到現在不考慮閏秒的總秒數。

Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *