GASを利用してGメール内に設定した承認・否認ボタンのURL先がエラーになってしまう
背景
私は非エンジニアです
チーム内にいたエンジニアメンバーが離職してしまい、自力でいろいろ調べ、社内のITサポートに問い合わせても解決せず、他に解決方法がなくこちらのHPを発見して投稿させていただきました。素人のため的外れな質問をしてしまっていたら申し訳ありませんが、どなたかお助けいただけましたら幸いです。
起きている事象の背景)
業務自動化のため、Gフォームの提出後、以下の動作が自動で行われるようGASを組んでいました。
そのGASのどこかでエラーが出てしまいました。GASを使って対応していた内容のサマリは以下の通りです。
①フォーム内記載のメールアドレス宛に自動で承認依頼メールを送信
②承認依頼メール内に表示されている「承認・否認」ボタンがあり、承認ボタンをクリックすると、以下の動作が発動
②-1 Gフォームのスプレッドシート上の、指定した列に「承認」と自動で記載
②-2 Slackの特定チャンネルに、Webhookアプリを利用して、Gフォーム内容が自動送信
※承認・否認ボタンをクリックした後、正常な状態でどのような表示がされるかわかりません。
※否認ボタンをクリックした後の動作についてもわかりません。
発生している問題・エラー
上記の①は問題なく動いているのですが、②でエラーが出てしまいます。
②-1
承認・否認ボタンをクリック後、Gドライブ のアイコンと共に、「現在ファイルを開くことができません」と表示されたURLに遷移してしまう。
②-1
承認ボタンをクリックしても、スプレッドシート上に承認と記載されない
②-2
Slackチャンネルに連携されない
該当するソースコード
※会社ドメインやMLなどは削除しました。
※その他、不必要な情報も削除しました。(★で囲った箇所が削除箇所です)
※スクリプト自体は動いています。(自動メールは送信されている)
※スクリプトが2つ実装されており、以下は「承認ボタンの挙動」に影響があるであろう?方のスクリプトです。
※もう1つのスクリプトはSlackチャンネルへの自動連係のためのもののようでした
FormApp.getActiveForm();
const SSID = '16TGsAnVaHlfwp_Ek0KggXyhFmQ8KEUKjwvabTSLJUeU'; //(1)スプレッドシートのID 本番環境
const EMAIL_TITLE = '【承認依頼/ Request】申請/ Apps of leave';
const EMAIL_DESK = '★会社MLを記載★';
const EMAIL_NAME = '相談窓口/ Desk';
const SHEET_NAME_PATER = '申請'; //(2)シートの名前
const SHEET_PATER = SpreadsheetApp.openById(SSID).getSheetByName(SHEET_NAME_PATER); //(3)申請シート情報を呼び出す
const VALUES_PATER = SHEET_PATER.getDataRange().getValues(); //(4)申請シートの情報を取得する
const COL_ID = 60; //ID(自動入力)の列数
function getFormSubmit(e){
const response = e.response;
const itemResponses = response.getItemResponses();
const data =({
q1: null, //社員番号/ Employee No.
q2: null, //氏名/ Your name
q3: null, //所属部署/ Department
q4: null, //役職を教えてください/ What is your position?
q5: null, //最終勤務日/Last day of work
★そのほか命名指定しているq★
q29: null, //直属の上長の名前/ Name of your Manager
q30: null, //直属の上長のメールアドレス/ Email address of your Manager
q31: null
});
for(let i = 0; i < itemResponses.length; i++){
let itemResponse = itemResponses[i];
let question = itemResponse.getItem().getTitle();
let answer = itemResponse.getResponse();
switch(question){
case '社員番号/ Employee No.':
data.q1 = answer;
break;
case '氏名/ Your name':
data.q2 = answer;
break;
★そのほか同様の記載★
}
}
if(!e.response){
// トリガーから直接実行された場合の処理
data.q31 = FormApp.getActiveForm().getResponses().pop().getId();
}else{
// Webアプリケーションから呼び出された場合の処理
data.q31 = e.response.getId();
}
autoEmail(data);
}
//申請のフォーム内容を上長へ自動メール送信する
function autoEmail(data){
//承認・否認フラグの入力する行を特定する
let formSubmitRow = SHEET_PATER.getLastRow();
for(let i = 0; i < formSubmitRow; i++){
if(VALUES_PATER[i][COL_ID - 1] == data.q31){ //BH列に記録された回答IDが一致したら
formSubmitRow = i + 1; //シートの行番号は0からはじまるため1を加える
break;
}
}
let url = 'https://script.google.com/a/macros/★会社ドメイン★/s/AKfycbyoRuZ_CieZuaNCOiqNOjY_O_UMwoca-HlixLAvlJk5mBZt53_QayHavTDrSIxvV7KkjA/exec' + formSubmitRow; //PERFORMANCE
// let url = 'https://script.google.com/a/macros/★会社ドメイン★/s/AKfycbx5NhBT9QMbXvuI1pE4r6vXSbGJhaFH9ZBwdG0OgZG32KdTHc75ymj2I09Z7-fBrJY90A/exec?row=' + formSubmitRow; //test
SHEET_PATER.getRange(formSubmitRow, COL_ID).setValue(data.q31);
//上長へのメール本文(HTMLテキスト)の設定
let htmlBody = '';
//申請の回答(条件分岐)
const isYes = data.q32 === '充当する/I will make an appropriation.'; //xxまたはxxにxxを充当しますか?
htmlBody =`${data.q29}さん<br>
<p>${data.q2}さんより、<strong>申請が起案されました。ご承認をお願いいたします。</strong></p>
<p><red>*★承認メール本文★
</red></p>`;
htmlBody =`${htmlBody}<br>
所属部署/ Department<br>
<strong>${data.q3}</strong><br>
氏名/ Your name<br>
<strong>${data.q2}</strong><br>
役職/ Employment Position<br>
<strong>${data.q4}</strong><br>`;
if(!isYes)
{★条件分岐がYESの場合のメール本文★ }
else
{★条件分岐がNO場合のメール本文★ }
htmlBody = `${htmlBody}
<button><a href=${url}&status=approve >承認</a></button>
<button><a href=${url}&status=deny >否認</a></button>`;
GmailApp.sendEmail(data.q30, EMAIL_TITLE,'',
{ cc: EMAIL_DESK,
from: EMAIL_DESK,
name: EMAIL_NAME,
htmlBody: htmlBody
});
}
自分で試したこと
・前任者の離職前に、トリガー設定等はすべて対応済みでした
・そのほか自分で試したことは以下の通りです。
・上記スクリプト内にある「let url」を、自身のアカウントで発行しなおしたデプロイ後のウェブアプリURLへと差し替えた
(差し替え前は、「アクセス権がありません」と表示されていたが、差し替え後は、「ファイルを開くことができない」という表示に代わった)
・当該Gフォーム格納場所のフォルダ権限を「管理者権限」(もともとはコンテンツ管理者)へと変更
どなたか、お知恵をお貸しいただける方いらっしゃいましたら、ご教示いただけますと幸いです。