2016-05-08 9 views
3

私は、LINE BOT APIトライアルSDK PHP(https://github.com/line/line-bot-sdk-php)を使用しています。PHP SDKを使用してLINEユーザーmidを取得するには?

しかし、この方法のため:彼らにメッセージを送信するために、ユーザーのMIDを取得する方法

$res = $bot->sendText(['TARGET_MID'], 'Message'); 

ありがとうございました。

+0

はhttps://github.com/line/line-bot-sdk-php/blob/master/src/LINEBot/Receive/Receive.php見てもLINEのBOTのAPIをお読みください。ユーザーがボットに何かを入力すると、ボットはメッセージを受信し、ボットに送信した人を知ることができます。 – iownthegame

+0

@iownthegame回線ボットを設定したくない場合、送信メッセージの例だけを使用したい場合はどうなりますか?どのようにその場合のターゲットの中間を取得するには? – Drakes

答えて

1

1)インタラクティブなユーザーのmidを取得するための非常に簡単な方法は)本当に、楽しいハックの(よりAPI instructionsごとにコールバックURLを登録することで、そのように似ているURLにPOSTデータをキャプチャ:

// /callback/index.php 
<?php 
$postdata = file_get_contents("php://input"); 
@file_get_contents('https://'.$_SERVER['SERVER_NAME'].'/LINE/' . json_encode($postdata)); 

次に、チャネルコンソールでQRコードをスキャンし、試用ボットをLINEアカウントに追加します。それが終わったら、素早く "こんにちは!"テキスト。

必要に応じてPOSTデータをテキストファイルに保存するか、サーバーログを確認できます。

163.128.118.223 - - [03/Sep/2016:07:25:25 -0700] "POST /line/callback/ HTTP/1.1" 200 - "-" "ChannelEventDispatcher/1.0" 
106.152.218.107 - - [03/Sep/2016:07:25:25 -0700] "GET /LINE/{\"result\":[{\"content\":{\"toType\":1,\"createdTime\":1472114754839,\"from\":\"ub7dbd4a12c322f6c0117773d739c55a4\",\"location\":null,\"id\":\"4357194057879\",\"to\":[\"u2b6a4ba287028dee7291122094dac827\"],\"text\":\"Hello!\",\"contentMetadata\":{\"AT_RECV_MODE\":\"2\",\"SKIP_BADGE_COUNT\":\"true\"},\"deliveredTime\":0,\"contentType\":1,\"seq\":null},\"createdTime\":1472912724868,\"eventType\":\"138311609000106301\",\"from\":\"u236d23c2e36bd87217655609a1c31cb8\",\"fromChannel\":1241102815,\"id\":\"WB1519-3102846635\",\"to\":[\"u2b6a4ba287028dee7291122094dac827\"],\"toChannel\":1462261375}]} HTTP/1.1" 404 15 "-" "-" 

\"from\":\"ub7dbd4a12c322f6c0117773d739c55a4\"が適切な部分である:たとえば、あなたはこのようなものが表示される場合があります。


2)あなたはreceiving messagesを始めるしたい場合は、あなたのコールバックスクリプトとして次のように開始することができます。 BOTに「mid」というメッセージを送信するだけで、midと応答する必要があります。ここで

example of a mid reply

私はあなたのために含まsignature verificationで作ら始まるコールバックスクリプトです。

// /callback/index.php 
<?php 
// Show all errors for testing 
error_reporting(E_ALL); 

// SDK is installed via composer 
require_once __DIR__ . "/includes/vendor/autoload.php"; 

use LINE\LINEBot; 
use LINE\LINEBot\HTTPClient\GuzzleHTTPClient; 

// Set these 
$config = [ 
    'channelId' => LINE_CHANNEL_ID, 
    'channelSecret' => LINE_CHANNEL_SECRET, 
    'channelMid' => LINE_CHANNEL_MID, 
]; 
$sdk = new LINEBot($config, new GuzzleHTTPClient($config)); 

$postdata = @file_get_contents("php://input"); 
$messages = $sdk->createReceivesFromJSON($postdata); 

// Verify the signature 
// REF: http://line.github.io/line-bot-api-doc/en/api/callback/post.html#signature-verification 
$sigheader = 'X-LINE-ChannelSignature'; 
// REF: http://stackoverflow.com/a/541450 
$signature = @$_SERVER[ 'HTTP_'.strtoupper(str_replace('-','_',$sigheader)) ]; 
if($signature && $sdk->validateSignature($postdata, $signature)) { 
    // Next, extract the messages 
    if(is_array($messages)) { 
     foreach ($messages as $message) { 
      if ($message instanceof LINEBot\Receive\Message\Text) { 
       $text = $message->getText(); 
       if ($text == "mid") { 
        $fromMid = $message->getFromMid(); 

        // Send the mid back to the sender and check if the message was delivered 
        $result = $sdk->sendText([$fromMid], 'mid: ' . $fromMid); 
        if(!$result instanceof LINE\LINEBot\Response\SucceededResponse) { 
         error_log('LINE error: ' . json_encode($result)); 
        } 
       } else { 
        // Process normally, or do nothing 
       } 
      } else { 
       // Process other types of LINE messages like image, video, sticker, etc. 
      } 
     } 
    } // Else, error 
} else { 
    error_log('LINE signatures didn\'t match'); 
} 
関連する問題