kintone から LINE に投稿する
概要
先日に LINE チャンネルの友達登録や投稿情報を kintone に保管 で、LINEのチャンネル登録をして、友達登録や投稿情報を kintone に保管したり、AWS Lambda から返信できることまでは確認しました。
今回は、kintone から LINE チャンネルを友達登録した方に対して個別でメッセージを送る方法を試してみました。
kintone アプリの項目追加
先ずは、前回作成した LINE の友達登録や投稿情報を保管する kintone アプリに、LINE に送信するメッセージ用のフィールドを追加します。
フィールド名 | タイプ | フィードコート・要素ID |
---|---|---|
lineユーザID | 文字列(1行) | lineUserId |
日時 | 日時 | lineDateTime |
lineタイプ | 文字列(1行) | lineType |
lineモード | 文字列(1行) | lineMode |
lineメッセージ | 文字列(複数行) | lineMessage |
(追加)lineに送るメッセージ | 文字列(複数行) | sendMessage |
(追加) | スペース | sendSubmit |
スペースは「LINEにメッセージ送信」ボタンを表示するために追加しています。
kintone の JavaScript プログラム作成
kintone の 詳細画面を表示した時に「LINEにメッセージ送信」ボタンを表示し、クリックすると同時に LINE に、レコードのLINEユーザID宛てに「lineに送るメッセージ」フィールドの値を送る JavaScript プログラムを作成します。
LINE のユーザ宛てにメッセージを送るためには、Messaging API の https://api.line.me/v2/bot/message/push で以下のヘッダーで、JSON データを POST します。
・ヘッダー
let headers = {
'Authorization': ' Bearer ' + '{' + token + '}',
'Content-Type' : 'application/json'
};
token の値は、 LINE チャンネルの友達登録や投稿情報を kintone に保管 で説明したチャンネルアクセストークンです。
・POST データ
let json = {
"to":userId,
"messages":[
{
"type":"text",
"text":message
}
]
};
message にLINEユーザに連絡するテキスト文書をセットしておきます。
・CORS によるエラーに注意
kinton の JavaScript で外部APIを利用する場合は、XMLHttpRequest() は使えません。ついつい私も最初 XMLHttpRequest() で実装しようとして後になって気づくのですが、 kintone.proxy() を利用します。うっかり XMLHttpRequest() で実装しようものなら、エラーでデバッグ画面で以下を確認することになります。また、うっかりやってしました、、、(汗)
Access to XMLHttpRequest at 'https://api.line.me/v2/bot/message/push' from origin 'https://yukataoka.cybozu.com' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
・今回実装したコード例
今回は以下のように実装して、kintone から LINE にメッセージが送れるようになりました。
kintone.proxy() は Promise でなくて良かったのですが、同期処理になっています。(汗)
(function() {
"use strict";
const Protocol = "https://";
const LineHost = "api.line.me";
const LinePath = "/v2/bot/message/push";
const LineToken = "LINEのチャンネルアクセストークン";
// レコード詳細表示時イベント
var eventsDetailShow = [
'app.record.detail.show',
'mobile.app.record.detail.show'];
kintone.events.on(eventsDetailShow, function(event) {
let sendButton = makeSendButton(LineToken, event.record.lineUserId.value, event.record.sendMessage.value);
if(event.type !== 'mobile.app.record.detail.show') {
kintone.app.record.getSpaceElement('sendSubmit').appendChild(sendButton);
}else{
kintone.mobile.app.record.getSpaceElement('sendSubmit').appendChild(sendButton);
}
});
// LINEにメッセージ送信ボタン作成
function makeSendButton(token, userId, message) {
let submitButton = document.createElement('div');
let sendButton = document.createElement('button');
sendButton.innerText = ' LINEにメッセージ送信 ';
sendButton.className = "gaia-ui-actionmenu-save";
sendButton.onclick = function() {
let json = {
"to":userId,
"messages":[
{
"type":"text",
"text":message
}
]
};
let url = Protocol + LineHost + LinePath;
let res = funcPostLine(url, token, json);
};
submitButton.appendChild(sendButton);
return submitButton;
}
// line にメッセージを送信
function funcPostLine(url, token, json)
{
let headers = {
'Authorization': ' Bearer ' + '{' + token + '}',
'Content-Type' : 'application/json'
};
kintone.proxy(url, 'POST', headers, json).then(function(args) {
if (args[1] === 200) {
alert("LINEにメッセージを送信しました!");
return true;
}else{
alert("LINEのメッセージ送信にエラーがありました!\n" + args[0]);
return false;
}
}, function(error) {
alert("LINEのメッセージ送信にエラーがありました!\n" + error);
return false;
});
}
})();
実行結果
kintone の詳細画面で「LINEにメッセージ送信」ボタンを押すと、即座に「LINEにメッセージを送信しました!」の alert() が表示され、LINEへのメッセージ送信を確認できました。
まとめ
先日の LINE チャンネルの友達登録や投稿情報を kintone に保管 から、今回の kintoe から LINE に投稿するまでで、以下を確認できました。
・LINE チャンネルを開設する
・LINE チャンネルの友達登録や投稿情報を kintone に保管
・LINE チャンネルの投稿に返信を送信
・kintone から LINE にメッセージを送信
特に kintone との連携の例が少なく相当な苦戦を予想していましたが、実際はわりと簡単に実装できました。実装のためのコストは以外とかからないと推測します。
ポイントとしては、チャンネルの友達登録時に LINE ユーザID を取得し、kintone で管理するアプリ(例えば顧客管理アプリ)のどう紐づけるかが鍵になりそうです。チャンネルの友達登録時や、その後でも kintone のアプリの情報と紐ずくしくみをどのように実装するかが、kintone と LINE を連携して活用するための鍵になりそうです。
参考情報
line 送信設定
https://developers.line.biz/ja/reference/messaging-api/#send-push-message
外部APIの実行
https://developer.cybozu.io/hc/ja/articles/202166320
Author And Source
この問題について(kintone から LINE に投稿する), 我々は、より多くの情報をここで見つけました https://qiita.com/yukataoka/items/373de2698afc01099f00著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .