node-red-contrib-line-messaging-api 0.4.1 → 0.4.3
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/.claude/settings.local.json +12 -0
- package/CLAUDE.md +193 -0
- package/README.ja.md +171 -0
- package/README.md +94 -61
- package/nodes/_new/push/push.js +1 -1
- package/nodes/_new/reply/reply.html +6 -7
- package/nodes/_new/reply/reply.js +1 -1
- package/nodes/bloadcast/bloadcast.html +4 -4
- package/nodes/bloadcast/locales/ja/bloadcast.json +9 -0
- package/nodes/config/config.html +105 -31
- package/nodes/config/config.js +2 -2
- package/nodes/config/locales/en-US/config.json +14 -0
- package/nodes/config/locales/ja/config.json +14 -0
- package/nodes/getBotInfo/getBotInfo.html +11 -8
- package/nodes/getBotInfo/locales/en-US/getBotInfo.json +9 -0
- package/nodes/getBotInfo/locales/ja/getBotInfo.json +9 -0
- package/nodes/getProfile/getProfile.html +6 -6
- package/nodes/getProfile/locales/en-US/getProfile.json +8 -0
- package/nodes/getProfile/locales/ja/getProfile.json +8 -0
- package/nodes/limit/limit.html +3 -3
- package/nodes/limit/locales/ja/limit.json +8 -0
- package/nodes/loading/loading.html +7 -10
- package/nodes/loading/locales/ja/loading.json +10 -0
- package/nodes/push/locales/ja/push.json +10 -0
- package/nodes/push/push.html +4 -5
- package/nodes/reply/locales/ja/reply.json +7 -0
- package/nodes/reply/reply.html +5 -5
- package/nodes/webhook/locales/en-US/Webhook.json +8 -0
- package/nodes/webhook/locales/ja/Webhook.json +8 -0
- package/nodes/webhook/webhook.html +2 -2
- package/package.json +11 -7
- package/nodes/_new/notify/notify.html +0 -39
- package/nodes/_new/notify/notify.js +0 -57
- package/nodes/notify/notify.html +0 -42
- package/nodes/notify/notify.js +0 -38
|
@@ -25,22 +25,22 @@
|
|
|
25
25
|
<script type="text/x-red" data-template-name="BloadcastMessage">
|
|
26
26
|
|
|
27
27
|
<div class="form-row">
|
|
28
|
-
<label for="node-input-name"><i class="icon-tag"></i>
|
|
28
|
+
<label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="bloadcast.label.name">名前</span></label>
|
|
29
29
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
30
30
|
</div>
|
|
31
31
|
|
|
32
32
|
<div class="form-row">
|
|
33
|
-
<label for="node-input-channelSecret"><i class="icon-tag"></i>
|
|
33
|
+
<label for="node-input-channelSecret"><i class="icon-tag"></i> <span data-i18n="bloadcast.label.channelSecret">チャンネルシークレット</span></label>
|
|
34
34
|
<input type="password" id="node-input-channelSecret" placeholder="ChannelSecret">
|
|
35
35
|
</div>
|
|
36
36
|
|
|
37
37
|
<div class="form-row">
|
|
38
|
-
<label for="node-input-channelAccessToken"><i class="icon-tag"></i>
|
|
38
|
+
<label for="node-input-channelAccessToken"><i class="icon-tag"></i> <span data-i18n="bloadcast.label.channelAccessToken">チャンネルアクセストークン</span></label>
|
|
39
39
|
<input type="password" id="node-input-channelAccessToken" placeholder="ChannelAccessToken">
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
42
|
</script>
|
|
43
43
|
|
|
44
44
|
<script type="text/x-red" data-help-name="BloadcastMessage">
|
|
45
|
-
<p>
|
|
45
|
+
<p>Broadcasts messages to all LINE Bot friends.</p>
|
|
46
46
|
</script>
|
package/nodes/config/config.html
CHANGED
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
category: 'config',
|
|
4
4
|
color: '#00afd5',
|
|
5
5
|
defaults: {
|
|
6
|
-
// botName は既存のまま
|
|
7
6
|
botName: { value: "" },
|
|
8
|
-
// botIconUrl を追加
|
|
9
7
|
botIconUrl: { value: "" }
|
|
10
8
|
},
|
|
11
9
|
credentials: {
|
|
@@ -19,61 +17,133 @@
|
|
|
19
17
|
oneditprepare: function () {
|
|
20
18
|
const node = this;
|
|
21
19
|
|
|
22
|
-
//
|
|
20
|
+
// --- バリデーションのための設定 ---
|
|
21
|
+
const validationTip = $("#node-config-validation-tip");
|
|
22
|
+
|
|
23
|
+
function validate() {
|
|
24
|
+
let errorMessages = [];
|
|
25
|
+
const hasWhitespace = /\s/;
|
|
26
|
+
const hasFullWidth = /[^\x00-\x7F]/;
|
|
27
|
+
|
|
28
|
+
// 1. Bot Name のチェック
|
|
29
|
+
if ($("#node-config-input-botName").val() === "") {
|
|
30
|
+
let message = node._("lineConfig.validation.botNameRequired");
|
|
31
|
+
if (!message || message === "lineConfig.validation.botNameRequired") {
|
|
32
|
+
message = "Bot名は必須です。";
|
|
33
|
+
}
|
|
34
|
+
errorMessages.push("・" + message);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 2. Channel Secret のチェック
|
|
38
|
+
const secret = $("#node-config-input-LineChannelSecret").val();
|
|
39
|
+
if (secret === "") {
|
|
40
|
+
let message = node._("lineConfig.validation.channelSecretRequired");
|
|
41
|
+
if (!message || message === "lineConfig.validation.channelSecretRequired") {
|
|
42
|
+
message = "Channel Secret は必須です。";
|
|
43
|
+
}
|
|
44
|
+
errorMessages.push("・" + message);
|
|
45
|
+
} else if (hasWhitespace.test(secret)) {
|
|
46
|
+
errorMessages.push("・Channel Secret にスペースや改行は含められません。");
|
|
47
|
+
} else if (hasFullWidth.test(secret)) {
|
|
48
|
+
errorMessages.push("・Channel Secret に全角文字は含められません。");
|
|
49
|
+
} else if (secret.length !== 32) {
|
|
50
|
+
errorMessages.push("・Channel Secret は32文字で入力してください。");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// 3. Channel Access Token のチェック
|
|
54
|
+
const token = $("#node-config-input-LineChannelAccessToken").val();
|
|
55
|
+
if (token === "") {
|
|
56
|
+
let message = node._("lineConfig.validation.channelAccessTokenRequired");
|
|
57
|
+
if (!message || message === "lineConfig.validation.channelAccessTokenRequired") {
|
|
58
|
+
message = "Channel Access Token は必須です。";
|
|
59
|
+
}
|
|
60
|
+
errorMessages.push("・" + message);
|
|
61
|
+
} else if (hasWhitespace.test(token)) {
|
|
62
|
+
errorMessages.push("・Channel Access Token にスペースや改行は含められません。");
|
|
63
|
+
} else if (hasFullWidth.test(token)) {
|
|
64
|
+
errorMessages.push("・Channel Access Token に全角文字は含められません。");
|
|
65
|
+
} else if (token.length < 150) {
|
|
66
|
+
errorMessages.push("・Channel Access Token が短すぎます。正しい値を貼り付けてください。");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (errorMessages.length > 0) {
|
|
70
|
+
$("#node-config-dialog-ok").prop("disabled", true);
|
|
71
|
+
validationTip.html(errorMessages.join('<br/>'));
|
|
72
|
+
validationTip.show();
|
|
73
|
+
} else {
|
|
74
|
+
$("#node-config-dialog-ok").prop("disabled", false);
|
|
75
|
+
validationTip.hide();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
$("#node-config-input-botName, #node-config-input-LineChannelSecret, #node-config-input-LineChannelAccessToken")
|
|
80
|
+
.on('keyup input change', validate);
|
|
81
|
+
|
|
82
|
+
validate(); // 初期チェック
|
|
83
|
+
|
|
84
|
+
// --- アイコン取得機能(復元) ---
|
|
85
|
+
|
|
86
|
+
// 起動時に保存済みのアイコンがあれば表示
|
|
23
87
|
if (node.botIconUrl) {
|
|
24
|
-
|
|
25
|
-
botIconImg.src = node.botIconUrl;
|
|
26
|
-
botIconImg.style.display = "block";
|
|
88
|
+
$("#node-config-botIcon").attr("src", node.botIconUrl).show();
|
|
27
89
|
}
|
|
28
90
|
|
|
29
|
-
// 「Bot
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
const channelAccessToken = document.getElementById("node-config-input-LineChannelAccessToken").value;
|
|
91
|
+
// 「Bot名&アイコンを取得」ボタンのクリックイベント
|
|
92
|
+
$("#node-config-fetch-info").on("click", async () => {
|
|
93
|
+
const channelSecret = $("#node-config-input-LineChannelSecret").val();
|
|
94
|
+
const channelAccessToken = $("#node-config-input-LineChannelAccessToken").val();
|
|
34
95
|
|
|
35
96
|
if (!channelSecret || !channelAccessToken) {
|
|
36
|
-
|
|
97
|
+
RED.notify(node._("message.fetchingBotInfo"), "warning");
|
|
37
98
|
return;
|
|
38
99
|
}
|
|
39
100
|
|
|
101
|
+
// ★★★ ここからがAPIに問い合わせる復元部分です ★★★
|
|
40
102
|
try {
|
|
41
103
|
const response = await fetch("line-config/bot-info", {
|
|
42
104
|
method: "POST",
|
|
43
105
|
headers: { "Content-Type": "application/json" },
|
|
44
106
|
body: JSON.stringify({ channelSecret, channelAccessToken })
|
|
45
107
|
});
|
|
108
|
+
|
|
46
109
|
if (!response.ok) {
|
|
47
|
-
|
|
110
|
+
const errorText = await response.text();
|
|
111
|
+
throw new Error("API Error: " + errorText);
|
|
48
112
|
}
|
|
49
113
|
|
|
50
114
|
const botInfo = await response.json();
|
|
51
115
|
|
|
52
|
-
// Bot Name
|
|
116
|
+
// Bot Name をテキストボックスに反映し、バリデーションを再実行
|
|
53
117
|
if (botInfo.displayName) {
|
|
54
|
-
|
|
118
|
+
$("#node-config-input-botName").val(botInfo.displayName).trigger('change');
|
|
55
119
|
}
|
|
56
120
|
|
|
57
121
|
// Icon URL を hidden input にセット + 実際に表示
|
|
58
122
|
if (botInfo.pictureUrl) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
botIconImg.style.display = "block";
|
|
62
|
-
|
|
63
|
-
document.getElementById("node-config-input-botIconUrl").value = botInfo.pictureUrl;
|
|
123
|
+
$("#node-config-botIcon").attr("src", botInfo.pictureUrl).show();
|
|
124
|
+
$("#node-config-input-botIconUrl").val(botInfo.pictureUrl);
|
|
64
125
|
} else {
|
|
65
|
-
|
|
66
|
-
|
|
126
|
+
$("#node-config-input-botIconUrl").val("");
|
|
127
|
+
$("#node-config-botIcon").hide();
|
|
67
128
|
}
|
|
129
|
+
RED.notify(node._("message.fetchSuccess"), "success");
|
|
68
130
|
} catch (err) {
|
|
69
|
-
|
|
131
|
+
RED.notify(node._("message.fetchError") + ": " + err.message, "error");
|
|
70
132
|
}
|
|
133
|
+
// ★★★ ここまでが復元部分です ★★★
|
|
71
134
|
});
|
|
72
135
|
},
|
|
73
136
|
|
|
74
137
|
oneditsave: function() {
|
|
75
|
-
//
|
|
76
|
-
this.
|
|
138
|
+
// ★ alert() を削除し、console.log のみ残しました
|
|
139
|
+
if (this.isNew) {
|
|
140
|
+
console.log("新しい設定が追加されました。");
|
|
141
|
+
} else {
|
|
142
|
+
console.log("既存の設定が更新されました。");
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// ★ アイコンURLを保存する処理を有効にしました
|
|
146
|
+
this.botIconUrl = $("#node-config-input-botIconUrl").val();
|
|
77
147
|
}
|
|
78
148
|
});
|
|
79
149
|
</script>
|
|
@@ -85,24 +155,24 @@
|
|
|
85
155
|
|
|
86
156
|
<div class="form-row">
|
|
87
157
|
<label for="node-config-input-botName">
|
|
88
|
-
<i class="fa fa-tag fa-fw"></i> Bot
|
|
158
|
+
<i class="fa fa-tag fa-fw"></i> <span data-i18n="label.botName">Bot名</span>
|
|
89
159
|
</label>
|
|
90
160
|
<input type="text" id="node-config-input-botName" placeholder="BOT Name">
|
|
91
161
|
</div>
|
|
92
162
|
|
|
93
163
|
<div class="form-row">
|
|
94
|
-
<label for="node-config-input-LineChannelSecret">Channel Secret</label>
|
|
164
|
+
<label for="node-config-input-LineChannelSecret"><span data-i18n="label.channelSecret">Channel Secret</span></label>
|
|
95
165
|
<input type="text" id="node-config-input-LineChannelSecret" placeholder="LINE Channel Secret">
|
|
96
166
|
</div>
|
|
97
167
|
|
|
98
168
|
<div class="form-row">
|
|
99
|
-
<label for="node-config-input-LineChannelAccessToken">Channel Access Token</label>
|
|
169
|
+
<label for="node-config-input-LineChannelAccessToken"><span data-i18n="label.channelAccessToken">Channel Access Token</span></label>
|
|
100
170
|
<input type="text" id="node-config-input-LineChannelAccessToken" placeholder="LINE Channel Access Token">
|
|
101
171
|
</div>
|
|
102
172
|
|
|
103
173
|
<!-- Bot Icon 表示エリア -->
|
|
104
174
|
<div class="form-row">
|
|
105
|
-
<label>Bot Icon</label><br/>
|
|
175
|
+
<label><span data-i18n="label.botIcon">Bot Icon</span></label><br/>
|
|
106
176
|
<img id="node-config-botIcon" src=""
|
|
107
177
|
style="display:none; max-width: 100px; border-radius: 10%;" />
|
|
108
178
|
</div>
|
|
@@ -111,7 +181,11 @@
|
|
|
111
181
|
<input type="hidden" id="node-config-input-botIconUrl" />
|
|
112
182
|
|
|
113
183
|
<div class="form-row">
|
|
114
|
-
<
|
|
184
|
+
<div id="node-config-validation-tip" class="form-tips" style="display: none; color: #a94442;"></div>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<div class="form-row">
|
|
188
|
+
<button type="button" id="node-config-fetch-info"><span data-i18n="label.fetchBotInfo">Bot名&アイコンを取得</span></button>
|
|
115
189
|
</div>
|
|
116
190
|
</div>
|
|
117
191
|
|
|
@@ -123,4 +197,4 @@
|
|
|
123
197
|
color: white;
|
|
124
198
|
}
|
|
125
199
|
</style>
|
|
126
|
-
</script>
|
|
200
|
+
</script>
|
package/nodes/config/config.js
CHANGED
|
@@ -22,7 +22,7 @@ module.exports = function(RED) {
|
|
|
22
22
|
const channelSecret = req.body.channelSecret;
|
|
23
23
|
const channelAccessToken = req.body.channelAccessToken;
|
|
24
24
|
if (!channelSecret || !channelAccessToken) {
|
|
25
|
-
return res.status(400).send("No channelSecret or channelAccessToken");
|
|
25
|
+
return res.status(400).send(RED._("validation.channelSecretRequired") || "No channelSecret or channelAccessToken");
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
const clientConfig = {
|
|
@@ -37,7 +37,7 @@ module.exports = function(RED) {
|
|
|
37
37
|
|
|
38
38
|
} catch (err) {
|
|
39
39
|
console.error("Failed to getBotInfo:", err);
|
|
40
|
-
res.status(500).send(err.message || "Failed to get botInfo");
|
|
40
|
+
res.status(500).send(err.message || RED._("message.fetchError") || "Failed to get botInfo");
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"validation": {
|
|
3
|
+
"botNameRequired": "Bot Name is required!",
|
|
4
|
+
"channelSecretRequired": "Channel Secret is required!",
|
|
5
|
+
"channelAccessTokenRequired": "Channel Access Token is required!"
|
|
6
|
+
},
|
|
7
|
+
"label": {
|
|
8
|
+
"botName": "Bot Name",
|
|
9
|
+
"channelSecret": "Channel Secret",
|
|
10
|
+
"channelAccessToken": "Channel Access Token",
|
|
11
|
+
"botIcon": "Bot Icon",
|
|
12
|
+
"fetchBotInfo": "Fetch Bot Name & Icon"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"validation": {
|
|
3
|
+
"botNameRequired": "ボット名は必須です!",
|
|
4
|
+
"channelSecretRequired": "チャンネルシークレットは必須です!",
|
|
5
|
+
"channelAccessTokenRequired": "チャンネルアクセストークンは必須です!"
|
|
6
|
+
},
|
|
7
|
+
"label": {
|
|
8
|
+
"botName": "ボット名",
|
|
9
|
+
"channelSecret": "チャンネルシークレット",
|
|
10
|
+
"channelAccessToken": "チャンネルアクセストークン",
|
|
11
|
+
"botIcon": "ボットアイコン",
|
|
12
|
+
"fetchBotInfo": "Bot名&アイコンを取得"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -21,24 +21,27 @@
|
|
|
21
21
|
<div class="form-row">
|
|
22
22
|
<label for="node-input-name">
|
|
23
23
|
<i class="fa fa-tag"></i>
|
|
24
|
-
<span data-i18n="
|
|
24
|
+
<span data-i18n="getBotInfo.label.name">名前</span>
|
|
25
25
|
</label>
|
|
26
|
-
<input type="text" id="node-input-name"
|
|
26
|
+
<input type="text" id="node-input-name" placeholder="Name">
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<!-- LINE Config -->
|
|
30
30
|
<div class="form-row">
|
|
31
31
|
<label for="node-input-lineConfig">
|
|
32
32
|
<i class="fa fa-tag"></i>
|
|
33
|
-
LINE Bot
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
<span data-i18n="getBotInfo.label.lineConfig">LINE Bot設定</span>
|
|
34
|
+
</label>
|
|
35
|
+
<input type="text" id="node-input-lineConfig">
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- Bot情報取得ボタン -->
|
|
39
|
+
<div class="form-row">
|
|
40
|
+
<button type="button" id="node-getbotinfo-fetch"><span data-i18n="getBotInfo.label.fetchBotInfo">Bot情報を取得</span></button>
|
|
36
41
|
</div>
|
|
37
42
|
|
|
38
43
|
</script>
|
|
39
44
|
|
|
40
45
|
<script type="text/html" data-help-name="getBotInfo">
|
|
41
|
-
<p>BOT
|
|
46
|
+
<p>Gets the BOT information!</p>
|
|
42
47
|
</script>
|
|
43
|
-
|
|
44
|
-
|
|
@@ -21,24 +21,24 @@
|
|
|
21
21
|
<div class="form-row">
|
|
22
22
|
<label for="node-input-name">
|
|
23
23
|
<i class="fa fa-tag"></i>
|
|
24
|
-
<span data-i18n="
|
|
24
|
+
<span data-i18n="getProfile.label.name">名前</span>
|
|
25
25
|
</label>
|
|
26
|
-
<input type="text" id="node-input-name"
|
|
26
|
+
<input type="text" id="node-input-name" placeholder="Name">
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<!-- LINE Config -->
|
|
30
30
|
<div class="form-row">
|
|
31
31
|
<label for="node-input-lineConfig">
|
|
32
32
|
<i class="fa fa-tag"></i>
|
|
33
|
-
LINE Bot
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
<span data-i18n="getProfile.label.lineConfig">LINE Bot設定</span>
|
|
34
|
+
</label>
|
|
35
|
+
<input type="text" id="node-input-lineConfig">
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
</script>
|
|
39
39
|
|
|
40
40
|
<script type="text/html" data-help-name="getProfile">
|
|
41
|
-
<p
|
|
41
|
+
<p>Gets the user profile information.</p>
|
|
42
42
|
</script>
|
|
43
43
|
|
|
44
44
|
|
package/nodes/limit/limit.html
CHANGED
|
@@ -21,19 +21,19 @@
|
|
|
21
21
|
<script type="text/html" data-template-name="Limit">
|
|
22
22
|
<!-- 名前 -->
|
|
23
23
|
<div class="form-row">
|
|
24
|
-
<label for="node-input-name"><i class="icon-tag"></i>
|
|
24
|
+
<label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="limit.label.name">名前</span></label>
|
|
25
25
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
28
|
<div class="form-row">
|
|
29
29
|
<label for="node-input-AccessToken">
|
|
30
30
|
<i class="icon-tag"></i>
|
|
31
|
-
|
|
31
|
+
<span data-i18n="limit.label.accessToken">チャンネルアクセストークン</span>
|
|
32
32
|
</label>
|
|
33
33
|
<input type="password" id="node-input-AccessToken" placeholder="LINE Limit AccessToken">
|
|
34
34
|
</div>
|
|
35
35
|
</script>
|
|
36
36
|
|
|
37
37
|
<script type="text/x-red" data-help-name="Limit">
|
|
38
|
-
<p
|
|
38
|
+
<p>Returns the current month's message quota limits.</p>
|
|
39
39
|
</script>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
<script type="text/html" data-template-name="Loading">
|
|
22
22
|
<div class="form-row">
|
|
23
|
-
<label for="node-input-name"><i class="icon-tag"></i>
|
|
23
|
+
<label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="loading.label.name">名前</span></label>
|
|
24
24
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
25
25
|
</div>
|
|
26
26
|
|
|
@@ -28,20 +28,19 @@
|
|
|
28
28
|
<div class="form-row">
|
|
29
29
|
<label for="node-input-lineConfig">
|
|
30
30
|
<i class="fa fa-tag"></i>
|
|
31
|
-
LINE Bot
|
|
32
|
-
<span data-i18n="getProfile.label.lineConfig"></span>
|
|
31
|
+
<span data-i18n="loading.label.lineConfig">LINE Bot設定</span>
|
|
33
32
|
</label> <input type="text" id="node-input-lineConfig" data-i18n="[placeholder]getProfile.desc.lineConfig">
|
|
34
33
|
</div>
|
|
35
34
|
|
|
36
35
|
<!-- chat ID / User ID -->
|
|
37
36
|
<div class="form-row">
|
|
38
|
-
<label for="node-input-targetId"><i class="icon-tag"></i>
|
|
37
|
+
<label for="node-input-targetId"><i class="icon-tag"></i> <span data-i18n="loading.label.targetId">ユーザーID</span></label>
|
|
39
38
|
<input type="text" id="node-input-targetId" placeholder="User Id">
|
|
40
39
|
</div>
|
|
41
40
|
|
|
42
41
|
<div class="form-row">
|
|
43
42
|
<label for="node-input-loadingSeconds">
|
|
44
|
-
<i class="icon-timer"></i>
|
|
43
|
+
<i class="icon-timer"></i> <span data-i18n="loading.label.loadingSeconds">ローディング秒数</span>
|
|
45
44
|
</label>
|
|
46
45
|
<select id="node-input-loadingSeconds">
|
|
47
46
|
<option value="5">5</option>
|
|
@@ -60,13 +59,11 @@
|
|
|
60
59
|
</div>
|
|
61
60
|
|
|
62
61
|
<p>
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
UからはじまるユーザーIDのみ(個別チャット)です。
|
|
66
|
-
詳細は<a href="https://developers.line.biz/ja/reference/messaging-api/#display-a-loading-indicator" target="_blank">公式ドキュメント</a>を参照下さい。
|
|
62
|
+
Displays a loading indicator for the specified duration. Currently supports individual chats only (user IDs starting with 'U').
|
|
63
|
+
See <a href="https://developers.line.biz/ja/reference/messaging-api/#display-a-loading-indicator" target="_blank">official documentation</a> for details.
|
|
67
64
|
</p>
|
|
68
65
|
</script>
|
|
69
66
|
|
|
70
67
|
<script type="text/html" data-help-name="Loading">
|
|
71
|
-
<p
|
|
68
|
+
<p>Displays a loading indicator animation to LINE users.</p>
|
|
72
69
|
</script>
|
package/nodes/push/push.html
CHANGED
|
@@ -23,26 +23,25 @@
|
|
|
23
23
|
|
|
24
24
|
<script type="text/x-red" data-template-name="PushMessage">
|
|
25
25
|
<div class="form-row">
|
|
26
|
-
<label for="node-input-name"><i class="icon-tag"></i>
|
|
26
|
+
<label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="push.label.name">名前</span></label>
|
|
27
27
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
30
|
<div class="form-row">
|
|
31
|
-
<label for="node-input-channelSecret"><i class="icon-tag"></i>
|
|
31
|
+
<label for="node-input-channelSecret"><i class="icon-tag"></i> <span data-i18n="push.label.channelSecret">チャンネルシークレット</span></label>
|
|
32
32
|
<input type="password" id="node-input-channelSecret" placeholder="ChannelSecret">
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
35
|
<div class="form-row">
|
|
36
|
-
<label for="node-input-channelAccessToken"><i class="icon-tag"></i>
|
|
36
|
+
<label for="node-input-channelAccessToken"><i class="icon-tag"></i> <span data-i18n="push.label.channelAccessToken">チャンネルアクセストークン</span></label>
|
|
37
37
|
<input type="password" id="node-input-channelAccessToken" placeholder="ChannelAccessToken">
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
40
|
<div class="form-row">
|
|
41
|
-
<label for="node-input-targetId"><i class="icon-tag"></i>
|
|
41
|
+
<label for="node-input-targetId"><i class="icon-tag"></i> <span data-i18n="push.label.targetId">ユーザーIDまたはグループID</span></label>
|
|
42
42
|
<input type="text" id="node-input-targetId" placeholder="User Id or Group ID">
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
|
-
<p>こちらのノードは旧バージョンになります。Newバージョンの利用を検討してください。</p>
|
|
46
45
|
<p>This node is the old version, please consider using the New version.</p>
|
|
47
46
|
</script>
|
|
48
47
|
|
package/nodes/reply/reply.html
CHANGED
|
@@ -23,26 +23,26 @@
|
|
|
23
23
|
|
|
24
24
|
<script type="text/x-red" data-template-name="ReplyMessage">
|
|
25
25
|
<div class="form-row">
|
|
26
|
-
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
|
|
26
|
+
<label for="node-input-name"><i class="icon-tag"></i> <span data-i18n="common.label.name">Name</span></label>
|
|
27
27
|
<input type="text" id="node-input-name" placeholder="Name">
|
|
28
28
|
</div>
|
|
29
29
|
|
|
30
30
|
<div class="form-row">
|
|
31
|
-
<label for="node-input-channelSecret"><i class="icon-tag"></i> Secret</label>
|
|
31
|
+
<label for="node-input-channelSecret"><i class="icon-tag"></i> <span data-i18n="lineConfig.label.channelSecret">Secret</span></label>
|
|
32
32
|
<input type="password" id="node-input-channelSecret" placeholder="ChannelSecret">
|
|
33
33
|
</div>
|
|
34
34
|
|
|
35
35
|
<div class="form-row">
|
|
36
|
-
<label for="node-input-channelAccessToken"><i class="icon-tag"></i> AccessToken</label>
|
|
36
|
+
<label for="node-input-channelAccessToken"><i class="icon-tag"></i> <span data-i18n="lineConfig.label.channelAccessToken">AccessToken</span></label>
|
|
37
37
|
<input type="password" id="node-input-channelAccessToken" placeholder="ChannelAccessToken">
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
40
|
<div class="form-row">
|
|
41
|
-
<label for="node-input-replyMessage"><i class="icon-tag"></i> ReplyMessage</label>
|
|
41
|
+
<label for="node-input-replyMessage"><i class="icon-tag"></i> <span data-i18n="reply.label.message">ReplyMessage</span></label>
|
|
42
42
|
<input type="text" id="node-input-replyMessage" placeholder="static text message here">
|
|
43
43
|
</div>
|
|
44
44
|
</script>
|
|
45
45
|
|
|
46
46
|
<script type="text/x-red" data-help-name="ReplyMessage">
|
|
47
|
-
<p>
|
|
47
|
+
<p>Sends reply messages to LINE users using reply tokens.</p>
|
|
48
48
|
</script>
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
|
|
46
46
|
<script type="text/x-red" data-template-name="Webhook">
|
|
47
47
|
<div class="form-row">
|
|
48
|
-
<label for="node-input-url"><i class="fa fa-globe"></i>
|
|
48
|
+
<label for="node-input-url"><i class="fa fa-globe"></i> <span data-i18n="Webhook.label.path">パス</span></label>
|
|
49
49
|
<input id="node-input-url" type="text" placeholder="/webhook">
|
|
50
50
|
</div>
|
|
51
51
|
<div class="form-row">
|
|
52
|
-
<label for="node-input-name"><i class="fa fa-tag"></i>
|
|
52
|
+
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="Webhook.label.name">名前</span></label>
|
|
53
53
|
<input id="node-input-name" type="text" placeholder="Name">
|
|
54
54
|
</div>
|
|
55
55
|
</script>
|