Skip to content

Commit bd4d5fd

Browse files
authored
Merge pull request #250 from moririnson/feature/user-interaction-statics
#249 Support new Messaging API endpoints for friend statistics added on 10/16
2 parents c29f75f + 742285d commit bd4d5fd

File tree

2 files changed

+113
-0
lines changed

2 files changed

+113
-0
lines changed

src/LINEBot.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,22 @@ public function getFriendDemographics()
628628
return $this->httpClient->get($url);
629629
}
630630

631+
/**
632+
* Get user interaction statistics
633+
*
634+
* Returns statistics about how users interact with broadcast messages sent from your LINE official account.
635+
* Interactions are tracked for only 14 days after a message was sent.
636+
* The statistics are no longer updated after 15 days.
637+
*
638+
* @param string $requestId Request ID of broadcast message.
639+
* @return Response
640+
*/
641+
public function getUserInteractionStatistics($requestId)
642+
{
643+
$url = $this->endpointBase . '/v2/bot/insight/message/event';
644+
return $this->httpClient->get($url, ['requestId' => $requestId]);
645+
}
646+
631647
/**
632648
* Create channel access token
633649
*

tests/LINEBot/InsightTest.php

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,4 +316,101 @@ public function testGetFriendDemographics()
316316
$data = $res->getJSONDecodedBody();
317317
$this->assertEquals($responseJson, $data);
318318
}
319+
320+
public function testGetUserInteractionStatistics()
321+
{
322+
$requestId = 'test request id';
323+
324+
// Test: status is ready
325+
$mock = function ($testRunner, $httpMethod, $url, $data) use ($requestId) {
326+
/** @var \PHPUnit\Framework\TestCase $testRunner */
327+
$testRunner->assertEquals('GET', $httpMethod);
328+
$testRunner->assertEquals('https://api.line.me/v2/bot/insight/message/event', $url);
329+
$testRunner->assertEquals([
330+
'requestId' => $requestId
331+
], $data);
332+
333+
return [
334+
'overview' => [
335+
'requestId' => $requestId,
336+
'timestamp' => 1568214000,
337+
'delivered' => 32,
338+
'uniqueImpression' => 4,
339+
'uniqueClick' => null,
340+
'uniqueMediaPlayed' => 2,
341+
'uniqueMediaPlayed100Percent' => -1
342+
],
343+
'messages' => [
344+
[
345+
'seq' => 1,
346+
'impression' => 18,
347+
'mediaPlayed' => 11,
348+
'mediaPlayed25Percent' => -1,
349+
'mediaPlayed50Percent' => -1,
350+
'mediaPlayed75Percent' => -1,
351+
'mediaPlayed100Percent' => -1,
352+
'uniqueMediaPlayed' => 2,
353+
'uniqueMediaPlayed25Percent' => -1,
354+
'uniqueMediaPlayed50Percent' => -1,
355+
'uniqueMediaPlayed75Percent' => -1,
356+
'uniqueMediaPlayed100Percent' => -1
357+
],
358+
],
359+
'clicks' => [
360+
[
361+
'seq' => 1,
362+
'url' => 'https://www.yahoo.co.jp/',
363+
'click' => -1,
364+
'uniqueClick' => -1,
365+
'uniqueClickOfRequest' => -1
366+
],
367+
[
368+
'seq' => 1,
369+
'url' => 'https://www.google.com/?hl=ja',
370+
'click' => -1,
371+
'uniqueClick' => -1,
372+
'uniqueClickOfRequest' => -1
373+
],
374+
]
375+
];
376+
};
377+
$bot = new LINEBot(new DummyHttpClient($this, $mock), ['channelSecret' => 'CHANNEL-SECRET']);
378+
$res = $bot->getUserInteractionStatistics($requestId);
379+
380+
$this->assertEquals(200, $res->getHTTPStatus());
381+
$this->assertTrue($res->isSucceeded());
382+
383+
$data = $res->getJSONDecodedBody();
384+
$this->assertEquals($requestId, $data['overview']['requestId']);
385+
$this->assertEquals(1568214000, $data['overview']['timestamp']);
386+
$this->assertEquals(32, $data['overview']['delivered']);
387+
$this->assertEquals(4, $data['overview']['uniqueImpression']);
388+
$this->assertEquals(null, $data['overview']['uniqueClick']);
389+
$this->assertEquals(2, $data['overview']['uniqueMediaPlayed']);
390+
$this->assertEquals(-1, $data['overview']['uniqueMediaPlayed100Percent']);
391+
$this->assertEquals(1, count($data['messages']));
392+
$this->assertEquals(1, $data['messages'][0]['seq']);
393+
$this->assertEquals(18, $data['messages'][0]['impression']);
394+
$this->assertEquals(11, $data['messages'][0]['mediaPlayed']);
395+
$this->assertEquals(-1, $data['messages'][0]['mediaPlayed25Percent']);
396+
$this->assertEquals(-1, $data['messages'][0]['mediaPlayed50Percent']);
397+
$this->assertEquals(-1, $data['messages'][0]['mediaPlayed75Percent']);
398+
$this->assertEquals(-1, $data['messages'][0]['mediaPlayed100Percent']);
399+
$this->assertEquals(2, $data['messages'][0]['uniqueMediaPlayed']);
400+
$this->assertEquals(-1, $data['messages'][0]['uniqueMediaPlayed25Percent']);
401+
$this->assertEquals(-1, $data['messages'][0]['uniqueMediaPlayed50Percent']);
402+
$this->assertEquals(-1, $data['messages'][0]['uniqueMediaPlayed75Percent']);
403+
$this->assertEquals(-1, $data['messages'][0]['uniqueMediaPlayed100Percent']);
404+
$this->assertEquals(2, count($data['clicks']));
405+
$this->assertEquals(1, $data['clicks'][0]['seq']);
406+
$this->assertEquals('https://www.yahoo.co.jp/', $data['clicks'][0]['url']);
407+
$this->assertEquals(-1, $data['clicks'][0]['click']);
408+
$this->assertEquals(-1, $data['clicks'][0]['uniqueClick']);
409+
$this->assertEquals(-1, $data['clicks'][0]['uniqueClickOfRequest']);
410+
$this->assertEquals(1, $data['clicks'][1]['seq']);
411+
$this->assertEquals('https://www.google.com/?hl=ja', $data['clicks'][1]['url']);
412+
$this->assertEquals(-1, $data['clicks'][1]['click']);
413+
$this->assertEquals(-1, $data['clicks'][1]['uniqueClick']);
414+
$this->assertEquals(-1, $data['clicks'][1]['uniqueClickOfRequest']);
415+
}
319416
}

0 commit comments

Comments
 (0)