打造Line Bot API with PHP (How to write LINE BOT?)

第一篇文章,希望記錄下遇到的雷,也希望可以到幫助別人

Line BOT API 申請帳號的步驟就不說了

https://developers.line.me/ 申請完成會得到以下資訊

另一個重點是callback URL 需要https 才可以

P.S 當初我在設定完成的時候剛開始按VERIFY都過不了,過一天按就完成
可能SSL剛設定好需要時間,如果剛開始過不了可以等一段時間再按

官方也有提供 SDK

PHP SDK 參考 : https://github.com/line/line-bot-sdk-php

如果你會用composer安裝 基本上沒有什麼問題可以直接使用

今天要講另一個方式,如何直接寫一個send message 回復使用者

主要分兩個部分,接收訊息跟發送

第一個部分是接收到使用者訊息

在你API callback 呼叫的function裡面打上這兩行

$jsonString = file_get_contents('php://input');
$jsonObject = json_decode($jsonString);

就可以取得使用者發送的訊息資訊

再從裡面找到使用者的MID跟發送過來的訊息

//取得MID
$targetMID = $jsonObject->{"result"}[0]->{"content"}->{"from"};
//取得訊息
$message = $jsonObject->{"result"}[0]->{"content"}->{"text"};

第二部分發送

如果是使用 SDK 的人 ,只要把 targetMid 帶入 到sendText()就能發送訊息

//把傳來的訊息再傳回去,就可以做到 echo 機器人
$bot->sendText([$targetMID], $message);

以下介紹不使用SDK的方法,主要就是參照文件發送一個POST REQUEST 出去

格式參考資料:https://developers.line.me/bot-api/api-reference#sending_message

最重要的就是設定好 header

//訊息設定
$messageFormat = ["contentType" => 1,"toType" => 1,"text" => "hello!!XXX"];
//POST
$postData = [
"to" => [$targetMID],
"toChannel" => "1383378250",
"eventType" => "138311608800106203",
"content" => $messageFormat
];
$channelID      = "填寫上註冊得到的channelID";
$channelSecret = "填寫上註冊得到的channel Secret";
$channelMID = "填寫上註冊得到的MID";
//API URL
$url = "https://trialbot-api.line.me/v1/events";
//curl設定
$headers = array(
"Content-Type: application/json; charser=UTF-8",
"X-Line-ChannelID: " . $channelID,
"X-Line-ChannelSecret: " . $channelSecret,
"X-Line-Trusted-User-With-ACL: " . $channelMID
);

//curl
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//如果失敗可以印出 $result 看錯誤訊息
$result = curl_exec($ch);

到這邊這樣就完成LINE機器人回應了

Like what you read? Give 情史黃 a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.