LINEWORKSのトークをKintoneに保存する方法でうまく動作しません

お世話になります。

LINEWORKSのトークをKintoneに保存したいと思い

https://developer.cybozu.io/hc/ja/articles/360000783023-LINE-WORKS%E3%81%AE%E3%83%88%E3%83%BC%E3%82%AF%E3%82%92kintone%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

上記記事の方法を試してみたのですがうまく動作しません。

手順に従いNode.jsでコードを作成し、AWS Lambdaにアップロードをしました。動作しない原因に関係するかわかりませんが、Lambda上のテストで以下のようなエラーが出ております。

“errorType”: “TypeError”,
“errorMessage”: “Cannot read property ‘accountId’ of undefined”,
“trace”: [
“TypeError: Cannot read property ‘accountId’ of undefined”,
" at Runtime.exports.handler (/var/task/index.js:27:38)“,
" at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)”

参考記事のAWS Lambda以外の部分の設定(Kintoneの設定、API Gateway、LINEWORKSのbotの設定)は全て行っています。

また、参考記事ではrequestを使用した方法は非推奨とのことでしたので、別記事を参考にaxiosを使用した方法も試してみたのですが同じエラーが発生し、動作しませんでした。(現在は参考記事の状態に戻しております。) https://zenn.dev/nononosuque/articles/d05f6990f17848 

参考記事とソースコードはほぼ同じ内容でAWS Lambdaにアップロードしております。

(Kintoneのログイン情報等一部追加しております。)

Kintoneを使い始めたばかりで、かつJavascriptの知識も無いもので、いろいろと原因を検索しながら進めていたのですが、解決方法がわからず投稿させていただきました。

よろしくお願い致します。

/*
* kintone_LINEWORKS sample program
* Copyright (c) 2018 Cybozu
*
* Licensed under the MIT License
*/
var request = require('request');

// kintone用パラメータ
// ドメイン、アプリID、APIトークンを記述してください
var DOMAIN = ' ******.cybozu.com';
var URL = 'https://' + DOMAIN + '/k/v1/record.json';
var APP_ID = '**';
var API_TOKEN = ' *******';
var LOGIN_NAME = ' ******';
var PASSWORD = ' ******';
var AUTH_VALUE = new Buffer(LOGIN_NAME + ':' + PASSWORD).toString('base64');
var headers = {'X-Cybozu-Authorization': AUTH_VALUE};
var headers = { 'X-Cybozu-API-Token': API_TOKEN };

exports.handler = function(event, context) {
// eventにLINE WORKSのcallbackデータが入ってる
var event_data = JSON.parse(event.body);

// LINE WORKSの発言者とトーク内容をそれぞれ取得する
var lineuser = event_data.source.accountId;
var linemessage = event_data.content.text;

// kintoneのJSON形式に当てはめる
var body_post = {
'app': APP_ID,
'record': {
'Name': {
'value': lineuser
},
'Content': {
'value': linemessage
}

}
};

var options = {
url: URL,
method: 'POST',
headers: headers,
'Content-Type': 'application/json',
json: body_post
};
//レコードをPOST
request(options, function(error, response, body) {
context.done(null, {text: "kintone POST success!"});
});
};

> Lambda上のテストで以下のようなエラーが出ております。

LINEから送られるはずのデータを再現したデータをテストにもちいてなければエラーは必ず出ると思います。

まず、ちゃんとLINEからリクエストが飛ばされているかみたほうがよさそうですね。AWSのCloudwatchにログが残るはずなのでみてみてください。

 

LINE works側にてAPI IDを作成していないと、
BOTはつくれるものの、リクエストが飛ばない仕様になっているみたいです。これが発行されているかはみたほうがいいとおもいます。

https://developers.worksmobile.com/jp/document/1002002?lang=ja

 

あと、Axiosに切り替えるのはいいとおもうんですが、JSに不慣れならば、ソースコード通りにやって動くかというのはみたほうがいいかとはおもいます。

村濱一樹様

ご教授いただきありがとうございます。

ご指摘いただきました通り、LINEWORKSのAPI IDの作成を行ったところ、無事Kintoneにトーク内容を登録することができました。

現在はソースコード通りのコードで正常に動作しており、またJavascriptに慣れてからaxiosへの切り替えを行ってみたいと思います。

的確なアドバイスをいただき大変助かりました。ありがとうございました。