2016-05-08 5 views
3

Ich verwende das LINE BOT API Test SDK PHP (https://github.com/line/line-bot-sdk-php).Wie bekomme ich LINE User mit PHP SDK?

Aber für diese Methode:

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

Wie die MID des Benutzers erhalten sie eine Nachricht senden?

Vielen Dank für Hilfe.

+0

siehe https://github.com/line/line-bot-sdk-php/blob/master/src/LINEBot/Receive/Receive.php und auch die Linie BOT-API lesen. Wenn der Benutzer etwas zum Bot eingibt, erhält der Bot die Nachricht und kann wissen, wer ihn an den Bot gesendet hat. – iownthegame

+0

@iownthegame Was passiert, wenn Sie den Line-Bot nicht einrichten möchten und nur das Beispiel für das Senden einer Nachricht verwenden möchten? Wie kommt man in diesem Fall zum Ziel? – Drakes

Antwort

1

1) Eine sehr schnelle Art und Weise die mid eines interaktiven Benutzers (eher ein Spaß Hack, wirklich) zu erhalten, ist eine Callback-URL gemäß der API instructions zu registrieren, dann zu dieser URL die POST-Daten erfassen, wie so :

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

Als nächstes scannen den QR-Code in der Kanal Konsole und fügen Sie Ihre Studie bot zu Ihrem Online-Konto. Danach senden Sie ein kurzes "Hallo!" Text.

Sie könnten dann die POST-Daten in eine Textdatei speichern, wenn Sie möchten, oder Sie könnten die Serverprotokolle überprüfen.

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 "-" "-" 

Die \"from\":\"ub7dbd4a12c322f6c0117773d739c55a4\" ist der betreffende Teil: Zum Beispiel könnten Sie etwas sehen.


2) Wenn Sie mit receiving messages beginnen möchten, können Sie wie folgt als Callback-Skript starten. Senden Sie einfach Ihrem BOT die Nachricht 'mid' und es sollte mit Ihrer mid antworten.

example of a mid reply

Hier ist ein Start-Callback-Skript, das ich mit signature verification für Sie enthalten gemacht.

// /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'); 
} 
Verwandte Themen