Skip to content

Commit 98c8815

Browse files
authored
Automate parse webhook (#677)
Resolve #673 ## Summary When a new webhook type is added, we had to update manually (#664, #556). I've created a function to parse the class that uses polymorphism and fixed it. it prevents human errors in release new Webhook. ## Breaking changes This PR has some breaking changes to parse Webhook events automatically ### joined.members and left.members will be serialized into the UserSource classes. The joined.members and left.members were associative arrays, but now they are correctly serialized into the UserSource class. ```diff ... ["members"]=> array(1) { [0]=> - array(2) { - ["type"]=> - string(4) "user" - ["userId"]=> - string(14) "U4af4980629..." - } + object(LINE\Webhook\Model\UserSource)#256 (2) { + ["openAPINullablesSetToNull":protected]=> + array(0) { + } + ["container":protected]=> + array(2) { + ["type"]=> + string(4) "user" + ["userId"]=> + string(14) "U4af4980629..." + } + } ... ``` Until now, the elements of members were mistakenly treated as associative arrays, so we couldn't utilize the methods of UserSource. With this implementation, the following can now be achieved. ```diff $parsedEvents = EventRequestParser::parseEventRequest($req->getBody(), $secret, $req->getHeader(HTTPHeader::LINE_SIGNATURE)[0]); foreach ($parsedEvents->getEvents() as $event) { $joinedMembers = $event->getJoined()->getMembers(); $joinedMemberIds = array_map(function ($member) { - return $member["userId"]; + return $member->getUserId(); }, $joinedMembers); } ``` ### Default values will be unified to `NULL`. The default values of array fields were not consistently set to empty arrays (such as `message.emojis`) or `NULL` (such as `message. keywords`). Fields with keys that do not exist in the sent webhook event will have default values unified to `NULL`. For example, if the webhook does not contain emojis in a text message event, the emoji in ParsedEvent will change from an empty array to `NULL`. ```diff ... ["message"]=> object(LINE\Webhook\Model\TextMessageContent)#166 (2) { ["openAPINullablesSetToNull":protected]=> array(0) { } ["container":protected]=> array(7) { ["type"]=> string(4) "text" ["id"]=> string(9) "contentid" ["text"]=> string(21) "message without emoji" ["emojis"]=> - array(0) { - } + NULL ["mention"]=> NULL ["quoteToken"]=> NULL ["quotedMessageId"]=> NULL } } ... ```
1 parent e98690a commit 98c8815

File tree

276 files changed

+9299
-955
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

276 files changed

+9299
-955
lines changed

docs/classes/LINE-Clients-ChannelAccessToken-Configuration.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ <h4 class="phpdocumentor-element__name" id="property_userAgent">
907907
<span class="phpdocumentor-signature__visibility">protected</span>
908908
<span class="phpdocumentor-signature__type">string</span>
909909
<span class="phpdocumentor-signature__name">$userAgent</span>
910-
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/8&#039;</span></code>
910+
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/11&#039;</span></code>
911911

912912

913913

docs/classes/LINE-Clients-Insight-Configuration.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ <h4 class="phpdocumentor-element__name" id="property_userAgent">
907907
<span class="phpdocumentor-signature__visibility">protected</span>
908908
<span class="phpdocumentor-signature__type">string</span>
909909
<span class="phpdocumentor-signature__name">$userAgent</span>
910-
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/8&#039;</span></code>
910+
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/11&#039;</span></code>
911911

912912

913913

docs/classes/LINE-Clients-Liff-Configuration.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ <h4 class="phpdocumentor-element__name" id="property_userAgent">
907907
<span class="phpdocumentor-signature__visibility">protected</span>
908908
<span class="phpdocumentor-signature__type">string</span>
909909
<span class="phpdocumentor-signature__name">$userAgent</span>
910-
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/8&#039;</span></code>
910+
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/11&#039;</span></code>
911911

912912

913913

docs/classes/LINE-Clients-ManageAudience-Configuration.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ <h4 class="phpdocumentor-element__name" id="property_userAgent">
907907
<span class="phpdocumentor-signature__visibility">protected</span>
908908
<span class="phpdocumentor-signature__type">string</span>
909909
<span class="phpdocumentor-signature__name">$userAgent</span>
910-
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/8&#039;</span></code>
910+
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/11&#039;</span></code>
911911

912912

913913

docs/classes/LINE-Clients-MessagingApi-Configuration.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -907,7 +907,7 @@ <h4 class="phpdocumentor-element__name" id="property_userAgent">
907907
<span class="phpdocumentor-signature__visibility">protected</span>
908908
<span class="phpdocumentor-signature__type">string</span>
909909
<span class="phpdocumentor-signature__name">$userAgent</span>
910-
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/8&#039;</span></code>
910+
= <span class="phpdocumentor-signature__default-value">&#039;LINE-BotSDK-PHP/11&#039;</span></code>
911911

912912

913913

docs/classes/LINE-Parser-EventRequestParser.html

Lines changed: 11 additions & 579 deletions
Large diffs are not rendered by default.

docs/classes/LINE-Parser-Tests-EventRequestParserTest.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ <h2 class="phpdocumentor-content__title">
149149
<aside class="phpdocumentor-element-found-in">
150150
<abbr class="phpdocumentor-element-found-in__file" title="src/parser/test/EventRequestParserTest.php"><a href="files/src-parser-test-eventrequestparsertest.html"><abbr title="src/parser/test/EventRequestParserTest.php">EventRequestParserTest.php</abbr></a></abbr>
151151
:
152-
<span class="phpdocumentor-element-found-in__line">32</span>
152+
<span class="phpdocumentor-element-found-in__line">33</span>
153153

154154
</aside>
155155

@@ -218,7 +218,7 @@ <h4 class="phpdocumentor-element__name" id="property_json">
218218
<aside class="phpdocumentor-element-found-in">
219219
<abbr class="phpdocumentor-element-found-in__file" title="src/parser/test/EventRequestParserTest.php"><a href="files/src-parser-test-eventrequestparsertest.html"><abbr title="src/parser/test/EventRequestParserTest.php">EventRequestParserTest.php</abbr></a></abbr>
220220
:
221-
<span class="phpdocumentor-element-found-in__line">34</span>
221+
<span class="phpdocumentor-element-found-in__line">35</span>
222222

223223
</aside>
224224

@@ -1122,7 +1122,7 @@ <h4 class="phpdocumentor-element__name" id="property_json">
11221122
&quot;module&quot;: {
11231123
&quot;type&quot;: &quot;detached&quot;,
11241124
&quot;botId&quot;: &quot;botid&quot;,
1125-
&quot;reason&quot;: &quot;bot deleted&quot;
1125+
&quot;reason&quot;: &quot;bot_deleted&quot;
11261126
},
11271127
&quot;webhookEventId&quot;: &quot;testwebhookeventid&quot;,
11281128
&quot;deliveryContext&quot;: {
@@ -1215,7 +1215,7 @@ <h4 class="phpdocumentor-element__name" id="method_testParseEventRequest">
12151215
<aside class="phpdocumentor-element-found-in">
12161216
<abbr class="phpdocumentor-element-found-in__file" title="src/parser/test/EventRequestParserTest.php"><a href="files/src-parser-test-eventrequestparsertest.html"><abbr title="src/parser/test/EventRequestParserTest.php">EventRequestParserTest.php</abbr></a></abbr>
12171217
:
1218-
<span class="phpdocumentor-element-found-in__line">1000</span>
1218+
<span class="phpdocumentor-element-found-in__line">1001</span>
12191219

12201220
</aside>
12211221

@@ -1285,7 +1285,7 @@ <h4 class="phpdocumentor-element__name" id="method_getSignature">
12851285
<aside class="phpdocumentor-element-found-in">
12861286
<abbr class="phpdocumentor-element-found-in__file" title="src/parser/test/EventRequestParserTest.php"><a href="files/src-parser-test-eventrequestparsertest.html"><abbr title="src/parser/test/EventRequestParserTest.php">EventRequestParserTest.php</abbr></a></abbr>
12871287
:
1288-
<span class="phpdocumentor-element-found-in__line">1834</span>
1288+
<span class="phpdocumentor-element-found-in__line">1845</span>
12891289

12901290
</aside>
12911291

docs/js/searchIndex.js

Lines changed: 1 addition & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -40783,73 +40783,8 @@ Search.appendIndex(
4078340783
}, {
4078440784
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003AparseEventRequest\u0028\u0029",
4078540785
"name": "parseEventRequest",
40786-
"summary": "",
40786+
"summary": "Validate\u0020signature\u0020and\u0020parse\u0020Webhook\u0020event\u0020request.",
4078740787
"url": "classes/LINE-Parser-EventRequestParser.html#method_parseEventRequest"
40788-
}, {
40789-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003AparseEvent\u0028\u0029",
40790-
"name": "parseEvent",
40791-
"summary": "",
40792-
"url": "classes/LINE-Parser-EventRequestParser.html#method_parseEvent"
40793-
}, {
40794-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003AparseMessageContent\u0028\u0029",
40795-
"name": "parseMessageContent",
40796-
"summary": "",
40797-
"url": "classes/LINE-Parser-EventRequestParser.html#method_parseMessageContent"
40798-
}, {
40799-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003AparseSource\u0028\u0029",
40800-
"name": "parseSource",
40801-
"summary": "",
40802-
"url": "classes/LINE-Parser-EventRequestParser.html#method_parseSource"
40803-
}, {
40804-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003AparseThingsContent\u0028\u0029",
40805-
"name": "parseThingsContent",
40806-
"summary": "",
40807-
"url": "classes/LINE-Parser-EventRequestParser.html#method_parseThingsContent"
40808-
}, {
40809-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003AparseModuleContent\u0028\u0029",
40810-
"name": "parseModuleContent",
40811-
"summary": "",
40812-
"url": "classes/LINE-Parser-EventRequestParser.html#method_parseModuleContent"
40813-
}, {
40814-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003AparseMembershipContent\u0028\u0029",
40815-
"name": "parseMembershipContent",
40816-
"summary": "",
40817-
"url": "classes/LINE-Parser-EventRequestParser.html#method_parseMembershipContent"
40818-
}, {
40819-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003A\u0024eventType2class",
40820-
"name": "eventType2class",
40821-
"summary": "",
40822-
"url": "classes/LINE-Parser-EventRequestParser.html#property_eventType2class"
40823-
}, {
40824-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003A\u0024messageType2class",
40825-
"name": "messageType2class",
40826-
"summary": "",
40827-
"url": "classes/LINE-Parser-EventRequestParser.html#property_messageType2class"
40828-
}, {
40829-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003A\u0024sourceType2class",
40830-
"name": "sourceType2class",
40831-
"summary": "",
40832-
"url": "classes/LINE-Parser-EventRequestParser.html#property_sourceType2class"
40833-
}, {
40834-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003A\u0024thingsContentType2class",
40835-
"name": "thingsContentType2class",
40836-
"summary": "",
40837-
"url": "classes/LINE-Parser-EventRequestParser.html#property_thingsContentType2class"
40838-
}, {
40839-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003A\u0024contentType2class",
40840-
"name": "contentType2class",
40841-
"summary": "",
40842-
"url": "classes/LINE-Parser-EventRequestParser.html#property_contentType2class"
40843-
}, {
40844-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003A\u0024moduleContentType2class",
40845-
"name": "moduleContentType2class",
40846-
"summary": "",
40847-
"url": "classes/LINE-Parser-EventRequestParser.html#property_moduleContentType2class"
40848-
}, {
40849-
"fqsen": "\\LINE\\Parser\\EventRequestParser\u003A\u003A\u0024membershipContentType2class",
40850-
"name": "membershipContentType2class",
40851-
"summary": "",
40852-
"url": "classes/LINE-Parser-EventRequestParser.html#property_membershipContentType2class"
4085340788
}, {
4085440789
"fqsen": "\\LINE\\Parser\\Exception\\InvalidEventRequestException",
4085540790
"name": "InvalidEventRequestException",

examples/KitchenSink/src/LINEBot/KitchenSink/EventHandler/MemberJoinedEventHandler.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
use LINE\Constants\MessageType;
2525
use LINE\LINEBot\KitchenSink\EventHandler;
2626
use LINE\Webhook\Model\GroupSource;
27-
use LINE\Webhook\Model\JoinEvent;
2827
use LINE\Webhook\Model\MemberJoinedEvent;
2928
use LINE\Webhook\Model\RoomSource;
3029

@@ -38,7 +37,7 @@ class MemberJoinedEventHandler implements EventHandler
3837
private $memberJoinedEvent;
3938

4039
/**
41-
* JoinEventHandler constructor.
40+
* MemberJoinedEventHandler constructor.
4241
* @param MessagingApiApi $bot
4342
* @param \Psr\Log\LoggerInterface $logger
4443
* @param MemberJoinedEvent $memberJoinedEvent
@@ -68,7 +67,7 @@ public function handle()
6867

6968
$joinedMembers = $this->memberJoinedEvent->getJoined()->getMembers();
7069
$joinedMemberIds = array_map(function ($member) {
71-
return $member["userId"];
70+
return $member->getUserId();
7271
}, $joinedMembers);
7372

7473
$request = new ReplyMessageRequest([

examples/KitchenSink/src/LINEBot/KitchenSink/Route.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
use LINE\Constants\HTTPHeader;
4040
use LINE\Parser\Event\UnknownEvent;
4141
use LINE\Parser\EventRequestParser;
42+
use LINE\Webhook\Model\Event;
4243
use LINE\Webhook\Model\MemberJoinedEvent;
4344
use LINE\Webhook\Model\MessageEvent;
4445
use LINE\Parser\Exception\InvalidEventRequestException;

0 commit comments

Comments
 (0)