Closed genepine closed 3 years ago
Kintone側アプリ管理権限がないユーザーの場合、保存、提出、承認してもWordPress側に送られないことを利用して、動作を実現できるかもしれません。 Kintone側ユーザー権限設定 staff アプリ管理権限なし chief アプリ管理権限あり このような設定で動作確認する Kintone側ユーザー権限設定について要調査。
確認手順です
ステータス変更時には WebHook が呼び出されていないため、Kintone の承認機能は、そもそも PlugIn 側の想定になっていないことが分かりました。Publish Kintone Data のコードを確認し、ステータス変更(承認・非承認)の確認確認を入れ込むことができるか、まずは見積もります。
以下の Publish kintone data コードに、ログ出力コードを入れました。 /home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone pubish-kintone-data.pnp 631行目以降
public function kintone_to_wp_start() {
$update_kintone_data_json = file_get_contents( "php://input" );
$update_kintone_data = json_decode( $update_kintone_data_json, true );
$debug_output_file = '/home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone/debug.txt';
error_log( "\n".date("Y/m/d H:i:s")." Web Hook 呼び出し\n", 3, $debug_output_file);
error_log( var_export($update_kintone_data, true), 3, $debug_output_file);
error_log( "\n", 3, $debug_output_file);
同フォルダに以下のように debug.txt が出力されます。これによって、WebHook が呼び出された際にどんなパラメータが与えられているかを監視することができます。
2020/11/20 10:04:03 Web Hook 呼び出し
array (
'id' => '224db362-3d6f-43d3-a798-b02a4e3174fe',
'type' => 'DELETE_RECORD',
'app' =>
array (
'id' => '1',
'name' => 'Kintone-WordPress-日記',
),
'recordId' => '25',
'deletedBy' =>
array (
'code' => 'staff',
'name' => 'スタッフ ',
),
'deletedAt' => '2020-11-20T10:04:00Z',
)
いちいち、何かあった際に該当 debug.txt を FTP でダウンロードしても良いですが、ssh で sakura server にログインして、tail コマンドでリアルタイムに監視すると効率が良いです。ssh でログイン時、日本語が表示されるよう、以下のように初期設定します。debug.txt は UTF-8 です。
setenv LANG ja_JP.UTF-8
bash
リアルタイムで debug.txt の更新を監視するために以下のようにします。このようにすることで、Plug-in が呼び出されてログが更新されると、リアルタイムに更新文字列が表示されます。
cd /home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone
tail -f debug.txt
さて、上記ログを仕掛けての検証・監視の結果、分かったことを列挙します。
さらに実験を進めたところ、WebHook の「通知を送信する条件」のチェック状態に関係なく、書き込み・編集・削除の WebHook が呼び出されているように見えます。さらに悪いことには、ステータスの更新はチェックに関係なく呼び出されていません。不具合のような気がしたので、松野さんの問いかけにかぶせて追加質問してみています。
なんと、WebHook の設定含めて、Kintone の設定は「保存」では反映されず、最後に「アプリの更新」が必要とのこと。改めて確認したところ、正常に動作していることを確認しました。とりわけ、「ステータスの更新」も UPDATE_STATUS として、タイトル・コンテンツ等も送られて WebHook が呼び出されることを確認しました。カスタムで Plug In を作ってしまえば対応は可能であることが分かりました。
さらに実験を進めたところ、WebHook の「通知を送信する条件」のチェック状態に関係なく、書き込み・編集・削除の WebHook が呼び出されているように見えます。さらに悪いことには、ステータスの更新はチェックに関係なく呼び出されていません。不具合のような気がしたので、松野さんの問いかけにかぶせて追加質問してみています。
とりあえず、WebHook ハンドラ冒頭で、record のステータスが、「承認済み・WEB反映」以外の時は、以降の処理をスキップするようにしました。これで一通り動いているような気がするので、一旦、ご確認くださいませ。また、publish kintone data 作者様 によるアップデートがあると思いますので、当面は「手作業」でマージします。ゆくゆくは Git によるマージ、さらにゆくゆくは、GitHub → Azure Deploy と自動化するのが良いですね(本 Issue とは別件です)
public function kintone_to_wp_start() {
$update_kintone_data_json = file_get_contents( "php://input" );
$update_kintone_data = json_decode( $update_kintone_data_json, true );
// Added by Gucchiy ---
$debug_output_file = '/home/neo-kintone/www/nkwp/wp-content/plugins/import-kintone/debug.txt';
error_log( "\n".date("Y/m/d H:i:s")." Web Hook 呼び出し\n", 3, $debug_output_file);
error_log( var_export($update_kintone_data, true), 3, $debug_output_file);
error_log( "\n", 3, $debug_output_file);
error_log( "ステータス → ".$update_kintone_data['record']['ステータス']['value']."\n", 3, $debug_output_file);
// --- Added by Gucchiy
if ( $update_kintone_data['type'] == 'DELETE_RECORD' ) {
$kintone_id = $update_kintone_data['recordId'];
} else {
// Added by Gucchiy ---
if( strcmp( $update_kintone_data['record']['ステータス']['value'], '承認済み・WEB反映' ) != 0 ){
error_log( "\n\n ==未承認処理== \n\n", 3, $debug_output_file);
return;
}
// --- Added by Gucchiy
$kintone_id = $update_kintone_data['record']['$id']['value'];
}
Sprint2 にて実装確認完了、クローズ
kintone側 ユーザー staffで「保存のみ」した時点で記事がWordPress側に送られた。 Webhookの設定で「追加」を許可しているのが原因と思われる https://jp.cybozu.help/k/ja/user/app_settings/set_webhook/webhook.html#set_webhook_webhook_30 予想される対策 コメントの書き込み のみにチェックを付けて チーフがコメントをすることで通知、WordPress側に送る。 下記に通知を許可すればよいかもしれない
レコードの削除
コメントの書き込み その設定での動作は未確認 理由はプロセス管理のステータスの更新(完了)になった時点でWebhookの通知が飛ぶ(で質問中)のが良いが、それができないように見えるため。 ただ プロセス管理のステータスの更新 で通知が飛んだとしても、おそらくすべてのステータス更新で通知が飛ぶ(提出でも飛ぶ)ので動作的には希望通りにはならないかもしれない
レコードの追加
レコードの編集
レコードの削除
コメントの書き込み
プロセス管理のステータスの更新