HOME | 預設分類 | 如何建立Line 聊天機器人

如何建立Line 聊天機器人

2021/05/10/11:45 , Post in 預設分類 , 評論(0) , 引用(0) , 閱讀(2246) , Via 本站原創
在台灣幾乎每個人都有Line帳號,很多公事、同學聯繫也都依靠LINE

這篇文章就是紀錄怎麼開發一個LINE聊天機器人,能夠主動發送訊息

取代以往用簡訊或EMAIL提醒的功能,畢竟大家會去看LINE的頻率應該

比打開手機/電腦看email的頻率要高吧。

[建立機器人]

首先從網頁上登入進入developers,登入你的line帳號後

建立一個channels,進入MessageAPI中,可以取得你的Channel access token

接著再Basic Setting中可以找到你的Channel secret,以及user id,先把這

幾個資訊記錄下來。

接著到MessageAPI中,有一個QR code,妳可以開啟你的LINE掃描,就可以將

這個line機器人加入成為朋友了;在這邊你也可以設定是否可以自動加入朋友

自動回覆訊息、加入好友歡迎訊息等設定,基本上一個沒有任何功能的機器人。

就完成了。

[傳送與回覆訊息]

line機器人傳送訊息只是透過簡單的WEB API,再header加上剛剛取得的access token

並將要傳送的對象,訊息內容用json格式包起來

以php為例

傳送給某一位朋友或是一個聊天室


function push($message)
{
    global $channelAccessToken;
    $payload = [
       'to' => "要傳送對象的userID",
       'messages' => [
           [
               'type' => 'text',
               'text' => $message
           ]
       ]
    ];
// Send Request by CURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/push');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
       'Content-Type: application/json',
       'Authorization: Bearer ' . $channelAccessToken
    ]);
    $result = curl_exec($ch);
    curl_close($ch);
}


  

在payload中放入要傳送的對象以及內容即可(如何取得userid或是group id後面會再提到)。

傳送給所有人的話方法一樣,URL改成https://api.line.me/v2/bot/message/multicast 即可

若機器人單純只是要主動傳送訊息到這邊即可。

[接收訊息以及webhook]

在MessageAPI中有一個webhook設定,webhook是類似一個中介的作用,可以攔截所有的原始訊息

可以透過webhook找到使用者/群組的ID,也可以依據使用者傳送的訊息進行回覆。

首先你必須要申請一個網站,以及https的憑證,設定完Webhook URL後點下verify,顯示成功後

接著到webhook的網頁上放上這兩行

$json_string = file_get_contents('php://input');

error_log($json_string);

接著到聊天室中隨便點傳一個訊息,在/var/log/httpd/ssl_error_log中就可以看到類似下面的內容


{
  "destination":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "events":
  [
    {  
      "type":"message",
      "message":
      {
        "type":"text",
        "id":"xxxxxxxxxxxxxxxxxxxx",
        "text":"123"
      },
      "timestamp":1620617008589,
      "source":
      {
        "type":"user",
        "userId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  #從這邊可以取得你的ID,或是群組的ID
      },
      "replyToken":"token",      #如果要回覆訊息需要加上這個token
      "mode":"active"
    }
  ]
}


可以看到詳細的一些內容,要回覆訊息的話就是依據text的內容去呼叫reply得函式

以下的範例就是當收到有人說"測試"時,使用reply回覆"測試回覆"。


    $access_token ='access_token';
    $json_string = file_get_contents('php://input');
    $json_obj = json_decode($json_string);
    $event = $json_obj->{"events"}[0];
    $message = $event->{"message"}->{"text"};
    $reply_token = $event->{"replyToken"};
    if($message == "測試")
        reply("測試回覆",$reply_token);

    function reply($message,$reply_token)
    {
        global $access_token;
        $post_data = [
            "replyToken" => $reply_token,
              "messages" => [
                [
                  "type" => "text",
                  "text" => $message
                ]
          ]
        ];
        $ch = curl_init("https://api.line.me/v2/bot/message/reply");
        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($post_data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Authorization: Bearer '.$access_token
        ));
        $result = curl_exec($ch);
        curl_close($ch);
    }


PS:Line機器人有付費的版本也有免費的版本,免費版有限制每個月可以"主動"發送訊息的數量,但是回覆訊息的

數量是沒有限制的。

發表評論

暱稱

網址

電郵

開啟HTML 開啟UBB 開啟表情 隱藏 記住我 [登入] [註冊]