node-red-contrib-line-messaging-api 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -9
- package/nodes/_new/push/push.html +14 -8
- package/nodes/_new/push/push.js +19 -7
- package/nodes/_new/reply/reply.html +14 -4
- package/nodes/_new/reply/reply.js +15 -5
- package/nodes/config/config.html +38 -0
- package/nodes/config/config.js +18 -0
- package/nodes/getProfile/getProfile.html +44 -0
- package/nodes/getProfile/getProfile.js +46 -0
- package/nodes/limit/limit.html +2 -1
- package/nodes/loading/loading.html +12 -12
- package/nodes/loading/loading.js +2 -7
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -4,14 +4,6 @@ LINE Messagin APIのNode-REDのノードです。
|
|
|
4
4
|
|
|
5
5
|
LINE Messagin APIを利用できるNode-REDのノードです。
|
|
6
6
|
|
|
7
|
-
以下のAPIを利用できます。
|
|
8
|
-
|
|
9
|
-
- LINE Messaging API
|
|
10
|
-
- Webhook & Reply Message
|
|
11
|
-
- Push Message
|
|
12
|
-
- BloadCast Message
|
|
13
|
-
- LINE Notify
|
|
14
|
-
|
|
15
7
|
## インストール
|
|
16
8
|
|
|
17
9
|
```
|
|
@@ -22,7 +14,16 @@ or
|
|
|
22
14
|
|
|
23
15
|
AdminタブからInstall
|
|
24
16
|
|
|
25
|
-
##
|
|
17
|
+
## Configノード
|
|
18
|
+
|
|
19
|
+
LINE Botの設定(チャンネルシークレット、チャンネルアクセストークン)を設定しておく裏側のノードです。
|
|
20
|
+
このノードはエディターには表示されずReplyやPushなどのノードの設定UIからアクセスできます。
|
|
21
|
+
|
|
22
|
+
> 
|
|
23
|
+
|
|
24
|
+
作成したLINE Botの設定は別のReplyノードやPushノードで使いまわせます。
|
|
25
|
+
|
|
26
|
+
## 利用できるAPIと利用イメージ
|
|
26
27
|
|
|
27
28
|
### Webhook & Reply Message
|
|
28
29
|
|
|
@@ -118,6 +119,7 @@ template nodeにJSONを設定してみてください。
|
|
|
118
119
|
|
|
119
120
|
## release
|
|
120
121
|
|
|
122
|
+
- 2024/12/27: Loaging / getProfile / configの追加
|
|
121
123
|
- 2023/12/11: Notify_newを追加。スタンプや画像も送れるように。
|
|
122
124
|
- 2021/8/1: Reply Messageが画像に対応(thanks [@ukkz](https://github.com/ukkz))
|
|
123
125
|
- 2020/12/17: Bloadcast Messageに対応、Reply MessageがFlex Messageに対応(thanks [@gaomar](https://github.com/gaomar))
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
color: '#01B301',
|
|
5
5
|
defaults: {
|
|
6
6
|
name: {value:""},
|
|
7
|
+
// lineConfig: {value: "", type:"lineConfig", required:true}, //共通のlineConfigを使う
|
|
8
|
+
lineConfig: {value: "", type:"lineConfig"}, //共通のlineConfigを使う 後方互換的にrequired:trueを外す
|
|
7
9
|
},
|
|
8
10
|
credentials: {
|
|
9
11
|
// channelSecret: {type:"password", required:true},
|
|
10
|
-
channelAccessToken: {type:"password", required:true
|
|
12
|
+
channelAccessToken: {type:"password"}, //後方互換的にrequired:trueを外す
|
|
11
13
|
targetId:{type:"password", required:true},
|
|
12
14
|
},
|
|
13
15
|
inputs: 1,
|
|
@@ -19,19 +21,23 @@
|
|
|
19
21
|
});
|
|
20
22
|
</script>
|
|
21
23
|
|
|
22
|
-
<script type="text/
|
|
24
|
+
<script type="text/html" data-template-name="PushMessage_New">
|
|
23
25
|
<div class="form-row">
|
|
24
26
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
25
27
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
26
28
|
</div>
|
|
27
29
|
|
|
28
|
-
<!--
|
|
29
|
-
|
|
30
|
-
<
|
|
31
|
-
|
|
30
|
+
<!-- LINE Config -->
|
|
31
|
+
<div class="form-row">
|
|
32
|
+
<label for="node-input-lineConfig">
|
|
33
|
+
<i class="fa fa-tag"></i>
|
|
34
|
+
LINE Bot
|
|
35
|
+
<span data-i18n="getProfile.label.lineConfig"></span>
|
|
36
|
+
</label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getProfile.desc.lineConfig">
|
|
37
|
+
</div>
|
|
32
38
|
|
|
33
39
|
<div class="form-row">
|
|
34
|
-
<label for="node-input-channelAccessToken"><i class="icon-tag"></i> AccessToken
|
|
40
|
+
<label for="node-input-channelAccessToken"><i class="icon-tag"></i> (AccessToken)</label>
|
|
35
41
|
<input type="password" id="node-input-channelAccessToken" placeholder="ChannelAccessToken">
|
|
36
42
|
</div>
|
|
37
43
|
|
|
@@ -48,6 +54,6 @@
|
|
|
48
54
|
</div> -->
|
|
49
55
|
</script>
|
|
50
56
|
|
|
51
|
-
<script type="text/
|
|
57
|
+
<script type="text/html" data-help-name="PushMessage_New">
|
|
52
58
|
<p>Send a push message by specifying the user ID or group ID.</p>
|
|
53
59
|
</script>
|
package/nodes/_new/push/push.js
CHANGED
|
@@ -6,18 +6,30 @@ module.exports = (RED) => {
|
|
|
6
6
|
const node = this;
|
|
7
7
|
RED.nodes.createNode(node, config);
|
|
8
8
|
|
|
9
|
-
let lineconfig;
|
|
9
|
+
let lineconfig = {};
|
|
10
|
+
|
|
10
11
|
try {
|
|
11
|
-
lineconfig = require('../../env');
|
|
12
|
+
lineconfig = require('../../env'); //環境変数を取得
|
|
12
13
|
} catch (error) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
try {
|
|
15
|
+
node.lineConfig = RED.nodes.getNode(config.lineConfig); //共通のlineConfigを取得
|
|
16
|
+
lineconfig = {
|
|
17
|
+
channelSecret: node.lineConfig.credentials.LineChannelSecret,
|
|
18
|
+
channelAccessToken: node.lineConfig.credentials.LineChannelAccessToken
|
|
19
|
+
};
|
|
20
|
+
console.log(`---共通lineConfigから---`);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
lineconfig = {
|
|
23
|
+
channelSecret: node.credentials.channelSecret,
|
|
24
|
+
channelAccessToken: node.credentials.channelAccessToken
|
|
25
|
+
};
|
|
26
|
+
console.log(`---個別の設定から---`);
|
|
27
|
+
}
|
|
28
|
+
|
|
17
29
|
}
|
|
18
30
|
|
|
19
31
|
if(lineconfig.channelAccessToken === undefined || lineconfig.channelAccessToken === '') {
|
|
20
|
-
console.error('token not found1');
|
|
32
|
+
console.error('LINE token not found1');
|
|
21
33
|
return;
|
|
22
34
|
}
|
|
23
35
|
// const client = new line.messagingApi.MessagingApiClient(lineconfig);
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
color: '#01B301',
|
|
5
5
|
defaults: {
|
|
6
6
|
name: {value:""},
|
|
7
|
+
lineConfig: {value: "", type:"lineConfig"}, //共通のlineConfigを使う 後方互換的にrequired:trueを外す
|
|
7
8
|
replyMessage:{value:""}
|
|
8
9
|
},
|
|
9
10
|
credentials: {
|
|
10
|
-
channelSecret: {type:"password", required:true
|
|
11
|
-
channelAccessToken: {type:"password", required:true
|
|
11
|
+
channelSecret: {type:"password"}, //後方互換的にrequired:trueを外す
|
|
12
|
+
channelAccessToken: {type:"password"}, //後方互換的にrequired:trueを外す
|
|
12
13
|
},
|
|
13
14
|
inputs:1,
|
|
14
15
|
outputs:1,
|
|
@@ -21,12 +22,21 @@
|
|
|
21
22
|
});
|
|
22
23
|
</script>
|
|
23
24
|
|
|
24
|
-
<script type="text/
|
|
25
|
+
<script type="text/html" data-template-name="ReplyMessage_New">
|
|
25
26
|
<div class="form-row">
|
|
26
27
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
27
28
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
28
29
|
</div>
|
|
29
30
|
|
|
31
|
+
<!-- LINE Config -->
|
|
32
|
+
<div class="form-row">
|
|
33
|
+
<label for="node-input-lineConfig">
|
|
34
|
+
<i class="fa fa-tag"></i>
|
|
35
|
+
LINE Bot
|
|
36
|
+
<span data-i18n="getProfile.label.lineConfig"></span>
|
|
37
|
+
</label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getProfile.desc.lineConfig">
|
|
38
|
+
</div>
|
|
39
|
+
|
|
30
40
|
<div class="form-row">
|
|
31
41
|
<label for="node-input-channelSecret"><i class="icon-tag"></i> Secret</label>
|
|
32
42
|
<input type="password" id="node-input-channelSecret" placeholder="ChannelSecret">
|
|
@@ -43,6 +53,6 @@
|
|
|
43
53
|
</div>
|
|
44
54
|
</script>
|
|
45
55
|
|
|
46
|
-
<script type="text/
|
|
56
|
+
<script type="text/html" data-help-name="ReplyMessage_New">
|
|
47
57
|
<p>A simple node that converts the message payloads into all ReplyMessage characters</p>
|
|
48
58
|
</script>
|
|
@@ -10,14 +10,24 @@ module.exports = (RED) => {
|
|
|
10
10
|
try {
|
|
11
11
|
lineconfig = require('../../env');
|
|
12
12
|
} catch (error) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
try {
|
|
14
|
+
node.lineConfig = RED.nodes.getNode(config.lineConfig); //共通のlineConfigを取得
|
|
15
|
+
lineconfig = {
|
|
16
|
+
channelSecret: node.lineConfig.credentials.LineChannelSecret,
|
|
17
|
+
channelAccessToken: node.lineConfig.credentials.LineChannelAccessToken
|
|
18
|
+
};
|
|
19
|
+
console.log(`---共通lineConfigから---`);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
lineconfig = {
|
|
22
|
+
channelSecret: node.credentials.channelSecret,
|
|
23
|
+
channelAccessToken: node.credentials.channelAccessToken
|
|
24
|
+
};
|
|
25
|
+
console.log(`---個別の設定から---`);
|
|
26
|
+
}
|
|
17
27
|
}
|
|
18
28
|
|
|
19
29
|
if (lineconfig.channelSecret === '' || lineconfig.channelAccessToken === '') {
|
|
20
|
-
this.error(RED._('token not found'));
|
|
30
|
+
this.error(RED._('LINE token not found'));
|
|
21
31
|
}
|
|
22
32
|
|
|
23
33
|
const client = new line.Client(lineconfig);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
RED.nodes.registerType('lineConfig', {
|
|
3
|
+
category: 'config',
|
|
4
|
+
color: '#00afd5',
|
|
5
|
+
defaults: {
|
|
6
|
+
name: {value: ""}
|
|
7
|
+
},
|
|
8
|
+
credentials: {
|
|
9
|
+
LineChannelSecret: {},
|
|
10
|
+
LineChannelAccessToken: {},
|
|
11
|
+
},
|
|
12
|
+
label: function () {
|
|
13
|
+
return this.name || 'API Key';
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<script type="text/html" data-template-name="lineConfig">
|
|
19
|
+
<p>LINE Bot Token Settings </p>
|
|
20
|
+
<div class="form-row">
|
|
21
|
+
<label for="node-input-name">
|
|
22
|
+
<i class="fa fa-tag fa-fw"></i> Bot Name
|
|
23
|
+
</label>
|
|
24
|
+
<input type="text" id="node-config-input-name" placeholder="Name">
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="form-row">
|
|
28
|
+
<label for="node-config-input-LineChannelSecret"> Channel Secret</label>
|
|
29
|
+
<input type="text" id="node-config-input-LineChannelSecret" placeholder="LINE Channel Secret">
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div class="form-row">
|
|
33
|
+
<label for="node-config-input-LineChannelAccessToken"> Channel Access Token</label>
|
|
34
|
+
<input type="text" id="node-config-input-LineChannelAccessToken" placeholder="LINE Channel Access Token">
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
</script>
|
|
38
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module.exports = function(RED) {
|
|
2
|
+
function main(n) {
|
|
3
|
+
RED.nodes.createNode(this, n);
|
|
4
|
+
this.name = n.name;
|
|
5
|
+
this.LineChannelSecret = this.credentials.LineChannelSecret;
|
|
6
|
+
this.LineChannelAccessToken = this.credentials.LineChannelAccessToken;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
RED.nodes.registerType("lineConfig", main, {
|
|
10
|
+
defaults: {
|
|
11
|
+
name: {value: ""}
|
|
12
|
+
},
|
|
13
|
+
credentials: {
|
|
14
|
+
LineChannelSecret: {type: "text"},
|
|
15
|
+
LineChannelAccessToken: {type: "text"}
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
RED.nodes.registerType('getProfile', {
|
|
3
|
+
category: 'LINE',
|
|
4
|
+
color: '#01B301',
|
|
5
|
+
defaults: {
|
|
6
|
+
name: {value: ''},
|
|
7
|
+
lineConfig: {value: "", type:"lineConfig", required:true},
|
|
8
|
+
},
|
|
9
|
+
inputs: 1,
|
|
10
|
+
outputs: 1,
|
|
11
|
+
icon: "watch.png",
|
|
12
|
+
align: 'right',
|
|
13
|
+
label: function () {
|
|
14
|
+
return this.name || 'getProfile';
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<script type="text/html" data-template-name="getProfile">
|
|
20
|
+
<!-- 名前 -->
|
|
21
|
+
<div class="form-row">
|
|
22
|
+
<label for="node-input-name">
|
|
23
|
+
<i class="fa fa-tag"></i>
|
|
24
|
+
<span data-i18n="node-red:common.label.name"></span>
|
|
25
|
+
</label>
|
|
26
|
+
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<!-- LINE Config -->
|
|
30
|
+
<div class="form-row">
|
|
31
|
+
<label for="node-input-lineConfig">
|
|
32
|
+
<i class="fa fa-tag"></i>
|
|
33
|
+
LINE Bot
|
|
34
|
+
<span data-i18n="getProfile.label.lineConfig"></span>
|
|
35
|
+
</label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getProfile.desc.lineConfig">
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<script type="text/html" data-help-name="getProfile">
|
|
41
|
+
<p>プロフィールを取得します。</p>
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module.exports = (RED) => {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const line = require('@line/bot-sdk');
|
|
5
|
+
|
|
6
|
+
const main = function(config){
|
|
7
|
+
const node = this;
|
|
8
|
+
RED.nodes.createNode(node, config);
|
|
9
|
+
|
|
10
|
+
let lineconfig = {};
|
|
11
|
+
try {
|
|
12
|
+
lineconfig = require('../../env');
|
|
13
|
+
} catch (error) {
|
|
14
|
+
node.lineConfig = RED.nodes.getNode(config.lineConfig); //共通のlineConfigを取得
|
|
15
|
+
|
|
16
|
+
lineconfig = {
|
|
17
|
+
channelSecret: node.lineConfig.credentials.LineChannelSecret,
|
|
18
|
+
channelAccessToken: node.lineConfig.credentials.LineChannelAccessToken
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if(lineconfig.channelAccessToken === undefined || lineconfig.channelAccessToken === '') {
|
|
22
|
+
console.error('LINE token not found');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const client = new line.messagingApi.MessagingApiClient(lineconfig);
|
|
26
|
+
|
|
27
|
+
// ここでLINE APIを呼び出す処理
|
|
28
|
+
node.on('input', async(msg, send, done) => {
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
const res = await client.getProfile(msg.payload.userId);
|
|
32
|
+
msg.payload = res;
|
|
33
|
+
send(msg);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.error(error.body);
|
|
36
|
+
node.error(error.body, msg.payload);
|
|
37
|
+
send(msg);
|
|
38
|
+
done(error);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
console.log("Message received:", msg.payload);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
RED.nodes.registerType("getProfile", main);
|
|
46
|
+
}
|
package/nodes/limit/limit.html
CHANGED
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
});
|
|
19
19
|
</script>
|
|
20
20
|
|
|
21
|
-
<script type="text/
|
|
21
|
+
<script type="text/html" data-template-name="Limit">
|
|
22
|
+
<!-- 名前 -->
|
|
22
23
|
<div class="form-row">
|
|
23
24
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
24
25
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
color: '#01B301',
|
|
5
5
|
defaults: {
|
|
6
6
|
name: {value:""},
|
|
7
|
+
targetId: {value:"", required:true},
|
|
8
|
+
lineConfig: {value: "", type:"lineConfig", required:true}, //共通のlineConfigを使う
|
|
7
9
|
loadingSeconds: {value: 20}
|
|
8
10
|
},
|
|
9
|
-
credentials: {
|
|
10
|
-
channelAccessToken: { type: "password", required: true },
|
|
11
|
-
targetId:{type:"password", required:true}
|
|
12
|
-
},
|
|
13
11
|
inputs:1,
|
|
14
12
|
outputs:1,
|
|
15
13
|
icon: "timer.png",
|
|
@@ -20,20 +18,22 @@
|
|
|
20
18
|
});
|
|
21
19
|
</script>
|
|
22
20
|
|
|
23
|
-
<script type="text/
|
|
21
|
+
<script type="text/html" data-template-name="Loading">
|
|
24
22
|
<div class="form-row">
|
|
25
23
|
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
26
24
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
27
25
|
</div>
|
|
28
26
|
|
|
27
|
+
<!-- LINE Config -->
|
|
29
28
|
<div class="form-row">
|
|
30
|
-
<label for="node-input-
|
|
31
|
-
<i class="
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<input type="
|
|
29
|
+
<label for="node-input-lineConfig">
|
|
30
|
+
<i class="fa fa-tag"></i>
|
|
31
|
+
LINE Bot
|
|
32
|
+
<span data-i18n="getProfile.label.lineConfig"></span>
|
|
33
|
+
</label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getProfile.desc.lineConfig">
|
|
35
34
|
</div>
|
|
36
35
|
|
|
36
|
+
<!-- chat ID / User ID -->
|
|
37
37
|
<div class="form-row">
|
|
38
38
|
<label for="node-input-targetId"><i class="icon-tag"></i> User Id</label>
|
|
39
39
|
<input type="text" id="node-input-targetId" placeholder="User Id">
|
|
@@ -67,6 +67,6 @@
|
|
|
67
67
|
</p>
|
|
68
68
|
</script>
|
|
69
69
|
|
|
70
|
-
<script type="text/
|
|
71
|
-
<p
|
|
70
|
+
<script type="text/html" data-help-name="Loading">
|
|
71
|
+
<p>ローディングアニメーションを流します。</p>
|
|
72
72
|
</script>
|
package/nodes/loading/loading.js
CHANGED
|
@@ -38,7 +38,7 @@ module.exports = (RED) => {
|
|
|
38
38
|
|
|
39
39
|
// レスポンスが {}(空のJSONオブジェクト)なら成功らしい
|
|
40
40
|
if (res && Object.keys(res).length === 0) {
|
|
41
|
-
node.log('
|
|
41
|
+
node.log('ローディングが成功したかも?: {} が返却されました');
|
|
42
42
|
} else {
|
|
43
43
|
node.warn('ローディング処理失敗:', res);
|
|
44
44
|
}
|
|
@@ -53,10 +53,5 @@ module.exports = (RED) => {
|
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
RED.nodes.registerType("Loading", main
|
|
57
|
-
credentials: {
|
|
58
|
-
channelAccessToken: {type:"password"},
|
|
59
|
-
targetId: {type:"password"},
|
|
60
|
-
}
|
|
61
|
-
});
|
|
56
|
+
RED.nodes.registerType("Loading", main);
|
|
62
57
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-red-contrib-line-messaging-api",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Node-REDでLINE Botが作れます。",
|
|
5
5
|
"main": "line.js",
|
|
6
6
|
"repository": {
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
"PushMessage_New": "./nodes/_new/push/push.js",
|
|
19
19
|
"BloadcastMessage": "./nodes/bloadcast/bloadcast.js",
|
|
20
20
|
"Limit": "./nodes/limit/limit.js",
|
|
21
|
+
"getProfile": "./nodes/getProfile/getProfile.js",
|
|
22
|
+
"config": "./nodes/config/config.js",
|
|
21
23
|
"Loading": "./nodes/loading/loading.js",
|
|
22
24
|
"ReplyMessage": "./nodes/reply/reply.js",
|
|
23
25
|
"PushMessage": "./nodes/push/push.js",
|